From 4266de78304ce5c6ffbde34601216f0878935ef9 Mon Sep 17 00:00:00 2001 From: Vesa Date: Sat, 13 Dec 2014 16:28:44 +0200 Subject: [PATCH] More fixes (Bitcrush, Linkwitz-Riley filter) --- include/BasicFilters.h | 20 ++++++++++---------- plugins/Bitcrush/Bitcrush.cpp | 7 ++++++- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/include/BasicFilters.h b/include/BasicFilters.h index 98c69474ab9..e09d40c425f 100644 --- a/include/BasicFilters.h +++ b/include/BasicFilters.h @@ -75,34 +75,34 @@ class LinkwitzRiley inline void setCoeffs( float freq ) { // wc - const float wc = F_2PI * freq; + const float wc = F_2PI * freq / m_sampleRate; const float wc2 = wc * wc; const float wc3 = wc2 * wc; m_wc4 = wc2 * wc2; // k - const float k = wc / tanf( F_PI * freq / m_sampleRate ); + const float k = wc / tan( wc * 0.5 ); const float k2 = k * k; const float k3 = k2 * k; m_k4 = k2 * k2; // a - static const float sqrt2 = sqrtf( 2.0f ); + static const double sqrt2 = sqrt( 2.0 ); const float sq_tmp1 = sqrt2 * wc3 * k; const float sq_tmp2 = sqrt2 * wc * k3; - m_a = 4.0f * wc2 * k2 + 2.0f * sq_tmp1 + m_k4 + 2.0f * sq_tmp2 + m_wc4; + m_a = 1.0f / ( 4.0f * wc2 * k2 + 2.0f * sq_tmp1 + m_k4 + 2.0f * sq_tmp2 + m_wc4 ); // b - m_b1 = ( 4.0f * ( m_wc4 + sq_tmp1 - m_k4 - sq_tmp2 ) ) / m_a; - m_b2 = ( 6.0f * m_wc4 - 8.0f * wc2 * k2 + 6.0f * m_k4 ) / m_a; - m_b3 = ( 4.0f * ( m_wc4 - sq_tmp1 + sq_tmp2 - m_k4 ) ) / m_a; - m_b4 = ( m_k4 - 2.0f * sq_tmp1 + m_wc4 - 2.0f * sq_tmp2 + 4.0f * wc2 * k2 ) / m_a; + m_b1 = ( 4.0f * ( m_wc4 + sq_tmp1 - m_k4 - sq_tmp2 ) ) * m_a; + m_b2 = ( 6.0f * m_wc4 - 8.0f * wc2 * k2 + 6.0f * m_k4 ) * m_a; + m_b3 = ( 4.0f * ( m_wc4 - sq_tmp1 + sq_tmp2 - m_k4 ) ) * m_a; + m_b4 = ( m_k4 - 2.0f * sq_tmp1 + m_wc4 - 2.0f * sq_tmp2 + 4.0f * wc2 * k2 ) * m_a; } inline void setLowpass( float freq ) { setCoeffs( freq ); - m_a0 = m_wc4 / m_a; + m_a0 = m_wc4 * m_a; m_a1 = 4.0f * m_a0; m_a2 = 6.0f * m_a0; } @@ -110,7 +110,7 @@ class LinkwitzRiley inline void setHighpass( float freq ) { setCoeffs( freq ); - m_a0 = m_k4 / m_a; + m_a0 = m_k4 * m_a; m_a1 = 4.0f * m_a0; m_a2 = 6.0f * m_a0; } diff --git a/plugins/Bitcrush/Bitcrush.cpp b/plugins/Bitcrush/Bitcrush.cpp index 8a2822d608f..84f5b45ba0c 100644 --- a/plugins/Bitcrush/Bitcrush.cpp +++ b/plugins/Bitcrush/Bitcrush.cpp @@ -80,7 +80,7 @@ void BitcrushEffect::sampleRateChanged() { m_sampleRate = Engine::mixer()->processingSampleRate(); m_filter.setSampleRate( m_sampleRate ); - m_filter.setLowpass( m_sampleRate * CUTOFF_RATIO ); + m_filter.setLowpass( m_sampleRate * ( CUTOFF_RATIO * OS_RATIO ) ); m_needsUpdate = true; } @@ -97,6 +97,11 @@ inline float BitcrushEffect::noise( float amt ) bool BitcrushEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames ) { + if( !isEnabled() || !isRunning () ) + { + return( false ); + } + // update values if( m_needsUpdate || m_controls.m_rateEnabled.isValueChanged() ) {