summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Schürmann <daschuer@mixxx.org>2018-07-25 23:11:48 +0200
committerDaniel Schürmann <daschuer@mixxx.org>2018-09-14 23:50:09 +0200
commit657bf7a37b09b1945d9c681cd7cf1c02afe29a27 (patch)
tree9329ad1442a1a5a96d9dcfa5a2ef8448617a621a
parent6bb06b736ef1be7204732c81c551e1dc6e31ec88 (diff)
Switch all code to the new rate_ratio control
-rw-r--r--src/engine/bpmcontrol.cpp34
-rw-r--r--src/engine/bpmcontrol.h4
-rw-r--r--src/engine/ratecontrol.cpp152
-rw-r--r--src/engine/ratecontrol.h11
-rw-r--r--src/vinylcontrol/vinylcontrol.cpp3
-rw-r--r--src/vinylcontrol/vinylcontrol.h8
-rw-r--r--src/vinylcontrol/vinylcontrolxwax.cpp32
-rw-r--r--src/vinylcontrol/vinylcontrolxwax.h1
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.cpp34
-rw-r--r--src/waveform/renderers/waveformwidgetrenderer.h10
-rw-r--r--src/widget/wnumberrate.cpp12
-rw-r--r--src/widget/wnumberrate.h5
12 files changed, 111 insertions, 195 deletions
diff --git a/src/engine/bpmcontrol.cpp b/src/engine/bpmcontrol.cpp
index c3877c4d63..42c7f20e59 100644
--- a/src/engine/bpmcontrol.cpp
+++ b/src/engine/bpmcontrol.cpp
@@ -35,16 +35,10 @@ BpmControl::BpmControl(QString group,
m_pPlayButton = new ControlProxy(group, "play", this);
m_pReverseButton = new ControlProxy(group, "reverse", this);
m_pRateRatio = new ControlProxy(group, "rate_ratio", this);
- m_pRateSlider = new ControlProxy(group, "rate", this);
- m_pRateSlider->connectValueChanged(SLOT(slotUpdateEngineBpm()),
+ m_pRateRatio->connectValueChanged(SLOT(slotUpdateEngineBpm()),
Qt::DirectConnection);
+
m_pQuantize = ControlObject::getControl(group, "quantize");
- m_pRateRange = new ControlProxy(group, "rateRange", this);
- m_pRateRange->connectValueChanged(SLOT(slotUpdateRateSlider()),
- Qt::DirectConnection);
- m_pRateDir = new ControlProxy(group, "rate_dir", this);
- m_pRateDir->connectValueChanged(SLOT(slotUpdateEngineBpm()),
- Qt::DirectConnection);
m_pPrevBeat.reset(new ControlProxy(group, "beat_prev"));
m_pNextBeat.reset(new ControlProxy(group, "beat_next"));
@@ -219,7 +213,7 @@ void BpmControl::slotTapFilter(double averageLength, int numSamples) {
// (60 seconds per minute) * (1000 milliseconds per second) / (X millis per
// beat) = Y beats/minute
- double averageBpm = 60.0 * 1000.0 / averageLength / calcRateRatio();
+ double averageBpm = 60.0 * 1000.0 / averageLength / m_pRateRatio->get();
m_pBeats->setBpm(averageBpm);
}
@@ -706,9 +700,8 @@ double BpmControl::getPhaseOffset(double dThisPosition) {
}
void BpmControl::slotUpdateEngineBpm() {
- // Adjust playback bpm in response to a change in the rate slider.
- double dRate = calcRateRatio();
- m_pRateRatio->set(dRate);
+ // Adjust playback bpm in response to a rate_ration update
+ double dRate = m_pRateRatio->get();
m_pEngineBpm->set(m_pLocalBpm->get() * dRate);
}
@@ -722,14 +715,6 @@ void BpmControl::slotUpdateRateSlider() {
double dRateRatio = m_pEngineBpm->get() / localBpm;
m_pRateRatio->set(dRateRatio);
-
- double rateScale = m_pRateDir->get() * m_pRateRange->get();
- if (rateScale == 0.0) {
- return;
- }
-
- double dRateSlider = (dRateRatio - 1.0) / rateScale;
- m_pRateSlider->set(dRateSlider);
}
void BpmControl::trackLoaded(TrackPointer pNewTrack, TrackPointer pOldTrack) {
@@ -844,15 +829,10 @@ void BpmControl::collectFeatures(GroupFeatureState* pGroupFeatures) const {
&dThisBeatLength, &dThisBeatFraction)) {
pGroupFeatures->has_beat_length_sec = true;
// Note: dThisBeatLength is fractional frames count * 2 (stereo samples)
- pGroupFeatures->beat_length_sec = dThisBeatLength / m_pTrack->getSampleRate() / 2 * calcRateRatio();
+ pGroupFeatures->beat_length_sec = dThisBeatLength
+ / m_pTrack->getSampleRate() / 2 * m_pRateRatio->get();
pGroupFeatures->has_beat_fraction = true;
pGroupFeatures->beat_fraction = dThisBeatFraction;
}
}
-
-double BpmControl::calcRateRatio() const {
- double rateRatio = 1.0 + m_pRateDir->get() * m_pRateRange->get() *
- m_pRateSlider->get();
- return rateRatio;
-}
diff --git a/src/engine/bpmcontrol.h b/src/engine/bpmcontrol.h
index 8611457820..afb1256720 100644
--- a/src/engine/bpmcontrol.h
+++ b/src/engine/bpmcontrol.h
@@ -97,7 +97,6 @@ class BpmControl : public EngineControl {
}
bool syncTempo();
double calcSyncAdjustment(double my_percentage, bool userTweakingSync);
- double calcRateRatio() const;
friend class SyncControl;
@@ -106,10 +105,7 @@ class BpmControl : public EngineControl {
QAtomicInt m_oldPlayButton;
ControlProxy* m_pReverseButton;
ControlProxy* m_pRateRatio;
- ControlProxy* m_pRateSlider;
ControlObject* m_pQuantize;
- ControlProxy* m_pRateRange;
- ControlProxy* m_pRateDir;
// ControlObjects that come from QuantizeControl
QScopedPointer<ControlProxy> m_pNextBeat;
diff --git a/src/engine/ratecontrol.cpp b/src/engine/ratecontrol.cpp
index f184e6010c..7ccd51096e 100644
--- a/src/engine/ratecontrol.cpp
+++ b/src/engine/ratecontrol.cpp
@@ -18,10 +18,10 @@
#include <QtDebug>
// Static default values for rate buttons (percents)
-double RateControl::m_dTemporaryRateChangeCoarse;
-double RateControl::m_dTemporaryRateChangeFine;
-double RateControl::m_dPermanentRateChangeCoarse;
-double RateControl::m_dPermanentRateChangeFine;
+double RateControl::m_sTemporaryRateChangeCoarse;
+double RateControl::m_sTemporaryRateChangeFine;
+double RateControl::m_sPermanentRateChangeCoarse;
+double RateControl::m_sPermanentRateChangeFine;
int RateControl::m_iRateRampSensitivity;
RateControl::RampMode RateControl::m_eRateRampMode;
@@ -49,11 +49,22 @@ RateControl::RateControl(QString group,
Qt::DirectConnection);
m_pRateDir = new ControlObject(ConfigKey(group, "rate_dir"));
- m_pRateRange = new ControlPotmeter(ConfigKey(group, "rateRange"), 0.01, 0.90);
+ connect(m_pRateDir, SIGNAL(valueChanged(double)),
+ this, SLOT(slotRateRangeChanged(double)),
+ Qt::DirectConnection);
+ m_pRateRange = new ControlPotmeter(
+ ConfigKey(group, "rateRange"), 0.01, 0.90);
+ connect(m_pRateRange, SIGNAL(valueChanged(double)),
+ this, SLOT(slotRateRangeChanged(double)),
+ Qt::DirectConnection);
+
// Allow rate slider to go out of bounds so that master sync rate
// adjustments are not capped.
- m_pRateSlider = new ControlPotmeter(ConfigKey(group, "rate"),
- -1.0, 1.0, true);
+ m_pRateSlider = new ControlPotmeter(
+ ConfigKey(group, "rate"), -1.0, 1.0, true);
+ connect(m_pRateSlider, SIGNAL(valueChanged(double)),
+ this, SLOT(slotRateSliderChanged(double)),
+ Qt::DirectConnection);
// Search rate. Rate used when searching in sound. This overrules the
// playback rate
@@ -241,42 +252,52 @@ void RateControl::setRateRampSensitivity(int sense) {
//static
void RateControl::setTemporaryRateChangeCoarseAmount(double v) {
- m_dTemporaryRateChangeCoarse = v;
+ m_sTemporaryRateChangeCoarse = v;
}
//static
void RateControl::setTemporaryRateChangeFineAmount(double v) {
- m_dTemporaryRateChangeFine = v;
+ m_sTemporaryRateChangeFine = v;
}
//static
void RateControl::setPermanentRateChangeCoarseAmount(double v) {
- m_dPermanentRateChangeCoarse = v;
+ m_sPermanentRateChangeCoarse = v;
}
//static
void RateControl::setPermanentRateChangeFineAmount(double v) {
- m_dPermanentRateChangeFine = v;
+ m_sPermanentRateChangeFine = v;
}
//static
double RateControl::getTemporaryRateChangeCoarseAmount() {
- return m_dTemporaryRateChangeCoarse;
+ return m_sTemporaryRateChangeCoarse;
}
//static
double RateControl::getTemporaryRateChangeFineAmount() {
- return m_dTemporaryRateChangeFine;
+ return m_sTemporaryRateChangeFine;
}
//static
double RateControl::getPermanentRateChangeCoarseAmount() {
- return m_dPermanentRateChangeCoarse;
+ return m_sPermanentRateChangeCoarse;
}
//static
double RateControl::getPermanentRateChangeFineAmount() {
- return m_dPermanentRateChangeFine;
+ return m_sPermanentRateChangeFine;
+}
+
+void RateControl::slotRateRangeChanged(double) {
+ // update RateSlider with the new Range value butdo not change m_pRateRatio
+ slotRateRatioChanged(m_pRateRatio->get());
+}
+
+void RateControl::slotRateSliderChanged(double v) {
+ double rateRatio = 1.0 + m_pRateDir->get() * m_pRateRange->get() * v;
+ m_pRateRatio->set(rateRatio);
}
void RateControl::slotRateRatioChanged(double v) {
@@ -317,95 +338,72 @@ void RateControl::slotControlFastBack(double v)
m_pRateSearch->set(-4.);
}
-void RateControl::slotControlRatePermDown(double)
-{
+void RateControl::slotControlRatePermDown(double v) {
// Adjusts temp rate down if button pressed
- if (buttonRatePermDown->get()) {
- m_pRateSlider->set(m_pRateSlider->get() -
- m_pRateDir->get() * m_dPermanentRateChangeCoarse / (100 * m_pRateRange->get()));
+ if (v > 0.0) {
+ m_pRateRatio->set(m_pRateRatio->get() - (m_sPermanentRateChangeCoarse / 100));
}
}
-void RateControl::slotControlRatePermDownSmall(double)
-{
+void RateControl::slotControlRatePermDownSmall(double v) {
// Adjusts temp rate down if button pressed
- if (buttonRatePermDownSmall->get())
- m_pRateSlider->set(m_pRateSlider->get() -
- m_pRateDir->get() * m_dPermanentRateChangeFine / (100. * m_pRateRange->get()));
+ if (v > 0.0)
+ m_pRateRatio->set(m_pRateRatio->get() - (m_sPermanentRateChangeFine / 100));
}
-void RateControl::slotControlRatePermUp(double)
-{
+void RateControl::slotControlRatePermUp(double v) {
// Adjusts temp rate up if button pressed
- if (buttonRatePermUp->get()) {
- m_pRateSlider->set(m_pRateSlider->get() +
- m_pRateDir->get() * m_dPermanentRateChangeCoarse / (100. * m_pRateRange->get()));
+ if (v > 0.0) {
+ m_pRateRatio->set(m_pRateRatio->get() - (m_sPermanentRateChangeCoarse / 100));
}
}
-void RateControl::slotControlRatePermUpSmall(double)
-{
+void RateControl::slotControlRatePermUpSmall(double v) {
// Adjusts temp rate up if button pressed
- if (buttonRatePermUpSmall->get())
- m_pRateSlider->set(m_pRateSlider->get() +
- m_pRateDir->get() * m_dPermanentRateChangeFine / (100. * m_pRateRange->get()));
+ if (v > 0.0) {
+ m_pRateRatio->set(m_pRateRatio->get() - (m_sPermanentRateChangeFine / 100));
+ }
}
-void RateControl::slotControlRateTempDown(double)
-{
+void RateControl::slotControlRateTempDown(double v) {
// Set the state of the Temporary button. Logic is handled in ::process()
- if (buttonRateTempDown->get() && !(m_ePbPressed & RateControl::RATERAMP_DOWN))
- {
+ if (v > 0.0 && !(m_ePbPressed & RateControl::RATERAMP_DOWN)) {
m_ePbPressed |= RateControl::RATERAMP_DOWN;
m_ePbCurrent = RateControl::RATERAMP_DOWN;
- }
- else if (!buttonRateTempDown->get())
- {
+ } else if (v <= 0.0) {
m_ePbPressed &= ~RateControl::RATERAMP_DOWN;
m_ePbCurrent = m_ePbPressed;
}
}
-void RateControl::slotControlRateTempDownSmall(double)
-{
+void RateControl::slotControlRateTempDownSmall(double v) {
// Set the state of the Temporary button. Logic is handled in ::process()
- if (buttonRateTempDownSmall->get() && !(m_ePbPressed & RateControl::RATERAMP_DOWN))
- {
+ if (v > 0.0 && !(m_ePbPressed & RateControl::RATERAMP_DOWN)) {
m_ePbPressed |= RateControl::RATERAMP_DOWN;
m_ePbCurrent = RateControl::RATERAMP_DOWN;
- }
- else if (!buttonRateTempDownSmall->get())
- {
+ } else if (v <= 0.0) {
m_ePbPressed &= ~RateControl::RATERAMP_DOWN;
m_ePbCurrent = m_ePbPressed;
}
}
-void RateControl::slotControlRateTempUp(double)
-{
+void RateControl::slotControlRateTempUp(double v) {
// Set the state of the Temporary button. Logic is handled in ::process()
- if (buttonRateTempUp->get() && !(m_ePbPressed & RateControl::RATERAMP_UP))
- {
+ if (v > 0.0 && !(m_ePbPressed & RateControl::RATERAMP_UP)) {
m_ePbPressed |= RateControl::RATERAMP_UP;
m_ePbCurrent = RateControl::RATERAMP_UP;
- }
- else if (!buttonRateTempUp->get())
- {
+ } else if (v <= 0.0) {
m_ePbPressed &= ~RateControl::RATERAMP_UP;
m_ePbCurrent = m_ePbPressed;
}
}
-void RateControl::slotControlRateTempUpSmall(double)
-{
+void RateControl::slotControlRateTempUpSmall(double v) {
// Set the state of the Temporary button. Logic is handled in ::process()
- if (buttonRateTempUpSmall->get() && !(m_ePbPressed & RateControl::RATERAMP_UP))
- {
+ if (v > 0.0 && !(m_ePbPressed & RateControl::RATERAMP_UP)) {
m_ePbPressed |= RateControl::RATERAMP_UP;
m_ePbCurrent = RateControl::RATERAMP_UP;
- }
- else if (!buttonRateTempUpSmall->get())
- {
+ } else if (v <= 0.0) {
m_ePbPressed &= ~RateControl::RATERAMP_UP;
m_ePbCurrent = m_ePbPressed;
}
@@ -416,12 +414,6 @@ void RateControl::trackLoaded(TrackPointer pNewTrack, TrackPointer pOldTrack) {
m_pTrack = pNewTrack;
}
-double RateControl::calcRateRatio() const {
- double rateRatio = 1.0 + m_pRateDir->get() * m_pRateRange->get() *
- m_pRateSlider->get();
- return rateRatio;
-}
-
double RateControl::getWheelFactor() const {
return m_pWheel->get();
}
@@ -552,10 +544,9 @@ double RateControl::calculateSpeed(double baserate, double speed, bool paused,
}
void RateControl::process(const double rate,
- const double currentSample,
- const double totalSamples,
- const int bufferSamples)
-{
+ const double currentSample,
+ const double totalSamples,
+ const int bufferSamples) {
Q_UNUSED(rate);
Q_UNUSED(currentSample);
Q_UNUSED(totalSamples);
@@ -589,9 +580,9 @@ void RateControl::process(const double rate,
return;
}
- double change = m_pRateDir->get() * m_dTemporaryRateChangeCoarse /
+ double change = m_pRateDir->get() * m_sTemporaryRateChangeCoarse /
(100. * range);
- double csmall = m_pRateDir->get() * m_dTemporaryRateChangeFine /
+ double csmall = m_pRateDir->get() * m_sTemporaryRateChangeFine /
(100. * range);
if (buttonRateTempUp->get())
@@ -603,7 +594,7 @@ void RateControl::process(const double rate,
else if (buttonRateTempDownSmall->get())
subRateTemp(csmall);
} else if (m_eRateRampMode == RampMode::Linear) {
- m_dTemporaryRateChangeCoarse = ((double)latrate / ((double)m_iRateRampSensitivity / 100.));
+ m_sTemporaryRateChangeCoarse = ((double)latrate / ((double)m_iRateRampSensitivity / 100.));
if (m_eRampBackMode == RATERAMP_RAMPBACK_PERIOD)
m_dRateTempRampbackChange = 0.0;
@@ -615,9 +606,9 @@ void RateControl::process(const double rate,
if (m_ePbCurrent) {
// apply ramped pitchbending
if (m_ePbCurrent == RateControl::RATERAMP_UP) {
- addRateTemp(m_dTemporaryRateChangeCoarse);
+ addRateTemp(m_sTemporaryRateChangeCoarse);
} else if (m_ePbCurrent == RateControl::RATERAMP_DOWN) {
- subRateTemp(m_dTemporaryRateChangeCoarse);
+ subRateTemp(m_sTemporaryRateChangeCoarse);
}
} else if ((m_bTempStarted)
|| ((m_eRampBackMode != RATERAMP_RAMPBACK_NONE)
@@ -655,10 +646,9 @@ double RateControl::getTempRate() {
return (m_pRateDir->get() * (m_dRateTemp * m_pRateRange->get()));
}
-void RateControl::setRateTemp(double v)
-{
+void RateControl::setRateTemp(double v) {
// Do not go backwards
- if ((calcRateRatio() + v) < 0) {
+ if ((m_pRateRatio->get() + v) < 0) {
return;
}
diff --git a/src/engine/ratecontrol.h b/src/engine/ratecontrol.h
index 9a5e04c091..0a0311bb86 100644
--- a/src/engine/ratecontrol.h
+++ b/src/engine/ratecontrol.h
@@ -72,7 +72,6 @@ public:
double calculateSpeed(double baserate, double speed, bool paused,
int iSamplesPerBuffer, bool* pReportScratching,
bool* pReportReverse);
- double calcRateRatio() const;
// Set rate change when temp rate button is pressed
static void setTemporaryRateChangeCoarseAmount(double v);
@@ -95,6 +94,8 @@ public:
void notifySeek(double dNewPlaypos, bool adjustingPhase) override;
public slots:
+ void slotRateRangeChanged(double);
+ void slotRateSliderChanged(double);
void slotRateRatioChanged(double);
void slotReverseRollActivate(double);
void slotControlRatePermDown(double);
@@ -126,10 +127,10 @@ public:
double getTempRate(void);
// Values used when temp and perm rate buttons are pressed
- static double m_dTemporaryRateChangeCoarse;
- static double m_dTemporaryRateChangeFine;
- static double m_dPermanentRateChangeCoarse;
- static double m_dPermanentRateChangeFine;
+ static double m_sTemporaryRateChangeCoarse;
+ static double m_sTemporaryRateChangeFine;
+ static double m_sPermanentRateChangeCoarse;
+ static double m_sPermanentRateChangeFine;
ControlPushButton* buttonRateTempDown;
ControlPushButton* buttonRateTempDownSmall;
diff --git a/src/vinylcontrol/vinylcontrol.cpp b/src/vinylcontrol/vinylcontrol.cpp
index 7ee315b2eb..878bfab54f 100644
--- a/src/vinylcontrol/vinylcontrol.cpp
+++ b/src/vinylcontrol/vinylcontrol.cpp
@@ -24,7 +24,6 @@ VinylControl::VinylControl(UserSettingsPointer pConfig, QString group)
vinylSeek = new ControlProxy(group, "vinylcontrol_seek", this);
m_pVCRate = new ControlProxy(group, "vinylcontrol_rate", this);
m_pRateRatio = new ControlProxy(group, "rate_ratio", this);
- m_pRateSlider = new ControlProxy(group, "rate", this);
playButton = new ControlProxy(group, "play", this);
duration = new ControlProxy(group, "duration", this);
mode = new ControlProxy(group, "vinylcontrol_mode", this);
@@ -33,9 +32,7 @@ VinylControl::VinylControl(UserSettingsPointer pConfig, QString group)
group, "vinylcontrol_wantenabled", this);
cueing = new ControlProxy(group, "vinylcontrol_cueing", this);
scratching = new ControlProxy(group, "vinylcontrol_scratching", this);
- m_pRateRange = new ControlProxy(group, "rateRange", this);
vinylStatus = new ControlProxy(group, "vinylcontrol_status", this);
- m_pRateDir = new ControlProxy(group, "rate_dir", this);
loopEnabled = new ControlProxy(group, "loop_enabled", this);
signalenabled = new ControlProxy(
group, "vinylcontrol_signal_enabled", this);
diff --git a/src/vinylcontrol/vinylcontrol.h b/src/vinylcontrol/vinylcontrol.h
index 8506bf69d8..5cd1370c23 100644
--- a/src/vinylcontrol/vinylcontrol.h
+++ b/src/vinylcontrol/vinylcontrol.h
@@ -43,10 +43,6 @@ class VinylControl : public QObject {
// VC and and is used to change the speed/pitch of the song without VC
// 1.0 = original rate
ControlProxy* m_pRateRatio;
- // Reflects the mean value (filtered for display) used of m_pVCRate during
- // VC and and is used to change the speed/pitch of the song without VC
- // 0.0 = original rate
- ControlProxy* m_pRateSlider;
// The ControlObject used to get the duration of the current song.
ControlProxy* duration;
// The ControlObject used to get the vinyl control mode
@@ -62,11 +58,7 @@ class VinylControl : public QObject {
ControlProxy* cueing;
// Is pitch changing very quickly?
ControlProxy* scratching;
- // The ControlObject used to the get the pitch range from the prefs.
- ControlProxy* m_pRateRange;
ControlProxy* vinylStatus;
- // direction of rate
- ControlProxy* m_pRateDir;
// looping enabled?
ControlProxy* loopEnabled;
// show the signal in the skin?
diff --git a/src/vinylcontrol/vinylcontrolxwax.cpp b/src/vinylcontrol/vinylcontrolxwax.cpp
index 3aa0e9cf96..f080e09340 100644
--- a/src/vinylcontrol/vinylcontrolxwax.cpp
+++ b/src/vinylcontrol/vinylcontrolxwax.cpp
@@ -444,7 +444,7 @@ void VinylControlXwax::analyzeSamples(CSAMPLE* pSamples, size_t nFrames) {
// now we just either set scratch val to 0 (stops playback)
// or 1 (plays back at that rate)
- double newScratch = reportedPlayButton ? calcRateRatio() : 0.0;
+ double newScratch = reportedPlayButton ? m_pRateRatio->get() : 0.0;
m_pVCRate->set(newScratch);
// is there any reason we'd need to do anything else?
@@ -496,7 +496,7 @@ void VinylControlXwax::analyzeSamples(CSAMPLE* pSamples, size_t nFrames) {
syncPosition();
resetSteadyPitch(dVinylPitch, m_dVinylPosition);
if (uiUpdateTime(filePosition)) {
- m_pRateSlider->set(m_pRateDir->get() * (fabs(dVinylPitch) - 1.0) / m_pRateRange->get());
+ m_pRateRatio->set(fabs(dVinylPitch));
}
} else if (m_iVCMode == MIXXX_VCMODE_ABSOLUTE &&
(fabs(m_dVinylPosition - m_dVinylPositionOld) >= 5.0)) {
@@ -614,11 +614,10 @@ void VinylControlXwax::analyzeSamples(CSAMPLE* pSamples, size_t nFrames) {
}
// Don't show extremely high or low speeds in the UI.
if (reportedPlayButton && !scratching->get() &&
- m_dDisplayPitch < 1.9 && m_dDisplayPitch > 0.2) {
- m_pRateSlider->set(m_pRateDir->get() *
- (m_dDisplayPitch - 1.0) / m_pRateRange->get());
+ m_dDisplayPitch < 1.9 && m_dDisplayPitch > 0.2) {
+ m_pRateRatio->set(m_dDisplayPitch);
} else {
- m_pRateSlider->set(0.0);
+ m_pRateRatio->set(1.0);
}
m_dUiUpdateTime = filePosition;
}
@@ -633,7 +632,7 @@ void VinylControlXwax::analyzeSamples(CSAMPLE* pSamples, size_t nFrames) {
//if it hasn't been long,
//let the track play a wee bit more before deciding we've stopped
- m_pRateSlider->set(0.0);
+ m_pRateRatio->set(0.0);
if (m_iVCMode == MIXXX_VCMODE_ABSOLUTE &&
fabs(m_dVinylPosition - filePosition) >= 0.1) {
@@ -780,17 +779,18 @@ bool VinylControlXwax::checkEnabled(bool was, bool is) {
}
if (was != is) {
- //we reset the scratch value, but we don't reset the rate slider.
- //This means if we are playing, and we disable vinyl control,
- //the track will keep playing at the previous rate.
- //This allows for single-deck control, dj handoffs, etc.
+ // we reset the scratch value, but we don't reset the rate slider.
+ // This means if we are playing, and we disable vinyl control,
+ // the track will keep playing at the previous rate.
+ // This allows for single-deck control, dj handoffs, etc.
togglePlayButton(playButton->get() || fabs(m_pVCRate->get()) > 0.05);
- m_pVCRate->set(calcRateRatio());
+ m_pVCRate->set(m_pRateRatio->get());
resetSteadyPitch(0.0, 0.0);
m_bForceResync = true;
- if (!was)
+ if (!was) {
m_dOldFilePos = 0.0;
+ }
m_iVCMode = mode->get();
m_bAtRecordEnd = false;
}
@@ -840,9 +840,3 @@ float VinylControlXwax::getAngle() {
// Invert angle to make vinyl spin direction correct.
return 360 - (static_cast<int>(pos / 1000.0 * 360.0 * rps) % 360);
}
-
-double VinylControlXwax::calcRateRatio() const {
- double rateRatio = 1.0 + m_pRateDir->get() * m_pRateRange->get() *
- m_pRateSlider->get();
- return rateRatio;
-}
diff --git a/src/vinylcontrol/vinylcontrolxwax.h b/src/vinylcontrol/vinylcontrolxwax.h
index 861627f1b8..f0b3be6907 100644
--- a/src/vinylcontrol/vinylcontrolxwax.h
+++ b/src/vinylcontrol/vinylcontrolxwax.h
@@ -46,7 +46,6 @@ class VinylControlXwax : public VinylControl {
void enableConstantMode(double rate);
bool uiUpdateTime(double time);
void establishQuality(bool quality_sample);
- double calcRateRatio() const;
// Cache the position of the end of record
unsigned int m_uiSafeZone;
diff --git a/src/waveform/renderers/waveformwidgetrenderer.cpp b/src/waveform/renderers/waveformwidgetrenderer.cpp
index d82e2629bc..6a2dab5df2 100644
--- a/src/waveform/renderers/waveformwidgetrenderer.cpp
+++ b/src/waveform/renderers/waveformwidgetrenderer.cpp
@@ -26,7 +26,6 @@ WaveformWidgetRenderer::WaveformWidgetRenderer(const char* group)
m_trackPixelCount(0.0),
m_zoomFactor(1.0),
- m_rateAdjust(0.0),
m_visualSamplePerPixel(1.0),
m_audioSamplePerPixel(1.0),
m_alphaBeatGrid(90),
@@ -34,12 +33,8 @@ WaveformWidgetRenderer::WaveformWidgetRenderer(const char* group)
m_visualPlayPosition(NULL),
m_playPos(-1),
m_playPosVSample(0),
- m_pRateSliderCO(NULL),
- m_rate(0.0),
- m_pRateRangeControlObject(NULL),
- m_rateRange(0.0),
- m_pRateDirControlObject(NULL),
- m_rateDir(0.0),
+ m_pRateRatioCO(NULL),
+ m_rateRatio(1.0),
m_pGainControlObject(NULL),
m_gain(1.0),
m_pTrackSamplesControlObject(NULL),
@@ -69,9 +64,7 @@ WaveformWidgetRenderer::~WaveformWidgetRenderer() {
for (int i = 0; i < m_rendererStack.size(); ++i)
delete m_rendererStack[i];
- delete m_pRateSliderCO;
- delete m_pRateRangeControlObject;
- delete m_pRateDirControlObject;
+ delete m_pRateRatioCO;
delete m_pGainControlObject;
delete m_pTrackSamplesControlObject;
@@ -86,12 +79,8 @@ bool WaveformWidgetRenderer::init() {
m_visualPlayPosition = VisualPlayPosition::getVisualPlayPosition(m_group);
- m_pRateSliderCO = new ControlProxy(
- m_group, "rate");
- m_pRateRangeControlObject = new ControlProxy(
- m_group, "rateRange");
- m_pRateDirControlObject = new ControlProxy(
- m_group, "rate_dir");
+ m_pRateRatioCO = new ControlProxy(
+ m_group, "rate_ratio");
m_pGainControlObject = new ControlProxy(
m_group, "total_gain");
m_pTrackSamplesControlObject = new ControlProxy(
@@ -113,22 +102,17 @@ void WaveformWidgetRenderer::onPreRender(VSyncThread* vsyncThread) {
}
//Fetch parameters before rendering in order the display all sub-renderers with the same values
- m_rate = m_pRateSliderCO->get();
- m_rateDir = m_pRateDirControlObject->get();
- m_rateRange = m_pRateRangeControlObject->get();
+ m_rateRatio = m_pRateRatioCO->get();
// This gain adjustment compensates for an arbitrary /2 gain chop in
// EnginePregain. See the comment there.
m_gain = m_pGainControlObject->get() * 2;
- //Legacy stuff (Ryan it that OK?) -> Limit our rate adjustment to < 99%, "Bad Things" might happen otherwise.
- m_rateAdjust = m_rateDir * math_min(0.99, m_rate * m_rateRange);
-
// Compute visual sample to pixel ratio
// Allow waveform to spread one visual sample across a hundred pixels
// NOTE: The hundred pixel limit is totally arbitrary. Theoretically,
// there should be no limit to how far the waveforms can be zoomed in.
- double visualSamplePerPixel = m_zoomFactor * (1.0 + m_rateAdjust) / m_scaleFactor;
+ double visualSamplePerPixel = m_zoomFactor * m_rateRatio / m_scaleFactor;
m_visualSamplePerPixel = math_max(0.01, visualSamplePerPixel);
TrackPointer pTrack(m_pTrack);
@@ -175,9 +159,7 @@ void WaveformWidgetRenderer::onPreRender(VSyncThread* vsyncThread) {
// "m_group" << m_group <<
// "m_trackSamples" << m_trackSamples <<
// "m_playPos" << m_playPos <<
- // "m_rate" << m_rate <<
- // "m_rateDir" << m_rateDir <<
- // "m_rateRange" << m_rateRange <<
+ // "m_rateRatio" << m_rate <<
// "m_gain" << m_gain;
}
diff --git a/src/waveform/renderers/waveformwidgetrenderer.h b/src/waveform/renderers/waveformwidgetrenderer.h
index ce4b875b52..f87ccfb868 100644
--- a/src/waveform/renderers/waveformwidgetrenderer.h
+++ b/src/waveform/renderers/waveformwidgetrenderer.h
@@ -71,7 +71,6 @@ class WaveformWidgetRenderer {
double getPlayPos() const { return m_playPos;}
double getPlayPosVSample() const { return m_playPosVSample;}
double getZoomFactor() const { return m_zoomFactor;}
- double getRateAdjust() const { return m_rateAdjust;}
double getGain() const { return m_gain;}
int getTrackSamples() const { return m_trackSamples;}
@@ -121,7 +120,6 @@ class WaveformWidgetRenderer {
double m_trackPixelCount;
double m_zoomFactor;
- double m_rateAdjust;
double m_visualSamplePerPixel;
double m_audioSamplePerPixel;
@@ -132,12 +130,8 @@ class WaveformWidgetRenderer {
QSharedPointer<VisualPlayPosition> m_visualPlayPosition;
double m_playPos;
int m_playPosVSample;
- ControlProxy* m_pRateSliderCO;
- double m_rate;
- ControlProxy* m_pRateRangeControlObject;
- double m_rateRange;
- ControlProxy* m_pRateDirControlObject;
- double m_rateDir;
+ ControlProxy* m_pRateRatioCO;
+ double m_rateRatio;
ControlProxy* m_pGainControlObject;
double m_gain;
ControlProxy* m_pTrackSamplesControlObject;
diff --git a/src/widget/wnumberrate.cpp b/src/widget/wnumberrate.cpp
index 34a65d159c..1dde594512 100644
--- a/src/widget/wnumberrate.cpp
+++ b/src/widget/wnumberrate.cpp
@@ -18,20 +18,14 @@
WNumberRate::WNumberRate(const char * group, QWidget * parent)
: WNumber(parent) {
- m_pRateRangeControl = new ControlProxy(group, "rateRange", this);
- m_pRateRangeControl->connectValueChanged(SLOT(setValue(double)));
- m_pRateDirControl = new ControlProxy(group, "rate_dir", this);
- m_pRateDirControl->connectValueChanged(SLOT(setValue(double)));
- m_pRateControl = new ControlProxy(group, "rate", this);
- m_pRateControl->connectValueChanged(SLOT(setValue(double)));
+ m_pRateRatio = new ControlProxy(group, "rate_ratio", this);
+ m_pRateRatio->connectValueChanged(SLOT(setValue(double)));
// Initialize the widget.
setValue(0);
}
void WNumberRate::setValue(double /*dValue*/) {
- double vsign = m_pRateControl->get() *
- m_pRateRangeControl->get() *
- m_pRateDirControl->get();
+ double vsign = m_pRateRatio->get() - 1;
char sign = '+';
if (vsign < -0.00000001) {
diff --git a/src/widget/wnumberrate.h b/src/widget/wnumberrate.h
index 4aeae4ead9..da038404ca 100644
--- a/src/widget/wnumberrate.h
+++ b/src/widget/wnumberrate.h
@@ -25,10 +25,7 @@ class WNumberRate : public WNumber {
void setValue(double dValue) override;
private:
- // Pointer to control objects for rate.
- ControlProxy* m_pRateControl;
- ControlProxy* m_pRateRangeControl;
- ControlProxy* m_pRateDirControl;
+ ControlProxy* m_pRateRatio;
};
#endif