Example #1
0
void SoundManager::loadSamples()
{
    //some path, may be absolute or relative to bin/data
    int numSeasons = 4;
    int numCategories = 5;

    std::string seasons[4] = {"SUM","FAL","WIN","SPR"};
    std::string category[5] = {"DWN","DAY","DSK","EXP","NIG"};
    
    
    for (int i=0; i<numSeasons; i++) 
    {
        for (int j=0; j<numCategories; j++) 
        {
            std::string folderName = seasons[i] + "_" + category[j];
            std::string samplesPath = "sounds/" + folderName;
            std::cout<< m_dateManager->getTime()<<"- SoundManager-> loading samples from \""<<samplesPath<<"/\""<<std::endl;
            ofLogNotice()<< m_dateManager->getTime()<<"- SoundManager->loading samples from \""<<samplesPath<<"/\"";
            ofDirectory dir(samplesPath);
            //only show wav and aiff files
            dir.allowExt("wav");
            dir.allowExt("aiff");
            dir.allowExt("aif");
            //populate the directory object
            if(dir.listDir()==0)
            {
                std::cout <<m_dateManager->getTime()<<"- SoundManager-> No samples found in \""<< samplesPath <<"/\"" << std::endl;
                ofLogNotice() <<m_dateManager->getTime()<<"- SoundManager-> No samples found in \""<< samplesPath <<"/\"";
                //break;
            }
            
            SamplesList sampleList;
            //go through and print out all the paths
            for(int n = 0; n < dir.numFiles(); n++)
            {
                std::string sampleName = this->getSampleName(dir.getPath(n));
                SoundObject* sample = new SoundObject(sampleName);
                sample->loadSound(dir.getPath(n));
                sampleList.push_back(sample);
                std::cout <<m_dateManager->getTime()<<"- SoundManager-> loaded sample \""<< sampleName <<"/\"" << std::endl;
                ofLogNotice() <<m_dateManager->getTime()<<"- SoundManager-> loaded sample \""<< sampleName <<"/\"";
            }
            m_samples[folderName] = sampleList;
         }
    }
    
    m_currentSampleList = m_samples.begin()->second; // m_currentSampleList points to the first element map
    
}
Example #2
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

