From 5a25efde021a76210fb464e22384c576e47d7760 Mon Sep 17 00:00:00 2001 From: David Bailes Date: Thu, 7 May 2015 10:16:52 +0100 Subject: [PATCH] changes to ensure that when clipping is unchecked, then both on opening, and setting peak to 0, preview and ok are available --- src/effects/Amplify.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/effects/Amplify.cpp b/src/effects/Amplify.cpp index e6082331a..2258df4fc 100644 --- a/src/effects/Amplify.cpp +++ b/src/effects/Amplify.cpp @@ -163,7 +163,7 @@ void EffectAmplify::PopulateOrExchange(ShuttleGui & S) { if (mPeak > 0.0) { - mRatio = 1.0 / mPeak; + mRatio = 1.0f / mPeak; } else { @@ -226,9 +226,10 @@ void EffectAmplify::PopulateOrExchange(ShuttleGui & S) bool EffectAmplify::TransferDataToWindow() { // limit range of gain - float dB = TrapFloat(20.0f * log10f(mRatio) * SCL_Amp, MIN_Amp * SCL_Amp, MAX_Amp * SCL_Amp) / SCL_Amp; - - mRatio = powf(10.0f, dB / 20.0f); + float dBInit = 20.0f*log10f(mRatio); + float dB = TrapFloat(dBInit, MIN_Amp, MAX_Amp); + if (dB != dBInit) + mRatio = powf(10.0f, dB / 20.0f); mAmp = 20.0f * log10f(mRatio); mAmpT->GetValidator()->TransferToWindow(); @@ -268,8 +269,7 @@ bool EffectAmplify::TransferDataFromWindow() void EffectAmplify::CheckClip() { - float peak = mRatio * mPeak; - EnableApply(mClip->GetValue() || (peak > 0.0f && peak <= 1.0f)); + EnableApply(mClip->GetValue() || (mPeak > 0.0f && mRatio <= 1.0f/mPeak)); } void EffectAmplify::OnAmpText(wxCommandEvent & WXUNUSED(evt)) @@ -298,10 +298,14 @@ void EffectAmplify::OnPeakText(wxCommandEvent & WXUNUSED(evt)) return; } - float r = powf(10.0f, mNewPeak / 20.0f) / mPeak; + float temp = powf(10.0f, 0.0/20.0f ); - mAmp = TrapFloat(20.0f * log10f(r) * SCL_Amp, MIN_Amp * SCL_Amp, MAX_Amp * SCL_Amp) / SCL_Amp; - mRatio = powf(10.0f, mAmp / 20.0f); + mRatio = powf(10.0f, mNewPeak / 20.0f) / mPeak; + + float ampInit = 20.0f * log10f(mRatio); + mAmp = TrapFloat(ampInit, MIN_Amp, MAX_Amp); + if (mAmp != ampInit) + mRatio = powf(10.0f, mAmp / 20.0f); mAmpT->GetValidator()->TransferToWindow();