mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-08 22:23:59 +01:00
SBSMS library/effect changes. Apparently resolves bug #170. Incorporated optimizations with minor quality changes. Returned optimization flags to build (introduced in a patch). The audacity SBSMS branch is now a trimmed down version without associated programs. Includes (untested) changes to the windows .vcproj.
This commit is contained in:
@@ -32,7 +32,6 @@ public:
|
||||
rightBuffer = NULL;
|
||||
|
||||
sbsmser = NULL;
|
||||
pitch = NULL;
|
||||
outBuf = NULL;
|
||||
outputLeftBuffer = NULL;
|
||||
outputRightBuffer = NULL;
|
||||
@@ -46,7 +45,6 @@ public:
|
||||
if(buf) free(buf);
|
||||
if(leftBuffer) free(leftBuffer);
|
||||
if(rightBuffer) free(rightBuffer);
|
||||
if(pitch) pitch_destroy(pitch);
|
||||
if(sbsmser) sbsms_destroy(sbsmser);
|
||||
if(outBuf) free(outBuf);
|
||||
if(outputLeftBuffer) free(outputLeftBuffer);
|
||||
@@ -68,7 +66,6 @@ public:
|
||||
|
||||
// Not required by callbacks, but makes for easier cleanup
|
||||
sbsms *sbsmser;
|
||||
pitcher *pitch;
|
||||
audio *outBuf;
|
||||
float *outputLeftBuffer;
|
||||
float *outputRightBuffer;
|
||||
@@ -84,37 +81,12 @@ long samplesCB(audio *chdata, long numFrames, void *userData)
|
||||
return n_read;
|
||||
}
|
||||
|
||||
real stretchCB(long nProcessed, void *userData)
|
||||
{
|
||||
sbsmsInfo *si = (sbsmsInfo*) userData;
|
||||
real t0 = (real)nProcessed/(real)si->samplesToProcess;
|
||||
real stretch = si->stretch0 + (si->stretch1-si->stretch0)*t0;
|
||||
return stretch;
|
||||
}
|
||||
|
||||
real ratioCB(long nProcessed, void *userData)
|
||||
{
|
||||
sbsmsInfo *si = (sbsmsInfo*) userData;
|
||||
real t0 = (real)nProcessed/(real)si->samplesToProcess;
|
||||
real stretch = si->stretch0 + (si->stretch1-si->stretch0)*t0;
|
||||
real t1;
|
||||
if(stretch == si->stretch0)
|
||||
t1 = 1.0/stretch;
|
||||
else
|
||||
t1 = log(stretch/si->stretch0)/(stretch-si->stretch0);
|
||||
|
||||
real ratio = si->ratio0 + (si->ratio1-si->ratio0)*t1*(real)nProcessed/(real)si->samplesToGenerate;
|
||||
|
||||
return ratio;
|
||||
}
|
||||
|
||||
void EffectSBSMS :: setParameters(double rateStart, double rateEnd, double pitchStart, double pitchEnd, int quality, bool bPreAnalyze)
|
||||
void EffectSBSMS :: setParameters(double rateStart, double rateEnd, double pitchStart, double pitchEnd, bool bPreAnalyze)
|
||||
{
|
||||
this->rateStart = rateStart;
|
||||
this->rateEnd = rateEnd;
|
||||
this->pitchStart = pitchStart;
|
||||
this->pitchEnd = pitchEnd;
|
||||
this->quality = quality;
|
||||
this->bPreAnalyze = bPreAnalyze;
|
||||
}
|
||||
|
||||
@@ -173,7 +145,7 @@ bool EffectSBSMS::ProcessLabelTrack(Track *t)
|
||||
bool EffectSBSMS::Process()
|
||||
{
|
||||
if(!bInit) {
|
||||
sbsms_init(4096);
|
||||
sbsms_init(8192);
|
||||
bInit = TRUE;
|
||||
}
|
||||
|
||||
@@ -296,13 +268,13 @@ bool EffectSBSMS::Process()
|
||||
si.rs = rb.resampler;
|
||||
si.samplesToProcess = samplesToProcess;
|
||||
si.samplesToGenerate = samplesToGenerate;
|
||||
si.stretch0 = rateStart;
|
||||
si.stretch1 = rateEnd;
|
||||
si.ratio0 = pitchStart;
|
||||
si.ratio1 = pitchEnd;
|
||||
si.rate0 = rateStart;
|
||||
si.rate1 = rateEnd;
|
||||
si.pitch0 = pitchStart;
|
||||
si.pitch1 = pitchEnd;
|
||||
|
||||
rb.sbsmser = sbsms_create(&samplesCB,&stretchCB,&ratioCB,rightTrack?2:1,quality,bPreAnalyze,true);
|
||||
rb.pitch = pitch_create(rb.sbsmser,&si,srIn/srSBSMS);
|
||||
sbsms_quality quality = sbsms_quality_fast;
|
||||
rb.sbsmser = sbsms_create(&samplesCB,&rateCBLinear,&pitchCBLinear,rightTrack?2:1,&quality,bPreAnalyze,true);
|
||||
|
||||
rb.outputLeftTrack = mFactory->NewWaveTrack(leftTrack->GetSampleFormat(),
|
||||
leftTrack->GetRate());
|
||||
@@ -311,7 +283,7 @@ bool EffectSBSMS::Process()
|
||||
rightTrack->GetRate());
|
||||
|
||||
|
||||
sampleCount blockSize = SBSMS_FRAME_SIZE[quality];
|
||||
sampleCount blockSize = quality.maxoutframesize;
|
||||
rb.outBuf = (audio*)calloc(blockSize,sizeof(audio));
|
||||
rb.outputLeftBuffer = (float*)calloc(blockSize*2,sizeof(float));
|
||||
if(rightTrack)
|
||||
@@ -355,14 +327,11 @@ bool EffectSBSMS::Process()
|
||||
|
||||
// process
|
||||
while(pos<samplesOut && outputCount) {
|
||||
long frames;
|
||||
if(pos+blockSize>samplesOut) {
|
||||
frames = samplesOut - pos;
|
||||
} else {
|
||||
frames = blockSize;
|
||||
outputCount = sbsms_read_frame(rb.outBuf, &si, rb.sbsmser, NULL, NULL);
|
||||
if(pos+outputCount>samplesOut) {
|
||||
outputCount = samplesOut - pos;
|
||||
}
|
||||
|
||||
outputCount = pitch_process(rb.outBuf, frames, rb.pitch);
|
||||
|
||||
for(int i = 0; i < outputCount; i++) {
|
||||
rb.outputLeftBuffer[i] = rb.outBuf[i][0];
|
||||
if(rightTrack)
|
||||
|
||||
@@ -18,14 +18,8 @@
|
||||
|
||||
#include "Effect.h"
|
||||
|
||||
// Soundtouch defines these as well, so get rid of them before including
|
||||
#undef PACKAGE_NAME
|
||||
#undef PACKAGE_STRING
|
||||
#undef PACKAGE_TARNAME
|
||||
#undef PACKAGE_VERSION
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
#include "sbsms.h"
|
||||
using namespace _sbsms_;
|
||||
|
||||
class WaveTrack;
|
||||
|
||||
@@ -33,12 +27,11 @@ class EffectSBSMS : public Effect {
|
||||
public:
|
||||
static bool bInit;
|
||||
virtual bool Process();
|
||||
void setParameters(double rateStart, double rateEnd, double pitchStart, double pitchEnd, int quality, bool bPreAnalyze);
|
||||
void setParameters(double rateStart, double rateEnd, double pitchStart, double pitchEnd, bool bPreAnalyze);
|
||||
|
||||
private:
|
||||
bool ProcessLabelTrack(Track *track);
|
||||
double rateStart, rateEnd, pitchStart, pitchEnd;
|
||||
int quality;
|
||||
bool bPreAnalyze;
|
||||
int mCurTrackNum;
|
||||
double mCurT0;
|
||||
|
||||
@@ -40,10 +40,12 @@
|
||||
|
||||
EffectTimeScale::EffectTimeScale()
|
||||
{
|
||||
m_RateStart = 0;
|
||||
m_RateEnd = 0;
|
||||
m_HalfStepsStart = 0;
|
||||
m_HalfStepsEnd = 0;
|
||||
m_RatePercentChangeStart = 0;
|
||||
m_RatePercentChangeEnd = 0;
|
||||
m_PitchHalfStepsStart = 0;
|
||||
m_PitchHalfStepsEnd = 0;
|
||||
m_PitchPercentChangeStart = 0;
|
||||
m_PitchPercentChangeEnd = 0;
|
||||
m_PreAnalyze = false;
|
||||
}
|
||||
|
||||
@@ -60,10 +62,12 @@ bool EffectTimeScale::Init()
|
||||
bool EffectTimeScale::PromptUser()
|
||||
{
|
||||
TimeScaleDialog dlog(this, mParent);
|
||||
dlog.m_RateStart = m_RateStart;
|
||||
dlog.m_RateEnd = m_RateEnd;
|
||||
dlog.m_HalfStepsStart = m_HalfStepsStart;
|
||||
dlog.m_HalfStepsEnd = m_HalfStepsEnd;
|
||||
dlog.m_RatePercentChangeStart = m_RatePercentChangeStart;
|
||||
dlog.m_RatePercentChangeEnd = m_RatePercentChangeEnd;
|
||||
dlog.m_PitchHalfStepsStart = m_PitchHalfStepsStart;
|
||||
dlog.m_PitchHalfStepsEnd = m_PitchHalfStepsEnd;
|
||||
dlog.m_PitchPercentChangeStart = m_PitchPercentChangeStart;
|
||||
dlog.m_PitchPercentChangeEnd = m_PitchPercentChangeEnd;
|
||||
dlog.m_PreAnalyze = m_PreAnalyze;
|
||||
|
||||
// Don't need to call TransferDataToWindow, although other
|
||||
@@ -76,10 +80,12 @@ bool EffectTimeScale::PromptUser()
|
||||
if (dlog.GetReturnCode() == wxID_CANCEL)
|
||||
return false;
|
||||
|
||||
m_RateStart = dlog.m_RateStart;
|
||||
m_RateEnd = dlog.m_RateEnd;
|
||||
m_HalfStepsStart = dlog.m_HalfStepsStart;
|
||||
m_HalfStepsEnd = dlog.m_HalfStepsEnd;
|
||||
m_RatePercentChangeStart = dlog.m_RatePercentChangeStart;
|
||||
m_RatePercentChangeEnd = dlog.m_RatePercentChangeEnd;
|
||||
m_PitchHalfStepsStart = dlog.m_PitchHalfStepsStart;
|
||||
m_PitchHalfStepsEnd = dlog.m_PitchHalfStepsEnd;
|
||||
m_PitchPercentChangeStart = dlog.m_PitchPercentChangeStart;
|
||||
m_PitchPercentChangeEnd = dlog.m_PitchPercentChangeEnd;
|
||||
m_PreAnalyze = dlog.m_PreAnalyze;
|
||||
|
||||
return true;
|
||||
@@ -87,22 +93,38 @@ bool EffectTimeScale::PromptUser()
|
||||
|
||||
bool EffectTimeScale::TransferParameters( Shuttle & shuttle )
|
||||
{
|
||||
shuttle.TransferDouble(wxT("RateStart"),m_RateStart,0.0);
|
||||
shuttle.TransferDouble(wxT("RateEnd"),m_RateEnd,0.0);
|
||||
shuttle.TransferDouble(wxT("HalfStepsStart"),m_HalfStepsStart,0.0);
|
||||
shuttle.TransferDouble(wxT("HalfStepsEnd"),m_HalfStepsEnd,0.0);
|
||||
shuttle.TransferDouble(wxT("RatePercentChangeStart"),m_RatePercentChangeStart,0.0);
|
||||
shuttle.TransferDouble(wxT("RatePercentChangeEnd"),m_RatePercentChangeEnd,0.0);
|
||||
shuttle.TransferDouble(wxT("PitchHalfStepsStart"),m_PitchHalfStepsStart,0.0);
|
||||
shuttle.TransferDouble(wxT("PitchHalfStepsEnd"),m_PitchHalfStepsEnd,0.0);
|
||||
shuttle.TransferDouble(wxT("PitchPercentChangeStart"),m_PitchPercentChangeStart,0.0);
|
||||
shuttle.TransferDouble(wxT("PitchPercentChangeEnd"),m_PitchPercentChangeEnd,0.0);
|
||||
shuttle.TransferBool(wxT("PreAnalyze"),m_PreAnalyze,false);
|
||||
return true;
|
||||
}
|
||||
|
||||
inline double PercentChangeToRatio(double percentChange)
|
||||
{
|
||||
return 1.0 + percentChange / 100.0;
|
||||
}
|
||||
|
||||
inline double HalfStepsToPercentChange(double halfSteps)
|
||||
{
|
||||
return 100.0 * (pow(2.0,halfSteps/12.0) - 1.0);
|
||||
}
|
||||
|
||||
inline double PercentChangeToHalfSteps(double percentChange)
|
||||
{
|
||||
return 12.0 * log2(PercentChangeToRatio(percentChange));
|
||||
}
|
||||
|
||||
bool EffectTimeScale::Process()
|
||||
{
|
||||
double pitchStart = pow(2.0,-(m_HalfStepsStart)/12.0);
|
||||
double pitchEnd = pow(2.0,-(m_HalfStepsEnd)/12.0);
|
||||
double rateStart = (100.0+m_RateStart)/100.0;
|
||||
double rateEnd = (100.0+m_RateEnd)/100.0;
|
||||
int quality = 1;
|
||||
this->EffectSBSMS::setParameters(rateStart,rateEnd,pitchStart,pitchEnd,quality,m_PreAnalyze);
|
||||
double pitchStart = PercentChangeToRatio(m_PitchPercentChangeStart);
|
||||
double pitchEnd = PercentChangeToRatio(m_PitchPercentChangeEnd);
|
||||
double rateStart = PercentChangeToRatio(m_RatePercentChangeStart);
|
||||
double rateEnd = PercentChangeToRatio(m_RatePercentChangeEnd);
|
||||
this->EffectSBSMS::setParameters(rateStart,rateEnd,pitchStart,pitchEnd,m_PreAnalyze);
|
||||
return this->EffectSBSMS::Process();
|
||||
}
|
||||
|
||||
@@ -110,29 +132,38 @@ bool EffectTimeScale::Process()
|
||||
// TimeScaleDialog
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#define RATE_MAX 150
|
||||
#define RATE_DEFAULT 0
|
||||
#define RATE_MIN -75
|
||||
#define HALFSTEPS_MIN -12
|
||||
#define HALFSTEPS_MAX 12
|
||||
#define RATE_PERCENTCHANGE_MAX_SLIDER 150
|
||||
#define RATE_PERCENTCHANGE_MIN_SLIDER -75
|
||||
#define RATE_PERCENTCHANGE_MAX_TEXT 500
|
||||
#define RATE_PERCENTCHANGE_MIN_TEXT -90
|
||||
#define RATE_PERCENTCHANGE_DEFAULT 0
|
||||
#define PITCH_HALFSTEPS_MIN_TEXT -12
|
||||
#define PITCH_HALFSTEPS_MAX_TEXT 12
|
||||
#define PITCH_PERCENTCHANGE_MIN_TEXT -50
|
||||
#define PITCH_PERCENTCHANGE_MAX_TEXT 100
|
||||
|
||||
#define ID_TEXT_RATE_START 10001
|
||||
#define ID_TEXT_RATE_END 10002
|
||||
#define ID_TEXT_HALFSTEPS_START 10003
|
||||
#define ID_TEXT_HALFSTEPS_END 10004
|
||||
#define ID_SLIDER_RATE_START 10007
|
||||
#define ID_SLIDER_RATE_END 10008
|
||||
|
||||
#define ID_TEXT_RATE_PERCENTCHANGE_START 10001
|
||||
#define ID_TEXT_RATE_PERCENTCHANGE_END 10002
|
||||
#define ID_TEXT_PITCH_HALFSTEPS_START 10003
|
||||
#define ID_TEXT_PITCH_HALFSTEPS_END 10004
|
||||
#define ID_TEXT_PITCH_PERCENTCHANGE_START 10005
|
||||
#define ID_TEXT_PITCH_PERCENTCHANGE_END 10006
|
||||
#define ID_SLIDER_RATE_PERCENTCHANGE_START 10007
|
||||
#define ID_SLIDER_RATE_PERCENTCHANGE_END 10008
|
||||
#define ID_CHECKBOX_PREANALYZE 10009
|
||||
|
||||
// event table for TimeScaleDialog
|
||||
|
||||
BEGIN_EVENT_TABLE(TimeScaleDialog, EffectDialog)
|
||||
EVT_TEXT(ID_TEXT_RATE_START, TimeScaleDialog::OnText_RateStart)
|
||||
EVT_TEXT(ID_TEXT_RATE_END, TimeScaleDialog::OnText_RateEnd)
|
||||
EVT_TEXT(ID_TEXT_HALFSTEPS_START, TimeScaleDialog::OnText_HalfStepsStart)
|
||||
EVT_TEXT(ID_TEXT_HALFSTEPS_END, TimeScaleDialog::OnText_HalfStepsEnd)
|
||||
EVT_SLIDER(ID_SLIDER_RATE_START, TimeScaleDialog::OnSlider_RateStart)
|
||||
EVT_SLIDER(ID_SLIDER_RATE_END, TimeScaleDialog::OnSlider_RateEnd)
|
||||
EVT_TEXT(ID_TEXT_RATE_PERCENTCHANGE_START, TimeScaleDialog::OnText_RatePercentChangeStart)
|
||||
EVT_TEXT(ID_TEXT_RATE_PERCENTCHANGE_END, TimeScaleDialog::OnText_RatePercentChangeEnd)
|
||||
EVT_TEXT(ID_TEXT_PITCH_HALFSTEPS_START, TimeScaleDialog::OnText_PitchHalfStepsStart)
|
||||
EVT_TEXT(ID_TEXT_PITCH_HALFSTEPS_END, TimeScaleDialog::OnText_PitchHalfStepsEnd)
|
||||
EVT_TEXT(ID_TEXT_PITCH_PERCENTCHANGE_START, TimeScaleDialog::OnText_PitchPercentChangeStart)
|
||||
EVT_TEXT(ID_TEXT_PITCH_PERCENTCHANGE_END, TimeScaleDialog::OnText_PitchPercentChangeEnd)
|
||||
EVT_SLIDER(ID_SLIDER_RATE_PERCENTCHANGE_START, TimeScaleDialog::OnSlider_RatePercentChangeStart)
|
||||
EVT_SLIDER(ID_SLIDER_RATE_PERCENTCHANGE_END, TimeScaleDialog::OnSlider_RatePercentChangeEnd)
|
||||
EVT_CHECKBOX(ID_CHECKBOX_PREANALYZE, TimeScaleDialog::OnCheckBox_PreAnalyze)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
@@ -146,19 +177,23 @@ TimeScaleDialog::TimeScaleDialog(EffectTimeScale *effect, wxWindow *parent)
|
||||
// event table handlers get called during this method, and those handlers that
|
||||
// can cause trouble check for NULL.
|
||||
|
||||
m_pTextCtrl_RateStart = NULL;
|
||||
m_pTextCtrl_RateEnd = NULL;
|
||||
m_pSlider_RateStart = NULL;
|
||||
m_pSlider_RateEnd = NULL;
|
||||
m_pTextCtrl_HalfStepsStart = NULL;
|
||||
m_pTextCtrl_HalfStepsEnd = NULL;
|
||||
m_pTextCtrl_RatePercentChangeStart = NULL;
|
||||
m_pTextCtrl_RatePercentChangeEnd = NULL;
|
||||
m_pSlider_RatePercentChangeStart = NULL;
|
||||
m_pSlider_RatePercentChangeEnd = NULL;
|
||||
m_pTextCtrl_PitchPercentChangeStart = NULL;
|
||||
m_pTextCtrl_PitchPercentChangeEnd = NULL;
|
||||
m_pTextCtrl_PitchHalfStepsStart = NULL;
|
||||
m_pTextCtrl_PitchHalfStepsEnd = NULL;
|
||||
m_pCheckBox_PreAnalyze = NULL;
|
||||
|
||||
// effect parameters
|
||||
m_RateStart = 0;
|
||||
m_RateEnd = 0;
|
||||
m_HalfStepsStart = 0;
|
||||
m_HalfStepsEnd = 0;
|
||||
m_RatePercentChangeStart = 0;
|
||||
m_RatePercentChangeEnd = 0;
|
||||
m_PitchPercentChangeStart = 0;
|
||||
m_PitchPercentChangeEnd = 0;
|
||||
m_PitchHalfStepsStart = 0;
|
||||
m_PitchHalfStepsEnd = 0;
|
||||
m_PreAnalyze = false;
|
||||
|
||||
Init();
|
||||
@@ -180,58 +215,90 @@ void TimeScaleDialog::PopulateOrExchange(ShuttleGui & S)
|
||||
S.EndHorizontalLay();
|
||||
S.SetBorder(5);
|
||||
|
||||
// Rate Text
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
// Rate Start
|
||||
S.StartStatic(_("Initial Tempo Change (%)"));
|
||||
{
|
||||
m_pTextCtrl_RateStart = S.Id(ID_TEXT_RATE_START)
|
||||
.AddTextBox(_("Initial Tempo Change (%):"), wxT(""), 12);
|
||||
m_pTextCtrl_RateStart->SetValidator(numvld);
|
||||
|
||||
m_pTextCtrl_RateEnd = S.Id(ID_TEXT_RATE_END)
|
||||
.AddTextBox(_("Final Tempo Change (%):"), wxT(""), 12);
|
||||
m_pTextCtrl_RateEnd->SetValidator(numvld);
|
||||
S.StartMultiColumn(1, wxCENTER);
|
||||
{
|
||||
m_pTextCtrl_RatePercentChangeStart = S.Id(ID_TEXT_RATE_PERCENTCHANGE_START)
|
||||
.AddTextBox(_(""), wxT(""), 12);
|
||||
m_pTextCtrl_RatePercentChangeStart->SetValidator(numvld);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
S.StartHorizontalLay(wxEXPAND,0);
|
||||
{
|
||||
S.SetStyle(wxSL_HORIZONTAL);
|
||||
m_pSlider_RatePercentChangeStart = S.Id(ID_SLIDER_RATE_PERCENTCHANGE_START)
|
||||
.AddSlider(wxT(""), (int)RATE_PERCENTCHANGE_DEFAULT, (int)RATE_PERCENTCHANGE_MAX_SLIDER, (int)RATE_PERCENTCHANGE_MIN_SLIDER);
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
|
||||
// Rate Slider
|
||||
S.StartHorizontalLay(wxEXPAND);
|
||||
{
|
||||
S.SetStyle(wxSL_HORIZONTAL);
|
||||
m_pSlider_RateStart = S.Id(ID_SLIDER_RATE_START)
|
||||
.AddSlider(wxT(""), (int)RATE_DEFAULT, (int)RATE_MAX, (int)RATE_MIN);
|
||||
m_pSlider_RateStart->SetName(_("Initial Tempo Change (%)"));
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
S.StartHorizontalLay(wxEXPAND);
|
||||
{
|
||||
S.SetStyle(wxSL_HORIZONTAL);
|
||||
m_pSlider_RateEnd = S.Id(ID_SLIDER_RATE_END)
|
||||
.AddSlider(wxT(""), (int)RATE_DEFAULT, (int)RATE_MAX, (int)RATE_MIN);
|
||||
m_pSlider_RateEnd->SetName(_("Final Tempo Change (%)"));
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
|
||||
// HalfStep Text
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
m_pTextCtrl_HalfStepsStart = S.Id(ID_TEXT_HALFSTEPS_START)
|
||||
.AddTextBox(_("Initial Pitch Shift (semitones) [-12 to 12]:"), wxT(""), 12);
|
||||
m_pTextCtrl_HalfStepsStart->SetValidator(numvld);
|
||||
S.EndStatic();
|
||||
|
||||
m_pTextCtrl_HalfStepsEnd = S.Id(ID_TEXT_HALFSTEPS_END)
|
||||
.AddTextBox(_("Final Pitch Shift (semitones) [-12 to 12]:"), wxT(""), 12);
|
||||
m_pTextCtrl_HalfStepsEnd->SetValidator(numvld);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
|
||||
S.StartHorizontalLay(wxEXPAND);
|
||||
S.StartStatic(_("Final Tempo Change (%)"));
|
||||
{
|
||||
S.SetStyle(wxSL_HORIZONTAL);
|
||||
m_pCheckBox_PreAnalyze = S.Id(ID_CHECKBOX_PREANALYZE)
|
||||
.AddCheckBox(wxT("Dynamic Transient Sharpening"), wxT("Dynamic Transient Sharpening"));
|
||||
S.StartMultiColumn(1, wxCENTER);
|
||||
{
|
||||
m_pTextCtrl_RatePercentChangeEnd = S.Id(ID_TEXT_RATE_PERCENTCHANGE_END)
|
||||
.AddTextBox(_(""), wxT(""), 12);
|
||||
m_pTextCtrl_RatePercentChangeEnd->SetValidator(numvld);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
S.StartHorizontalLay(wxEXPAND,0);
|
||||
{
|
||||
S.SetStyle(wxSL_HORIZONTAL);
|
||||
m_pSlider_RatePercentChangeEnd = S.Id(ID_SLIDER_RATE_PERCENTCHANGE_END)
|
||||
.AddSlider(wxT(""), (int)RATE_PERCENTCHANGE_DEFAULT, (int)RATE_PERCENTCHANGE_MAX_SLIDER, (int)RATE_PERCENTCHANGE_MIN_SLIDER);
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
S.EndStatic();
|
||||
|
||||
// Pitch Start
|
||||
S.StartStatic(_("Initial Pitch Shift"));
|
||||
{
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
m_pTextCtrl_PitchHalfStepsStart = S.Id(ID_TEXT_PITCH_HALFSTEPS_START)
|
||||
.AddTextBox(_("(semitones) [-12 to 12]:"), wxT(""), 12);
|
||||
m_pTextCtrl_PitchHalfStepsStart->SetValidator(numvld);
|
||||
|
||||
m_pTextCtrl_PitchPercentChangeStart = S.Id(ID_TEXT_PITCH_PERCENTCHANGE_START)
|
||||
.AddTextBox(_("(%) [-50 to 100]:"), wxT(""), 12);
|
||||
m_pTextCtrl_PitchPercentChangeStart->SetValidator(numvld);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
|
||||
// Pitch End
|
||||
S.StartStatic(_("Final Pitch Shift"));
|
||||
{
|
||||
S.StartMultiColumn(2, wxCENTER);
|
||||
{
|
||||
m_pTextCtrl_PitchHalfStepsEnd = S.Id(ID_TEXT_PITCH_HALFSTEPS_END)
|
||||
.AddTextBox(_("(semitones) [-12 to 12]:"), wxT(""), 12);
|
||||
m_pTextCtrl_PitchHalfStepsEnd->SetValidator(numvld);
|
||||
|
||||
m_pTextCtrl_PitchPercentChangeEnd = S.Id(ID_TEXT_PITCH_PERCENTCHANGE_END)
|
||||
.AddTextBox(_("(%) [-50 to 100]:"), wxT(""), 12);
|
||||
m_pTextCtrl_PitchPercentChangeEnd->SetValidator(numvld);
|
||||
}
|
||||
S.EndMultiColumn();
|
||||
}
|
||||
S.EndStatic();
|
||||
|
||||
S.StartStatic(_("Options"));
|
||||
{
|
||||
S.StartHorizontalLay(wxEXPAND);
|
||||
{
|
||||
S.SetStyle(wxSL_HORIZONTAL);
|
||||
m_pCheckBox_PreAnalyze = S.Id(ID_CHECKBOX_PREANALYZE)
|
||||
.AddCheckBox(wxT("Dynamic Transient Sharpening"), wxT("Dynamic Transient Sharpening"));
|
||||
}
|
||||
S.EndHorizontalLay();
|
||||
}
|
||||
S.EndStatic();
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -240,12 +307,14 @@ bool TimeScaleDialog::TransferDataToWindow()
|
||||
{
|
||||
m_bLoopDetect = true;
|
||||
|
||||
this->Update_Text_RateStart();
|
||||
this->Update_Slider_RateStart();
|
||||
this->Update_Text_RateEnd();
|
||||
this->Update_Slider_RateEnd();
|
||||
this->Update_Text_HalfStepsStart();
|
||||
this->Update_Text_HalfStepsEnd();
|
||||
this->Update_Text_RatePercentChangeStart();
|
||||
this->Update_Text_RatePercentChangeEnd();
|
||||
this->Update_Slider_RatePercentChangeStart();
|
||||
this->Update_Slider_RatePercentChangeEnd();
|
||||
this->Update_Text_PitchHalfStepsStart();
|
||||
this->Update_Text_PitchHalfStepsEnd();
|
||||
this->Update_Text_PitchPercentChangeStart();
|
||||
this->Update_Text_PitchPercentChangeEnd();
|
||||
this->Update_CheckBox_PreAnalyze();
|
||||
|
||||
m_bLoopDetect = false;
|
||||
@@ -257,32 +326,46 @@ bool TimeScaleDialog::TransferDataFromWindow()
|
||||
{
|
||||
wxString str;
|
||||
|
||||
if (m_pTextCtrl_RateStart) {
|
||||
str = m_pTextCtrl_RateStart->GetValue();
|
||||
if (m_pTextCtrl_RatePercentChangeStart) {
|
||||
str = m_pTextCtrl_RatePercentChangeStart->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_RateStart = newValue;
|
||||
m_RatePercentChangeStart = newValue;
|
||||
}
|
||||
|
||||
if (m_pTextCtrl_RateEnd) {
|
||||
str = m_pTextCtrl_RateEnd->GetValue();
|
||||
if (m_pTextCtrl_RatePercentChangeEnd) {
|
||||
str = m_pTextCtrl_RatePercentChangeEnd->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_RateEnd = newValue;
|
||||
m_RatePercentChangeEnd = newValue;
|
||||
}
|
||||
|
||||
if (m_pTextCtrl_HalfStepsStart) {
|
||||
str = m_pTextCtrl_HalfStepsStart->GetValue();
|
||||
if (m_pTextCtrl_PitchHalfStepsStart) {
|
||||
str = m_pTextCtrl_PitchHalfStepsStart->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_HalfStepsStart = newValue;
|
||||
m_PitchHalfStepsStart = newValue;
|
||||
}
|
||||
|
||||
if (m_pTextCtrl_HalfStepsEnd) {
|
||||
str = m_pTextCtrl_HalfStepsEnd->GetValue();
|
||||
if (m_pTextCtrl_PitchHalfStepsEnd) {
|
||||
str = m_pTextCtrl_PitchHalfStepsEnd->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_HalfStepsEnd = newValue;
|
||||
m_PitchHalfStepsEnd = newValue;
|
||||
}
|
||||
|
||||
if (m_pTextCtrl_PitchPercentChangeStart) {
|
||||
str = m_pTextCtrl_PitchPercentChangeStart->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_PitchPercentChangeStart = newValue;
|
||||
}
|
||||
|
||||
if (m_pTextCtrl_PitchPercentChangeEnd) {
|
||||
str = m_pTextCtrl_PitchPercentChangeEnd->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_PitchPercentChangeEnd = newValue;
|
||||
}
|
||||
|
||||
if(m_pCheckBox_PreAnalyze) {
|
||||
@@ -295,105 +378,171 @@ bool TimeScaleDialog::TransferDataFromWindow()
|
||||
bool TimeScaleDialog::CheckParameters()
|
||||
{
|
||||
return
|
||||
(m_RateStart >= -90.0 && m_RateStart <= 500.0)
|
||||
(m_RatePercentChangeStart >= RATE_PERCENTCHANGE_MIN_TEXT &&
|
||||
m_RatePercentChangeStart <= RATE_PERCENTCHANGE_MAX_TEXT)
|
||||
&&
|
||||
(m_RateEnd >= -90.0 && m_RateEnd <= 500.0)
|
||||
(m_RatePercentChangeEnd >= RATE_PERCENTCHANGE_MIN_TEXT &&
|
||||
m_RatePercentChangeEnd <= RATE_PERCENTCHANGE_MAX_TEXT)
|
||||
&&
|
||||
(m_HalfStepsStart >= -12 && m_HalfStepsStart <=12)
|
||||
(m_PitchHalfStepsStart >= PITCH_HALFSTEPS_MIN_TEXT &&
|
||||
m_PitchHalfStepsStart <= PITCH_HALFSTEPS_MAX_TEXT)
|
||||
&&
|
||||
(m_HalfStepsEnd >= -12 && m_HalfStepsEnd <=12);
|
||||
(m_PitchHalfStepsEnd >= PITCH_HALFSTEPS_MIN_TEXT &&
|
||||
m_PitchHalfStepsEnd <= PITCH_HALFSTEPS_MAX_TEXT)
|
||||
&&
|
||||
(m_PitchPercentChangeStart >= PITCH_PERCENTCHANGE_MIN_TEXT &&
|
||||
m_PitchPercentChangeStart <= PITCH_PERCENTCHANGE_MAX_TEXT)
|
||||
&&
|
||||
(m_PitchPercentChangeEnd >= PITCH_PERCENTCHANGE_MIN_TEXT &&
|
||||
m_PitchPercentChangeEnd <= PITCH_PERCENTCHANGE_MAX_TEXT);
|
||||
}
|
||||
|
||||
// handler implementations for TimeScaleDialog
|
||||
|
||||
void TimeScaleDialog::OnText_RateStart(wxCommandEvent & event)
|
||||
void TimeScaleDialog::OnText_RatePercentChangeStart(wxCommandEvent & event)
|
||||
{
|
||||
if (m_bLoopDetect)
|
||||
return;
|
||||
|
||||
if (m_pTextCtrl_RateStart) {
|
||||
wxString str = m_pTextCtrl_RateStart->GetValue();
|
||||
if (m_pTextCtrl_RatePercentChangeStart) {
|
||||
wxString str = m_pTextCtrl_RatePercentChangeStart->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_RateStart = newValue;
|
||||
m_RatePercentChangeStart = newValue;
|
||||
|
||||
m_bLoopDetect = true;
|
||||
this->Update_Slider_RateStart();
|
||||
this->Update_Slider_RatePercentChangeStart();
|
||||
m_bLoopDetect = false;
|
||||
|
||||
FindWindow(wxID_OK)->Enable(CheckParameters());
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::OnText_RateEnd(wxCommandEvent & event)
|
||||
void TimeScaleDialog::OnText_RatePercentChangeEnd(wxCommandEvent & event)
|
||||
{
|
||||
if (m_bLoopDetect)
|
||||
return;
|
||||
|
||||
if (m_pTextCtrl_RateEnd) {
|
||||
wxString str = m_pTextCtrl_RateEnd->GetValue();
|
||||
if (m_pTextCtrl_RatePercentChangeEnd) {
|
||||
wxString str = m_pTextCtrl_RatePercentChangeEnd->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_RateEnd = newValue;
|
||||
m_RatePercentChangeEnd = newValue;
|
||||
|
||||
m_bLoopDetect = true;
|
||||
this->Update_Slider_RateEnd();
|
||||
this->Update_Slider_RatePercentChangeEnd();
|
||||
m_bLoopDetect = false;
|
||||
|
||||
FindWindow(wxID_OK)->Enable(CheckParameters());
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::OnSlider_RateStart(wxCommandEvent & event)
|
||||
void TimeScaleDialog::OnSlider_RatePercentChangeStart(wxCommandEvent & event)
|
||||
{
|
||||
if (m_bLoopDetect)
|
||||
return;
|
||||
|
||||
if (m_pSlider_RateStart) {
|
||||
m_RateStart = (double)(m_pSlider_RateStart->GetValue());
|
||||
if (m_pSlider_RatePercentChangeStart) {
|
||||
m_RatePercentChangeStart = (double)(m_pSlider_RatePercentChangeStart->GetValue());
|
||||
|
||||
m_bLoopDetect = true;
|
||||
this->Update_Text_RateStart();
|
||||
this->Update_Text_RatePercentChangeStart();
|
||||
m_bLoopDetect = false;
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::OnSlider_RateEnd(wxCommandEvent & event)
|
||||
void TimeScaleDialog::OnSlider_RatePercentChangeEnd(wxCommandEvent & event)
|
||||
{
|
||||
if (m_bLoopDetect)
|
||||
return;
|
||||
|
||||
if (m_pSlider_RateEnd) {
|
||||
m_RateEnd = (double)(m_pSlider_RateEnd->GetValue());
|
||||
if (m_pSlider_RatePercentChangeEnd) {
|
||||
m_RatePercentChangeEnd = (double)(m_pSlider_RatePercentChangeEnd->GetValue());
|
||||
|
||||
m_bLoopDetect = true;
|
||||
this->Update_Text_RateEnd();
|
||||
this->Update_Text_RatePercentChangeEnd();
|
||||
m_bLoopDetect = false;
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::OnText_HalfStepsStart(wxCommandEvent & event)
|
||||
void TimeScaleDialog::OnText_PitchHalfStepsStart(wxCommandEvent & event)
|
||||
{
|
||||
if (m_pTextCtrl_HalfStepsStart) {
|
||||
wxString str = m_pTextCtrl_HalfStepsStart->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_HalfStepsStart = newValue;
|
||||
if (m_bLoopDetect)
|
||||
return;
|
||||
|
||||
FindWindow(wxID_OK)->Enable(CheckParameters());
|
||||
}
|
||||
if (m_pTextCtrl_PitchHalfStepsStart) {
|
||||
wxString str = m_pTextCtrl_PitchHalfStepsStart->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_PitchHalfStepsStart = newValue;
|
||||
m_PitchPercentChangeStart = HalfStepsToPercentChange(newValue);
|
||||
|
||||
m_bLoopDetect = true;
|
||||
this->Update_Text_PitchPercentChangeStart();
|
||||
m_bLoopDetect = false;
|
||||
|
||||
FindWindow(wxID_OK)->Enable(CheckParameters());
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::OnText_HalfStepsEnd(wxCommandEvent & event)
|
||||
void TimeScaleDialog::OnText_PitchHalfStepsEnd(wxCommandEvent & event)
|
||||
{
|
||||
if (m_pTextCtrl_HalfStepsEnd) {
|
||||
wxString str = m_pTextCtrl_HalfStepsEnd->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_HalfStepsEnd = newValue;
|
||||
|
||||
FindWindow(wxID_OK)->Enable(CheckParameters());
|
||||
}
|
||||
if (m_bLoopDetect)
|
||||
return;
|
||||
|
||||
if (m_pTextCtrl_PitchHalfStepsEnd) {
|
||||
wxString str = m_pTextCtrl_PitchHalfStepsEnd->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_PitchHalfStepsEnd = newValue;
|
||||
m_PitchPercentChangeEnd = HalfStepsToPercentChange(newValue);
|
||||
|
||||
m_bLoopDetect = true;
|
||||
this->Update_Text_PitchPercentChangeEnd();
|
||||
m_bLoopDetect = false;
|
||||
|
||||
FindWindow(wxID_OK)->Enable(CheckParameters());
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::OnText_PitchPercentChangeStart(wxCommandEvent & event)
|
||||
{
|
||||
if (m_bLoopDetect)
|
||||
return;
|
||||
|
||||
if (m_pTextCtrl_PitchPercentChangeStart) {
|
||||
wxString str = m_pTextCtrl_PitchPercentChangeStart->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_PitchPercentChangeStart = newValue;
|
||||
m_PitchHalfStepsStart = PercentChangeToHalfSteps(newValue);
|
||||
|
||||
m_bLoopDetect = true;
|
||||
this->Update_Text_PitchHalfStepsStart();
|
||||
m_bLoopDetect = false;
|
||||
|
||||
FindWindow(wxID_OK)->Enable(CheckParameters());
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::OnText_PitchPercentChangeEnd(wxCommandEvent & event)
|
||||
{
|
||||
if (m_bLoopDetect)
|
||||
return;
|
||||
|
||||
if (m_pTextCtrl_PitchPercentChangeEnd) {
|
||||
wxString str = m_pTextCtrl_PitchPercentChangeEnd->GetValue();
|
||||
double newValue = 0;
|
||||
str.ToDouble(&newValue);
|
||||
m_PitchPercentChangeEnd = newValue;
|
||||
m_PitchHalfStepsEnd = PercentChangeToHalfSteps(newValue);
|
||||
|
||||
m_bLoopDetect = true;
|
||||
this->Update_Text_PitchHalfStepsEnd();
|
||||
m_bLoopDetect = false;
|
||||
|
||||
FindWindow(wxID_OK)->Enable(CheckParameters());
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::OnCheckBox_PreAnalyze(wxCommandEvent & event)
|
||||
@@ -403,53 +552,71 @@ void TimeScaleDialog::OnCheckBox_PreAnalyze(wxCommandEvent & event)
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::Update_Text_RateStart()
|
||||
void TimeScaleDialog::Update_Text_RatePercentChangeStart()
|
||||
{
|
||||
if (m_pTextCtrl_RateStart) {
|
||||
if (m_pTextCtrl_RatePercentChangeStart) {
|
||||
wxString str;
|
||||
str.Printf(wxT("%.3f"), m_RateStart);
|
||||
m_pTextCtrl_RateStart->SetValue(str);
|
||||
str.Printf(wxT("%.3f"), m_RatePercentChangeStart);
|
||||
m_pTextCtrl_RatePercentChangeStart->SetValue(str);
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::Update_Text_RateEnd()
|
||||
void TimeScaleDialog::Update_Text_RatePercentChangeEnd()
|
||||
{
|
||||
if (m_pTextCtrl_RateEnd) {
|
||||
if (m_pTextCtrl_RatePercentChangeEnd) {
|
||||
wxString str;
|
||||
str.Printf(wxT("%.3f"), m_RateEnd);
|
||||
m_pTextCtrl_RateEnd->SetValue(str);
|
||||
str.Printf(wxT("%.3f"), m_RatePercentChangeEnd);
|
||||
m_pTextCtrl_RatePercentChangeEnd->SetValue(str);
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::Update_Slider_RateStart()
|
||||
void TimeScaleDialog::Update_Slider_RatePercentChangeStart()
|
||||
{
|
||||
if (m_pSlider_RateStart) {
|
||||
m_pSlider_RateStart->SetValue((int)(m_RateStart + 0.5));
|
||||
if (m_pSlider_RatePercentChangeStart) {
|
||||
m_pSlider_RatePercentChangeStart->SetValue((int)(m_RatePercentChangeStart + 0.5));
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::Update_Slider_RateEnd()
|
||||
void TimeScaleDialog::Update_Slider_RatePercentChangeEnd()
|
||||
{
|
||||
if (m_pSlider_RateEnd) {
|
||||
m_pSlider_RateEnd->SetValue((int)(m_RateEnd + 0.5));
|
||||
if (m_pSlider_RatePercentChangeEnd) {
|
||||
m_pSlider_RatePercentChangeEnd->SetValue((int)(m_RatePercentChangeEnd + 0.5));
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::Update_Text_HalfStepsStart()
|
||||
void TimeScaleDialog::Update_Text_PitchHalfStepsStart()
|
||||
{
|
||||
if (m_pTextCtrl_HalfStepsStart) {
|
||||
if (m_pTextCtrl_PitchHalfStepsStart) {
|
||||
wxString str;
|
||||
str.Printf(wxT("%.3f"), m_HalfStepsStart);
|
||||
m_pTextCtrl_HalfStepsStart->SetValue(str);
|
||||
str.Printf(wxT("%.3f"), m_PitchHalfStepsStart);
|
||||
m_pTextCtrl_PitchHalfStepsStart->SetValue(str);
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::Update_Text_HalfStepsEnd()
|
||||
void TimeScaleDialog::Update_Text_PitchHalfStepsEnd()
|
||||
{
|
||||
if (m_pTextCtrl_HalfStepsEnd) {
|
||||
if (m_pTextCtrl_PitchHalfStepsEnd) {
|
||||
wxString str;
|
||||
str.Printf(wxT("%.3f"), m_HalfStepsEnd);
|
||||
m_pTextCtrl_HalfStepsEnd->SetValue(str);
|
||||
str.Printf(wxT("%.3f"), m_PitchHalfStepsEnd);
|
||||
m_pTextCtrl_PitchHalfStepsEnd->SetValue(str);
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::Update_Text_PitchPercentChangeStart()
|
||||
{
|
||||
if (m_pTextCtrl_PitchPercentChangeStart) {
|
||||
wxString str;
|
||||
str.Printf(wxT("%.3f"), m_PitchPercentChangeStart);
|
||||
m_pTextCtrl_PitchPercentChangeStart->SetValue(str);
|
||||
}
|
||||
}
|
||||
|
||||
void TimeScaleDialog::Update_Text_PitchPercentChangeEnd()
|
||||
{
|
||||
if (m_pTextCtrl_PitchPercentChangeEnd) {
|
||||
wxString str;
|
||||
str.Printf(wxT("%.3f"), m_PitchPercentChangeEnd);
|
||||
m_pTextCtrl_PitchPercentChangeEnd->SetValue(str);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -57,10 +57,12 @@ class EffectTimeScale : public EffectSBSMS {
|
||||
virtual bool Process();
|
||||
|
||||
private:
|
||||
double m_RateStart;
|
||||
double m_RateEnd;
|
||||
double m_HalfStepsStart;
|
||||
double m_HalfStepsEnd;
|
||||
double m_RatePercentChangeStart;
|
||||
double m_RatePercentChangeEnd;
|
||||
double m_PitchHalfStepsStart;
|
||||
double m_PitchHalfStepsEnd;
|
||||
double m_PitchPercentChangeStart;
|
||||
double m_PitchPercentChangeEnd;
|
||||
bool m_PreAnalyze;
|
||||
|
||||
friend class TimeScaleDialog;
|
||||
@@ -81,22 +83,26 @@ class TimeScaleDialog:public EffectDialog {
|
||||
|
||||
private:
|
||||
// handlers
|
||||
void OnText_RateStart(wxCommandEvent & event);
|
||||
void OnText_RateEnd(wxCommandEvent & event);
|
||||
void OnText_HalfStepsStart(wxCommandEvent & event);
|
||||
void OnText_HalfStepsEnd(wxCommandEvent & event);
|
||||
void OnSlider_RateStart(wxCommandEvent & event);
|
||||
void OnSlider_RateEnd(wxCommandEvent & event);
|
||||
void OnText_RatePercentChangeStart(wxCommandEvent & event);
|
||||
void OnText_RatePercentChangeEnd(wxCommandEvent & event);
|
||||
void OnText_PitchPercentChangeStart(wxCommandEvent & event);
|
||||
void OnText_PitchPercentChangeEnd(wxCommandEvent & event);
|
||||
void OnText_PitchHalfStepsStart(wxCommandEvent & event);
|
||||
void OnText_PitchHalfStepsEnd(wxCommandEvent & event);
|
||||
void OnSlider_RatePercentChangeStart(wxCommandEvent & event);
|
||||
void OnSlider_RatePercentChangeEnd(wxCommandEvent & event);
|
||||
void OnCheckBox_PreAnalyze(wxCommandEvent & event);
|
||||
|
||||
// helper fns
|
||||
bool CheckParameters();
|
||||
void Update_Text_RateStart();
|
||||
void Update_Text_RateEnd();
|
||||
void Update_Text_HalfStepsStart();
|
||||
void Update_Text_HalfStepsEnd();
|
||||
void Update_Slider_RateStart();
|
||||
void Update_Slider_RateEnd();
|
||||
void Update_Text_RatePercentChangeStart();
|
||||
void Update_Text_RatePercentChangeEnd();
|
||||
void Update_Text_PitchPercentChangeStart();
|
||||
void Update_Text_PitchPercentChangeEnd();
|
||||
void Update_Text_PitchHalfStepsStart();
|
||||
void Update_Text_PitchHalfStepsEnd();
|
||||
void Update_Slider_RatePercentChangeStart();
|
||||
void Update_Slider_RatePercentChangeEnd();
|
||||
void Update_CheckBox_PreAnalyze();
|
||||
|
||||
private:
|
||||
@@ -104,19 +110,23 @@ class TimeScaleDialog:public EffectDialog {
|
||||
bool m_bLoopDetect;
|
||||
|
||||
// controls
|
||||
wxTextCtrl *m_pTextCtrl_RateStart;
|
||||
wxSlider *m_pSlider_RateStart;
|
||||
wxTextCtrl *m_pTextCtrl_RateEnd;
|
||||
wxSlider *m_pSlider_RateEnd;
|
||||
wxTextCtrl *m_pTextCtrl_HalfStepsStart;
|
||||
wxTextCtrl *m_pTextCtrl_HalfStepsEnd;
|
||||
wxTextCtrl *m_pTextCtrl_RatePercentChangeStart;
|
||||
wxTextCtrl *m_pTextCtrl_RatePercentChangeEnd;
|
||||
wxSlider *m_pSlider_RatePercentChangeStart;
|
||||
wxSlider *m_pSlider_RatePercentChangeEnd;
|
||||
wxTextCtrl *m_pTextCtrl_PitchHalfStepsStart;
|
||||
wxTextCtrl *m_pTextCtrl_PitchHalfStepsEnd;
|
||||
wxTextCtrl *m_pTextCtrl_PitchPercentChangeStart;
|
||||
wxTextCtrl *m_pTextCtrl_PitchPercentChangeEnd;
|
||||
wxCheckBox *m_pCheckBox_PreAnalyze;
|
||||
|
||||
public:
|
||||
double m_RateStart;
|
||||
double m_RateEnd;
|
||||
double m_HalfStepsStart;
|
||||
double m_HalfStepsEnd;
|
||||
double m_RatePercentChangeStart;
|
||||
double m_RatePercentChangeEnd;
|
||||
double m_PitchHalfStepsStart;
|
||||
double m_PitchHalfStepsEnd;
|
||||
double m_PitchPercentChangeStart;
|
||||
double m_PitchPercentChangeEnd;
|
||||
bool m_PreAnalyze;
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user