Audacity 3.2.0
AutoDuck.h
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 AutoDuck.h
6
7 Markus Meyer
8
9**********************************************************************/
10
11#ifndef __AUDACITY_EFFECT_AUTODUCK__
12#define __AUDACITY_EFFECT_AUTODUCK__
13
14#include "StatefulEffect.h"
15#include "ShuttleAutomation.h"
16#include <float.h> // for DBL_MAX
17#include "wxPanelWrapper.h"
18
19class wxBitmap;
20class wxTextCtrl;
21class ShuttleGui;
22class WaveChannel;
23
24#define AUTO_DUCK_PANEL_NUM_CONTROL_POINTS 5
25
26class EffectAutoDuck final : public StatefulEffect
27{
28public:
29 static inline EffectAutoDuck *
32
34 virtual ~EffectAutoDuck();
35
36 // ComponentInterface implementation
37
38 ComponentInterfaceSymbol GetSymbol() const override;
39 TranslatableString GetDescription() const override;
40 ManualPageID ManualPage() const override;
41
42 // EffectDefinitionInterface implementation
43
44 EffectType GetType() const override;
45
46 // Effect implementation
47
48 bool Init() override;
49 bool Process(EffectInstance &instance, EffectSettings &settings) override;
50 std::unique_ptr<EffectEditor> PopulateOrExchange(
51 ShuttleGui & S, EffectInstance &instance,
52 EffectSettingsAccess &access, const EffectOutputs *pOutputs) override;
53 bool TransferDataToWindow(const EffectSettings &settings) override;
56
57private:
58 // EffectAutoDuck implementation
59
60 bool ApplyDuckFade(int trackNum, WaveChannel &track, double t0, double t1);
61
62 void OnValueChanged(wxCommandEvent & evt);
63
64private:
65 wxWeakRef<wxWindow> mUIParent{};
66
74
76
77 wxTextCtrl *mDuckAmountDbBox;
79 wxTextCtrl *mInnerFadeUpLenBox;
81 wxTextCtrl *mOuterFadeUpLenBox;
82 wxTextCtrl *mThresholdDbBox;
83 wxTextCtrl *mMaximumPauseBox;
84
85 class Panel;
87
88 const EffectParameterMethods& Parameters() const override;
89 DECLARE_EVENT_TABLE()
90
92 L"DuckAmountDb", -12.0, -24.0, 0.0, 1 };
94 L"InnerFadeDownLen", 0.0, 0.0, 3.0, 1 };
96 L"InnerFadeUpLen", 0.0, 0.0, 3.0, 1 };
98 L"OuterFadeDownLen", 0.5, 0.0, 3.0, 1 };
100 L"OuterFadeUpLen", 0.5, 0.0, 3.0, 1 };
102 L"ThresholdDb", -30.0, -100.0, 0.0, 1 };
104 L"MaximumPause", 1.0, 0.0, DBL_MAX, 1 };
105};
106
108{
109public:
110 Panel(
111 wxWindow *parent, wxWindowID winid, EffectAutoDuck *effect);
112 virtual ~Panel();
113
114private:
116 {
122 none = 99,
123 };
124
125 bool AcceptsFocus() const override { return false; }
126 // So that wxPanel is not included in Tab traversal - see wxWidgets bug 15581
127 bool AcceptsFocusFromKeyboard() const override { return false; }
128
129
130 void OnPaint(wxPaintEvent & evt);
131 void OnMouseCaptureChanged(wxMouseCaptureChangedEvent & evt);
132 void OnMouseCaptureLost(wxMouseCaptureLostEvent & evt);
133 void OnLeftDown(wxMouseEvent & evt);
134 void OnLeftUp(wxMouseEvent & evt);
135 void OnMotion(wxMouseEvent & evt);
136
137 void ResetControlPoints();
138 EControlPoint GetNearestControlPoint(const wxPoint & pt);
139
140private:
141 wxWindow *mParent;
143 std::unique_ptr<wxBitmap> mBackgroundBitmap;
149
150 DECLARE_EVENT_TABLE()
151};
152
153#endif
#define AUTO_DUCK_PANEL_NUM_CONTROL_POINTS
Definition: AutoDuck.h:24
EffectType
#define S(N)
Definition: ToChars.cpp:64
static Settings & settings()
Definition: TrackInfo.cpp:47
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
std::unique_ptr< wxBitmap > mBackgroundBitmap
Definition: AutoDuck.h:143
EControlPoint GetNearestControlPoint(const wxPoint &pt)
Definition: AutoDuck.cpp:771
bool mControlPointMoveActivated
Definition: AutoDuck.h:148
void OnMotion(wxMouseEvent &evt)
Definition: AutoDuck.cpp:819
wxWindow * mParent
Definition: AutoDuck.h:141
Panel(wxWindow *parent, wxWindowID winid, EffectAutoDuck *effect)
Definition: AutoDuck.cpp:562
bool AcceptsFocusFromKeyboard() const override
Definition: AutoDuck.h:127
wxPoint mMouseDownPoint
Definition: AutoDuck.h:147
void OnLeftDown(wxMouseEvent &evt)
Definition: AutoDuck.cpp:790
EControlPoint mCurrentControlPoint
Definition: AutoDuck.h:144
void OnMouseCaptureChanged(wxMouseCaptureChangedEvent &evt)
Definition: AutoDuck.cpp:752
EffectAutoDuck * mEffect
Definition: AutoDuck.h:142
void OnLeftUp(wxMouseEvent &evt)
Definition: AutoDuck.cpp:810
bool AcceptsFocus() const override
Definition: AutoDuck.h:125
void OnPaint(wxPaintEvent &evt)
Definition: AutoDuck.cpp:589
void OnMouseCaptureLost(wxMouseCaptureLostEvent &evt)
Definition: AutoDuck.cpp:759
wxPoint mMoveStartControlPoints[AUTO_DUCK_PANEL_NUM_CONTROL_POINTS]
Definition: AutoDuck.h:146
wxPoint mControlPoints[AUTO_DUCK_PANEL_NUM_CONTROL_POINTS]
Definition: AutoDuck.h:145
Implements the Auto Ducking effect.
Definition: AutoDuck.h:27
static constexpr EffectParameter InnerFadeDownLen
Definition: AutoDuck.h:93
double mInnerFadeDownLen
Definition: AutoDuck.h:68
wxTextCtrl * mInnerFadeUpLenBox
Definition: AutoDuck.h:79
ComponentInterfaceSymbol GetSymbol() const override
Definition: AutoDuck.cpp:99
static constexpr EffectParameter InnerFadeUpLen
Definition: AutoDuck.h:95
wxTextCtrl * mInnerFadeDownLenBox
Definition: AutoDuck.h:78
static constexpr EffectParameter OuterFadeDownLen
Definition: AutoDuck.h:97
Panel * mPanel
Definition: AutoDuck.h:86
wxTextCtrl * mOuterFadeDownLenBox
Definition: AutoDuck.h:80
bool Init() override
Definition: AutoDuck.cpp:123
const WaveTrack * mControlTrack
Definition: AutoDuck.h:75
double mThresholdDb
Definition: AutoDuck.h:72
static constexpr EffectParameter MaximumPause
Definition: AutoDuck.h:103
bool DoTransferDataToWindow()
Definition: AutoDuck.cpp:435
wxTextCtrl * mThresholdDbBox
Definition: AutoDuck.h:82
static constexpr EffectParameter ThresholdDb
Definition: AutoDuck.h:101
double mMaximumPause
Definition: AutoDuck.h:73
wxWeakRef< wxWindow > mUIParent
Definition: AutoDuck.h:65
double mDuckAmountDb
Definition: AutoDuck.h:67
const EffectParameterMethods & Parameters() const override
Definition: AutoDuck.cpp:42
double mInnerFadeUpLen
Definition: AutoDuck.h:69
bool ApplyDuckFade(int trackNum, WaveChannel &track, double t0, double t1)
Definition: AutoDuck.cpp:459
bool TransferDataToWindow(const EffectSettings &settings) override
Definition: AutoDuck.cpp:430
virtual ~EffectAutoDuck()
Definition: AutoDuck.cpp:93
void OnValueChanged(wxCommandEvent &evt)
Definition: AutoDuck.cpp:522
static EffectAutoDuck * FetchParameters(EffectAutoDuck &e, EffectSettings &)
Definition: AutoDuck.h:30
static constexpr EffectParameter DuckAmountDb
Definition: AutoDuck.h:91
EffectType GetType() const override
Type determines how it behaves.
Definition: AutoDuck.cpp:116
bool TransferDataFromWindow(EffectSettings &settings) override
Definition: AutoDuck.cpp:446
double mOuterFadeDownLen
Definition: AutoDuck.h:70
static constexpr EffectParameter OuterFadeUpLen
Definition: AutoDuck.h:99
bool Process(EffectInstance &instance, EffectSettings &settings) override
Definition: AutoDuck.cpp:176
wxTextCtrl * mMaximumPauseBox
Definition: AutoDuck.h:83
ManualPageID ManualPage() const override
Name of a page in the Audacity alpha manual, default is empty.
Definition: AutoDuck.cpp:109
double mOuterFadeUpLen
Definition: AutoDuck.h:71
static const ComponentInterfaceSymbol Symbol
Definition: AutoDuck.h:31
TranslatableString GetDescription() const override
Definition: AutoDuck.cpp:104
wxTextCtrl * mOuterFadeUpLenBox
Definition: AutoDuck.h:81
wxTextCtrl * mDuckAmountDbBox
Definition: AutoDuck.h:77
std::unique_ptr< EffectEditor > PopulateOrExchange(ShuttleGui &S, EffectInstance &instance, EffectSettingsAccess &access, const EffectOutputs *pOutputs) override
Add controls to effect panel; always succeeds.
Definition: AutoDuck.cpp:352
Performs effect computation.
Hold values to send to effect output meters.
Interface for manipulations of an Effect's settings.
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Definition: ShuttleGui.h:640
Holds a msgid for the translation catalog; may also bind format arguments.
A Track that contains audio waveform data.
Definition: WaveTrack.h:203
Externalized state of a plug-in.