=== modified file 'mixxx/src/engine/bpmcontrol.cpp' --- mixxx/src/engine/bpmcontrol.cpp 2012-12-03 06:52:05 +0000 +++ mixxx/src/engine/bpmcontrol.cpp 2013-03-17 20:23:10 +0000 @@ -24,26 +24,26 @@ m_pPlayButton = ControlObject::getControl(ConfigKey(_group, "play")); m_pRateSlider = ControlObject::getControl(ConfigKey(_group, "rate")); connect(m_pRateSlider, SIGNAL(valueChanged(double)), - this, SLOT(slotRateChanged(double)), + this, SLOT(slotAdjustBpm()), Qt::DirectConnection); connect(m_pRateSlider, SIGNAL(valueChangedFromEngine(double)), - this, SLOT(slotRateChanged(double)), + this, SLOT(slotAdjustBpm()), Qt::DirectConnection); m_pRateRange = ControlObject::getControl(ConfigKey(_group, "rateRange")); connect(m_pRateRange, SIGNAL(valueChanged(double)), - this, SLOT(slotRateChanged(double)), + this, SLOT(slotAdjustBpm()), Qt::DirectConnection); connect(m_pRateRange, SIGNAL(valueChangedFromEngine(double)), - this, SLOT(slotRateChanged(double)), + this, SLOT(slotAdjustBpm()), Qt::DirectConnection); m_pRateDir = ControlObject::getControl(ConfigKey(_group, "rate_dir")); connect(m_pRateDir, SIGNAL(valueChanged(double)), - this, SLOT(slotRateChanged(double)), + this, SLOT(slotAdjustBpm()), Qt::DirectConnection); connect(m_pRateDir, SIGNAL(valueChangedFromEngine(double)), - this, SLOT(slotRateChanged(double)), + this, SLOT(slotAdjustBpm()), Qt::DirectConnection); m_pLoopEnabled = ControlObject::getControl( @@ -55,7 +55,7 @@ m_pFileBpm = new ControlObject(ConfigKey(_group, "file_bpm")); connect(m_pFileBpm, SIGNAL(valueChanged(double)), - this, SLOT(slotFileBpmChanged(double)), + this, SLOT(slotAdjustBpm()), Qt::DirectConnection); m_pEngineBpm = new ControlObject(ConfigKey(_group, "bpm")); @@ -113,21 +113,14 @@ return m_pFileBpm->get(); } -void BpmControl::slotFileBpmChanged(double bpm) { - //qDebug() << this << "slotFileBpmChanged" << bpm; - // Adjust the file-bpm with the current setting of the rate to get the - // engine BPM. - double dRate = 1.0 + m_pRateDir->get() * m_pRateRange->get() * m_pRateSlider->get(); - m_pEngineBpm->set(bpm * dRate); -} - void BpmControl::slotSetEngineBpm(double bpm) { double filebpm = m_pFileBpm->get(); + double ratedir = m_pRateDir->get(); + double raterange = m_pRateRange->get(); - if (filebpm != 0.0) { - double newRate = bpm / filebpm - 1.0f; - newRate = math_max(-1.0f, math_min(1.0f, newRate)); - m_pRateSlider->set(newRate * m_pRateDir->get()); + if (filebpm && ratedir && raterange) { + double newRate = bpm / filebpm; + m_pRateSlider->set((newRate - 1.0) / ratedir / raterange); } } @@ -150,8 +143,9 @@ // (60 seconds per minute) * (1000 milliseconds per second) / (X millis per // beat) = Y beats/minute double averageBpm = 60.0 * 1000.0 / averageLength; - m_pFileBpm->set(averageBpm); - slotFileBpmChanged(averageBpm); + double dRate = 1.0 + m_pRateDir->get() * m_pRateRange->get() * m_pRateSlider->get(); + m_pFileBpm->set(averageBpm / dRate); + slotAdjustBpm(); } void BpmControl::slotControlBeatSyncPhase(double v) { @@ -226,7 +220,7 @@ if (fOtherBpm > 0.0 && fThisBpm > 0.0) { // The desired rate is the other decks effective rate divided by this - // deck's file BPM. This gives us the playback rate that will produe an + // deck's file BPM. This gives us the playback rate that will produce an // effective BPM equivalent to the other decks. double fDesiredRate = fOtherBpm / fThisFileBpm; @@ -235,10 +229,10 @@ // algorithm sometimes finding double or half BPMs. This avoids drastic // scales. - float fFileBpmDelta = fabs(fThisFileBpm-fOtherFileBpm); - if (fabs(fThisFileBpm*2.0 - fOtherFileBpm) < fFileBpmDelta) { + float fFileBpmDelta = fabs(fThisFileBpm - fOtherFileBpm); + if (fabs(fThisFileBpm * 2.0 - fOtherFileBpm) < fFileBpmDelta) { fDesiredRate /= 2.0; - } else if (fabs(fThisFileBpm - 2.0*fOtherFileBpm) < fFileBpmDelta) { + } else if (fabs(fThisFileBpm - 2.0 * fOtherFileBpm) < fFileBpmDelta) { fDesiredRate *= 2.0; } @@ -255,7 +249,7 @@ { // Adjust the rateScale. We have to divide by the range and // direction to get the correct rateScale. - fDesiredRate = fDesiredRate/(m_pRateRange->get() * m_pRateDir->get()); + fDesiredRate = fDesiredRate / (m_pRateRange->get() * m_pRateDir->get()); // And finally, set the slider m_pRateSlider->set(fDesiredRate); @@ -436,9 +430,14 @@ return true; } -void BpmControl::slotRateChanged(double) { - double dFileBpm = m_pFileBpm->get(); - slotFileBpmChanged(dFileBpm); +void BpmControl::slotAdjustBpm() { + // Emitted value is one of the control objects used below + + //qDebug() << this << "slotAdjustBpm" + // Adjust the file-bpm with the current setting of the rate to get the + // engine BPM. + double dRate = 1.0 + m_pRateDir->get() * m_pRateRange->get() * m_pRateSlider->get(); + m_pEngineBpm->set(m_pFileBpm->get() * dRate); } void BpmControl::trackLoaded(TrackPointer pTrack) { @@ -455,6 +454,7 @@ } void BpmControl::trackUnloaded(TrackPointer pTrack) { + Q_UNUSED(pTrack); if (m_pTrack) { disconnect(m_pTrack.data(), SIGNAL(beatsUpdated()), this, SLOT(slotUpdatedTrackBeats())); === modified file 'mixxx/src/engine/bpmcontrol.h' --- mixxx/src/engine/bpmcontrol.h 2012-12-03 06:52:05 +0000 +++ mixxx/src/engine/bpmcontrol.h 2013-03-17 20:23:31 +0000 @@ -28,13 +28,12 @@ private slots: void slotSetEngineBpm(double); - void slotFileBpmChanged(double); void slotControlBeatSync(double); void slotControlBeatSyncPhase(double); void slotControlBeatSyncTempo(double); void slotTapFilter(double,int); void slotBpmTap(double); - void slotRateChanged(double); + void slotAdjustBpm(); void slotUpdatedTrackBeats(); void slotBeatsTranslate(double); === modified file 'mixxx/src/widget/wspinny.cpp' --- mixxx/src/widget/wspinny.cpp 2013-01-14 21:06:38 +0000 +++ mixxx/src/widget/wspinny.cpp 2013-03-17 20:06:02 +0000 @@ -19,7 +19,6 @@ m_pVisualPlayPos(NULL), m_pDuration(NULL), m_pTrackSamples(NULL), - m_pBPM(NULL), m_pScratch(NULL), m_pScratchToggle(NULL), m_pScratchPos(NULL), @@ -64,7 +63,6 @@ delete m_pDuration; delete m_pTrackSamples; delete m_pTrackSampleRate; - delete m_pBPM; delete m_pScratch; delete m_pScratchToggle; delete m_pScratchPos; @@ -111,8 +109,6 @@ m_pTrackSampleRate = new ControlObjectThreadMain( ControlObject::getControl( ConfigKey(group, "track_samplerate"))); - m_pBPM = new ControlObjectThreadMain(ControlObject::getControl( - ConfigKey(group, "bpm"))); m_pScratch = new ControlObjectThreadMain(ControlObject::getControl( ConfigKey(group, "scratch2")));