diff --git a/include/FxMixer.h b/include/FxMixer.h index 2fd8e0554..0c2ac02a5 100644 --- a/include/FxMixer.h +++ b/include/FxMixer.h @@ -56,6 +56,7 @@ class FxChannel : public ThreadableJob BoolModel m_soloModel; FloatModel m_volumeModel; QString m_name; + QMutex m_lock; int m_channelIndex; // what channel index are we bool m_queued; // are we queued up for rendering yet? bool m_muted; // are we muted? updated per period so we don't have to call m_muteModel.value() twice diff --git a/src/core/FxMixer.cpp b/src/core/FxMixer.cpp index 6ed83d45b..084e6d6f6 100644 --- a/src/core/FxMixer.cpp +++ b/src/core/FxMixer.cpp @@ -68,6 +68,7 @@ FxChannel::FxChannel( int idx, Model * _parent ) : m_soloModel( false, _parent ), m_volumeModel( 1.0, 0.0, 2.0, 0.001, _parent ), m_name(), + m_lock(), m_channelIndex( idx ), m_queued( false ), m_dependenciesMet( 0 ) @@ -547,8 +548,10 @@ void FxMixer::mixToChannel( const sampleFrame * _buf, fx_ch_t _ch ) { if( m_fxChannels[_ch]->m_muteModel.value() == false ) { + m_fxChannels[_ch]->m_lock.lock(); MixHelpers::add( m_fxChannels[_ch]->m_buffer, _buf, Engine::mixer()->framesPerPeriod() ); m_fxChannels[_ch]->m_hasInput = true; + m_fxChannels[_ch]->m_lock.unlock(); } }