Changes again - moved frequency calculations to a static method... for some reason this saves a lot of cpu.
This commit is contained in:
@@ -62,7 +62,8 @@ float WTSynthObject::s_mult [NUM_OSCS];
|
||||
float WTSynthObject::s_ltune [NUM_OSCS];
|
||||
float WTSynthObject::s_rtune [NUM_OSCS];
|
||||
float WTSynthObject::s_xtalk;
|
||||
|
||||
float WTSynthObject::s_lfreq [NUM_OSCS];
|
||||
float WTSynthObject::s_rfreq [NUM_OSCS];
|
||||
|
||||
|
||||
WTSynthObject::WTSynthObject( float * _A1wave, float * _A2wave,
|
||||
@@ -105,13 +106,6 @@ WTSynthObject::~WTSynthObject()
|
||||
|
||||
void WTSynthObject::renderOutput( fpp_t _frames )
|
||||
{
|
||||
// calculate frequencies
|
||||
for( int i = 0; i < NUM_OSCS; i++ )
|
||||
{
|
||||
m_lfreq[i] = ( s_mult[i] / 8 ) * powf( 2, s_ltune[i] / 1200 );
|
||||
m_rfreq[i] = ( s_mult[i] / 8 ) * powf( 2, s_rtune[i] / 1200 );
|
||||
}
|
||||
|
||||
if( m_abuf == NULL )
|
||||
m_abuf = new sampleFrame[m_fpp];
|
||||
if( m_bbuf == NULL )
|
||||
@@ -225,9 +219,9 @@ void WTSynthObject::renderOutput( fpp_t _frames )
|
||||
// update phases
|
||||
for( int i = 0; i < NUM_OSCS; i++ )
|
||||
{
|
||||
m_lphase[i] += ( static_cast<float>( WAVELEN ) / ( m_samplerate / ( m_nph->frequency() * m_lfreq[i] ) ) );
|
||||
m_lphase[i] += ( static_cast<float>( WAVELEN ) / ( m_samplerate / ( m_nph->frequency() * s_lfreq[i] ) ) );
|
||||
m_lphase[i] = fmodf( m_lphase[i], WAVELEN );
|
||||
m_rphase[i] += ( static_cast<float>( WAVELEN ) / ( m_samplerate / ( m_nph->frequency() * m_rfreq[i] ) ) );
|
||||
m_rphase[i] += ( static_cast<float>( WAVELEN ) / ( m_samplerate / ( m_nph->frequency() * s_rfreq[i] ) ) );
|
||||
m_rphase[i] = fmodf( m_rphase[i], WAVELEN );
|
||||
}
|
||||
}
|
||||
@@ -256,6 +250,17 @@ void WTSynthObject::changeTune( int _osc, float _ltune, float _rtune )
|
||||
}
|
||||
|
||||
|
||||
void WTSynthObject::updateFrequency()
|
||||
{
|
||||
// calculate frequencies
|
||||
for( int i = 0; i < NUM_OSCS; i++ )
|
||||
{
|
||||
s_lfreq[i] = ( s_mult[i] / 8 ) * powf( 2, s_ltune[i] / 1200 );
|
||||
s_rfreq[i] = ( s_mult[i] / 8 ) * powf( 2, s_rtune[i] / 1200 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
WTSynthInstrument::WTSynthInstrument( InstrumentTrack * _instrument_track ) :
|
||||
Instrument( _instrument_track, &wtsynth_plugin_descriptor ),
|
||||
|
||||
@@ -614,6 +619,7 @@ void WTSynthInstrument::updateMult()
|
||||
WTSynthObject::changeMult( A2_OSC, a2_mult.value() );
|
||||
WTSynthObject::changeMult( B1_OSC, b1_mult.value() );
|
||||
WTSynthObject::changeMult( B2_OSC, b2_mult.value() );
|
||||
WTSynthObject::updateFrequency();
|
||||
}
|
||||
void WTSynthInstrument::updateTunes()
|
||||
{
|
||||
@@ -621,6 +627,7 @@ void WTSynthInstrument::updateTunes()
|
||||
WTSynthObject::changeTune( A2_OSC, a2_ltune.value(), a2_rtune.value() );
|
||||
WTSynthObject::changeTune( B1_OSC, b1_ltune.value(), b1_rtune.value() );
|
||||
WTSynthObject::changeTune( B2_OSC, b2_ltune.value(), b2_rtune.value() );
|
||||
WTSynthObject::updateFrequency();
|
||||
}
|
||||
void WTSynthInstrument::updateXtalk()
|
||||
{
|
||||
|
||||
@@ -83,6 +83,7 @@ public:
|
||||
static void changeVolume( int _osc, float _lvol, float _rvol );
|
||||
static void changeMult( int _osc, float _mul );
|
||||
static void changeTune( int _osc, float _ltune, float _rtune );
|
||||
static void updateFrequency();
|
||||
|
||||
static inline void changeXtalk( float _xtalk )
|
||||
{
|
||||
@@ -111,6 +112,8 @@ private:
|
||||
static float s_ltune [NUM_OSCS];
|
||||
static float s_rtune [NUM_OSCS];
|
||||
static float s_xtalk;
|
||||
static float s_lfreq [NUM_OSCS];
|
||||
static float s_rfreq [NUM_OSCS];
|
||||
|
||||
// linear interpolation
|
||||
/* inline sample_t interpolate( sample_t s1, sample_t s2, float x )
|
||||
@@ -143,9 +146,6 @@ private:
|
||||
float m_lphase [NUM_OSCS];
|
||||
float m_rphase [NUM_OSCS];
|
||||
|
||||
float m_lfreq [NUM_OSCS];
|
||||
float m_rfreq [NUM_OSCS];
|
||||
|
||||
float m_A1wave [WAVELEN];
|
||||
float m_A2wave [WAVELEN];
|
||||
float m_B1wave [WAVELEN];
|
||||
|
||||
Reference in New Issue
Block a user