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