Use a common method for the duration format in generators

This commit is contained in:
Leland Lucius 2015-05-27 08:42:15 -05:00
parent c372519e52
commit 0d62be7776
10 changed files with 69 additions and 87 deletions

3
include/audacity/EffectInterface.h Normal file → Executable file
View File

@ -94,7 +94,8 @@ public:
virtual ~EffectHostInterface() {}; virtual ~EffectHostInterface() {};
virtual double GetDefaultDuration() = 0; virtual double GetDefaultDuration() = 0;
virtual double GetDuration(bool *isSelection = NULL) = 0; virtual double GetDuration() = 0;
virtual wxString GetDurationFormat() = 0;
virtual void SetDuration(double seconds) = 0; virtual void SetDuration(double seconds) = 0;
virtual bool Apply() = 0; virtual bool Apply() = 0;

11
src/effects/DtmfGen.cpp Normal file → Executable file
View File

@ -303,16 +303,13 @@ void EffectDtmf::PopulateOrExchange(ShuttleGui & S)
vldAmp.SetRange(MIN_Amplitude, MAX_Amplitude); vldAmp.SetRange(MIN_Amplitude, MAX_Amplitude);
S.Id(ID_Amplitude).AddTextBox(_("Amplitude (0-1):"), wxT(""), 10)->SetValidator(vldAmp); S.Id(ID_Amplitude).AddTextBox(_("Amplitude (0-1):"), wxT(""), 10)->SetValidator(vldAmp);
bool isSelection;
double duration = GetDuration(&isSelection);
S.AddPrompt(_("Duration:")); S.AddPrompt(_("Duration:"));
mDtmfDurationT = new mDtmfDurationT = new
NumericTextCtrl(NumericConverter::TIME, NumericTextCtrl(NumericConverter::TIME,
S.GetParent(), S.GetParent(),
ID_Duration, ID_Duration,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"), GetDurationFormat(),
duration, GetDuration(),
mProjectRate, mProjectRate,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,
@ -370,8 +367,8 @@ bool EffectDtmf::TransferDataFromWindow()
return false; return false;
} }
// dtmfDutyCycle = (double) mDtmfDutyCycleS->GetValue() / SCL_DutyCycle; dtmfDutyCycle = (double) mDtmfDutyCycleS->GetValue() / SCL_DutyCycle;
// SetDuration(mDtmfDurationT->GetValue()); SetDuration(mDtmfDurationT->GetValue());
// recalculate to make sure all values are up-to-date. This is especially // recalculate to make sure all values are up-to-date. This is especially
// important if the user did not change any values in the dialog // important if the user did not change any values in the dialog

View File

