32#include "../widgets/valnum.h"
33#include "../widgets/NumericTextCtrl.h"
47 {
XO(
"Square, no alias") },
48 {
XC(
"Triangle",
"waveform") }
53 static const auto postSet =
61 > chirpParameters{ postSet };
64 > toneParameters{ postSet };
66 return chirpParameters;
68 return toneParameters;
92 Parameters().Reset(*
this);
94 wxASSERT(nWaveforms == WXSIZEOF(kWaveStrings));
95 wxASSERT(nInterpolations == WXSIZEOF(kInterStrings));
100 SetLinearEffectFlag(
false);
102 SetLinearEffectFlag(
true);
121 ?
XO(
"Generates an ascending or descending tone of one of four types")
122 :
XO(
"Generates a constant frequency tone of one of four types");
154 const float *
const *,
float *
const *outBlock,
size_t blockLen)
156 float *buffer = outBlock[0];
157 double throwaway = 0;
162 double frequencyQuantum;
163 double BlendedFrequency;
164 double BlendedAmplitude;
165 double BlendedLogFrequency = 0.0;
170 double amplitudeQuantum =
173 amplitudeQuantum * doubleSample;
176 double pre2PI = 2.0 *
M_PI;
177 double pre4divPI = 4.0 /
M_PI;
187 BlendedLogFrequency =
mLogFrequency[0] + frequencyQuantum * doubleSample;
188 BlendedFrequency = pow(10.0, BlendedLogFrequency);
194 BlendedFrequency =
mFrequency0 + frequencyQuantum * doubleSample;
198 for (
decltype(blockLen) i = 0; i < blockLen; i++)
215 }
else if(f > 0.75) {
223 b = (1.0 + cos((pre2PI * BlendedFrequency) /
mSampleRate)) / pre4divPI;
225 for (k = 3; (k < 200) && (k * BlendedFrequency <
mSampleRate / 2.0); k += 2)
228 a = 1.0 + cos((pre2PI * k * BlendedFrequency) /
mSampleRate);
234 buffer[i] = (float) (BlendedAmplitude * f);
237 BlendedAmplitude += amplitudeQuantum;
240 BlendedLogFrequency += frequencyQuantum;
241 BlendedFrequency = pow(10.0, BlendedLogFrequency);
245 BlendedFrequency += frequencyQuantum;
278 S.StartMultiColumn(2, wxCENTER);
281 .AddChoice(
XXO(
"&Waveform:"),
286 S.AddFixedText( {} );
287 S.StartHorizontalLay(wxEXPAND);
289 S.StartHorizontalLay(wxLEFT, 50);
291 S.AddTitle(
XO(
"Start"));
293 S.EndHorizontalLay();
295 S.StartHorizontalLay(wxLEFT, 50);
297 S.AddTitle(
XO(
"End"));
299 S.EndHorizontalLay();
301 S.EndHorizontalLay();
303 S.AddPrompt(
XXO(
"&Frequency (Hz):"));
304 S.StartHorizontalLay(wxEXPAND);
306 S.StartHorizontalLay(wxLEFT, 50);
308 t =
S.Name(
XO(
"Frequency Hertz Start"))
309 .
Validator<FloatingPointValidator<double>>(
311 NumValidatorStyle::NO_TRAILING_ZEROES,
314 .AddTextBox( {}, L
"", 12);
316 S.EndHorizontalLay();
318 S.StartHorizontalLay(wxLEFT, 50);
320 t =
S.Name(
XO(
"Frequency Hertz End"))
321 .
Validator<FloatingPointValidator<double>>(
323 NumValidatorStyle::NO_TRAILING_ZEROES,
326 .AddTextBox( {}, L
"", 12);
328 S.EndHorizontalLay();
330 S.EndHorizontalLay();
332 S.AddPrompt(
XXO(
"&Amplitude (0-1):"));
333 S.StartHorizontalLay(wxEXPAND);
335 S.StartHorizontalLay(wxLEFT, 50);
337 t =
S.Name(
XO(
"Amplitude Start"))
338 .
Validator<FloatingPointValidator<double>>(
339 6, &
mAmplitude0, NumValidatorStyle::NO_TRAILING_ZEROES,
341 .AddTextBox( {}, L
"", 12);
343 S.EndHorizontalLay();
345 S.StartHorizontalLay(wxLEFT, 50);
347 t =
S.Name(
XO(
"Amplitude End"))
348 .
Validator<FloatingPointValidator<double>>(
349 6, &
mAmplitude1, NumValidatorStyle::NO_TRAILING_ZEROES,
351 .AddTextBox( {}, L
"", 12);
353 S.EndHorizontalLay();
355 S.EndHorizontalLay();
358 .AddChoice(
XXO(
"I&nterpolation:"),
363 t =
S.Validator<FloatingPointValidator<double>>(
364 6, &
mFrequency0, NumValidatorStyle::NO_TRAILING_ZEROES,
367 .AddTextBox(
XXO(
"&Frequency (Hz):"), L
"", 12);
369 t =
S.Validator<FloatingPointValidator<double>>(
370 6, &
mAmplitude0, NumValidatorStyle::NO_TRAILING_ZEROES,
372 .AddTextBox(
XXO(
"&Amplitude (0-1):"), L
"", 12);
375 S.AddPrompt(
XXO(
"&Duration:"));
380 extra.GetDurationFormat(),
385 S.Name(
XO(
"Duration"))
386 .Position(wxALIGN_LEFT | wxALL)
XXO("&Cut/Copy/Paste Toolbar")
an object holding per-project preferred sample rate
TranslatableStrings Msgids(const EnumValueSymbol strings[], size_t nStrings)
Convenience function often useful when adding choice controls.
static Settings & settings()
Generates EffectParameterMethods overrides from variadic template arguments.
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
static const ComponentInterfaceSymbol Symbol
static bool EnableApply(wxWindow *parent, bool enable=true)
Enable or disable the Apply button of the dialog that contains parent.
Performs effect computation.
Hold values to send to effect output meters.
Interface for manipulations of an Effect's settings.
virtual const EffectSettings & Get()=0
An Effect that can generate a sine, square or sawtooth wave. An extended mode of EffectToneGen suppor...
TranslatableString GetDescription() const override
std::unique_ptr< EffectEditor > PopulateOrExchange(ShuttleGui &S, EffectInstance &instance, EffectSettingsAccess &access, const EffectOutputs *pOutputs) override
Add controls to effect panel; always succeeds.
static constexpr EffectParameter Amplitude
ComponentInterfaceSymbol GetSymbol() const override
static constexpr EffectParameter Frequency
void OnControlUpdate(wxCommandEvent &evt)
bool ProcessInitialize(EffectSettings &settings, double sampleRate, ChannelNames chanMap) override
wxWeakRef< wxWindow > mUIParent
static const EnumValueSymbol kWaveStrings[nWaveforms]
static constexpr EffectParameter EndFreq
static const EnumValueSymbol kInterStrings[nInterpolations]
const EffectParameterMethods & Parameters() const override
ManualPageID ManualPage() const override
Name of a page in the Audacity alpha manual, default is empty.
static constexpr EnumParameter Interp
NumericTextCtrl * mToneDurationT
bool TransferDataToWindow(const EffectSettings &settings) override
static constexpr EnumParameter Waveform
EffectType GetType() const override
Type determines how it behaves.
unsigned GetAudioOutCount() const override
How many output buffers to allocate at once.
EffectToneGen(bool isChirp)
static constexpr EffectParameter StartFreq
size_t ProcessBlock(EffectSettings &settings, const float *const *inBlock, float *const *outBlock, size_t blockLen) override
Called for destructive effect computation.
bool TransferDataFromWindow(EffectSettings &settings) override
static constexpr EffectParameter StartAmp
static constexpr EffectParameter EndAmp
static const ComponentInterfaceSymbol Symbol
void SetValue(double newValue)
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Holds a msgid for the translation catalog; may also bind format arguments.
A Validator is an object which checks whether a wxVariant satisfies a certain criterion....
BuiltinEffectsModule::Registration< EffectTone > reg2
BuiltinEffectsModule::Registration< EffectChirp > reg
const Type min
Minimum value.
const Type max
Maximum value.
Externalized state of a plug-in.
EffectSettingsExtra extra
Options & AutoPos(bool enable)