{
    ui->setupUi(this);
    SamplesList v;
	v.push_back(GeogPixSample(1991,51,106.805015,-20.675571));
	v.push_back(GeogPixSample(776,2730,100.120199,-6.423076));
	v.push_back(GeogPixSample(861,1414,100.578835,-13.555069));
	v.push_back(GeogPixSample(1743,951,105.426127,-15.991936));
    mapPanel = new MapPanel(GPSMapManager("GPSMap.png",v),this);

    QStringList strList = ui->line_lng->text().split(QChar(','));
    mapPanel->mapMagager.setLng(strList[1].toDouble());
    mapPanel->mapMagager.setLat((strList[0].toDouble()*(-1)));

    mapPanel->resize(800,800);
    mapPanel->show();
}
Example #3
0
SoundManager::~SoundManager()
{
    
    for (SamplesMap::iterator it=m_samples.begin() ; it != m_samples.end(); it++ )
    {
        SamplesList sampleList = it->second;
        for (SamplesList::iterator it2=sampleList.begin() ; it2 != sampleList.end(); it2++ )
        {
            AppManager::getInstance().getSoundEffectsManager().removeAllSoundEffects(*(*it2));
            delete *it2;
            *it2 = NULL;
        }
    }
    
    m_samples.clear(); 
    
    if(m_soundVisual)
    {
        AppManager::getInstance().getViewManager().removeVisual(*m_soundVisual);
        delete m_soundVisual;
        m_soundVisual = NULL;
    }
   
    m_dateManager = NULL;
    
    if (m_sampleName) {
        AppManager::getInstance().getVisualEffectsManager().removeAllVisualEffects(*m_sampleName);
        AppManager::getInstance().getViewManager().removeVisual(*m_sampleName);
        delete m_sampleName;
        m_sampleName = NULL;
    }
    
    if(m_tube)
    {
        delete m_tube;
        m_tube = NULL;

    }
}
Example #4
0
void OscilloscopeEngine::displayOscilloscopeChannelData(int dislayFrom, int displayedLength, int removeFrom)
{
    if (m_capturedChannels != CHANNEL_BOTH) {
        SamplesList *buffer = NULL;
        if (m_capturedChannels == CHANNEL_LEFT) {
            buffer = &m_samplesInputBufferLeft;
        } else if (m_capturedChannels == CHANNEL_RIGHT) {
            buffer = &m_samplesInputBufferRight;
        }
        QVector<double> values;
        values = QVector<double>::fromList(buffer->mid(dislayFrom, displayedLength));
        draw(m_capturedChannels, values);
        *buffer = buffer->mid(removeFrom);
    } else {
        QVector<double> values;
        values = QVector<double>::fromList(m_samplesInputBufferLeft.mid(dislayFrom, displayedLength));
        draw(CHANNEL_LEFT, values);
        values = QVector<double>::fromList(m_samplesInputBufferRight.mid(dislayFrom, displayedLength));
        draw(CHANNEL_RIGHT, values);
        m_samplesInputBufferLeft = m_samplesInputBufferLeft.mid(removeFrom);
        m_samplesInputBufferRight = m_samplesInputBufferRight.mid(removeFrom);
    }
}
Example #5
0
void OscilloscopeEngine::processOscilloscopeData(SamplesList leftChannelData, SamplesList rightChannelData)
{
    if (!m_isRunning) {
        return;
    }
//    qDebug() << "Got" << samples.length() << "samples";
    if (m_capturedChannels == CHANNEL_NONE) {
        return;
    }
    SamplesList *buffer = NULL;
    SamplesList *samples = NULL;
    // I.   Select primary channel
    if (m_capturedChannels != CHANNEL_BOTH) {
        // For single channel capture, process only one buffer.
        if (m_capturedChannels == CHANNEL_LEFT) {
            buffer = &m_samplesInputBufferLeft;
            samples = &leftChannelData;
        } else if (m_capturedChannels == CHANNEL_RIGHT) {
            buffer = &m_samplesInputBufferRight;
            samples = &rightChannelData;
        }
    } else {
        // For both channel capture, only one channel is selected for Normal or Single triggering
        if (m_triggerChannel == CHANNEL_LEFT) {
            buffer = &m_samplesInputBufferLeft;
        } else if (m_triggerChannel == CHANNEL_RIGHT) {
            buffer = &m_samplesInputBufferRight;
        } else if (m_triggerMode != TRIG_AUTO) {
            qWarning() << "For non-auto trigger mode an one channel have to be choosen for triggering";
            Q_ASSERT(false);
            return;
        }
    }
    // II.  For both channel capture we have to check buffers state - samples must be captured simultaneously
    if (m_capturedChannels == CHANNEL_BOTH) {
        // This is not a bug when
        if (m_samplesInputBufferLeft.size() != m_samplesInputBufferRight.size()) {
            qWarning() << "Audio input buffers are not synced. Reset them."
                       << "Left:" << m_samplesInputBufferLeft.size()
                       << "Right:" << m_samplesInputBufferRight.size();
            m_samplesInputBufferLeft.clear();
            m_samplesInputBufferRight.clear();
//            Q_ASSERT(false);
        }
        if (leftChannelData.size() != rightChannelData.size()) {
            qWarning() << "Fresh audio samples are not synced. Reset them."
                       << "Left:" << leftChannelData.size()
                       << "Right:" << rightChannelData.size();
            leftChannelData.clear();
            rightChannelData.clear();
//            Q_ASSERT(false);
        }
    }
    // III. Trigger mode: Automatic - display data immediatelly if there are enough data in buffer
    if (m_triggerMode == TRIG_AUTO) {
        if (m_capturedChannels != CHANNEL_BOTH) {
            buffer->append(*samples);
            if (buffer->size() < m_frameLength) {
                return;
            }
        } else {
            m_samplesInputBufferLeft.append(leftChannelData);
            m_samplesInputBufferRight.append(rightChannelData);
            if (m_samplesInputBufferLeft.size() < m_frameLength) {
                return;
            }
        }
        displayOscilloscopeChannelData(0, m_frameLength, m_frameLength);
        return;
    }
    // IV.  Trigger mode: Single - if data acqured, the graph have to hold data
    if ((m_triggerMode == TRIG_SINGLE) && m_dataForSingleCaptureAcqured) {
        return;
    }
    // V.   Trigger mode: Normal or Single (when trigger hasn't fired yet)
    if ((m_triggerMode == TRIG_NORMAL) or (m_triggerMode == TRIG_SINGLE)) {
        // Fill buffers with samples
        if (m_capturedChannels != CHANNEL_BOTH) {
            buffer->append(*samples);
            if (buffer->size() < m_frameLength * 2) {
                return;
            }
        } else {
            m_samplesInputBufferLeft.append(leftChannelData);
            m_samplesInputBufferRight.append(rightChannelData);
            if (m_samplesInputBufferLeft.size() < m_frameLength * 2) {
                return;
            }
        }
        // Find moments when signal intersects trigger line by required slope
        // Start searching with offset in half of frame length, because this half has been already plotted
        QList<int> eventsOffsets;
        for (int offset = m_frameLength / 2 - 1;  offset < buffer->size(); ++offset) {
            qreal cur = buffer->at(offset);
            qreal prev = buffer->at(offset - 1);
            if (m_triggerSlope == TRIG_RISING) {
                if ((prev <= m_triggerLevel) && (cur >= m_triggerLevel)) {
                    eventsOffsets.append(offset);
                }
            } else {
                if ((prev >= m_triggerLevel) && (cur <= m_triggerLevel)) {
                    eventsOffsets.append(offset);
                }
            }
        }
        if (eventsOffsets.size() > 0) {
            // take first event in next frame
            for (int i = 0; i < eventsOffsets.size(); ++i) {
                int offset = eventsOffsets[i];
                if (offset >= m_frameLength * 3 / 2) {
                    // there is not enough data for display full frame
                    eventsOffsets.clear();
                    break;
                }
                if (offset >= m_frameLength / 2) {
                    displayOscilloscopeChannelData(offset - m_frameLength / 2, m_frameLength, m_frameLength / 2);
                    m_dataForSingleCaptureAcqured = true;
                    return;
                }
            }
            // or select last event
            if (eventsOffsets.size() > 0) {
                int offset = eventsOffsets.last();
                displayOscilloscopeChannelData(offset - m_frameLength / 2, m_frameLength, m_frameLength / 2);
                m_dataForSingleCaptureAcqured = true;
                return;
            }
        }
        // buffer is overflowed
        if (buffer->size() > m_frameLength * 2) {
            if (m_capturedChannels != CHANNEL_BOTH) {
                *buffer = buffer->mid(m_frameLength);
            } else {
                m_samplesInputBufferLeft = m_samplesInputBufferLeft.mid(m_frameLength);
                m_samplesInputBufferRight = m_samplesInputBufferRight.mid(m_frameLength);
            }
        }
    }
}