audacia/src/effects/ChangeTempo.h

111 lines
3.2 KiB
C++

/**********************************************************************
Audacity: A Digital Audio Editor
ChangeTempo.h
Vaughan Johnson, Dominic Mazzoni
Change Tempo effect provides speeding up or
slowing down tempo without changing pitch.
**********************************************************************/
#if USE_SOUNDTOUCH
#ifndef __AUDACITY_EFFECT_CHANGETEMPO__
#define __AUDACITY_EFFECT_CHANGETEMPO__
#if USE_SBSMS
#include "SBSMSEffect.h"
#endif
#include "SoundTouchEffect.h"
class wxSlider;
class wxCheckBox;
class wxTextCtrl;
class ShuttleGui;
class EffectChangeTempo final : public EffectSoundTouch
{
public:
static const ComponentInterfaceSymbol Symbol;
EffectChangeTempo();
virtual ~EffectChangeTempo();
// ComponentInterface implementation
ComponentInterfaceSymbol GetSymbol() override;
TranslatableString GetDescription() override;
ManualPageID ManualPage() override;
// EffectDefinitionInterface implementation
EffectType GetType() override;
bool SupportsAutomation() override;
// EffectClientInterface implementation
bool DefineParams( ShuttleParams & S ) override;
bool GetAutomationParameters(CommandParameters & parms) override;
bool SetAutomationParameters(CommandParameters & parms) override;
// Effect implementation
bool Init() override;
bool CheckWhetherSkipEffect() override;
bool Process() override;
double CalcPreviewInputLength(double previewLength) override;
void PopulateOrExchange(ShuttleGui & S) override;
bool TransferDataToWindow() override;
bool TransferDataFromWindow() override;
private:
// EffectChangeTempo implementation
// handlers
void OnText_PercentChange(wxCommandEvent & evt);
void OnSlider_PercentChange(wxCommandEvent & evt);
void OnText_FromBPM(wxCommandEvent & evt);
void OnText_ToBPM(wxCommandEvent & evt);
void OnText_ToLength(wxCommandEvent & evt);
// helper fns
void Update_Text_PercentChange(); // Update control per current m_PercentChange.
void Update_Slider_PercentChange(); // Update control per current m_PercentChange.
void Update_Text_ToBPM(); // Use m_FromBPM & m_PercentChange to set NEW m_ToBPM & control.
void Update_Text_ToLength(); // Use m_FromLength & m_PercentChange to set NEW m_ToLength & control.
private:
bool mUseSBSMS;
double m_PercentChange; // percent change to apply to tempo
// -100% is meaningless, but sky's the upper limit
double m_FromBPM; // user-set beats-per-minute. Zero means not yet set.
double m_ToBPM; // Zero value means not yet set.
double m_FromLength; // starting length of selection
double m_ToLength; // target length of selection
bool m_bLoopDetect;
// controls
wxTextCtrl * m_pTextCtrl_PercentChange;
wxSlider * m_pSlider_PercentChange;
wxTextCtrl * m_pTextCtrl_FromBPM;
wxTextCtrl * m_pTextCtrl_ToBPM;
wxTextCtrl * m_pTextCtrl_FromLength;
wxTextCtrl * m_pTextCtrl_ToLength;
#if USE_SBSMS
wxCheckBox * mUseSBSMSCheckBox;
#endif
DECLARE_EVENT_TABLE()
};
#endif // __AUDACITY_EFFECT_CHANGETEMPO__
#endif // USE_SOUNDTOUCH