Copy wavegraphs to synthobject at note start, prevent hangups if wave edited while playing

This commit is contained in:
Vesa
2014-03-22 02:37:47 +02:00
parent b574e1c1ca
commit 10994e3ae5
2 changed files with 11 additions and 10 deletions

View File

@@ -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 ) );
}

View File

@@ -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