diff --git a/include/PeakController.h b/include/PeakController.h index a22257374d6..043315ee944 100644 --- a/include/PeakController.h +++ b/include/PeakController.h @@ -61,7 +61,6 @@ class LMMS_EXPORT PeakController : public Controller public slots: gui::ControllerDialog * createDialog( QWidget * _parent ) override; void handleDestroyedEffect(); - void updateCoeffs(); protected: // The internal per-controller get-value function @@ -77,9 +76,6 @@ public slots: static int m_getCount; static int m_loadCount; static bool m_buggedFile; - - float m_coeff; - bool m_coeffNeedsUpdate; } ; namespace gui diff --git a/src/core/PeakController.cpp b/src/core/PeakController.cpp index 1b819982a6c..5d904571047 100644 --- a/src/core/PeakController.cpp +++ b/src/core/PeakController.cpp @@ -37,53 +37,35 @@ namespace lmms { - PeakControllerEffectVector PeakController::s_effects; int PeakController::m_getCount; int PeakController::m_loadCount; bool PeakController::m_buggedFile; - -PeakController::PeakController( Model * _parent, - PeakControllerEffect * _peak_effect ) : - Controller( ControllerType::Peak, _parent, tr( "Peak Controller" ) ), - m_peakEffect( _peak_effect ), - m_currentSample( 0.0f ) +PeakController::PeakController(Model * _parent, + PeakControllerEffect * _peak_effect) : + Controller( ControllerType::Peak, _parent, tr("Peak Controller")), + m_peakEffect(_peak_effect), + m_currentSample(0.0f) { - setSampleExact( true ); - if( m_peakEffect ) + setSampleExact(true); + if(m_peakEffect) { connect( m_peakEffect, SIGNAL(destroyed()), this, SLOT(handleDestroyedEffect())); } - connect( Engine::audioEngine(), SIGNAL(sampleRateChanged()), this, SLOT(updateCoeffs())); - connect( m_peakEffect->attackModel(), SIGNAL(dataChanged()), - this, SLOT(updateCoeffs()), Qt::DirectConnection ); - connect( m_peakEffect->decayModel(), SIGNAL(dataChanged()), - this, SLOT(updateCoeffs()), Qt::DirectConnection ); - m_coeffNeedsUpdate = true; } - - - PeakController::~PeakController() { if( m_peakEffect != nullptr && m_peakEffect->effectChain() != nullptr ) { - m_peakEffect->effectChain()->removeEffect( m_peakEffect ); + m_peakEffect->effectChain()->removeEffect(m_peakEffect); } } - void PeakController::updateValueBuffer() { - if( m_coeffNeedsUpdate ) - { - m_coeff = 100.0f / Engine::audioEngine()->outputSampleRate(); - m_coeffNeedsUpdate = false; - } - if( m_peakEffect ) { float targetSample = m_peakEffect->lastSample(); @@ -92,32 +74,26 @@ void PeakController::updateValueBuffer() const f_cnt_t frames = Engine::audioEngine()->framesPerPeriod(); float * values = m_valueBuffer.values(); - for( f_cnt_t f = 0; f < frames; ++f ) + float coeff = 1.0f / frames; + const float diff = (targetSample - m_currentSample); + for(f_cnt_t f = 0; f < frames; ++f) { - const float diff = ( targetSample - m_currentSample ); - m_currentSample += diff * m_coeff; + m_currentSample += diff * coeff; values[f] = m_currentSample; } } else { - m_valueBuffer.fill( m_currentSample ); + m_valueBuffer.fill(m_currentSample); } } else { - m_valueBuffer.fill( 0 ); + m_valueBuffer.fill(0); } m_bufferLastUpdated = s_periods; } - -void PeakController::updateCoeffs() -{ - m_coeffNeedsUpdate = true; -} - - void PeakController::handleDestroyedEffect() { // possible race condition...