Audacity 3.2.0
Loudness.h
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 Loudness.h
6
7 Max Maisel (based on Normalize effect)
8
9**********************************************************************/
10
11#ifndef __AUDACITY_EFFECT_LOUDNESS__
12#define __AUDACITY_EFFECT_LOUDNESS__
13
14#include <wx/checkbox.h>
15#include <wx/choice.h>
16#include <wx/stattext.h>
17#include <wx/textctrl.h>
18#include <wx/weakref.h>
19
20#include "StatefulEffect.h"
21#include "Biquad.h"
22#include "ShuttleAutomation.h"
23#include "Track.h"
24
25class wxChoice;
26class wxSimplebook;
27class EBUR128;
28class ShuttleGui;
29class WaveChannel;
31
32class EffectLoudness final : public StatefulEffect
33{
34public:
36 {
39 nAlgos
40 };
41
42 static inline EffectLoudness *
45
47 virtual ~EffectLoudness();
48
49 // ComponentInterface implementation
50
51 ComponentInterfaceSymbol GetSymbol() const override;
52 TranslatableString GetDescription() const override;
53 ManualPageID ManualPage() const override;
54
55 // EffectDefinitionInterface implementation
56
57 EffectType GetType() const override;
58
59 // Effect implementation
60
61 bool Process(EffectInstance &instance, EffectSettings &settings) override;
62 std::unique_ptr<EffectEditor> PopulateOrExchange(
63 ShuttleGui & S, EffectInstance &instance,
64 EffectSettingsAccess &access, const EffectOutputs *pOutputs) override;
65 bool TransferDataToWindow(const EffectSettings &settings) override;
67
68private:
69 // EffectLoudness implementation
70
71 void AllocBuffers(TrackList &outputs);
72 void FreeBuffers();
73 static bool GetTrackRMS(WaveChannel &track,
74 double curT0, double curT1, float &rms);
75 [[nodiscard]] bool ProcessOne(WaveChannel &track, size_t nChannels,
76 double curT0, double curT1, float mult, EBUR128 *pLoudnessProcessor);
77 void LoadBufferBlock(WaveChannel &track, size_t nChannels,
78 sampleCount pos, size_t len);
79 bool AnalyseBufferBlock(EBUR128 &loudnessProcessor);
80 bool ProcessBufferBlock(float mult);
81 [[nodiscard]] bool StoreBufferBlock(WaveChannel &track, size_t nChannels,
82 sampleCount pos, size_t len);
83
84 bool UpdateProgress();
85 void OnChoice(wxCommandEvent & evt);
86 void OnUpdateUI(wxCommandEvent & evt);
87 void UpdateUI();
88
89private:
90 wxWeakRef<wxWindow> mUIParent{};
91
93 double mLUFSLevel;
94 double mRMSLevel;
97
99 int mSteps;
101 double mTrackLen;
102 double mCurRate;
103
104 wxSimplebook *mBook;
105 wxChoice *mChoice;
106 wxStaticText *mWarning;
108 wxCheckBox *mDualMonoCheckBox;
109
110 Floats mTrackBuffer[2]; // MM: must be increased once surround channels are supported
114
115 const EffectParameterMethods& Parameters() const override;
116 DECLARE_EVENT_TABLE()
117
119 L"StereoIndependent", false, false, true, 1 };
121 L"LUFSLevel", -23.0, -145.0, 0.0, 1 };
123 L"RMSLevel", -20.0, -145.0, 0.0, 1 };
125 L"DualMono", true, false, true, 1 };
127 L"NormalizeTo", (int)kLoudness , 0 , nAlgos-1, 1 };
128};
129
130#endif
EffectType
#define S(N)
Definition: ToChars.cpp:64
declares abstract base class Track, TrackList, and iterators over TrackList
static Settings & settings()
Definition: TrackInfo.cpp:69
ComponentInterfaceSymbol pairs a persistent string identifier used internally with an optional,...
Implements EBU-R128 loudness measurement.
Definition: EBUR128.h:22
Performs effect computation.
An Effect to bring the loudness level up to a chosen level.
Definition: Loudness.h:33
double mCurRate
Definition: Loudness.h:102
bool UpdateProgress()
Definition: Loudness.cpp:522
bool Process(EffectInstance &instance, EffectSettings &settings) override
Definition: Loudness.cpp:97
size_t mTrackBufferCapacity
Definition: Loudness.h:112
wxCheckBox * mDualMonoCheckBox
Definition: Loudness.h:108
wxSimplebook * mBook
Definition: Loudness.h:104
bool mStereoInd
Definition: Loudness.h:92
double mTrackLen
Definition: Loudness.h:101
bool AnalyseBufferBlock(EBUR128 &loudnessProcessor)
Definition: Loudness.cpp:472
static const ComponentInterfaceSymbol Symbol
Definition: Loudness.h:44
wxCheckBox * mStereoIndCheckBox
Definition: Loudness.h:107
wxWeakRef< wxWindow > mUIParent
Definition: Loudness.h:90
static EffectLoudness * FetchParameters(EffectLoudness &e, EffectSettings &)
Definition: Loudness.h:43
wxChoice * mChoice
Definition: Loudness.h:105
void UpdateUI()
Definition: Loudness.cpp:542
ComponentInterfaceSymbol GetSymbol() const override
Definition: Loudness.cpp:73
ManualPageID ManualPage() const override
Name of a page in the Audacity alpha manual, default is empty.
Definition: Loudness.cpp:83
int mNormalizeTo
Definition: Loudness.h:96
void OnUpdateUI(wxCommandEvent &evt)
Definition: Loudness.cpp:537
const EffectParameterMethods & Parameters() const override
Definition: Loudness.cpp:42
TranslatableString GetDescription() const override
Definition: Loudness.cpp:78
bool TransferDataToWindow(const EffectSettings &settings) override
Definition: Loudness.cpp:329
void AllocBuffers(TrackList &outputs)
Definition: Loudness.cpp:355
EffectType GetType() const override
Type determines how it behaves.
Definition: Loudness.cpp:90
static constexpr EffectParameter StereoInd
Definition: Loudness.h:118
static constexpr EffectParameter LUFSLevel
Definition: Loudness.h:120
bool mProcStereo
Definition: Loudness.h:113
bool ProcessBufferBlock(float mult)
Definition: Loudness.cpp:487
static constexpr EffectParameter RMSLevel
Definition: Loudness.h:122
static constexpr EffectParameter DualMono
Definition: Loudness.h:124
virtual ~EffectLoudness()
Definition: Loudness.cpp:67
void LoadBufferBlock(WaveChannel &track, size_t nChannels, sampleCount pos, size_t len)
Definition: Loudness.cpp:451
void FreeBuffers()
Definition: Loudness.cpp:379
bool TransferDataFromWindow(EffectSettings &settings) override
Definition: Loudness.cpp:342
double mProgressVal
Definition: Loudness.h:98
size_t mTrackBufferLen
Definition: Loudness.h:111
std::unique_ptr< EffectEditor > PopulateOrExchange(ShuttleGui &S, EffectInstance &instance, EffectSettingsAccess &access, const EffectOutputs *pOutputs) override
Add controls to effect panel; always succeeds.
Definition: Loudness.cpp:229
wxStaticText * mWarning
Definition: Loudness.h:106
double mRMSLevel
Definition: Loudness.h:94
bool mDualMono
Definition: Loudness.h:95
static constexpr EffectParameter NormalizeTo
Definition: Loudness.h:126
bool ProcessOne(WaveChannel &track, size_t nChannels, double curT0, double curT1, float mult, EBUR128 *pLoudnessProcessor)
Definition: Loudness.cpp:400
bool StoreBufferBlock(WaveChannel &track, size_t nChannels, sampleCount pos, size_t len)
Definition: Loudness.cpp:501
void OnChoice(wxCommandEvent &evt)
Definition: Loudness.cpp:529
TranslatableString mProgressMsg
Definition: Loudness.h:100
static bool GetTrackRMS(WaveChannel &track, double curT0, double curT1, float &rms)
Definition: Loudness.cpp:385
Floats mTrackBuffer[2]
Definition: Loudness.h:110
double mLUFSLevel
Definition: Loudness.h:93
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
A flat linked list of tracks supporting Add, Remove, Clear, and Contains, serialization of the list o...
Definition: Track.h:850
Holds a msgid for the translation catalog; may also bind format arguments.
Positions or offsets within audio files need a wide type.
Definition: SampleCount.h:19
Externalized state of a plug-in.