1 /********************************************************************** 2 3 Audacity: A Digital Audio Editor 4 5 ChangeSpeed.h 6 7 Vaughan Johnson, Dominic Mazzoni 8 9 Change Speed effect, that affects both pitch & tempo. 10 11 **********************************************************************/ 12 13 #ifndef __AUDACITY_EFFECT_CHANGESPEED__ 14 #define __AUDACITY_EFFECT_CHANGESPEED__ 15 16 #include "Effect.h" 17 18 class wxSlider; 19 class wxChoice; 20 class wxTextCtrl; 21 class NumericTextCtrl; 22 class ShuttleGui; 23 24 class EffectChangeSpeed final : public Effect 25 { 26 public: 27 static const ComponentInterfaceSymbol Symbol; 28 29 EffectChangeSpeed(); 30 virtual ~EffectChangeSpeed(); 31 32 // ComponentInterface implementation 33 34 ComponentInterfaceSymbol GetSymbol() override; 35 TranslatableString GetDescription() override; 36 ManualPageID ManualPage() override; 37 38 // EffectDefinitionInterface implementation 39 40 EffectType GetType() override; 41 42 // EffectClientInterface implementation 43 44 bool DefineParams( ShuttleParams & S ) override; 45 bool GetAutomationParameters(CommandParameters & parms) override; 46 bool SetAutomationParameters(CommandParameters & parms) override; 47 bool LoadFactoryDefaults() override; 48 49 // Effect implementation 50 51 bool CheckWhetherSkipEffect() override; 52 double CalcPreviewInputLength(double previewLength) override; 53 bool Startup() override; 54 bool Init() override; 55 bool Process() override; 56 void PopulateOrExchange(ShuttleGui & S) override; 57 bool TransferDataFromWindow() override; 58 bool TransferDataToWindow() override; 59 60 private: 61 // EffectChangeSpeed implementation 62 63 bool ProcessOne(WaveTrack *t, sampleCount start, sampleCount end); 64 bool ProcessLabelTrack(LabelTrack *t); 65 66 // handlers 67 void OnText_PercentChange(wxCommandEvent & evt); 68 void OnText_Multiplier(wxCommandEvent & evt); 69 void OnSlider_PercentChange(wxCommandEvent & evt); 70 void OnChoice_Vinyl(wxCommandEvent & evt); 71 void OnTimeCtrl_ToLength(wxCommandEvent & evt); 72 void OnTimeCtrlUpdate(wxCommandEvent & evt); 73 74 // helper functions 75 void Update_Text_PercentChange(); // Update control per current m_PercentChange. 76 void Update_Text_Multiplier(); // Update control per current m_PercentChange. 77 void Update_Slider_PercentChange(); // Update control per current m_PercentChange. 78 void Update_Vinyl(); // Update Vinyl controls for NEW percent change. 79 void Update_TimeCtrl_ToLength(); // Update target length controls for NEW percent change. 80 void UpdateUI(); // Enable / disable OK / preview. 81 82 private: 83 // track related 84 int mCurTrackNum; 85 double mMaxNewLength; 86 double mCurT0; 87 double mCurT1; 88 89 // control values 90 double m_PercentChange; // percent change to apply to tempo 91 // -100% is meaningless, but sky's the upper limit. 92 // Slider is (-100, 200], but textCtrls can set higher. 93 int mFromVinyl; // from standard vinyl speed (RPM) enum 94 double mFactor; // scale factor calculated from percent change 95 double mFromLength; // current selection length 96 int mTimeCtrlFormat; // time control format index number 97 double mMultiplier; 98 99 bool mbLoopDetect; 100 101 // controls 102 wxTextCtrl * mpTextCtrl_PercentChange; 103 wxTextCtrl * mpTextCtrl_Multiplier; 104 wxSlider * mpSlider_PercentChange; 105 wxChoice * mpChoice_FromVinyl; 106 wxChoice * mpChoice_ToVinyl; 107 NumericTextCtrl * mpFromLengthCtrl; 108 NumericTextCtrl * mpToLengthCtrl; 109 double mRate; 110 111 // private effect parameters 112 int mToVinyl; // to standard vinyl speed (rpm) 113 double mToLength; // target length of selection 114 NumericFormatSymbol mFormat; // time control format 115 116 DECLARE_EVENT_TABLE() 117 }; 118 119 #endif // __AUDACITY_EFFECT_CHANGESPEED__ 120