Audacity  2.2.0
Equalization.h
Go to the documentation of this file.
1 /**********************************************************************
2 
3  Audacity: A Digital Audio Editor
4 
5  Equalization.h
6 
7  Mitch Golden
8  Vaughan Johnson (Preview)
9 
10 ***********************************************************************/
11 
12 #ifndef __AUDACITY_EFFECT_EQUALIZATION__
13 #define __AUDACITY_EFFECT_EQUALIZATION__
14 #define NUMBER_OF_BANDS 31
15 #define NUM_PTS 180
16 #define PANELBORDER 1 // only increase from '1' for testing purposes - MJS
17 
18 #include "../Experimental.h"
19 
20 #include <wx/button.h>
21 #include <wx/panel.h>
22 #include <wx/dialog.h>
23 #include <wx/dynarray.h>
24 #include <wx/intl.h>
25 #include <wx/listctrl.h>
26 #include <wx/stattext.h>
27 #include <wx/slider.h>
28 #include <wx/sizer.h>
29 #include <wx/string.h>
30 #include <wx/bitmap.h>
31 #include <wx/choice.h>
32 #include <wx/radiobut.h>
33 #include <wx/checkbox.h>
34 
35 #if wxUSE_ACCESSIBILITY
36 #include <wx/access.h>
37 #endif
38 
39 #include "Effect.h"
40 #include "../xml/XMLTagHandler.h"
41 #include "../widgets/Grid.h"
42 #include "../widgets/Ruler.h"
43 #include "../RealFFTf.h"
44 #include "../SampleFormat.h"
45 
46 #define EQUALIZATION_PLUGIN_SYMBOL XO("Equalization")
47 
48 
49 class Envelope;
50 class EnvelopeEditor;
51 class EqualizationPanel;
52 
53 //
54 // One point in a curve
55 //
56 class EQPoint
57 {
58 public:
59  EQPoint( const double f, const double d ) { Freq = f; dB = d; }
60  double Freq;
61  double dB;
62 };
63 WX_DECLARE_OBJARRAY( EQPoint, EQPointArray);
64 
65 //
66 // One curve in a list
67 //
68 // LLL: This "really" isn't needed as the EQPointArray could be
69 // attached as wxClientData to the wxChoice entries. I
70 // didn't realize this until after the fact and am too
71 // lazy to change it. (But, hollar if you want me to.)
72 //
73 class EQCurve
74 {
75 public:
76  EQCurve( const wxString & name = wxEmptyString ) { Name = name; }
77  EQCurve( const wxChar * name ) { Name = name; }
78  wxString Name;
79  EQPointArray points;
80 };
81 WX_DECLARE_OBJARRAY( EQCurve, EQCurveArray );
82 
83 #ifdef EXPERIMENTAL_EQ_SSE_THREADED
84 class EffectEqualization48x;
85 #endif
86 
87 class EffectEqualization final : public Effect,
88  public XMLTagHandler
89 {
90 public:
92  virtual ~EffectEqualization();
93 
94  // IdentInterface implementation
95 
96  wxString GetSymbol() override;
97  wxString GetDescription() override;
98  wxString ManualPage() override;
99 
100  // EffectIdentInterface implementation
101 
102  EffectType GetType() override;
103 
104  // EffectClientInterface implementation
105 
106  bool GetAutomationParameters(EffectAutomationParameters & parms) override;
107  bool SetAutomationParameters(EffectAutomationParameters & parms) override;
108  bool LoadFactoryDefaults() override;
109 
110  // EffectUIClientInterface implementation
111 
112  bool ValidateUI() override;
113 
114  // Effect implementation
115 
116  bool Startup() override;
117  bool Init() override;
118  bool Process() override;
119 
120  bool PopulateUI(wxWindow *parent) override;
121  bool CloseUI() override;
122  void PopulateOrExchange(ShuttleGui & S) override;
123  bool TransferDataToWindow() override;
124  bool TransferDataFromWindow() override;
125 
126 private:
127  // EffectEqualization implementation
128 
129  // Number of samples in an FFT window
130  static const size_t windowSize = 16384u; //MJS - work out the optimum for this at run time? Have a dialog box for it?
131 
132  // Low frequency of the FFT. 20Hz is the
133  // low range of human hearing
134  enum {loFreqI=20};
135 
136  bool ProcessOne(int count, WaveTrack * t,
137  sampleCount start, sampleCount len);
138  bool CalcFilter();
139  void Filter(size_t len, float *buffer);
140 
141  void Flatten();
142  void ForceRecalc();
143  void EnvelopeUpdated();
144  void EnvelopeUpdated(Envelope *env, bool lin);
145  bool IsLinear();
146 
147  void LoadCurves(const wxString &fileName = wxEmptyString, bool append = false);
148  void SaveCurves(const wxString &fileName = wxEmptyString);
149  // Merge NEW curves only or update all factory presets.
150  void UpdateDefaultCurves( bool updateAll = false);
151  void Select(int sel);
152  void setCurve(int currentCurve);
153  void setCurve(const wxString &curveName);
154  void setCurve(void);
155  bool GetDefaultFileName(wxFileName &fileName);
156 
157  // XMLTagHandler callback methods for loading and saving
158  bool HandleXMLTag(const wxChar *tag, const wxChar **attrs) override;
159  XMLTagHandler *HandleXMLChild(const wxChar *tag) override;
160  void WriteXML(XMLWriter &xmlFile) const;
161 
162  void UpdateCurves();
163  void UpdateDraw();
164 
165  void LayoutEQSliders();
166  void UpdateGraphic(void);
167  void EnvLogToLin(void);
168  void EnvLinToLog(void);
169  void ErrMin(void);
170  void GraphicEQ(Envelope *env);
171  void spline(double x[], double y[], size_t n, double y2[]);
172  double splint(double x[], double y[], size_t n, double y2[], double xr);
173 
174  void OnSize( wxSizeEvent & event );
175  void OnErase( wxEraseEvent & event );
176  void OnSlider( wxCommandEvent & event );
177  void OnInterp( wxCommandEvent & event );
178  void OnSliderM( wxCommandEvent & event );
179  void OnSliderDBMAX( wxCommandEvent & event );
180  void OnSliderDBMIN( wxCommandEvent & event );
181  void OnDrawMode( wxCommandEvent &event );
182  void OnGraphicMode( wxCommandEvent &event );
183  void OnCurve( wxCommandEvent & event );
184  void OnManage( wxCommandEvent & event );
185  void OnClear( wxCommandEvent & event );
186  void OnInvert( wxCommandEvent & event );
187  void OnGridOnOff( wxCommandEvent & event );
188  void OnLinFreq( wxCommandEvent & event );
189 #ifdef EXPERIMENTAL_EQ_SSE_THREADED
190  void OnProcessingRadio( wxCommandEvent & event );
191  void OnBench( wxCommandEvent & event );
192 #endif
193 
194 private:
197  size_t mM;
198  wxString mCurveName;
199  bool mLin;
200  float mdBMax;
201  float mdBMin;
202  bool mDrawMode;
203  int mInterp;
204  bool mDrawGrid;
205 
206  double mWhens[NUM_PTS];
208  size_t mBandsInUse;
211 
212  wxArrayString mInterpolations;
214  double mLoFreq;
215  double mHiFreq;
216  size_t mWindowSize;
217  bool mDirty;
220 
221  EQCurveArray mCurves;
222 
223  std::unique_ptr<Envelope> mLogEnvelope, mLinEnvelope;
225 
226 #ifdef EXPERIMENTAL_EQ_SSE_THREADED
227  bool mBench;
228  std::unique_ptr<EffectEqualization48x> mEffectEqualization48x;
229  friend class EffectEqualization48x;
230 #endif
231 
232  wxSizer *szrC;
233  wxSizer *szrG;
234  wxSizer *szrV;
235  wxSizer *szrH;
236  wxSizer *szrI;
237  wxSizer *szrL;
238  wxSizer *szr1;
239  wxSizer *szr2;
240  wxSizer *szr3;
241  wxSizer *szr4;
242  wxSizer *szr5;
243 
244  wxSizerItem *mLeftSpacer;
245 
247  wxPanel *mGraphicPanel;
248  wxRadioButton *mDraw;
249  wxRadioButton *mGraphic;
250  wxCheckBox *mLinFreq;
251  wxCheckBox *mGridOnOff;
252  wxChoice *mInterpChoice;
253  wxChoice *mCurve;
254  wxButton *mManage;
255  wxStaticText *mMText;
256  wxSlider *mMSlider;
257  wxSlider *mdBMinSlider;
258  wxSlider *mdBMaxSlider;
260 
261  static int wxCMPFUNC_CONV SortCurvesByName (EQCurve **first, EQCurve **second)
262  {
263  return (*first)->Name.CmpNoCase((*second)->Name);
264  }
265 
266  static int wxCMPFUNC_CONV SortCurvePoints (EQPoint **p0, EQPoint **p1)
267  {
268  return (*p0)->Freq > (*p1)->Freq;
269  }
270 
271 #ifdef EXPERIMENTAL_EQ_SSE_THREADED
272  wxRadioButton *mMathProcessingType[5]; // default, sse, sse threaded, AVX, AVX threaded (note AVX is not implemented yet
273  wxBoxSizer *szrM;
274 #endif
275 
276  DECLARE_EVENT_TABLE()
277 
278  friend class EqualizationPanel;
279  friend class EditCurvesDialog;
280 };
281 
282 class EqualizationPanel final : public wxPanelWrapper
283 {
284 public:
285  EqualizationPanel(EffectEqualization *effect, wxWindow *parent);
286  ~EqualizationPanel();
287 
288  // We don't need or want to accept focus.
289  bool AcceptsFocus() const { return false; }
290  // So that wxPanel is not included in Tab traversal - see wxWidgets bug 15581
291  bool AcceptsFocusFromKeyboard() const { return false; }
292 
293  void ForceRecalc();
294 
295 private:
296  void Recalc();
297 
298  void OnMouseEvent(wxMouseEvent & event);
299  void OnCaptureLost(wxMouseCaptureLostEvent & event);
300  void OnPaint(wxPaintEvent & event);
301  void OnSize (wxSizeEvent & event);
302 
303 public:
304 // int & mM;
305 // float & mdBMax;
306 // float & mdBMin;
307 // Envelope & mEnvelope;
308 
309 private:
310  wxWindow *mParent;
312  std::unique_ptr<EnvelopeEditor> mEditor;
313 
315 
316  std::unique_ptr<wxBitmap> mBitmap;
317  wxRect mEnvRect;
318  int mWidth;
319  int mHeight;
320 // size_t mWindowSize;
321 // float *mFilterFuncR;
322 // float *mFilterFuncI;
323  Floats mOutr, mOuti;
324 
325 // double mLoFreq;
326 // double mHiFreq;
327 
328  DECLARE_EVENT_TABLE()
329 };
330 
331 // EditCurvesDialog. Note that the 'modified' curve used to be called 'custom' but is now called 'unnamed'
332 // Some things that deal with 'unnamed' curves still use, for example, 'mCustomBackup' as variable names.
333 class EditCurvesDialog final : public wxDialogWrapper
334 {
335 public:
336  EditCurvesDialog(wxWindow * parent, EffectEqualization * effect, int position);
337  ~EditCurvesDialog();
338 
339 private:
340 
342  {
343  CurvesListID = 11000,
352  };
353 
354  wxListCtrl *mList; // List of curves.
355  EQCurveArray mEditCurves; // Copy of curves to muck about with
356  wxWindow *mParent; // the parent EQ Dialog
357  EffectEqualization *mEffect; // the parent EQ effect
358  int mPosition; // position of current curve in list
359  void Populate();
361  void PopulateList(int position);
362  void OnUp(wxCommandEvent &event);
363  void OnDown(wxCommandEvent &event);
364  long GetPreviousItem(long item);
365  void OnRename( wxCommandEvent &event );
366  void OnDelete( wxCommandEvent &event );
367  void OnImport( wxCommandEvent &event );
368  void OnExport( wxCommandEvent &event );
369  void OnLibrary( wxCommandEvent &event );
370  void OnDefaults( wxCommandEvent &event );
371  void OnOK(wxCommandEvent &event);
372 
373  void OnListSelectionChange( wxListEvent &event );
374  DECLARE_EVENT_TABLE()
375 };
376 
377 #if wxUSE_ACCESSIBILITY
378 
379 class SliderAx final : public wxWindowAccessible
380 {
381 public:
382  SliderAx(wxWindow * window, const wxString &fmt);
383 
384  virtual ~ SliderAx();
385 
386  // Retrieves the address of an IDispatch interface for the specified child.
387  // All objects must support this property.
388  wxAccStatus GetChild(int childId, wxAccessible** child) override;
389 
390  // Gets the number of children.
391  wxAccStatus GetChildCount(int* childCount) override;
392 
393  // Gets the default action for this object (0) or > 0 (the action for a child).
394  // Return wxACC_OK even if there is no action. actionName is the action, or the empty
395  // string if there is no action.
396  // The retrieved string describes the action that is performed on an object,
397  // not what the object does as a result. For example, a toolbar button that prints
398  // a document has a default action of "Press" rather than "Prints the current document."
399  wxAccStatus GetDefaultAction(int childId, wxString *actionName) override;
400 
401  // Returns the description for this object or a child.
402  wxAccStatus GetDescription(int childId, wxString *description) override;
403 
404  // Gets the window with the keyboard focus.
405  // If childId is 0 and child is NULL, no object in
406  // this subhierarchy has the focus.
407  // If this object has the focus, child should be 'this'.
408  wxAccStatus GetFocus(int *childId, wxAccessible **child) override;
409 
410  // Returns help text for this object or a child, similar to tooltip text.
411  wxAccStatus GetHelpText(int childId, wxString *helpText) override;
412 
413  // Returns the keyboard shortcut for this object or child.
414  // Return e.g. ALT+K
415  wxAccStatus GetKeyboardShortcut(int childId, wxString *shortcut) override;
416 
417  // Returns the rectangle for this object (id = 0) or a child element (id > 0).
418  // rect is in screen coordinates.
419  wxAccStatus GetLocation(wxRect& rect, int elementId) override;
420 
421  // Gets the name of the specified object.
422  wxAccStatus GetName(int childId, wxString *name) override;
423 
424  // Returns a role constant.
425  wxAccStatus GetRole(int childId, wxAccRole *role) override;
426 
427  // Gets a variant representing the selected children
428  // of this object.
429  // Acceptable values:
430  // - a null variant (IsNull() returns TRUE)
431  // - a list variant (GetType() == wxT("list"))
432  // - an integer representing the selected child element,
433  // or 0 if this object is selected (GetType() == wxT("long"))
434  // - a "void*" pointer to a wxAccessible child object
435  wxAccStatus GetSelections(wxVariant *selections) override;
436 
437  // Returns a state constant.
438  wxAccStatus GetState(int childId, long* state) override;
439 
440  // Returns a localized string representing the value for the object
441  // or child.
442  wxAccStatus GetValue(int childId, wxString* strValue) override;
443 
444 private:
445  wxWindow *mParent;
446  wxString mFmt;
447 };
448 
449 #endif // wxUSE_ACCESSIBILITY
450 
451 #endif
void UpdateGraphic(void)
Definition: Equalization.cpp:2185
void OnExport(const wxString &Format)
bool TransferDataFromWindow() override
Definition: Equalization.cpp:998
bool HandleXMLTag(const wxChar *tag, const wxChar **attrs) override
Definition: Equalization.cpp:1924
int mPosition
Definition: Equalization.h:358
void OnErase(wxEraseEvent &event)
Definition: Equalization.cpp:2592
bool mLin
Definition: Equalization.h:199
bool ValidateUI() override
Definition: Equalization.cpp:367
double dB
Definition: Equalization.h:61
friend class EqualizationPanel
Definition: Equalization.h:278
bool GetAutomationParameters(EffectAutomationParameters &parms) override
Definition: Equalization.cpp:315
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI...
Definition: ShuttleGui.h:369
virtual ~EffectEqualization()
Definition: Equalization.cpp:285
wxRadioButton * mGraphic
Definition: Equalization.h:249
void EnvelopeUpdated()
Definition: Equalization.cpp:1825
float mdBMax
Definition: Equalization.h:200
bool mDrawMode
Definition: Equalization.h:202
Definition: Equalization.h:344
An Effect that modifies volume in different frequency bands.
Definition: Equalization.h:87
void UpdateCurves()
Definition: Equalization.cpp:2115
wxRect mEnvRect
Definition: Equalization.h:317
void Select(int sel)
Definition: Equalization.cpp:1801
HFFT hFFT
Definition: Equalization.h:195
int mWidth
Definition: Equalization.h:318
EffectEqualization * mEffect
Definition: Equalization.h:357
bool mDrawGrid
Definition: Equalization.h:204
Floats mFFTBuffer
Definition: Equalization.h:196
Definition: Envelope.h:286
Definition: Equalization.h:347
static int wxCMPFUNC_CONV SortCurvePoints(EQPoint **p0, EQPoint **p1)
Definition: Equalization.h:266
wxChoice * mInterpChoice
Definition: Equalization.h:252
Definition: Equalization.h:349
bool IsLinear()
Definition: Equalization.cpp:1887
bool Process() override
Definition: Equalization.cpp:521
bool TransferDataToWindow() override
Definition: Equalization.cpp:949
bool mDisallowCustom
Definition: Equalization.h:213
wxWindow * mParent
Definition: Equalization.h:310
int mHeight
Definition: Equalization.h:319
Draggable curve used in TrackPanel for varying amplification.
Definition: Envelope.h:78
wxString GetName() override
Definition: Effect.cpp:173
wxChoice * mCurve
Definition: Equalization.h:253
wxSizer * szr4
Definition: Equalization.h:241
Base class for many of the effects in Audacity.
Definition: Effect.h:62
wxCheckBox * mGridOnOff
Definition: Equalization.h:251
void SaveCurves(const wxString &fileName=wxEmptyString)
Definition: Equalization.cpp:1576
void OnInvert(wxCommandEvent &event)
Definition: Equalization.cpp:2707
bool ProcessOne(int count, WaveTrack *t, sampleCount start, sampleCount len)
Definition: Equalization.cpp:1052
Definition: Equalization.h:333
void OnSlider(wxCommandEvent &event)
Definition: Equalization.cpp:2597
double mWhenSliders[NUMBER_OF_BANDS+1]
Definition: Equalization.h:207
Definition: wxPanelWrapper.h:19
void OnGraphicMode(wxCommandEvent &event)
Definition: Equalization.cpp:2652
RulerPanel class allows you to work with a Ruler like any other wxWindow.
Definition: Ruler.h:244
void OnGridOnOff(wxCommandEvent &event)
Definition: Equalization.cpp:2775
wxSizer * szrI
Definition: Equalization.h:236
void OnSliderDBMIN(wxCommandEvent &event)
Definition: Equalization.cpp:2665
EqualizationPanel is used with EqualizationDialog and controls a graph for EffectEqualization. We should look at amalgamating the various graphing code, such as provided by FreqWindow and FilterPanel.
Definition: Equalization.h:282
void WriteXML(XMLWriter &xmlFile) const
Definition: Equalization.cpp:2048
Envelope * mEnvelope
Definition: Equalization.h:224
Definition: Equalization.h:350
wxRadioButton * mDraw
Definition: Equalization.h:248
wxString ManualPage() override
Definition: Equalization.cpp:301
void OnClear(wxCommandEvent &event)
Definition: Equalization.cpp:2702
size_t mWindowSize
Definition: Equalization.h:216
wxSizer * szrG
Definition: Equalization.h:233
EQCurve(const wxChar *name)
Definition: Equalization.h:77
std::unique_ptr< FFTParam, FFTDeleter > HFFT
Definition: RealFFTf.h:24
void UpdateDefaultCurves(bool updateAll=false)
Definition: Equalization.cpp:1430
bool CalcFilter()
Definition: Equalization.cpp:1201
Definition: Equalization.h:346
wxString GetSymbol() override
Definition: Equalization.cpp:291
std::unique_ptr< wxBitmap > mBitmap
Definition: Equalization.h:316
void LayoutEQSliders()
Definition: Equalization.cpp:2090
RulerPanel * mFreqRuler
Definition: Equalization.h:210
void OnCurve(wxCommandEvent &event)
Definition: Equalization.cpp:2678
std::unique_ptr< EnvelopeEditor > mEditor
Definition: Equalization.h:312
void PopulateOrExchange(ShuttleGui &S) override
Definition: Equalization.cpp:586
void spline(double x[], double y[], size_t n, double y2[])
Definition: Equalization.cpp:2537
void ErrMin(void)
Definition: Equalization.cpp:2323
wxSizer * szr2
Definition: Equalization.h:239
int mInterp
Definition: Equalization.h:203
wxListCtrl * mList
Definition: Equalization.h:354
double Freq
Definition: Equalization.h:60
void OnLinFreq(wxCommandEvent &event)
Definition: Equalization.cpp:2781
double splint(double x[], double y[], size_t n, double y2[], double xr)
Definition: Equalization.cpp:2559
void OnDrawMode(wxCommandEvent &event)
Definition: Equalization.cpp:2645
wxSizer * szrL
Definition: Equalization.h:237
wxString Name
Definition: Equalization.h:78
A Track that contains audio waveform data.
Definition: WaveTrack.h:76
static const size_t windowSize
Definition: Equalization.h:130
void OnSize(wxSizeEvent &event)
Definition: Equalization.cpp:2580
wxSlider * mdBMaxSlider
Definition: Equalization.h:258
void Filter(size_t len, float *buffer)
Definition: Equalization.cpp:1314
std::unique_ptr< Envelope > mLogEnvelope
Definition: Equalization.h:223
wxSizer * szr3
Definition: Equalization.h:240
This class is an interface which should be implemented by classes which wish to be able to load and s...
Definition: XMLTagHandler.h:69
bool Init() override
Definition: Equalization.cpp:471
wxSizer * szr5
Definition: Equalization.h:242
void OnImport()
void OnSliderDBMAX(wxCommandEvent &event)
Definition: Equalization.cpp:2670
bool mDirty
Definition: Equalization.h:217
wxString GetDescription() override
Definition: Equalization.cpp:296
void EnvLogToLin(void)
Definition: Equalization.cpp:2257
double mWhens[NUM_PTS]
Definition: Equalization.h:206
EQCurve(const wxString &name=wxEmptyString)
Definition: Equalization.h:76
Definition: Equalization.h:348
wxSlider * mSliders[NUMBER_OF_BANDS]
Definition: Equalization.h:259
EQCurvesDialogControls
Definition: Equalization.h:341
Definition: Equalization.h:345
wxArrayString mInterpolations
Definition: Equalization.h:212
void GraphicEQ(Envelope *env)
Definition: Equalization.cpp:2399
EQCurve is used with EffectEqualization.
Definition: Equalization.h:73
wxStaticText * mMText
Definition: Equalization.h:255
bool mRecalcRequired
Definition: Equalization.h:314
EQCurveArray mCurves
Definition: Equalization.h:221
XMLTagHandler * HandleXMLChild(const wxChar *tag) override
Definition: Equalization.cpp:2025
size_t mM
Definition: Equalization.h:197
wxSizer * szrC
Definition: Equalization.h:232
static int wxCMPFUNC_CONV SortCurvesByName(EQCurve **first, EQCurve **second)
Definition: Equalization.h:261
double mHiFreq
Definition: Equalization.h:215
Floats mOutr
Definition: Equalization.h:323
void OnDelete()
void LoadCurves(const wxString &fileName=wxEmptyString, bool append=false)
Definition: Equalization.cpp:1342
void EnvLinToLog(void)
Definition: Equalization.cpp:2281
const wxChar * name
Definition: Distortion.cpp:93
wxSlider * mMSlider
Definition: Equalization.h:256
Floats mFilterFuncR
Definition: Equalization.h:196
friend class EditCurvesDialog
Definition: Equalization.h:279
EffectType GetType() override
Definition: Equalization.cpp:308
Definition: BatchProcessDialog.cpp:428
void OnManage(wxCommandEvent &event)
Definition: Equalization.cpp:2690
#define NUMBER_OF_BANDS
Definition: Equalization.h:14
size_t mBandsInUse
Definition: Equalization.h:208
EQPoint(const double f, const double d)
Definition: Equalization.h:59
void UpdateDraw()
Definition: Equalization.cpp:2132
std::unique_ptr< Envelope > mLinEnvelope
Definition: Equalization.h:223
double mLoFreq
Definition: Equalization.h:214
#define NUM_PTS
Definition: Equalization.h:15
Definition: Equalization.h:134
wxSizerItem * mLeftSpacer
Definition: Equalization.h:244
RulerPanel * mdBRuler
Definition: Equalization.h:209
void ForceRecalc()
Definition: Equalization.cpp:1814
EQPointArray points
Definition: Equalization.h:79
bool PopulateUI(wxWindow *parent) override
Definition: Equalization.cpp:565
double mEQVals[NUMBER_OF_BANDS+1]
Definition: Equalization.h:219
bool SetAutomationParameters(EffectAutomationParameters &parms) override
Definition: Equalization.cpp:325
wxPanel * mGraphicPanel
Definition: Equalization.h:247
wxButton * mManage
Definition: Equalization.h:254
bool AcceptsFocus() const
Definition: Equalization.h:289
wxCheckBox * mLinFreq
Definition: Equalization.h:250
int mSlidersOld[NUMBER_OF_BANDS]
Definition: Equalization.h:218
wxString mCurveName
Definition: Equalization.h:198
void OnInterp(wxCommandEvent &event)
Definition: Equalization.cpp:2635
bool CloseUI() override
Definition: Equalization.cpp:578
void Flatten()
Definition: Equalization.cpp:1895
Base class for XMLFileWriter and XMLStringWriter that provides the general functionality for creating...
Definition: XMLWriter.h:22
bool GetDefaultFileName(wxFileName &fileName)
Definition: Equalization.cpp:1549
EQCurveArray mEditCurves
Definition: Equalization.h:355
wxWindow * mParent
Definition: Equalization.h:356
EQPoint is used with EQCurve and hence EffectEqualization.
Definition: Equalization.h:56
Floats mFilterFuncI
Definition: Equalization.h:196
bool Startup() override
Definition: Equalization.cpp:412
EffectEqualization * mEffect
Definition: Equalization.h:311
EqualizationPanel * mPanel
Definition: Equalization.h:246
wxSizer * szrH
Definition: Equalization.h:235
wxSizer * szr1
Definition: Equalization.h:238
void OnSliderM(wxCommandEvent &event)
Definition: Equalization.cpp:2659
wxSizer * szrV
Definition: Equalization.h:234
void setCurve(void)
Definition: Equalization.cpp:1778
bool AcceptsFocusFromKeyboard() const
Definition: Equalization.h:291
wxSlider * mdBMinSlider
Definition: Equalization.h:257
bool LoadFactoryDefaults() override
Definition: Equalization.cpp:355
float mdBMin
Definition: Equalization.h:201
WX_DECLARE_OBJARRAY(EQPoint, EQPointArray)