mirror of
https://github.com/LMMS/lmms.git
synced 2026-01-29 16:53:07 -05:00
Revert "Fix 2047 ("TripleOscillator: Oscillators are getting out of sync") (#3145)"
This reverts commit e3e14bb730 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.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
|
||||
@@ -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<double>::isEqual( m_phaseOffset, m_ext_phaseOffset ) )
|
||||
if( !typeInfo<float>::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 ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user