Fix 2047 ("TripleOscillator: Oscillators are getting out of sync") (#3145)

Change all phase related variables in Oscillator from float to double.
The parameters for the getSample methods have not been changed to double
as it should suffice to only update the phase variables with double
precision.
This commit is contained in:
Michael Gregorius
2017-01-12 23:10:38 +01:00
committed by Tres Finocchiaro
parent 4b92651d4f
commit e3e14bb730
2 changed files with 8 additions and 8 deletions

View File

@@ -35,7 +35,7 @@ Oscillator::Oscillator( const IntModel * _wave_shape_model,
const IntModel * _mod_algo_model,
const float & _freq,
const float & _detuning,
const float & _phase_offset,
const double & _phase_offset,
const float & _volume,
Oscillator * _sub_osc ) :
m_waveShapeModel( _wave_shape_model ),
@@ -310,7 +310,7 @@ void Oscillator::updateFM( sampleFrame * _ab, const fpp_t _frames,
// should be called every time phase-offset is changed...
inline void Oscillator::recalcPhase()
{
if( !typeInfo<float>::isEqual( m_phaseOffset, m_ext_phaseOffset ) )
if( !typeInfo<double>::isEqual( m_phaseOffset, m_ext_phaseOffset ) )
{
m_phase -= m_phaseOffset;
m_phaseOffset = m_ext_phaseOffset;
@@ -325,10 +325,10 @@ inline void Oscillator::recalcPhase()
inline bool Oscillator::syncOk( float _osc_coeff )
{
const float v1 = m_phase;
const double v1 = m_phase;
m_phase += _osc_coeff;
// check whether m_phase is in next period
return( floorf( m_phase ) > floorf( v1 ) );
return( floor( m_phase ) > floor( v1 ) );
}