Audacity 3.2.0
TimeScale.h
Go to the documentation of this file.
1/**********************************************************************
2
3 Audacity: A Digital Audio Editor
4
5 TimeScale.h
6
7 Clayton Otey
8
9**********************************************************************/
10
11#ifndef __AUDACITY_EFFECT_TIMESCALE__
12#define __AUDACITY_EFFECT_TIMESCALE__
13
14
15
16#if USE_SBSMS
17
18#include "SBSMSEffect.h"
19#include "ShuttleAutomation.h"
20#include <wx/weakref.h>
21
22class wxSlider;
23class wxTextCtrl;
24class ShuttleGui;
25
26class EffectTimeScale final : public EffectSBSMS
27{
28public:
29 static inline EffectTimeScale *
32
34 virtual ~EffectTimeScale();
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 std::any BeginPreview(const EffectSettings &settings) 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 const EffectSettings &settings, double previewLength) const override;
57
58private:
59 // EffectTimeScale implementation
60
61 static inline double PercentChangeToRatio(double percentChange);
62 static inline double HalfStepsToPercentChange(double halfSteps);
63 static inline double PercentChangeToHalfSteps(double percentChange);
64
65 void OnText_RatePercentChangeStart(wxCommandEvent & evt);
66 void OnText_RatePercentChangeEnd(wxCommandEvent & evt);
67 void OnText_PitchPercentChangeStart(wxCommandEvent & evt);
68 void OnText_PitchPercentChangeEnd(wxCommandEvent & evt);
69 void OnText_PitchHalfStepsStart(wxCommandEvent & evt);
70 void OnText_PitchHalfStepsEnd(wxCommandEvent & evt);
71 void OnSlider_RatePercentChangeStart(wxCommandEvent & evt);
72 void OnSlider_RatePercentChangeEnd(wxCommandEvent & evt);
73 void OnCheckBox_PreAnalyze(wxCommandEvent & evt);
74
83
84 wxWeakRef<wxWindow> mUIParent{};
85
88 SlideType slideTypeRate;
89 SlideType slideTypePitch;
96
105
106 const EffectParameterMethods& Parameters() const override;
107 DECLARE_EVENT_TABLE()
108
110 L"RatePercentChangeStart", 0.0, -90.0, 500, 1 };
112 L"RatePercentChangeEnd", 0.0, -90.0, 500, 1 };
114 L"PitchHalfStepsStart", 0.0, -12.0, 12.0, 1 };
116 L"PitchHalfStepsEnd", 0.0, -12.0, 12.0, 1 };
118 L"PitchPercentChangeStart", 0.0, -50.0, 100.0, 1 };
120 L"PitchPercentChangeEnd", 0.0, -50.0, 100.0, 1 };
121};
122
123#endif // __AUDACITY_EFFECT_TIMESCALE
124
125#endif // USE_SBSMS
EffectType
#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,...
Performs effect computation.
Hold values to send to effect output meters.
Interface for manipulations of an Effect's settings.
An EffectTimeScale does high quality sliding time scaling/pitch shifting.
Definition: TimeScale.h:27
static double PercentChangeToHalfSteps(double percentChange)
Definition: TimeScale.cpp:289
TranslatableString GetDescription() const override
Definition: TimeScale.cpp:90
SlideType slideTypePitch
Definition: TimeScale.h:89
double m_PitchPercentChangeStart
Definition: TimeScale.h:94
wxTextCtrl * m_pTextCtrl_PitchHalfStepsEnd
Definition: TimeScale.h:102
void Update_Slider_RatePercentChangeEnd()
Definition: TimeScale.cpp:309
double CalcPreviewInputLength(const EffectSettings &settings, double previewLength) const override
Definition: TimeScale.cpp:109
bool Process(EffectInstance &instance, EffectSettings &settings) override
Definition: TimeScale.cpp:130
void OnSlider_RatePercentChangeStart(wxCommandEvent &evt)
Definition: TimeScale.cpp:356
wxSlider * m_pSlider_RatePercentChangeStart
Definition: TimeScale.h:99
std::any BeginPreview(const EffectSettings &settings) override
Called when Preview() starts, to allow temporary effect state changes.
Definition: TimeScale.cpp:124
static constexpr EffectParameter RatePercentEnd
Definition: TimeScale.h:111
static constexpr EffectParameter RatePercentStart
Definition: TimeScale.h:109
void Update_Text_PitchHalfStepsEnd()
Definition: TimeScale.cpp:319
void Update_Text_PitchHalfStepsStart()
Definition: TimeScale.cpp:314
static double HalfStepsToPercentChange(double halfSteps)
Definition: TimeScale.cpp:283
wxTextCtrl * m_pTextCtrl_RatePercentChangeStart
Definition: TimeScale.h:97
void OnText_PitchPercentChangeEnd(wxCommandEvent &evt)
Definition: TimeScale.cpp:406
wxTextCtrl * m_pTextCtrl_RatePercentChangeEnd
Definition: TimeScale.h:98
void OnText_PitchHalfStepsStart(wxCommandEvent &evt)
Definition: TimeScale.cpp:370
static constexpr EffectParameter HalfStepsEnd
Definition: TimeScale.h:115
void OnText_PitchPercentChangeStart(wxCommandEvent &evt)
Definition: TimeScale.cpp:394
void Update_Slider_RatePercentChangeStart()
Definition: TimeScale.cpp:304
double previewSelectedDuration
Definition: TimeScale.h:87
static constexpr EffectParameter PitchPercentEnd
Definition: TimeScale.h:119
void OnSlider_RatePercentChangeEnd(wxCommandEvent &evt)
Definition: TimeScale.cpp:363
EffectType GetType() const override
Type determines how it behaves.
Definition: TimeScale.cpp:102
double m_PitchHalfStepsEnd
Definition: TimeScale.h:93
static const ComponentInterfaceSymbol Symbol
Definition: TimeScale.h:31
double m_PitchHalfStepsStart
Definition: TimeScale.h:92
void OnText_PitchHalfStepsEnd(wxCommandEvent &evt)
Definition: TimeScale.cpp:382
std::unique_ptr< EffectEditor > PopulateOrExchange(ShuttleGui &S, EffectInstance &instance, EffectSettingsAccess &access, const EffectOutputs *pOutputs) override
Add controls to effect panel; always succeeds.
Definition: TimeScale.cpp:148
static double PercentChangeToRatio(double percentChange)
Definition: TimeScale.cpp:278
void Update_Text_PitchPercentChangeStart()
Definition: TimeScale.cpp:324
wxSlider * m_pSlider_RatePercentChangeEnd
Definition: TimeScale.h:100
void Update_Text_RatePercentChangeEnd()
Definition: TimeScale.cpp:299
SlideType slideTypeRate
Definition: TimeScale.h:88
wxWeakRef< wxWindow > mUIParent
Definition: TimeScale.h:84
wxTextCtrl * m_pTextCtrl_PitchHalfStepsStart
Definition: TimeScale.h:101
double m_PitchPercentChangeEnd
Definition: TimeScale.h:95
void Update_Text_RatePercentChangeStart()
Definition: TimeScale.cpp:294
void OnText_RatePercentChangeStart(wxCommandEvent &evt)
Definition: TimeScale.cpp:334
void OnCheckBox_PreAnalyze(wxCommandEvent &evt)
static EffectTimeScale * FetchParameters(EffectTimeScale &e, EffectSettings &)
Definition: TimeScale.h:30
double m_RatePercentChangeEnd
Definition: TimeScale.h:91
bool TransferDataFromWindow(EffectSettings &settings) override
Definition: TimeScale.cpp:268
void Update_Text_PitchPercentChangeEnd()
Definition: TimeScale.cpp:329
bool TransferDataToWindow(const EffectSettings &settings) override
Definition: TimeScale.cpp:255
const EffectParameterMethods & Parameters() const override
Definition: TimeScale.cpp:38
double m_RatePercentChangeStart
Definition: TimeScale.h:90
static constexpr EffectParameter PitchPercentStart
Definition: TimeScale.h:117
wxTextCtrl * m_pTextCtrl_PitchPercentChangeStart
Definition: TimeScale.h:103
virtual ~EffectTimeScale()
Definition: TimeScale.cpp:79
static constexpr EffectParameter HalfStepsStart
Definition: TimeScale.h:113
ManualPageID ManualPage() const override
Name of a page in the Audacity alpha manual, default is empty.
Definition: TimeScale.cpp:95
void OnText_RatePercentChangeEnd(wxCommandEvent &evt)
Definition: TimeScale.cpp:345
ComponentInterfaceSymbol GetSymbol() const override
Definition: TimeScale.cpp:85
wxTextCtrl * m_pTextCtrl_PitchPercentChangeEnd
Definition: TimeScale.h:104
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.
Externalized state of a plug-in.