Audacity  3.2.0
Wahwah.cpp
Go to the documentation of this file.
1 /**********************************************************************
2 
3  Audacity: A Digital Audio Editor
4 
5  Wahwah.cpp
6 
7  Effect programming:
8  Nasca Octavian Paul (Paul Nasca)
9 
10  UI programming:
11  Dominic Mazzoni (with the help of wxDesigner)
12  Vaughan Johnson (Preview)
13 
14 *******************************************************************//*******************************************************************/
20 
21 
22 #include "Wahwah.h"
23 #include "LoadEffects.h"
24 
25 #include <math.h>
26 
27 #include <wx/intl.h>
28 #include <wx/slider.h>
29 
30 #include "../Shuttle.h"
31 #include "../ShuttleGui.h"
32 #include "../widgets/valnum.h"
33 
34 enum
35 {
36  ID_Freq = 10000,
42 };
43 
44 // Define keys, defaults, minimums, and maximums for the effect parameters
45 //
46 // Name Type Key Def Min Max Scale
47 Param( Freq, double, wxT("Freq"), 1.5, 0.1, 4.0, 10 );
48 Param( Phase, double, wxT("Phase"), 0.0, 0.0, 360.0, 1 );
49 Param( Depth, int, wxT("Depth"), 70, 0, 100, 1 ); // scaled to 0-1 before processing
50 Param( Res, double, wxT("Resonance"), 2.5, 0.1, 10.0, 10 );
51 Param( FreqOfs, int, wxT("Offset"), 30, 0, 100, 1 ); // scaled to 0-1 before processing
52 Param( OutGain, double, wxT("Gain"), -6.0, -30.0, 30.0, 1 );
53 
54 // How many samples are processed before recomputing the lfo value again
55 #define lfoskipsamples 30
56 
57 //
58 // EffectWahwah
59 //
60 
62 { XO("Wahwah") };
63 
65 
66 BEGIN_EVENT_TABLE(EffectWahwah, wxEvtHandler)
80 
82 {
83  mFreq = DEF_Freq;
84  mPhase = DEF_Phase;
85  mDepth = DEF_Depth;
86  mRes = DEF_Res;
87  mFreqOfs = DEF_FreqOfs;
88  mOutGain = DEF_OutGain;
89 
90  SetLinearEffectFlag(true);
91 }
92 
94 {
95 }
96 
97 // ComponentInterface implementation
98 
100 {
101  return Symbol;
102 }
103 
105 {
106  return XO("Rapid tone quality variations, like that guitar sound so popular in the 1970's");
107 }
108 
110 {
111  return L"Wahwah";
112 }
113 
114 // EffectDefinitionInterface implementation
115 
117 {
118  return EffectTypeProcess;
119 }
120 
122 {
123  return true;
124 }
125 
126 // EffectProcessor implementation
127 
129 {
130  return 1;
131 }
132 
134 {
135  return 1;
136 }
137 
139 {
141 
142  if (chanMap[0] == ChannelNameFrontRight)
143  {
144  mMaster.phase += M_PI;
145  }
146 
147  return true;
148 }
149 
150 size_t EffectWahwah::ProcessBlock(float **inBlock, float **outBlock, size_t blockLen)
151 {
152  return InstanceProcess(mMaster, inBlock, outBlock, blockLen);
153 }
154 
156 {
157  SetBlockSize(512);
158 
159  mSlaves.clear();
160 
161  return true;
162 }
163 
164 bool EffectWahwah::RealtimeAddProcessor(unsigned WXUNUSED(numChannels), float sampleRate)
165 {
166  EffectWahwahState slave;
167 
168  InstanceInit(slave, sampleRate);
169 
170  mSlaves.push_back(slave);
171 
172  return true;
173 }
174 
176 {
177  mSlaves.clear();
178 
179  return true;
180 }
181 
183  float **inbuf,
184  float **outbuf,
185  size_t numSamples)
186 {
187 
188  return InstanceProcess(mSlaves[group], inbuf, outbuf, numSamples);
189 }
190 
192  S.SHUTTLE_PARAM( mFreq, Freq );
193  S.SHUTTLE_PARAM( mPhase, Phase );
194  S.SHUTTLE_PARAM( mDepth, Depth );
195  S.SHUTTLE_PARAM( mRes, Res );
196  S.SHUTTLE_PARAM( mFreqOfs, FreqOfs );
197  S.SHUTTLE_PARAM( mOutGain, OutGain );
198  return true;
199 }
200 
202 {
203  parms.Write(KEY_Freq, mFreq);
204  parms.Write(KEY_Phase, mPhase);
205  parms.Write(KEY_Depth, mDepth);
206  parms.Write(KEY_Res, mRes);
207  parms.Write(KEY_FreqOfs, mFreqOfs);
208  parms.Write(KEY_OutGain, mOutGain);
209 
210  return true;
211 }
212 
214 {
215  ReadAndVerifyDouble(Freq);
216  ReadAndVerifyDouble(Phase);
217  ReadAndVerifyInt(Depth);
218  ReadAndVerifyDouble(Res);
219  ReadAndVerifyInt(FreqOfs);
220  ReadAndVerifyDouble(OutGain);
221 
222  mFreq = Freq;
223  mPhase = Phase;
224  mDepth = Depth;
225  mRes = Res;
226  mFreqOfs = FreqOfs;
227  mOutGain = OutGain;
228 
229  return true;
230 }
231 
232 // Effect implementation
233 
235 {
236  S.SetBorder(5);
237  S.AddSpace(0, 5);
238 
239  S.StartMultiColumn(3, wxEXPAND);
240  {
241  S.SetStretchyCol(2);
242 
243  mFreqT = S.Id(ID_Freq)
244  .Validator<FloatingPointValidator<double>>(
245  5, &mFreq, NumValidatorStyle::ONE_TRAILING_ZERO, MIN_Freq, MAX_Freq)
246  .AddTextBox(XXO("LFO Freq&uency (Hz):"), wxT(""), 12);
247 
248  mFreqS = S.Id(ID_Freq)
249  .Name(XO("LFO frequency in hertz"))
250  .Style(wxSL_HORIZONTAL)
251  .MinSize( { 100, -1 } )
252  .AddSlider( {}, DEF_Freq * SCL_Freq, MAX_Freq * SCL_Freq, MIN_Freq * SCL_Freq);
253 
254  mPhaseT = S.Id(ID_Phase)
255  .Validator<FloatingPointValidator<double>>(
256  1, &mPhase, NumValidatorStyle::DEFAULT, MIN_Phase, MAX_Phase)
257  .AddTextBox(XXO("LFO Sta&rt Phase (deg.):"), wxT(""), 12);
258 
259  mPhaseS = S.Id(ID_Phase)
260  .Name(XO("LFO start phase in degrees"))
261  .Style(wxSL_HORIZONTAL)
262  .MinSize( { 100, -1 } )
263  .AddSlider( {}, DEF_Phase * SCL_Phase, MAX_Phase * SCL_Phase, MIN_Phase * SCL_Phase);
264  mPhaseS->SetLineSize(10);
265 
266  mDepthT = S.Id(ID_Depth)
267  .Validator<IntegerValidator<int>>(
268  &mDepth, NumValidatorStyle::DEFAULT, MIN_Depth, MAX_Depth)
269  .AddTextBox(XXO("Dept&h (%):"), wxT(""), 12);
270 
271  mDepthS = S.Id(ID_Depth)
272  .Name(XO("Depth in percent"))
273  .Style(wxSL_HORIZONTAL)
274  .MinSize( { 100, -1 } )
275  .AddSlider( {}, DEF_Depth * SCL_Depth, MAX_Depth * SCL_Depth, MIN_Depth * SCL_Depth);
276 
277  mResT = S.Id(ID_Res)
278  .Validator<FloatingPointValidator<double>>(
279  1, &mRes, NumValidatorStyle::DEFAULT, MIN_Res, MAX_Res)
280  .AddTextBox(XXO("Reso&nance:"), wxT(""), 12);
281 
282  mResS = S.Id(ID_Res)
283  .Name(XO("Resonance"))
284  .Style(wxSL_HORIZONTAL)
285  .MinSize( { 100, -1 } )
286  .AddSlider( {}, DEF_Res * SCL_Res, MAX_Res * SCL_Res, MIN_Res * SCL_Res);
287 
288  mFreqOfsT = S.Id(ID_FreqOfs)
289  .Validator<IntegerValidator<int>>(
290  &mFreqOfs, NumValidatorStyle::DEFAULT, MIN_FreqOfs, MAX_FreqOfs)
291  .AddTextBox(XXO("Wah Frequency Offse&t (%):"), wxT(""), 12);
292 
293  mFreqOfsS = S.Id(ID_FreqOfs)
294  .Name(XO("Wah frequency offset in percent"))
295  .Style(wxSL_HORIZONTAL)
296  .MinSize( { 100, -1 } )
297  .AddSlider( {}, DEF_FreqOfs * SCL_FreqOfs, MAX_FreqOfs * SCL_FreqOfs, MIN_FreqOfs * SCL_FreqOfs);
298 
299  mOutGainT = S.Id(ID_OutGain)
300  .Validator<FloatingPointValidator<double>>(
301  1, &mOutGain, NumValidatorStyle::DEFAULT, MIN_OutGain, MAX_OutGain)
302  .AddTextBox(XXO("&Output gain (dB):"), wxT(""), 12);
303 
304  mOutGainS = S.Id(ID_OutGain)
305  .Name(XO("Output gain (dB)"))
306  .Style(wxSL_HORIZONTAL)
307  .MinSize( { 100, -1 } )
308  .AddSlider( {}, DEF_OutGain * SCL_OutGain, MAX_OutGain * SCL_OutGain, MIN_OutGain * SCL_OutGain);
309  }
310  S.EndMultiColumn();
311 }
312 
314 {
315  if (!mUIParent->TransferDataToWindow())
316  {
317  return false;
318  }
319 
320  mFreqS->SetValue((int) (mFreq * SCL_Freq));
321  mPhaseS->SetValue((int) (mPhase * SCL_Phase));
322  mDepthS->SetValue((int) (mDepth * SCL_Depth));
323  mResS->SetValue((int) (mRes * SCL_Res));
324  mFreqOfsS->SetValue((int) (mFreqOfs * SCL_FreqOfs));
325  mOutGainS->SetValue((int) (mOutGain * SCL_OutGain));
326 
327  return true;
328 }
329 
331 {
332  if (!mUIParent->Validate() || !mUIParent->TransferDataFromWindow())
333  {
334  return false;
335  }
336 
337  return true;
338 }
339 
340 // EffectWahwah implementation
341 
342 void EffectWahwah::InstanceInit(EffectWahwahState & data, float sampleRate)
343 {
344  data.samplerate = sampleRate;
345  data.lfoskip = mFreq * 2 * M_PI / sampleRate;
346  data.skipcount = 0;
347  data.xn1 = 0;
348  data.xn2 = 0;
349  data.yn1 = 0;
350  data.yn2 = 0;
351  data.b0 = 0;
352  data.b1 = 0;
353  data.b2 = 0;
354  data.a0 = 0;
355  data.a1 = 0;
356  data.a2 = 0;
357 
358  data.depth = mDepth / 100.0;
359  data.freqofs = mFreqOfs / 100.0;
360  data.phase = mPhase * M_PI / 180.0;
361  data.outgain = DB_TO_LINEAR(mOutGain);
362 }
363 
364 size_t EffectWahwah::InstanceProcess(EffectWahwahState & data, float **inBlock, float **outBlock, size_t blockLen)
365 {
366  float *ibuf = inBlock[0];
367  float *obuf = outBlock[0];
368  double frequency, omega, sn, cs, alpha;
369  double in, out;
370 
371  data.lfoskip = mFreq * 2 * M_PI / data.samplerate;
372  data.depth = mDepth / 100.0;
373  data.freqofs = mFreqOfs / 100.0;
374 
375  data.phase = mPhase * M_PI / 180.0;
376  data.outgain = DB_TO_LINEAR(mOutGain);
377 
378  for (decltype(blockLen) i = 0; i < blockLen; i++)
379  {
380  in = (double) ibuf[i];
381 
382  if ((data.skipcount++) % lfoskipsamples == 0)
383  {
384  frequency = (1 + cos(data.skipcount * data.lfoskip + data.phase)) / 2;
385  frequency = frequency * data.depth * (1 - data.freqofs) + data.freqofs;
386  frequency = exp((frequency - 1) * 6);
387  omega = M_PI * frequency;
388  sn = sin(omega);
389  cs = cos(omega);
390  alpha = sn / (2 * mRes);
391  data.b0 = (1 - cs) / 2;
392  data.b1 = 1 - cs;
393  data.b2 = (1 - cs) / 2;
394  data.a0 = 1 + alpha;
395  data.a1 = -2 * cs;
396  data.a2 = 1 - alpha;
397  };
398  out = (data.b0 * in + data.b1 * data.xn1 + data.b2 * data.xn2 - data.a1 * data.yn1 - data.a2 * data.yn2) / data.a0;
399  data.xn2 = data.xn1;
400  data.xn1 = in;
401  data.yn2 = data.yn1;
402  data.yn1 = out;
403  out *= data.outgain;
404 
405  obuf[i] = (float) out;
406  }
407 
408  return blockLen;
409 }
410 
411 void EffectWahwah::OnFreqSlider(wxCommandEvent & evt)
412 {
413  mFreq = (double) evt.GetInt() / SCL_Freq;
414  mFreqT->GetValidator()->TransferToWindow();
415  EnableApply(mUIParent->Validate());
416 }
417 
418 void EffectWahwah::OnPhaseSlider(wxCommandEvent & evt)
419 {
420  int val = ((evt.GetInt() + 5) / 10) * 10; // round to nearest multiple of 10
421  val = val > MAX_Phase * SCL_Phase ? MAX_Phase * SCL_Phase : val;
422  mPhaseS->SetValue(val);
423  mPhase = (double) val / SCL_Phase;
424  mPhaseT->GetValidator()->TransferToWindow();
425  EnableApply(mUIParent->Validate());
426 }
427 
428 void EffectWahwah::OnDepthSlider(wxCommandEvent & evt)
429 {
430  mDepth = evt.GetInt() / SCL_Depth;
431  mDepthT->GetValidator()->TransferToWindow();
432  EnableApply(mUIParent->Validate());
433 }
434 
435 void EffectWahwah::OnResonanceSlider(wxCommandEvent & evt)
436 {
437  mRes = (double) evt.GetInt() / SCL_Res;
438  mResT->GetValidator()->TransferToWindow();
439  EnableApply(mUIParent->Validate());
440 }
441 
442 void EffectWahwah::OnFreqOffSlider(wxCommandEvent & evt)
443 {
444  mFreqOfs = evt.GetInt() / SCL_FreqOfs;
445  mFreqOfsT->GetValidator()->TransferToWindow();
446  EnableApply(mUIParent->Validate());
447 }
448 
449 void EffectWahwah::OnGainSlider(wxCommandEvent & evt)
450 {
451  mOutGain = evt.GetInt() / SCL_OutGain;
452  mOutGainT->GetValidator()->TransferToWindow();
453  EnableApply(mUIParent->Validate());
454 }
455 
456 void EffectWahwah::OnFreqText(wxCommandEvent & WXUNUSED(evt))
457 {
458  if (!EnableApply(mUIParent->TransferDataFromWindow()))
459  {
460  return;
461  }
462 
463  mFreqS->SetValue((int) (mFreq * SCL_Freq));
464 }
465 
466 void EffectWahwah::OnPhaseText(wxCommandEvent & WXUNUSED(evt))
467 {
468  if (!EnableApply(mUIParent->TransferDataFromWindow()))
469  {
470  return;
471  }
472 
473  mPhaseS->SetValue((int) (mPhase * SCL_Phase));
474 }
475 
476 void EffectWahwah::OnDepthText(wxCommandEvent & WXUNUSED(evt))
477 {
478  if (!EnableApply(mUIParent->TransferDataFromWindow()))
479  {
480  return;
481  }
482 
483  mDepthS->SetValue((int) (mDepth * SCL_Depth));
484 }
485 
486 void EffectWahwah::OnResonanceText(wxCommandEvent & WXUNUSED(evt))
487 {
488  if (!EnableApply(mUIParent->TransferDataFromWindow()))
489  {
490  return;
491  }
492 
493  mResS->SetValue((int) (mRes * SCL_Res));
494 }
495 
496 void EffectWahwah::OnFreqOffText(wxCommandEvent & WXUNUSED(evt))
497 {
498  if (!EnableApply(mUIParent->TransferDataFromWindow()))
499  {
500  return;
501  }
502 
503  mFreqOfsS->SetValue((int) (mFreqOfs * SCL_FreqOfs));
504 }
505 
506 void EffectWahwah::OnGainText(wxCommandEvent & WXUNUSED(evt))
507 {
508  if (!EnableApply(mUIParent->TransferDataFromWindow()))
509  {
510  return;
511  }
512 
513  mOutGainS->SetValue((int) (mOutGain * SCL_OutGain));
514 }
EffectWahwah::mSlaves
std::vector< EffectWahwahState > mSlaves
Definition: Wahwah.h:103
EffectWahwah
An Effect that adds a 'spectral glide'.
Definition: Wahwah.h:40
EffectWahwah::OnFreqSlider
void OnFreqSlider(wxCommandEvent &evt)
Definition: Wahwah.cpp:411
EffectWahwah::mFreqOfsT
wxTextCtrl * mFreqOfsT
Definition: Wahwah.h:128
TranslatableString
Holds a msgid for the translation catalog; may also bind format arguments.
Definition: TranslatableString.h:32
CommandParameters
CommandParameters, derived from wxFileConfig, is essentially doing the same things as the Shuttle cla...
Definition: EffectAutomationParameters.h:67
ID_Phase
@ ID_Phase
Definition: Wahwah.cpp:37
EffectTypeProcess
@ EffectTypeProcess
Definition: EffectInterface.h:56
DB_TO_LINEAR
const double MIN_Threshold_Linear DB_TO_LINEAR(MIN_Threshold_dB)
EffectWahwah::mOutGain
double mOutGain
Definition: Wahwah.h:122
Effect::EnableApply
bool EnableApply(bool enable=true)
Definition: Effect.cpp:1694
S
#define S(N)
Definition: ToChars.cpp:64
EffectWahwah::RealtimeProcess
size_t RealtimeProcess(int group, float **inbuf, float **outbuf, size_t numSamples) override
Definition: Wahwah.cpp:182
EffectWahwahState::samplerate
float samplerate
Definition: Wahwah.h:28
EffectWahwah::RealtimeFinalize
bool RealtimeFinalize() override
Definition: Wahwah.cpp:175
EffectWahwah::OnFreqOffSlider
void OnFreqOffSlider(wxCommandEvent &evt)
Definition: Wahwah.cpp:442
ChannelNameFrontRight
@ ChannelNameFrontRight
Definition: EffectInterface.h:166
EffectWahwah::OnResonanceText
void OnResonanceText(wxCommandEvent &evt)
Definition: Wahwah.cpp:486
EffectWahwah::OnFreqOffText
void OnFreqOffText(wxCommandEvent &evt)
Definition: Wahwah.cpp:496
EffectWahwah::RealtimeInitialize
bool RealtimeInitialize() override
Definition: Wahwah.cpp:155
EffectWahwahState::depth
double depth
Definition: Wahwah.h:29
EffectWahwah::mResT
wxTextCtrl * mResT
Definition: Wahwah.h:127
EffectWahwahState::b1
double b1
Definition: Wahwah.h:36
EffectWahwah::ProcessBlock
size_t ProcessBlock(float **inBlock, float **outBlock, size_t blockLen) override
Called for destructive, non-realtime effect computation.
Definition: Wahwah.cpp:150
EffectWahwah::PopulateOrExchange
void PopulateOrExchange(ShuttleGui &S) override
Definition: Wahwah.cpp:234
XO
#define XO(s)
Definition: Internat.h:31
END_EVENT_TABLE
END_EVENT_TABLE()
EffectWahwah::mDepth
int mDepth
Definition: Wahwah.h:119
ShuttleParams
Shuttle that deals with parameters. This is a base class with lots of virtual functions that do nothi...
Definition: Shuttle.h:61
EffectWahwahState::a2
double a2
Definition: Wahwah.h:36
ID_FreqOfs
@ ID_FreqOfs
Definition: Wahwah.cpp:40
EffectWahwahState::freqofs
double freqofs
Definition: Wahwah.h:30
EffectWahwah::mDepthS
wxSlider * mDepthS
Definition: Wahwah.h:133
EffectWahwah::mPhaseS
wxSlider * mPhaseS
Definition: Wahwah.h:132
Wahwah.h
ComponentInterfaceSymbol
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
Definition: ComponentInterfaceSymbol.h:27
EffectWahwah::RealtimeAddProcessor
bool RealtimeAddProcessor(unsigned numChannels, float sampleRate) override
Definition: Wahwah.cpp:164
EffectWahwah::SupportsRealtime
bool SupportsRealtime() override
Whether the effect supports realtime previewing (while audio is playing).
Definition: Wahwah.cpp:121
EffectWahwahState::b2
double b2
Definition: Wahwah.h:36
EffectWahwahState::skipcount
unsigned long skipcount
Definition: Wahwah.h:34
ReadAndVerifyInt
#define ReadAndVerifyInt(name)
Definition: Effect.h:591
EffectWahwah::mPhaseT
wxTextCtrl * mPhaseT
Definition: Wahwah.h:125
XXO
#define XXO(s)
Definition: Internat.h:44
EffectWahwahState::outgain
double outgain
Definition: Wahwah.h:32
EffectWahwah::mOutGainS
wxSlider * mOutGainS
Definition: Wahwah.h:136
EffectWahwah::SetAutomationParameters
bool SetAutomationParameters(CommandParameters &parms) override
Change settings to those stored in parms.
Definition: Wahwah.cpp:213
Param
Param(Freq, double, wxT("Freq"), 1.5, 0.1, 4.0, 10)
EffectWahwah::ManualPage
ManualPageID ManualPage() override
Name of a page in the Audacity alpha manual, default is empty.
Definition: Wahwah.cpp:109
EffectWahwahState::phase
double phase
Definition: Wahwah.h:31
EffectWahwah::mFreqT
wxTextCtrl * mFreqT
Definition: Wahwah.h:124
EffectWahwah::GetSymbol
ComponentInterfaceSymbol GetSymbol() override
Definition: Wahwah.cpp:99
EffectWahwah::DefineParams
bool DefineParams(ShuttleParams &S) override
Definition: Wahwah.cpp:191
EffectWahwah::mRes
double mRes
Definition: Wahwah.h:120
EffectWahwah::OnDepthSlider
void OnDepthSlider(wxCommandEvent &evt)
Definition: Wahwah.cpp:428
EffectWahwah::OnGainText
void OnGainText(wxCommandEvent &evt)
Definition: Wahwah.cpp:506
EffectWahwah::GetAudioOutCount
unsigned GetAudioOutCount() override
Definition: Wahwah.cpp:133
EffectWahwah::mFreqOfsS
wxSlider * mFreqOfsS
Definition: Wahwah.h:135
EffectWahwah::GetAudioInCount
unsigned GetAudioInCount() override
Definition: Wahwah.cpp:128
EffectWahwahState::xn2
double xn2
Definition: Wahwah.h:35
EffectWahwahState::yn1
double yn1
Definition: Wahwah.h:35
ChannelNames
enum ChannelName * ChannelNames
EffectWahwah::ProcessInitialize
bool ProcessInitialize(sampleCount totalLen, ChannelNames chanMap=NULL) override
Called for destructive, non-realtime effect computation.
Definition: Wahwah.cpp:138
EffectWahwahState::lfoskip
double lfoskip
Definition: Wahwah.h:33
EffectWahwah::OnGainSlider
void OnGainSlider(wxCommandEvent &evt)
Definition: Wahwah.cpp:449
ReadAndVerifyDouble
#define ReadAndVerifyDouble(name)
Definition: Effect.h:592
EffectWahwah::mDepthT
wxTextCtrl * mDepthT
Definition: Wahwah.h:126
EffectWahwah::mFreqOfs
int mFreqOfs
Definition: Wahwah.h:121
EffectWahwah::TransferDataToWindow
bool TransferDataToWindow() override
Definition: Wahwah.cpp:313
LoadEffects.h
ID_Depth
@ ID_Depth
Definition: Wahwah.cpp:38
EffectWahwah::mFreqS
wxSlider * mFreqS
Definition: Wahwah.h:131
EffectWahwah::mMaster
EffectWahwahState mMaster
Definition: Wahwah.h:102
Effect::mSampleRate
double mSampleRate
Definition: Effect.h:418
lfoskipsamples
#define lfoskipsamples
Definition: Wahwah.cpp:55
BuiltinEffectsModule::Registration
Definition: LoadEffects.h:40
Effect::mUIParent
wxWindow * mUIParent
Definition: Effect.h:438
TaggedIdentifier< ManualPageIDTag >
EffectWahwah::Symbol
static const ComponentInterfaceSymbol Symbol
Definition: Wahwah.h:42
ID_OutGain
@ ID_OutGain
Definition: Wahwah.cpp:41
sampleCount
Positions or offsets within audio files need a wide type.
Definition: SampleCount.h:18
EffectWahwah::OnResonanceSlider
void OnResonanceSlider(wxCommandEvent &evt)
Definition: Wahwah.cpp:435
EffectWahwah::GetAutomationParameters
bool GetAutomationParameters(CommandParameters &parms) override
Save current settings into parms.
Definition: Wahwah.cpp:201
EffectWahwahState::a1
double a1
Definition: Wahwah.h:36
EffectWahwah::OnFreqText
void OnFreqText(wxCommandEvent &evt)
Definition: Wahwah.cpp:456
EffectWahwahState::xn1
double xn1
Definition: Wahwah.h:35
EffectWahwah::OnPhaseText
void OnPhaseText(wxCommandEvent &evt)
Definition: Wahwah.cpp:466
EffectWahwah::mResS
wxSlider * mResS
Definition: Wahwah.h:134
EffectWahwah::InstanceInit
void InstanceInit(EffectWahwahState &data, float sampleRate)
Definition: Wahwah.cpp:342
EffectWahwahState::a0
double a0
Definition: Wahwah.h:36
M_PI
#define M_PI
Definition: Distortion.cpp:29
ID_Res
@ ID_Res
Definition: Wahwah.cpp:39
EffectWahwah::TransferDataFromWindow
bool TransferDataFromWindow() override
Definition: Wahwah.cpp:330
EffectWahwahState::yn2
double yn2
Definition: Wahwah.h:35
EffectWahwah::GetDescription
TranslatableString GetDescription() override
Definition: Wahwah.cpp:104
EffectWahwah::mOutGainT
wxTextCtrl * mOutGainT
Definition: Wahwah.h:129
ID_Freq
@ ID_Freq
Definition: Wahwah.cpp:36
EffectType
EffectType
Definition: EffectInterface.h:52
EffectWahwah::mFreq
double mFreq
Definition: Wahwah.h:117
EffectWahwah::GetType
EffectType GetType() override
Type determines how it behaves.
Definition: Wahwah.cpp:116
Effect::SetBlockSize
size_t SetBlockSize(size_t maxBlockSize) override
Definition: Effect.cpp:294
EffectWahwahState::b0
double b0
Definition: Wahwah.h:36
EffectWahwah::mPhase
double mPhase
Definition: Wahwah.h:118
EffectWahwahState
Definition: Wahwah.h:26
ShuttleGui
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Definition: ShuttleGui.h:631
anonymous_namespace{Wahwah.cpp}::reg
BuiltinEffectsModule::Registration< EffectWahwah > reg
Definition: Wahwah.cpp:64
EffectWahwah::InstanceProcess
size_t InstanceProcess(EffectWahwahState &data, float **inBlock, float **outBlock, size_t blockLen)
Definition: Wahwah.cpp:364
EffectWahwah::~EffectWahwah
virtual ~EffectWahwah()
Definition: Wahwah.cpp:93
EffectWahwah::OnDepthText
void OnDepthText(wxCommandEvent &evt)
Definition: Wahwah.cpp:476
EffectWahwah::OnPhaseSlider
void OnPhaseSlider(wxCommandEvent &evt)
Definition: Wahwah.cpp:418