diff --git a/mainWindow.cpp b/mainWindow.cpp index 599853a..38d1886 100644 --- a/mainWindow.cpp +++ b/mainWindow.cpp @@ -119,7 +119,7 @@ MainWindow::MainWindow(QWidget *parent) bufferSize = 8192*2; m_format.setSampleRate(44100); - m_format.setChannelCount(1); + m_format.setChannelCount(2); m_format.setSampleSize(16); m_format.setCodec("audio/pcm"); m_format.setByteOrder(QAudioFormat::LittleEndian); @@ -131,6 +131,7 @@ MainWindow::MainWindow(QWidget *parent) m_format = info.nearestFormat(m_format); } m_device = QAudioDeviceInfo::defaultOutputDevice(); + qWarning() << "Default device :" << m_device.deviceName(); m_buffer = QByteArray(bufferSize*2, 0); m_audioOutput = new QAudioOutput(m_device, m_format, this); diff --git a/outputQt.cpp b/outputQt.cpp index f044074..539bdaf 100644 --- a/outputQt.cpp +++ b/outputQt.cpp @@ -138,8 +138,9 @@ Generator::addWave(unsigned char note, unsigned char vel) { wav.state_age = 0; wav.age = 0; wav.env = defaultEnv; - + mutex.lock(); waveList.push_back(wav); + mutex.unlock(); } qint64 @@ -228,6 +229,7 @@ Generator::generateData(qint64 len) { filteredData = QVector(numSamples, 0); // All samples for each active note in waveList are synthesized separately. + mutex.lock(); QMutableListIterator i(waveList); while (i.hasNext()) { @@ -305,7 +307,8 @@ Generator::generateData(qint64 len) { i.setValue(wav); } } - + mutex.unlock(); + for (unsigned int sample = 0; sample < numSamples; sample++) { convBuffer[convBuffer_ind] = synthData[sample]; filteredData[sample] = 0; @@ -323,7 +326,7 @@ Generator::generateData(qint64 len) { delayBuffer[delayBuffer_ind] = filteredData[sample]; delayBuffer_ind = (delayBuffer_ind + 1) % delayBuffer_size; - // Primitive Reverb algorith. + // Primitive Reverb algorithm. if (rev.active) { qreal reverb = 0; unsigned int ind; @@ -452,3 +455,4 @@ Generator::setReverb(Reverb &_rev) { qDebug() << "setReverb"; rev = _rev; } + diff --git a/outputQt.h b/outputQt.h index 6047d4a..48a1438 100644 --- a/outputQt.h +++ b/outputQt.h @@ -25,6 +25,7 @@ #include #include +#include #include "linearSynthesis.h" #include "ADSRenvelope.h" @@ -124,6 +125,7 @@ public slots: qreal fftTimer; + QMutex mutex; #ifdef USE_FFTW fftw_complex *fftwIn, *fftwOut; fftw_plan fftwPlan; @@ -134,3 +136,4 @@ public slots: }; #endif // OUTPUTQT_H +