From cf26da330c2ac5c0fce5069a4f469bed60536dbb Mon Sep 17 00:00:00 2001 From: Michael Gregorius Date: Sat, 4 Feb 2017 12:45:02 +0100 Subject: [PATCH] Revert "Fix 2047 ("TripleOscillator: Oscillators are getting out of sync") (#3145)" This reverts commit e3e14bb730440fd577b6800c0928f255ac52df63 in an attempt to fix issue #3292. The problem that's addressed is very elusive: * It cannot be reproduced reliably. * It seems to be more prone to appear in release builds. * It only seems to appear when two or more instruments are mixed into one channel. * If you solo a problematic Triple Osc it goes away. The observations above seem to indicate that there's rather a problem with the mixing (due to multithreading?) and that the changes made to Triple Osc seem to trigger this deeper problem more quickly. --- include/Oscillator.h | 8 ++++---- src/core/Oscillator.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/Oscillator.h b/include/Oscillator.h index c397b722b..e146b5af0 100644 --- a/include/Oscillator.h +++ b/include/Oscillator.h @@ -71,7 +71,7 @@ public: const IntModel * _mod_algo_model, const float & _freq, const float & _detuning, - const double & _phase_offset, + const float & _phase_offset, const float & _volume, Oscillator * _m_subOsc = NULL ); virtual ~Oscillator() @@ -160,10 +160,10 @@ private: const float & m_freq; const float & m_detuning; const float & m_volume; - const double & m_ext_phaseOffset; + const float & m_ext_phaseOffset; Oscillator * m_subOsc; - double m_phaseOffset; - double m_phase; + float m_phaseOffset; + float m_phase; const SampleBuffer * m_userWave; diff --git a/src/core/Oscillator.cpp b/src/core/Oscillator.cpp index 0398d0c5b..78be9315f 100644 --- a/src/core/Oscillator.cpp +++ b/src/core/Oscillator.cpp @@ -35,7 +35,7 @@ Oscillator::Oscillator( const IntModel * _wave_shape_model, const IntModel * _mod_algo_model, const float & _freq, const float & _detuning, - const double & _phase_offset, + const float & _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::isEqual( m_phaseOffset, m_ext_phaseOffset ) ) + if( !typeInfo::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 double v1 = m_phase; + const float v1 = m_phase; m_phase += _osc_coeff; // check whether m_phase is in next period - return( floor( m_phase ) > floor( v1 ) ); + return( floorf( m_phase ) > floorf( v1 ) ); }