Audacity 3.2.0
ToneGen.h
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 ToneGen.h
6
7 Steve Jolly
8
9 This class implements a tone generator effect.
10
11**********************************************************************/
12
13#ifndef __AUDACITY_EFFECT_TONEGEN__
14#define __AUDACITY_EFFECT_TONEGEN__
15
17#include "ShuttleAutomation.h"
18#include <float.h> // for DBL_MAX
19#include <wx/weakref.h>
20
21class NumericTextCtrl;
22class ShuttleGui;
23
25{
26public:
27 static inline EffectToneGen *
29 EffectToneGen(bool isChirp);
30 virtual ~EffectToneGen();
31
32 // ComponentInterface implementation
33
34 ComponentInterfaceSymbol GetSymbol() const override;
35 TranslatableString GetDescription() const override;
36 ManualPageID ManualPage() const override;
37
38 // EffectDefinitionInterface implementation
39
40 EffectType GetType() const override;
41
42 unsigned GetAudioOutCount() const override;
44 ChannelNames chanMap) override;
46 const float *const *inBlock, float *const *outBlock, size_t blockLen)
47 override;
48
49 // Effect implementation
50
51 std::unique_ptr<EffectEditor> PopulateOrExchange(
52 ShuttleGui & S, EffectInstance &instance,
53 EffectSettingsAccess &access, const EffectOutputs *pOutputs) override;
54 bool TransferDataToWindow(const EffectSettings &settings) override;
56
57private:
58 // EffectToneGen implementation
59
60 void OnControlUpdate(wxCommandEvent & evt);
61
62 wxWeakRef<wxWindow> mUIParent{};
63
64 double mSampleRate{};
65 const bool mChirp;
66
67 // mSample is an external placeholder to remember the last "buffer"
68 // position so we use it to reinitialize from where we left
71
72 // If we made these static variables,
73 // Tone and Chirp would share the same parameters.
80 double mLogFrequency[2];
81
83
84 void PostSet();
85
86 const EffectParameterMethods& Parameters() const override;
87 DECLARE_EVENT_TABLE()
88
90 {
97 };
98
100
102 {
106 };
107
109
110// Yes, mFrequency0 and mAmplitude0 are each associated with more than one
112 L"StartFreq", 440.0, 1.0, DBL_MAX, 1 };
114 L"EndFreq", 1320.0, 1.0, DBL_MAX, 1 };
116 L"StartAmp", 0.8, 0.0, 1.0, 1 };
118 L"EndAmp", 0.1, 0.0, 1.0, 1 };
120 L"Frequency", 440.0, 1.0, DBL_MAX, 1 };
122 L"Amplitude", 0.8, 0.0, 1.0, 1 };
124 L"Waveform", 0, 0, nWaveforms - 1, 1, kWaveStrings, nWaveforms };
126 L"Interpolation", 0, 0, nInterpolations - 1, 1, kInterStrings, nInterpolations };
127};
128
129class EffectChirp final : public EffectToneGen
130{
131public:
133
135};
136
137
138class EffectTone final : public EffectToneGen
139{
140public:
142
143 EffectTone() : EffectToneGen{ false } {}
144};
145
146#endif
EffectType
ChannelName
#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,...
static const ComponentInterfaceSymbol Symbol
Definition: ToneGen.h:132
EffectChirp()
Definition: ToneGen.h:134
Performs effect computation.
Hold values to send to effect output meters.
Interface for manipulations of an Effect's settings.
An Effect that can generate a sine, square or sawtooth wave. An extended mode of EffectToneGen suppor...
Definition: ToneGen.h:25
double mPositionInCycles
Definition: ToneGen.h:70
int mInterpolation
Definition: ToneGen.h:75
TranslatableString GetDescription() const override
Definition: ToneGen.cpp:118
double mFrequency0
Definition: ToneGen.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: ToneGen.cpp:271
double mSampleRate
Definition: ToneGen.h:64
static constexpr EffectParameter Amplitude
Definition: ToneGen.h:121
ComponentInterfaceSymbol GetSymbol() const override
Definition: ToneGen.cpp:111
static constexpr EffectParameter Frequency
Definition: ToneGen.h:119
void OnControlUpdate(wxCommandEvent &evt)
Definition: ToneGen.cpp:425
bool ProcessInitialize(EffectSettings &settings, double sampleRate, ChannelNames chanMap) override
Definition: ToneGen.cpp:144
wxWeakRef< wxWindow > mUIParent
Definition: ToneGen.h:62
double mLogFrequency[2]
Definition: ToneGen.h:80
virtual ~EffectToneGen()
Definition: ToneGen.cpp:105
double mFrequency1
Definition: ToneGen.h:77
static const EnumValueSymbol kWaveStrings[nWaveforms]
Definition: ToneGen.h:99
@ kSquareNoAlias
Definition: ToneGen.h:94
double mAmplitude0
Definition: ToneGen.h:78
static constexpr EffectParameter EndFreq
Definition: ToneGen.h:113
@ nInterpolations
Definition: ToneGen.h:105
static const EnumValueSymbol kInterStrings[nInterpolations]
Definition: ToneGen.h:108
const EffectParameterMethods & Parameters() const override
Definition: ToneGen.cpp:51
ManualPageID ManualPage() const override
Name of a page in the Audacity alpha manual, default is empty.
Definition: ToneGen.cpp:125
void PostSet()
Definition: ToneGen.cpp:255
static constexpr EnumParameter Interp
Definition: ToneGen.h:125
NumericTextCtrl * mToneDurationT
Definition: ToneGen.h:82
bool TransferDataToWindow(const EffectSettings &settings) override
Definition: ToneGen.cpp:394
static constexpr EnumParameter Waveform
Definition: ToneGen.h:123
EffectType GetType() const override
Type determines how it behaves.
Definition: ToneGen.cpp:134
double mAmplitude1
Definition: ToneGen.h:79
unsigned GetAudioOutCount() const override
How many output buffers to allocate at once.
Definition: ToneGen.cpp:139
EffectToneGen(bool isChirp)
Definition: ToneGen.cpp:89
static EffectToneGen * FetchParameters(EffectToneGen &e, EffectSettings &)
Definition: ToneGen.h:28
int mWaveform
Definition: ToneGen.h:74
static constexpr EffectParameter StartFreq
Definition: ToneGen.h:111
size_t ProcessBlock(EffectSettings &settings, const float *const *inBlock, float *const *outBlock, size_t blockLen) override
Called for destructive effect computation.
Definition: ToneGen.cpp:153
bool TransferDataFromWindow(EffectSettings &settings) override
Definition: ToneGen.cpp:405
static constexpr EffectParameter StartAmp
Definition: ToneGen.h:115
const bool mChirp
Definition: ToneGen.h:65
sampleCount mSample
Definition: ToneGen.h:69
static constexpr EffectParameter EndAmp
Definition: ToneGen.h:117
EffectTone()
Definition: ToneGen.h:143
static const ComponentInterfaceSymbol Symbol
Definition: ToneGen.h:141
Derived from ShuttleGuiBase, an Audacity specific class for shuttling data to and from GUI.
Definition: ShuttleGui.h:640
Base class for many of the effects in Audacity.
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.