120 lines
3.8 KiB
C++
120 lines
3.8 KiB
C++
/**********************************************************************
|
|
|
|
Audacity: A Digital Audio Editor
|
|
|
|
ChangeSpeed.h
|
|
|
|
Vaughan Johnson, Dominic Mazzoni
|
|
|
|
Change Speed effect, that affects both pitch & tempo.
|
|
|
|
**********************************************************************/
|
|
|
|
#ifndef __AUDACITY_EFFECT_CHANGESPEED__
|
|
#define __AUDACITY_EFFECT_CHANGESPEED__
|
|
|
|
#include "Effect.h"
|
|
|
|
class wxSlider;
|
|
class wxChoice;
|
|
class wxTextCtrl;
|
|
class NumericTextCtrl;
|
|
class ShuttleGui;
|
|
|
|
class EffectChangeSpeed final : public Effect
|
|
{
|
|
public:
|
|
static const ComponentInterfaceSymbol Symbol;
|
|
|
|
EffectChangeSpeed();
|
|
virtual ~EffectChangeSpeed();
|
|
|
|
// ComponentInterface implementation
|
|
|
|
ComponentInterfaceSymbol GetSymbol() override;
|
|
TranslatableString GetDescription() override;
|
|
ManualPageID ManualPage() override;
|
|
|
|
// EffectDefinitionInterface implementation
|
|
|
|
EffectType GetType() override;
|
|
|
|
// EffectClientInterface implementation
|
|
|
|
bool DefineParams( ShuttleParams & S ) override;
|
|
bool GetAutomationParameters(CommandParameters & parms) override;
|
|
bool SetAutomationParameters(CommandParameters & parms) override;
|
|
bool LoadFactoryDefaults() override;
|
|
|
|
// Effect implementation
|
|
|
|
bool CheckWhetherSkipEffect() override;
|
|
double CalcPreviewInputLength(double previewLength) override;
|
|
bool Startup() override;
|
|
bool Init() override;
|
|
bool Process() override;
|
|
void PopulateOrExchange(ShuttleGui & S) override;
|
|
bool TransferDataFromWindow() override;
|
|
bool TransferDataToWindow() override;
|
|
|
|
private:
|
|
// EffectChangeSpeed implementation
|
|
|
|
bool ProcessOne(WaveTrack *t, sampleCount start, sampleCount end);
|
|
bool ProcessLabelTrack(LabelTrack *t);
|
|
|
|
// handlers
|
|
void OnText_PercentChange(wxCommandEvent & evt);
|
|
void OnText_Multiplier(wxCommandEvent & evt);
|
|
void OnSlider_PercentChange(wxCommandEvent & evt);
|
|
void OnChoice_Vinyl(wxCommandEvent & evt);
|
|
void OnTimeCtrl_ToLength(wxCommandEvent & evt);
|
|
void OnTimeCtrlUpdate(wxCommandEvent & evt);
|
|
|
|
// helper functions
|
|
void Update_Text_PercentChange(); // Update control per current m_PercentChange.
|
|
void Update_Text_Multiplier(); // Update control per current m_PercentChange.
|
|
void Update_Slider_PercentChange(); // Update control per current m_PercentChange.
|
|
void Update_Vinyl(); // Update Vinyl controls for NEW percent change.
|
|
void Update_TimeCtrl_ToLength(); // Update target length controls for NEW percent change.
|
|
void UpdateUI(); // Enable / disable OK / preview.
|
|
|
|
private:
|
|
// track related
|
|
int mCurTrackNum;
|
|
double mMaxNewLength;
|
|
double mCurT0;
|
|
double mCurT1;
|
|
|
|
// control values
|
|
double m_PercentChange; // percent change to apply to tempo
|
|
// -100% is meaningless, but sky's the upper limit.
|
|
// Slider is (-100, 200], but textCtrls can set higher.
|
|
int mFromVinyl; // from standard vinyl speed (RPM) enum
|
|
double mFactor; // scale factor calculated from percent change
|
|
double mFromLength; // current selection length
|
|
int mTimeCtrlFormat; // time control format index number
|
|
double mMultiplier;
|
|
|
|
bool mbLoopDetect;
|
|
|
|
// controls
|
|
wxTextCtrl * mpTextCtrl_PercentChange;
|
|
wxTextCtrl * mpTextCtrl_Multiplier;
|
|
wxSlider * mpSlider_PercentChange;
|
|
wxChoice * mpChoice_FromVinyl;
|
|
wxChoice * mpChoice_ToVinyl;
|
|
NumericTextCtrl * mpFromLengthCtrl;
|
|
NumericTextCtrl * mpToLengthCtrl;
|
|
double mRate;
|
|
|
|
// private effect parameters
|
|
int mToVinyl; // to standard vinyl speed (rpm)
|
|
double mToLength; // target length of selection
|
|
NumericFormatSymbol mFormat; // time control format
|
|
|
|
DECLARE_EVENT_TABLE()
|
|
};
|
|
|
|
#endif // __AUDACITY_EFFECT_CHANGESPEED__
|