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;
22
23#define AUTO_DUCK_PANEL_NUM_CONTROL_POINTS 5
24
25class EffectAutoDuck final : public StatefulEffect
26{
27public:
28 static inline EffectAutoDuck *
31
33 virtual ~EffectAutoDuck();
34
35 // ComponentInterface implementation
36
37 ComponentInterfaceSymbol GetSymbol() const override;
38 TranslatableString GetDescription() const override;
39 ManualPageID ManualPage() const override;
40
41 // EffectDefinitionInterface implementation
42
43 EffectType GetType() const override;
44
45 // Effect implementation
46
47 bool Init() override;
48 bool Process(EffectInstance &instance, EffectSettings &settings) override;
49 std::unique_ptr<EffectEditor> PopulateOrExchange(
50 ShuttleGui & S, EffectInstance &instance,
51 EffectSettingsAccess &access, const EffectOutputs *pOutputs) override;
52 bool TransferDataToWindow(const EffectSettings &settings) override;
55
56private:
57 // EffectAutoDuck implementation
58
59 bool ApplyDuckFade(int trackNum, WaveTrack *t, double t0, double t1);
60
61 void OnValueChanged(wxCommandEvent & evt);
62
63private:
64 wxWeakRef<wxWindow> mUIParent{};
65
73
75
76 wxTextCtrl *mDuckAmountDbBox;
78 wxTextCtrl *mInnerFadeUpLenBox;
80 wxTextCtrl *mOuterFadeUpLenBox;
81 wxTextCtrl *mThresholdDbBox;
82 wxTextCtrl *mMaximumPauseBox;
83
84 class Panel;
86
87 const EffectParameterMethods& Parameters() const override;
88 DECLARE_EVENT_TABLE()
89
91 L"DuckAmountDb", -12.0, -24.0, 0.0, 1 };
93 L"InnerFadeDownLen", 0.0, 0.0, 3.0, 1 };
95 L"InnerFadeUpLen", 0.0, 0.0, 3.0, 1 };
97 L"OuterFadeDownLen", 0.5, 0.0, 3.0, 1 };
99 L"OuterFadeUpLen", 0.5, 0.0, 3.0, 1 };
101 L"ThresholdDb", -30.0, -100.0, 0.0, 1 };
103 L"MaximumPause", 1.0, 0.0, DBL_MAX, 1 };
104};
105
107{
108public:
109 Panel(
110 wxWindow *parent, wxWindowID winid, EffectAutoDuck *effect);
111 virtual ~Panel();
112
113private:
115 {
121 none = 99,
122 };
123
124 bool AcceptsFocus() const override { return false; }
125 // So that wxPanel is not included in Tab traversal - see wxWidgets bug 15581
126 bool AcceptsFocusFromKeyboard() const override { return false; }
127
128
129 void OnPaint(wxPaintEvent & evt);
130 void OnMouseCaptureChanged(wxMouseCaptureChangedEvent & evt);
131 void OnMouseCaptureLost(wxMouseCaptureLostEvent & evt);
132 void OnLeftDown(wxMouseEvent & evt);
133 void OnLeftUp(wxMouseEvent & evt);
134 void OnMotion(wxMouseEvent & evt);
135
136 void ResetControlPoints();
137 EControlPoint GetNearestControlPoint(const wxPoint & pt);
138
139private:
140 wxWindow *mParent;
142 std::unique_ptr<wxBitmap> mBackgroundBitmap;
148
149 DECLARE_EVENT_TABLE()
150};
151
152#endif
#define AUTO_DUCK_PANEL_NUM_CONTROL_POINTS
Definition: AutoDuck.h:23
EffectType
#define S(N)
Definition: ToChars.cpp:64
static Settings & settings()
Definition: TrackInfo.cpp:87
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
std::unique_ptr< wxBitmap > mBackgroundBitmap
Definition: AutoDuck.h:142
EControlPoint GetNearestControlPoint(const wxPoint &pt)
Definition: AutoDuck.cpp:751
bool mControlPointMoveActivated
Definition: AutoDuck.h:147
void OnMotion(wxMouseEvent &evt)
Definition: AutoDuck.cpp:799
wxWindow * mParent
Definition: AutoDuck.h:140
Panel(wxWindow *parent, wxWindowID winid, EffectAutoDuck *effect)
Definition: AutoDuck.cpp:542
bool AcceptsFocusFromKeyboard() const override
Definition: AutoDuck.h:126
wxPoint mMouseDownPoint
Definition: AutoDuck.h:146
void OnLeftDown(wxMouseEvent &evt)
Definition: AutoDuck.cpp:770
EControlPoint mCurrentControlPoint
Definition: AutoDuck.h:143
void OnMouseCaptureChanged(wxMouseCaptureChangedEvent &evt)
Definition: AutoDuck.cpp:732
EffectAutoDuck * mEffect
Definition: AutoDuck.h:141
void OnLeftUp(wxMouseEvent &evt)
Definition: AutoDuck.cpp:790
bool AcceptsFocus() const override
Definition: AutoDuck.h:124
void OnPaint(wxPaintEvent &evt)
Definition: AutoDuck.cpp:569
void OnMouseCaptureLost(wxMouseCaptureLostEvent &evt)
Definition: AutoDuck.cpp:739
wxPoint mMoveStartControlPoints[AUTO_DUCK_PANEL_NUM_CONTROL_POINTS]
Definition: AutoDuck.h:145
wxPoint mControlPoints[AUTO_DUCK_PANEL_NUM_CONTROL_POINTS]
Definition: AutoDuck.h:144
Implements the Auto Ducking effect.
Definition: AutoDuck.h:26
static constexpr EffectParameter InnerFadeDownLen
Definition: AutoDuck.h:92
double mInnerFadeDownLen
Definition: AutoDuck.h:67
wxTextCtrl * mInnerFadeUpLenBox
Definition: AutoDuck.h:78
ComponentInterfaceSymbol GetSymbol() const override
Definition: AutoDuck.cpp:99
static constexpr EffectParameter InnerFadeUpLen
Definition: AutoDuck.h:94
wxTextCtrl * mInnerFadeDownLenBox
Definition: AutoDuck.h:77
static constexpr EffectParameter OuterFadeDownLen
Definition: AutoDuck.h:96
Panel * mPanel
Definition: AutoDuck.h:84
wxTextCtrl * mOuterFadeDownLenBox
Definition: AutoDuck.h:79
bool Init() override
Definition: AutoDuck.cpp:123
const WaveTrack * mControlTrack
Definition: AutoDuck.h:74
double mThresholdDb
Definition: AutoDuck.h:71
bool ApplyDuckFade(int trackNum, WaveTrack *t, double t0, double t1)
Definition: AutoDuck.cpp:438
static constexpr EffectParameter MaximumPause
Definition: AutoDuck.h:102
bool DoTransferDataToWindow()
Definition: AutoDuck.cpp:414
wxTextCtrl * mThresholdDbBox
Definition: AutoDuck.h:81
static constexpr EffectParameter ThresholdDb
Definition: AutoDuck.h:100
double mMaximumPause
Definition: AutoDuck.h:72
wxWeakRef< wxWindow > mUIParent
Definition: AutoDuck.h:64
double mDuckAmountDb
Definition: AutoDuck.h:66
const EffectParameterMethods & Parameters() const override
Definition: AutoDuck.cpp:37
double mInnerFadeUpLen
Definition: AutoDuck.h:68
bool TransferDataToWindow(const EffectSettings &settings) override
Definition: AutoDuck.cpp:409
virtual ~EffectAutoDuck()
Definition: AutoDuck.cpp:93
void OnValueChanged(wxCommandEvent &evt)
Definition: AutoDuck.cpp:502
static EffectAutoDuck * FetchParameters(EffectAutoDuck &e, EffectSettings &)
Definition: AutoDuck.h:29
static constexpr EffectParameter DuckAmountDb
Definition: AutoDuck.h:90
EffectType GetType() const override
Type determines how it behaves.
Definition: AutoDuck.cpp:116
bool TransferDataFromWindow(EffectSettings &settings) override
Definition: AutoDuck.cpp:425
double mOuterFadeDownLen
Definition: AutoDuck.h:69
static constexpr EffectParameter OuterFadeUpLen
Definition: AutoDuck.h:98
bool Process(EffectInstance &instance, EffectSettings &settings) override
Definition: AutoDuck.cpp:176
wxTextCtrl * mMaximumPauseBox
Definition: AutoDuck.h:82
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:70
static const ComponentInterfaceSymbol Symbol
Definition: AutoDuck.h:30
TranslatableString GetDescription() const override
Definition: AutoDuck.cpp:104
wxTextCtrl * mOuterFadeUpLenBox
Definition: AutoDuck.h:80
wxTextCtrl * mDuckAmountDbBox
Definition: AutoDuck.h:76
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:331
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:625
Holds a msgid for the translation catalog; may also bind format arguments.
A Track that contains audio waveform data.
Definition: WaveTrack.h:51
Externalized state of a plug-in.