Audacity 3.2.0
Amplify.h
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 Amplify.h
6
7 Dominic Mazzoni
8
9 This rewritten class supports a smart Amplify effect - it calculates
10 the maximum amount of gain that can be applied to all tracks without
11 causing clipping and selects this as the default parameter.
12
13**********************************************************************/
14
15#ifndef __AUDACITY_EFFECT_AMPLIFY__
16#define __AUDACITY_EFFECT_AMPLIFY__
17
19#include "ShuttleAutomation.h"
20#include <wx/weakref.h>
21
22class wxSlider;
23class wxCheckBox;
24class wxTextCtrl;
25class ShuttleGui;
26
28{
29public:
30 static inline EffectAmplify *
33
35 virtual ~EffectAmplify();
36
37 // ComponentInterface implementation
38
39 ComponentInterfaceSymbol GetSymbol() const override;
40 TranslatableString GetDescription() const override;
41 ManualPageID ManualPage() const override;
42
43 // EffectDefinitionInterface implementation
44
45 EffectType GetType() const override;
47 const override;
49
50 unsigned GetAudioInCount() const override;
51 unsigned GetAudioOutCount() const override;
53 const float *const *inBlock, float *const *outBlock, size_t blockLen)
54 override;
55
56 // Effect implementation
57
58 bool Init() override;
59 std::any BeginPreview(const EffectSettings &settings) override;
60 std::unique_ptr<EffectEditor> PopulateOrExchange(
61 ShuttleGui & S, EffectInstance &instance,
62 EffectSettingsAccess &access, const EffectOutputs *pOutputs) override;
63 bool TransferDataToWindow(const EffectSettings &settings) override;
65
66 std::shared_ptr<EffectInstance> MakeInstance() const override;
67
68private:
71 ~Instance() override;
72 };
73
74 void ClampRatio();
75
76 // EffectAmplify implementation
77
78 void OnAmpText(wxCommandEvent & evt);
79 void OnPeakText(wxCommandEvent & evt);
80 void OnAmpSlider(wxCommandEvent & evt);
81 void OnClipCheckBox(wxCommandEvent & evt);
82 void CheckClip();
83
84private:
85 wxWeakRef<wxWindow> mUIParent{};
86
87 double mPeak = 1.0;
88
89 double mRatio = 1.0;
90 double mRatioClip = 1.0; // maximum value of mRatio which does not cause clipping
91 double mAmp = 0.0;
92 double mNewPeak = 1.0;
93 bool mCanClip = true;
94
95 wxSlider *mAmpS;
96 wxTextCtrl *mAmpT;
97 wxTextCtrl *mNewPeakT;
98 wxCheckBox *mClip;
99
100 const EffectParameterMethods& Parameters() const override;
101
102 DECLARE_EVENT_TABLE()
103
105 L"Ratio", 0.9f, 0.003162f, 316.227766f, 1.0f };
106// Amp is not saved in settings!
108 L"", -0.91515f, -50.0f, 50.0f, 10.0f };
110 L"AllowClipping", false, false, true, 1 };
111};
112
113#endif // __AUDACITY_EFFECT_AMPLIFY__
EffectType
std::optional< std::unique_ptr< EffectSettingsAccess::Message > > OptionalMessage
#define S(N)
Definition: ToChars.cpp:64
static Settings & settings()
Definition: TrackInfo.cpp:69
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
An Effect that makes a sound louder or softer.
Definition: Amplify.h:28
OptionalMessage LoadFactoryDefaults(EffectSettings &settings) const override
Definition: Amplify.cpp:163
void ClampRatio()
Definition: Amplify.cpp:303
unsigned GetAudioOutCount() const override
How many output buffers to allocate at once.
Definition: Amplify.cpp:146
static const ComponentInterfaceSymbol Symbol
Definition: Amplify.h:32
wxWeakRef< wxWindow > mUIParent
Definition: Amplify.h:85
static constexpr EffectParameter Ratio
Definition: Amplify.h:104
wxTextCtrl * mNewPeakT
Definition: Amplify.h:97
static constexpr EffectParameter Clipping
Definition: Amplify.h:109
virtual ~EffectAmplify()
Definition: Amplify.cpp:112
double mRatioClip
Definition: Amplify.h:90
std::shared_ptr< EffectInstance > MakeInstance() const override
Make an object maintaining short-term state of an Effect.
Definition: Amplify.cpp:351
static constexpr EffectParameter Amp
Definition: Amplify.h:107
double mPeak
Definition: Amplify.h:87
bool mCanClip
Definition: Amplify.h:93
void OnClipCheckBox(wxCommandEvent &evt)
Definition: Amplify.cpp:431
wxSlider * mAmpS
Definition: Amplify.h:95
void OnAmpSlider(wxCommandEvent &evt)
Definition: Amplify.cpp:409
EffectType GetType() const override
Type determines how it behaves.
Definition: Amplify.cpp:136
unsigned GetAudioInCount() const override
How many input buffers to allocate at once.
Definition: Amplify.cpp:141
ManualPageID ManualPage() const override
Name of a page in the Audacity alpha manual, default is empty.
Definition: Amplify.cpp:129
bool Init() override
Definition: Amplify.cpp:191
std::unique_ptr< EffectEditor > PopulateOrExchange(ShuttleGui &S, EffectInstance &instance, EffectSettingsAccess &access, const EffectOutputs *pOutputs) override
Add controls to effect panel; always succeeds.
Definition: Amplify.cpp:219
bool TransferDataToWindow(const EffectSettings &settings) override
Definition: Amplify.cpp:315
bool TransferDataFromWindow(EffectSettings &settings) override
Definition: Amplify.cpp:330
const EffectParameterMethods & Parameters() const override
Definition: Amplify.cpp:53
wxCheckBox * mClip
Definition: Amplify.h:98
void OnAmpText(wxCommandEvent &evt)
Definition: Amplify.cpp:366
OptionalMessage DoLoadFactoryDefaults(EffectSettings &settings)
Definition: Amplify.cpp:169
TranslatableString GetDescription() const override
Definition: Amplify.cpp:123
double mAmp
Definition: Amplify.h:91
std::any BeginPreview(const EffectSettings &settings) override
Called when Preview() starts, to allow temporary effect state changes.
Definition: Amplify.cpp:212
void OnPeakText(wxCommandEvent &evt)
Definition: Amplify.cpp:384
ComponentInterfaceSymbol GetSymbol() const override
Definition: Amplify.cpp:118
static EffectAmplify * FetchParameters(EffectAmplify &e, EffectSettings &)
Definition: Amplify.h:31
double mRatio
Definition: Amplify.h:89
double mNewPeak
Definition: Amplify.h:92
size_t ProcessBlock(EffectSettings &settings, const float *const *inBlock, float *const *outBlock, size_t blockLen) override
Called for destructive effect computation.
Definition: Amplify.cpp:151
wxTextCtrl * mAmpT
Definition: Amplify.h:96
void CheckClip()
Definition: Amplify.cpp:360
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
Instance(StatefulPerTrackEffect &effect)
Base class for many of the effects in Audacity.
Holds a msgid for the translation catalog; may also bind format arguments.
~Instance() override
Definition: Amplify.cpp:95
Externalized state of a plug-in.