mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-01 16:19:43 +02:00
This should fix the init problem and make it usable in chains
This commit is contained in:
parent
841a392f1a
commit
cb147e5605
@ -45,10 +45,9 @@ enum
|
||||
|
||||
// Define keys, defaults, minimums, and maximums for the effect parameters
|
||||
//
|
||||
// Name Type Key Def Min Max Scale
|
||||
Param( Ratio, float, XO("Ratio"), 0.9f, -FLT_MAX, FLT_MAX, 1.0f );
|
||||
Param( NoClip, bool, XO("Allow Clipping"), false, false, true, 1.0f );
|
||||
Param( Amp, float, wxT(""), -0.91515f, -50.0, 50.0, 10.0f );
|
||||
// Name Type Key Def Min Max Scale
|
||||
Param( Ratio, float, XO("Ratio"), 0.9f, 0.003162f, 316.227766f, 1.0f );
|
||||
Param( Amp, float, wxT(""), -0.91515f, -50.0f, 50.0f, 10.0f );
|
||||
|
||||
//
|
||||
// EffectAmplify
|
||||
@ -64,9 +63,9 @@ END_EVENT_TABLE()
|
||||
EffectAmplify::EffectAmplify()
|
||||
{
|
||||
mAmp = DEF_Amp;
|
||||
mNoClip = DEF_NoClip;
|
||||
mRatio = pow(10.0, mAmp * 20.0);
|
||||
mPeak = 0.0;
|
||||
mRatio = powf(10.0f, mAmp / 20.0f);
|
||||
mCanClip = false;
|
||||
mPeak = 0.0f;
|
||||
}
|
||||
|
||||
EffectAmplify::~EffectAmplify()
|
||||
@ -118,26 +117,15 @@ sampleCount EffectAmplify::ProcessBlock(float **inBlock, float **outBlock, sampl
|
||||
bool EffectAmplify::GetAutomationParameters(EffectAutomationParameters & parms)
|
||||
{
|
||||
parms.WriteFloat(KEY_Ratio, mRatio);
|
||||
parms.Write(KEY_NoClip, !mNoClip);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool EffectAmplify::SetAutomationParameters(EffectAutomationParameters & parms)
|
||||
{
|
||||
float Ratio;
|
||||
float def = pow(10.0, DEF_Amp / 20.0);
|
||||
float min = pow(10.0, MIN_Amp / 20.0);
|
||||
float max = pow(10.0, MAX_Amp / 20.0);
|
||||
|
||||
if (!parms.ReadAndVerify(KEY_Ratio, &Ratio, def, min, max))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
ReadAndVerifyBool(NoClip);
|
||||
ReadAndVerifyFloat(Ratio);
|
||||
|
||||
mRatio = Ratio;
|
||||
mNoClip = !NoClip;
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -146,7 +134,7 @@ bool EffectAmplify::SetAutomationParameters(EffectAutomationParameters & parms)
|
||||
|
||||
bool EffectAmplify::Init()
|
||||
{
|
||||
mPeak = 0.0;
|
||||
mPeak = 0.0f;
|
||||
|
||||
SelectedTrackListOfKindIterator iter(Track::Wave, mTracks);
|
||||
|
||||
@ -167,6 +155,23 @@ bool EffectAmplify::Init()
|
||||
|
||||
void EffectAmplify::PopulateOrExchange(ShuttleGui & S)
|
||||
{
|
||||
if (IsBatchProcessing())
|
||||
{
|
||||
mPeak = 1.0f;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mPeak > 0.0)
|
||||
{
|
||||
mRatio = 1.0 / mPeak;
|
||||
}
|
||||
else
|
||||
{
|
||||
mRatio = 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
S.AddSpace(0, 5);
|
||||
|
||||
S.StartVerticalLay(0);
|
||||
@ -194,8 +199,8 @@ void EffectAmplify::PopulateOrExchange(ShuttleGui & S)
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
FloatingPointValidator<float> vldNewPeak(1, &mNewPeak);
|
||||
vldNewPeak.SetRange(20.0 * log10(pow(10.0, MIN_Amp / 20.0) * mPeak),
|
||||
20.0 * log10(pow(10.0, MAX_Amp / 20.0) * mPeak));
|
||||
vldNewPeak.SetRange(20.0f * log10f(powf(10.0f, MIN_Amp / 20.0f) * mPeak),
|
||||
20.0f * log10f(powf(10.0f, MAX_Amp / 20.0f) * mPeak));
|
||||
mNewPeakT = S.Id(ID_Peak).AddTextBox(_("New Peak Amplitude (dB):"), wxT(""), 12);
|
||||
mNewPeakT->SetValidator(vldNewPeak);
|
||||
}
|
||||
@ -205,9 +210,13 @@ void EffectAmplify::PopulateOrExchange(ShuttleGui & S)
|
||||
S.StartHorizontalLay(wxCENTER);
|
||||
{
|
||||
mClip = S.Id(ID_Clip).AddCheckBox(_("Allow clipping"), wxT("false"));
|
||||
if (IsBatchProcessing())
|
||||
{
|
||||
mClip->Enable(false);
|
||||
mCanClip = true;
|
||||
}
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
}
|
||||
S.EndVerticalLay();
|
||||
|
||||
@ -216,24 +225,21 @@ void EffectAmplify::PopulateOrExchange(ShuttleGui & S)
|
||||
|
||||
bool EffectAmplify::TransferDataToWindow()
|
||||
{
|
||||
if (mPeak > 0.0)
|
||||
mRatio = 1.0 / mPeak;
|
||||
else
|
||||
mRatio = 1.0;
|
||||
|
||||
// limit range of gain
|
||||
double dB = TrapDouble(20.0 * log10(mRatio), MIN_Amp, MAX_Amp);
|
||||
float dB = TrapFloat(20.0f * log10f(mRatio) * SCL_Amp, MIN_Amp * SCL_Amp, MAX_Amp * SCL_Amp) / SCL_Amp;
|
||||
|
||||
mRatio = pow(10.0, dB / 20.0);
|
||||
mRatio = powf(10.0f, dB / 20.0f);
|
||||
|
||||
mAmp = 20.0 * log10(mRatio);
|
||||
mAmp = 20.0f * log10f(mRatio);
|
||||
mAmpT->GetValidator()->TransferToWindow();
|
||||
|
||||
mAmpS->SetValue((int) (mAmp * SCL_Amp + 0.5));
|
||||
mAmpS->SetValue((int) (mAmp * SCL_Amp + 0.5f));
|
||||
|
||||
mNewPeak = 20.0 * log10(mRatio * mPeak);
|
||||
mNewPeak = 20.0f * log10f(mRatio * mPeak);
|
||||
mNewPeakT->GetValidator()->TransferToWindow();
|
||||
|
||||
mClip->SetValue(mCanClip);
|
||||
|
||||
CheckClip();
|
||||
|
||||
return true;
|
||||
@ -246,13 +252,13 @@ bool EffectAmplify::TransferDataFromWindow()
|
||||
return false;
|
||||
}
|
||||
|
||||
mRatio = pow(10.0, TrapDouble(mAmp, MIN_Amp, MAX_Amp) / 20.0);
|
||||
mRatio = powf(10.0f, TrapFloat(mAmp * SCL_Amp, MIN_Amp * SCL_Amp, MAX_Amp * SCL_Amp) / (20.0f * SCL_Amp));
|
||||
|
||||
mNoClip = !mClip->GetValue();
|
||||
mCanClip = mClip->GetValue();
|
||||
|
||||
if (mNoClip && mRatio * mPeak > 1.0)
|
||||
if (!mCanClip && mRatio * mPeak > 1.0f)
|
||||
{
|
||||
mRatio = 1.0 / mPeak;
|
||||
mRatio = 1.0f / mPeak;
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -262,8 +268,8 @@ bool EffectAmplify::TransferDataFromWindow()
|
||||
|
||||
void EffectAmplify::CheckClip()
|
||||
{
|
||||
double peak = mRatio * mPeak;
|
||||
EnableApply(mClip->GetValue() || (peak > 0.0 && peak <= 1.0));
|
||||
float peak = mRatio * mPeak;
|
||||
EnableApply(mClip->GetValue() || (peak > 0.0f && peak <= 1.0f));
|
||||
}
|
||||
|
||||
void EffectAmplify::OnAmpText(wxCommandEvent & WXUNUSED(evt))
|
||||
@ -274,11 +280,11 @@ void EffectAmplify::OnAmpText(wxCommandEvent & WXUNUSED(evt))
|
||||
return;
|
||||
}
|
||||
|
||||
mRatio = pow(10.0, TrapDouble(mAmp, MIN_Amp, MAX_Amp) / 20.0);
|
||||
mRatio = powf(10.0f, TrapFloat(mAmp * SCL_Amp, MIN_Amp * SCL_Amp, MAX_Amp * SCL_Amp) / (20.0f * SCL_Amp));
|
||||
|
||||
mAmpS->SetValue((int) (mAmp * SCL_Amp + 0.5));
|
||||
mAmpS->SetValue((int) (20.0f * log10f(mRatio) * SCL_Amp + 0.5f));
|
||||
|
||||
mNewPeak = 20.0 * log10(mRatio * mPeak);
|
||||
mNewPeak = 20.0f * log10f(mRatio * mPeak);
|
||||
mNewPeakT->GetValidator()->TransferToWindow();
|
||||
|
||||
CheckClip();
|
||||
@ -292,35 +298,35 @@ void EffectAmplify::OnPeakText(wxCommandEvent & WXUNUSED(evt))
|
||||
return;
|
||||
}
|
||||
|
||||
double r = pow(10.0, mNewPeak / 20.0) / mPeak;
|
||||
float r = powf(10.0f, mNewPeak / 20.0f) / mPeak;
|
||||
|
||||
mAmp = TrapDouble(20.0 * log10(r), MIN_Amp, MAX_Amp);
|
||||
mRatio = pow(10.0, mAmp / 20.0);
|
||||
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);
|
||||
|
||||
mAmpT->GetValidator()->TransferToWindow();
|
||||
|
||||
mAmpS->SetValue((int) (mAmp * SCL_Amp + 0.5));
|
||||
mAmpS->SetValue((int) (mAmp * SCL_Amp + 0.5f));
|
||||
|
||||
CheckClip();
|
||||
}
|
||||
|
||||
void EffectAmplify::OnAmpSlider(wxCommandEvent & evt)
|
||||
{
|
||||
double dB = evt.GetInt() / SCL_Amp;
|
||||
mRatio = pow(10.0, TrapDouble(dB, MIN_Amp, MAX_Amp) / 20.0);
|
||||
float dB = evt.GetInt() / SCL_Amp;
|
||||
mRatio = powf(10.0f, TrapFloat(dB, MIN_Amp, MAX_Amp) / 20.0f);
|
||||
|
||||
double dB2 = (evt.GetInt() - 1) / SCL_Amp;
|
||||
double ratio2 = pow(10.0, TrapDouble(dB2, MIN_Amp, MAX_Amp) / 20.0);
|
||||
float dB2 = (evt.GetInt() - 1) / SCL_Amp;
|
||||
float ratio2 = powf(10.0f, TrapFloat(dB2, MIN_Amp, MAX_Amp) / 20.0f);
|
||||
|
||||
if (!mClip->GetValue() && mRatio * mPeak > 1.0 && ratio2 * mPeak < 1.0)
|
||||
if (!mClip->GetValue() && mRatio * mPeak > 1.0f && ratio2 * mPeak < 1.0f)
|
||||
{
|
||||
mRatio = 1.0 / mPeak;
|
||||
}
|
||||
|
||||
mAmp = 20.0 * log10(mRatio);
|
||||
mAmp = 20.0f * log10f(mRatio);
|
||||
mAmpT->GetValidator()->TransferToWindow();
|
||||
|
||||
mNewPeak = 20.0 * log10(mRatio * mPeak);
|
||||
mNewPeak = 20.0f * log10f(mRatio * mPeak);
|
||||
mNewPeakT->GetValidator()->TransferToWindow();
|
||||
|
||||
CheckClip();
|
||||
|
@ -72,7 +72,7 @@ private:
|
||||
float mRatio;
|
||||
float mAmp;
|
||||
float mNewPeak;
|
||||
bool mNoClip;
|
||||
bool mCanClip;
|
||||
|
||||
wxSlider *mAmpS;
|
||||
wxTextCtrl *mAmpT;
|
||||
|
Loading…
x
Reference in New Issue
Block a user