mirror of
https://github.com/cookiengineer/audacity
synced 2025-05-04 09:39:42 +02:00
Separated peak and LUFS normalization presets.
This commit is contained in:
parent
58929e4c6c
commit
0ed9b9d34b
@ -33,7 +33,8 @@
|
||||
// Define keys, defaults, minimums, and maximums for the effect parameters
|
||||
//
|
||||
// Name Type Key Def Min Max Scale
|
||||
Param( Level, double, wxT("Level"), -23.0, -145.0, 0.0, 1 );
|
||||
Param( PeakLevel, double, wxT("PeakLevel"), -1.0, -145.0, 0.0, 1 );
|
||||
Param( LUFSLevel, double, wxT("LUFSLevel"), -23.0, -145.0, 0.0, 1 );
|
||||
Param( RemoveDC, bool, wxT("RemoveDcOffset"), true, false, true, 1 );
|
||||
Param( ApplyGain, bool, wxT("ApplyGain"), true, false, true, 1 );
|
||||
Param( StereoInd, bool, wxT("StereoIndependent"), false, false, true, 1 );
|
||||
@ -46,7 +47,8 @@ END_EVENT_TABLE()
|
||||
|
||||
EffectNormalize::EffectNormalize()
|
||||
{
|
||||
mLevel = DEF_Level;
|
||||
mPeakLevel = DEF_PeakLevel;
|
||||
mLUFSLevel = DEF_LUFSLevel;
|
||||
mDC = DEF_RemoveDC;
|
||||
mGain = DEF_ApplyGain;
|
||||
mStereoInd = DEF_StereoInd;
|
||||
@ -85,7 +87,8 @@ EffectType EffectNormalize::GetType()
|
||||
|
||||
// EffectClientInterface implementation
|
||||
bool EffectNormalize::DefineParams( ShuttleParams & S ){
|
||||
S.SHUTTLE_PARAM( mLevel, Level );
|
||||
S.SHUTTLE_PARAM( mPeakLevel, PeakLevel );
|
||||
S.SHUTTLE_PARAM( mLUFSLevel, LUFSLevel );
|
||||
S.SHUTTLE_PARAM( mGain, ApplyGain );
|
||||
S.SHUTTLE_PARAM( mDC, RemoveDC );
|
||||
S.SHUTTLE_PARAM( mStereoInd, StereoInd );
|
||||
@ -95,7 +98,8 @@ bool EffectNormalize::DefineParams( ShuttleParams & S ){
|
||||
|
||||
bool EffectNormalize::GetAutomationParameters(CommandParameters & parms)
|
||||
{
|
||||
parms.Write(KEY_Level, mLevel);
|
||||
parms.Write(KEY_PeakLevel, mPeakLevel);
|
||||
parms.Write(KEY_LUFSLevel, mLUFSLevel);
|
||||
parms.Write(KEY_ApplyGain, mGain);
|
||||
parms.Write(KEY_RemoveDC, mDC);
|
||||
parms.Write(KEY_StereoInd, mStereoInd);
|
||||
@ -106,13 +110,15 @@ bool EffectNormalize::GetAutomationParameters(CommandParameters & parms)
|
||||
|
||||
bool EffectNormalize::SetAutomationParameters(CommandParameters & parms)
|
||||
{
|
||||
ReadAndVerifyDouble(Level);
|
||||
ReadAndVerifyDouble(PeakLevel);
|
||||
ReadAndVerifyDouble(LUFSLevel);
|
||||
ReadAndVerifyBool(ApplyGain);
|
||||
ReadAndVerifyBool(RemoveDC);
|
||||
ReadAndVerifyBool(StereoInd);
|
||||
ReadAndVerifyBool(UseLoudness);
|
||||
|
||||
mLevel = Level;
|
||||
mPeakLevel = PeakLevel;
|
||||
mLUFSLevel = LUFSLevel;
|
||||
mGain = ApplyGain;
|
||||
mDC = RemoveDC;
|
||||
mStereoInd = StereoInd;
|
||||
@ -147,12 +153,13 @@ bool EffectNormalize::Startup()
|
||||
mDC = (boolProxy == 1);
|
||||
boolProxy = gPrefs->Read(base + wxT("Normalize"), 1);
|
||||
mGain = (boolProxy == 1);
|
||||
gPrefs->Read(base + wxT("Level"), &mLevel, -1.0);
|
||||
if(mLevel > 0.0) // this should never happen
|
||||
mLevel = -mLevel;
|
||||
gPrefs->Read(base + wxT("Level"), &mPeakLevel, -1.0);
|
||||
if(mPeakLevel > 0.0) // this should never happen
|
||||
mPeakLevel = -mPeakLevel;
|
||||
boolProxy = gPrefs->Read(base + wxT("StereoIndependent"), 0L);
|
||||
mStereoInd = (boolProxy == 1);
|
||||
mUseLoudness = false;
|
||||
mLUFSLevel = DEF_LUFSLevel;
|
||||
|
||||
SaveUserPreset(GetCurrentSettingsGroup());
|
||||
|
||||
@ -175,10 +182,10 @@ bool EffectNormalize::Process()
|
||||
if(mUseLoudness)
|
||||
// LU use 10*log10(...) instead of 20*log10(...)
|
||||
// so multiply level by 2 and use standard DB_TO_LINEAR macro.
|
||||
ratio = DB_TO_LINEAR(TrapDouble(mLevel*2, MIN_Level, MAX_Level));
|
||||
ratio = DB_TO_LINEAR(TrapDouble(mLUFSLevel*2, MIN_LUFSLevel, MAX_LUFSLevel));
|
||||
else
|
||||
// same value used for all tracks
|
||||
ratio = DB_TO_LINEAR(TrapDouble(mLevel, MIN_Level, MAX_Level));
|
||||
ratio = DB_TO_LINEAR(TrapDouble(mPeakLevel, MIN_PeakLevel, MAX_PeakLevel));
|
||||
}
|
||||
else
|
||||
ratio = 1.0;
|
||||
@ -319,8 +326,11 @@ void EffectNormalize::PopulateOrExchange(ShuttleGui & S)
|
||||
mGain ? wxT("true") : wxT("false"));
|
||||
mGainCheckBox->SetValidator(wxGenericValidator(&mGain));
|
||||
|
||||
FloatingPointValidator<double> vldLevel(2, &mLevel, NumValidatorStyle::ONE_TRAILING_ZERO);
|
||||
vldLevel.SetRange(MIN_Level, MAX_Level);
|
||||
FloatingPointValidator<double> vldLevel(2, mUseLoudness ? &mLUFSLevel : &mPeakLevel,
|
||||
NumValidatorStyle::ONE_TRAILING_ZERO);
|
||||
vldLevel.SetRange(mUseLoudness ? MIN_LUFSLevel : MIN_PeakLevel,
|
||||
mUseLoudness ? MAX_LUFSLevel : MAX_PeakLevel);
|
||||
|
||||
mLevelTextCtrl = S.AddTextBox( {}, wxT(""), 10);
|
||||
mLevelTextCtrl->SetName(_("Maximum amplitude dB"));
|
||||
mLevelTextCtrl->SetValidator(vldLevel);
|
||||
@ -333,7 +343,7 @@ void EffectNormalize::PopulateOrExchange(ShuttleGui & S)
|
||||
|
||||
mUseLoudnessCheckBox = S.AddCheckBox(_("Use integrative loudness instead of maximum amplitude"),
|
||||
mUseLoudness ? wxT("true") : wxT("false"));
|
||||
mUseLoudnessCheckBox->SetValidator(wxGenericValidator(&mUseLoudness));
|
||||
mUseLoudnessCheckBox->SetValidator(wxGenericValidator(&mGUIUseLoudness));
|
||||
|
||||
mStereoIndCheckBox = S.AddCheckBox(_("Normalize stereo channels independently"),
|
||||
mStereoInd ? wxT("true") : wxT("false"));
|
||||
@ -678,10 +688,26 @@ void EffectNormalize::UpdateUI()
|
||||
}
|
||||
mWarning->SetLabel(wxT(""));
|
||||
|
||||
if (mUseLoudness)
|
||||
mLeveldB->SetLabel(_("LUFS"));
|
||||
else
|
||||
mLeveldB->SetLabel(_("dB"));
|
||||
if (mUseLoudness != mGUIUseLoudness)
|
||||
{
|
||||
mUseLoudness = mGUIUseLoudness;
|
||||
if (mUseLoudness)
|
||||
{
|
||||
FloatingPointValidator<double> vldLevel(2, &mLUFSLevel, NumValidatorStyle::ONE_TRAILING_ZERO);
|
||||
vldLevel.SetRange(MIN_LUFSLevel, MAX_LUFSLevel);
|
||||
mLevelTextCtrl->SetValidator(vldLevel);
|
||||
mLevelTextCtrl->SetValue(wxString::FromDouble(mLUFSLevel));
|
||||
mLeveldB->SetLabel(_("LUFS"));
|
||||
}
|
||||
else
|
||||
{
|
||||
FloatingPointValidator<double> vldLevel(2, &mPeakLevel, NumValidatorStyle::ONE_TRAILING_ZERO);
|
||||
vldLevel.SetRange(MIN_PeakLevel, MAX_PeakLevel);
|
||||
mLevelTextCtrl->SetValidator(vldLevel);
|
||||
mLevelTextCtrl->SetValue(wxString::FromDouble(mPeakLevel));
|
||||
mLeveldB->SetLabel(_("dB"));
|
||||
}
|
||||
}
|
||||
|
||||
// Disallow level stuff if not normalizing
|
||||
mLevelTextCtrl->Enable(mGain);
|
||||
|
@ -83,11 +83,13 @@ private:
|
||||
void UpdateUI();
|
||||
|
||||
private:
|
||||
double mLevel;
|
||||
double mPeakLevel;
|
||||
double mLUFSLevel;
|
||||
bool mGain;
|
||||
bool mDC;
|
||||
bool mStereoInd;
|
||||
bool mUseLoudness;
|
||||
bool mGUIUseLoudness;
|
||||
|
||||
double mCurT0;
|
||||
double mCurT1;
|
||||
|
Loading…
x
Reference in New Issue
Block a user