@ -705,49 +705,21 @@ double Effect::GetDefaultDuration()
return 30.0; return 30.0;
} }
double Effect::GetDuration(bool *isSelection) double Effect::GetDuration()
{ {
if (mT1 > mT0)
{
// there is a selection: let's fit in there...
// MJS: note that this is just for the TTC and is independent of the track rate
// but we do need to make sure we have the right number of samples at the project rate
double quantMT0 = QUANTIZED_TIME(mT0, mProjectRate);
double quantMT1 = QUANTIZED_TIME(mT1, mProjectRate);
mDuration = quantMT1 - quantMT0;
if (isSelection)
{
*isSelection = true;
}
return mDuration;
}
if (isSelection)
{
*isSelection = false;
}
GetPrivateConfig(GetCurrentSettingsGroup(), wxT("LastUsedDuration"), mDuration, 0.0);
if (mDuration > 0.0)
{
return mDuration;
}
if (mDuration < 0.0) if (mDuration < 0.0)
{ {
mDuration = 0.0; mDuration = 0.0;
} }
if (GetType() == EffectTypeGenerate)
{
mDuration = GetDefaultDuration();
}
return mDuration; return mDuration;
} }
wxString Effect::GetDurationFormat()
{
return mDurationFormat;
}
void Effect::SetDuration(double seconds) void Effect::SetDuration(double seconds)
{ {
if (seconds < 0.0) if (seconds < 0.0)
@ -755,14 +727,17 @@ void Effect::SetDuration(double seconds)
seconds = 0.0; seconds = 0.0;
} }
if (mDuration != seconds) if (GetType() == EffectTypeGenerate)
{ {
SetPrivateConfig(GetCurrentSettingsGroup(), wxT("LastUsedDuration"), seconds); SetPrivateConfig(GetCurrentSettingsGroup(), wxT("LastUsedDuration"), seconds);
} }
mDuration = seconds; mDuration = seconds;
mT1 = mT0 + mDuration;
mSetDuration = mDuration; mSetDuration = mDuration;
mIsSelection = false;
return; return;
} }
@ -1170,9 +1145,33 @@ bool Effect::DoEffect(wxWindow *parent,
mProjectRate = projectRate; mProjectRate = projectRate;
mParent = parent; mParent = parent;
mTracks = list; mTracks = list;
bool isSelection = false;
mDuration = 0.0;
if (GetType() == EffectTypeGenerate)
{
GetPrivateConfig(GetCurrentSettingsGroup(), wxT("LastUsedDuration"), mDuration, GetDefaultDuration());
}
mT0 = selectedRegion->t0(); mT0 = selectedRegion->t0();
mT1 = selectedRegion->t1(); mT1 = selectedRegion->t1();
mDuration = GetDuration(); if (mT1 > mT0)
{
// there is a selection: let's fit in there...
// MJS: note that this is just for the TTC and is independent of the track rate
// but we do need to make sure we have the right number of samples at the project rate
double quantMT0 = QUANTIZED_TIME(mT0, mProjectRate);
double quantMT1 = QUANTIZED_TIME(mT1, mProjectRate);
mDuration = quantMT1 - quantMT0;
mT1 = mT0 + mDuration;
isSelection = true;
}
mDurationFormat = isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds");
#ifdef EXPERIMENTAL_SPECTRAL_EDITING #ifdef EXPERIMENTAL_SPECTRAL_EDITING
mF0 = selectedRegion->f0(); mF0 = selectedRegion->f0();
mF1 = selectedRegion->f1(); mF1 = selectedRegion->f1();

5
src/effects/Effect.h Normal file → Executable file
View File

@ -144,7 +144,8 @@ class AUDACITY_DLL_API Effect : public wxEvtHandler,
// EffectHostInterface implementation // EffectHostInterface implementation
virtual double GetDefaultDuration(); virtual double GetDefaultDuration();
virtual double GetDuration(bool *isSelection = NULL); virtual double GetDuration();
virtual wxString GetDurationFormat();
virtual void SetDuration(double duration); virtual void SetDuration(double duration);
virtual bool Apply(); virtual bool Apply();
@ -400,7 +401,9 @@ private:
bool mIsLinearEffect; bool mIsLinearEffect;
bool mPreviewWithNotSelected; bool mPreviewWithNotSelected;
bool mIsSelection;
double mDuration; double mDuration;
wxString mDurationFormat;
// mSetDuration should ONLY be set when SetDuration() is called. // mSetDuration should ONLY be set when SetDuration() is called.
double mSetDuration; double mSetDuration;

19
src/effects/Noise.cpp Normal file → Executable file
View File

@ -224,20 +224,17 @@ void EffectNoise::PopulateOrExchange(ShuttleGui & S)
vldAmp.SetRange(MIN_Amp, MAX_Amp); vldAmp.SetRange(MIN_Amp, MAX_Amp);
S.AddTextBox(_("Amplitude (0-1):"), wxT(""), 12)->SetValidator(vldAmp); S.AddTextBox(_("Amplitude (0-1):"), wxT(""), 12)->SetValidator(vldAmp);
bool isSelection;
double duration = GetDuration(&isSelection);
S.AddPrompt(_("Duration:")); S.AddPrompt(_("Duration:"));
mNoiseDurationT = new mNoiseDurationT = new
NumericTextCtrl(NumericConverter::TIME, NumericTextCtrl(NumericConverter::TIME,
S.GetParent(), S.GetParent(),
wxID_ANY, wxID_ANY,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"), GetDurationFormat(),
duration, GetDuration(),
mProjectRate, mProjectRate,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,
true); true);
mNoiseDurationT->SetName(_("Duration")); mNoiseDurationT->SetName(_("Duration"));
mNoiseDurationT->EnableMenu(); mNoiseDurationT->EnableMenu();
S.AddWindow(mNoiseDurationT, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL); S.AddWindow(mNoiseDurationT, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL | wxALL);

7
src/effects/Silence.cpp Normal file → Executable file
View File

@ -55,16 +55,13 @@ void EffectSilence::PopulateOrExchange(ShuttleGui & S)
{ {
S.StartHorizontalLay(); S.StartHorizontalLay();
{ {
bool isSelection;
double duration = GetDuration(&isSelection);
S.AddPrompt(_("Duration:")); S.AddPrompt(_("Duration:"));
mDurationT = new mDurationT = new
NumericTextCtrl(NumericConverter::TIME, NumericTextCtrl(NumericConverter::TIME,
S.GetParent(), S.GetParent(),
wxID_ANY, wxID_ANY,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"), GetDurationFormat(),
duration, GetDuration(),
mProjectRate, mProjectRate,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,

19
src/effects/ToneGen.cpp Normal file → Executable file
View File

@ -394,20 +394,17 @@ void EffectToneGen::PopulateOrExchange(ShuttleGui & S)
t->SetValidator(vldAmplitude); t->SetValidator(vldAmplitude);
} }
bool isSelection;
double duration = GetDuration(&isSelection);
S.AddPrompt(_("Duration:")); S.AddPrompt(_("Duration:"));
mToneDurationT = new mToneDurationT = new
NumericTextCtrl(NumericConverter::TIME, NumericTextCtrl(NumericConverter::TIME,
S.GetParent(), S.GetParent(),
wxID_ANY, wxID_ANY,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"), GetDurationFormat(),
duration, GetDuration(),
mProjectRate, mProjectRate,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,
true); true);
mToneDurationT->SetName(_("Duration")); mToneDurationT->SetName(_("Duration"));
mToneDurationT->EnableMenu(); mToneDurationT->EnableMenu();
S.AddWindow(mToneDurationT, wxALIGN_LEFT | wxALL); S.AddWindow(mToneDurationT, wxALIGN_LEFT | wxALL);

View File

@ -3515,17 +3515,14 @@ void VSTEffect::BuildPlain()
// Add the duration control for generators // Add the duration control for generators
if (GetType() == EffectTypeGenerate) if (GetType() == EffectTypeGenerate)
{ {
bool isSelection;
double duration = mHost->GetDuration(&isSelection);
wxControl *item = new wxStaticText(scroller, 0, _("Duration:")); wxControl *item = new wxStaticText(scroller, 0, _("Duration:"));
gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5); gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
mDuration = new mDuration = new
NumericTextCtrl(NumericConverter::TIME, NumericTextCtrl(NumericConverter::TIME,
scroller, scroller,
ID_Duration, ID_Duration,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"), mHost->GetDurationFormat(),
duration, mHost->GetDuration(),
mSampleRate, mSampleRate,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,

7
src/effects/ladspa/LadspaEffect.cpp Normal file → Executable file
View File

@ -1146,17 +1146,14 @@ bool LadspaEffect::PopulateUI(wxWindow *parent)
// Add the duration control for generators // Add the duration control for generators
if (GetType() == EffectTypeGenerate) if (GetType() == EffectTypeGenerate)
{ {
bool isSelection;
double duration = mHost->GetDuration(&isSelection);
item = new wxStaticText(w, 0, _("Duration:")); item = new wxStaticText(w, 0, _("Duration:"));
gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5); gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
mDuration = new mDuration = new
NumericTextCtrl(NumericConverter::TIME, NumericTextCtrl(NumericConverter::TIME,
w, w,
ID_Duration, ID_Duration,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"), mHost->GetDurationFormat(),
duration, mHost->GetDuration(),
mSampleRate, mSampleRate,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,

7
src/effects/lv2/LV2Effect.cpp Normal file → Executable file
View File

@ -1579,17 +1579,14 @@ bool LV2Effect::BuildPlain()
wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL);
bool isSelection;
double duration = mHost->GetDuration(&isSelection);
wxWindow *item = new wxStaticText(w, 0, _("&Duration:")); wxWindow *item = new wxStaticText(w, 0, _("&Duration:"));
sizer->Add(item, 0, wxALIGN_CENTER | wxALL, 5); sizer->Add(item, 0, wxALIGN_CENTER | wxALL, 5);
mDuration = new mDuration = new
NumericTextCtrl(NumericConverter::TIME, NumericTextCtrl(NumericConverter::TIME,
w, w,
ID_Duration, ID_Duration,
isSelection ? _("hh:mm:ss + samples") : _("hh:mm:ss + milliseconds"), mHost->GetDurationFormat(),
duration, mHost->GetDuration(),
mSampleRate, mSampleRate,
wxDefaultPosition, wxDefaultPosition,
wxDefaultSize, wxDefaultSize,