diff --git a/plugins/wtsynth/WTSynth.cpp b/plugins/wtsynth/WTSynth.cpp index 98fbab8e2..94ea69093 100644 --- a/plugins/wtsynth/WTSynth.cpp +++ b/plugins/wtsynth/WTSynth.cpp @@ -57,10 +57,6 @@ Plugin::Descriptor PLUGIN_EXPORT wtsynth_plugin_descriptor = WTSynthObject::WTSynthObject( float * _A1wave, float * _A2wave, float * _B1wave, float * _B2wave, int _amod, int _bmod, const sample_rate_t _samplerate, NotePlayHandle * _nph, fpp_t _frames ) : - m_A1wave( _A1wave ), - m_A2wave( _A2wave ), - m_B1wave( _B1wave ), - m_B2wave( _B2wave ), m_amod( _amod ), m_bmod( _bmod ), m_samplerate( _samplerate ), @@ -79,6 +75,12 @@ WTSynthObject::WTSynthObject( float * _A1wave, float * _A2wave, m_rphase[A2_OSC] = 0.0f; m_rphase[B1_OSC] = 0.0f; m_rphase[B2_OSC] = 0.0f; + + // copy wavegraphs to the synth object to prevent race conditions + memcpy( &m_A1wave, _A1wave, sizeof( m_A1wave ) ); + memcpy( &m_A2wave, _A2wave, sizeof( m_A2wave ) ); + memcpy( &m_B1wave, _B1wave, sizeof( m_B1wave ) ); + memcpy( &m_B2wave, _B2wave, sizeof( m_B2wave ) ); } diff --git a/plugins/wtsynth/WTSynth.h b/plugins/wtsynth/WTSynth.h index 37d3cec0e..0484fa7da 100644 --- a/plugins/wtsynth/WTSynth.h +++ b/plugins/wtsynth/WTSynth.h @@ -91,11 +91,6 @@ public: } private: - sample_t * m_A1wave; - sample_t * m_A2wave; - sample_t * m_B1wave; - sample_t * m_B2wave; - float m_lvol [NUM_OSCS]; float m_rvol [NUM_OSCS]; float m_mult [NUM_OSCS]; @@ -118,7 +113,11 @@ private: float m_lfreq [NUM_OSCS]; float m_rfreq [NUM_OSCS]; - + + float m_A1wave [WAVELEN]; + float m_A2wave [WAVELEN]; + float m_B1wave [WAVELEN]; + float m_B2wave [WAVELEN]; }; class WTSynthInstrument : public Instrument