diff options
author | Daniel Schürmann <daschuer@mixxx.org> | 2019-01-05 17:56:22 +0100 |
---|---|---|
committer | Daniel Schürmann <daschuer@mixxx.org> | 2019-01-06 01:06:51 +0100 |
commit | ebf835c57cd2e9f1a66c2734803b5c30251283a9 (patch) | |
tree | 584a88bde232f88071c0628a4cceaf1cef6e10f1 | |
parent | de307ce9a7f339c52e4390beae9014f0ae05f13e (diff) |
Added tempoTrackSeconds to VisualplayPosition
-rw-r--r-- | src/engine/enginebuffer.cpp | 16 | ||||
-rw-r--r-- | src/waveform/visualplayposition.cpp | 13 | ||||
-rw-r--r-- | src/waveform/visualplayposition.h | 6 |
3 files changed, 16 insertions, 19 deletions
diff --git a/src/engine/enginebuffer.cpp b/src/engine/enginebuffer.cpp index d5adc98534..f5c8a68170 100644 --- a/src/engine/enginebuffer.cpp +++ b/src/engine/enginebuffer.cpp @@ -1199,14 +1199,6 @@ void EngineBuffer::postProcess(const int iBufferSize) { } void EngineBuffer::updateIndicators(double speed, int iBufferSize) { - // * double speed - // * int iBufferSize - // m_trackSampleRateOld - // m_trackSamplesOld - // m_filepos_play - // m_tempo_ratio_old - - if (!m_trackSampleRateOld || !m_trackSamplesOld) { // no track loaded return; @@ -1215,7 +1207,9 @@ void EngineBuffer::updateIndicators(double speed, int iBufferSize) { // Increase samplesCalculated by the buffer size m_iSamplesSinceLastIndicatorUpdate += iBufferSize; - double fFractionalPlaypos = fractionalPlayposFromAbsolute(m_filepos_play); + const double fFractionalPlaypos = fractionalPlayposFromAbsolute(m_filepos_play); + const double tempoTrackSeconds = m_trackSamplesOld / kSamplesPerFrame + / m_trackSampleRateOld / m_tempo_ratio_old; if(speed > 0 && fFractionalPlaypos == 1.0) { // At Track end speed = 0; @@ -1230,7 +1224,6 @@ void EngineBuffer::updateIndicators(double speed, int iBufferSize) { // Update indicators that are only updated after every // sampleRate/kiUpdateRate samples processed. (e.g. playposSlider) if (m_iSamplesSinceLastIndicatorUpdate > (kSamplesPerFrame * m_pSampleRate->get() / kiPlaypositionUpdateRate)) { - const double tempoTrackSeconds = m_trackSamplesOld / kSamplesPerFrame / m_trackSampleRateOld / m_tempo_ratio_old; double timeRemaining = (1.0 - fFractionalPlaypos) * tempoTrackSeconds; m_timeRemaining->set(timeRemaining); m_timeElapsed->set(tempoTrackSeconds - timeRemaining); @@ -1266,7 +1259,8 @@ void EngineBuffer::updateIndicators(double speed, int iBufferSize) { // playpos slider m_visualPlayPos->set(fFractionalPlaypos, speed * m_baserate_old, (double)iBufferSize / m_trackSamplesOld, - fractionalPlayposFromAbsolute(m_dSlipPosition)); + fractionalPlayposFromAbsolute(m_dSlipPosition), + tempoTrackSeconds); } void EngineBuffer::hintReader(const double dRate) { diff --git a/src/waveform/visualplayposition.cpp b/src/waveform/visualplayposition.cpp index 73cf2d1554..aae57cb5d0 100644 --- a/src/waveform/visualplayposition.cpp +++ b/src/waveform/visualplayposition.cpp @@ -35,15 +35,16 @@ VisualPlayPosition::~VisualPlayPosition() { m_listVisualPlayPosition.remove(m_key); } -void VisualPlayPosition::set(double playPos, double rate, - double positionStep, double pSlipPosition) { +void VisualPlayPosition::set(double playPos, double rate, double positionStep, + double slipPosition, double tempoTrackSeconds) { VisualPlayPositionData data; data.m_referenceTime = m_timeInfoTime; data.m_callbackEntrytoDac = m_dCallbackEntryToDacSecs * 1000000; // s to µs data.m_enginePlayPos = playPos; data.m_rate = rate; data.m_positionStep = positionStep; - data.m_pSlipPosition = pSlipPosition; + data.m_slipPosition = slipPosition; + data.m_tempoTrackSeconds = tempoTrackSeconds; // Atomic write m_data.setValue(data); @@ -70,7 +71,7 @@ double VisualPlayPosition::getAtNextVSync(VSyncThread* vsyncThread) { return -1; } -void VisualPlayPosition::getPlaySlipAt(int fromNowMicros, double* playPosition, double* slipPosition) { +void VisualPlayPosition::getPlaySlipAt(int fromNowMicros, double* pPlayPosition, double* pSlipPosition) { //static double testPos = 0; //testPos += 0.000017759; //0.000016608; // 1.46257e-05; //return testPos; @@ -83,8 +84,8 @@ void VisualPlayPosition::getPlaySlipAt(int fromNowMicros, double* playPosition, offset = math_min(offset, m_audioBufferMicros * kMaxOffsetBufferCnt); double playPos = data.m_enginePlayPos; // load playPos for the first sample in Buffer playPos += data.m_positionStep * offset * data.m_rate / m_audioBufferMicros; - *playPosition = playPos; - *slipPosition = data.m_pSlipPosition; + *pPlayPosition = playPos; + *pSlipPosition = data.m_slipPosition; } } diff --git a/src/waveform/visualplayposition.h b/src/waveform/visualplayposition.h index 62b8f35bb7..699b3ae9e8 100644 --- a/src/waveform/visualplayposition.h +++ b/src/waveform/visualplayposition.h @@ -33,7 +33,8 @@ class VisualPlayPositionData { double m_enginePlayPos; // Play position of fist Sample in Buffer double m_rate; double m_positionStep; - double m_pSlipPosition; + double m_slipPosition; + double m_tempoTrackSeconds; // total track time, taking the current tempo into account }; @@ -45,7 +46,8 @@ class VisualPlayPosition : public QObject { // WARNING: Not thread safe. This function must be called only from the // engine thread. - void set(double playPos, double rate, double positionStep, double pSlipPosition); + void set(double playPos, double rate, double positionStep, + double slipPosition, double tempoTrackSeconds); double getAtNextVSync(VSyncThread* vsyncThread); void getPlaySlipAt(int usFromNow, double* playPosition, double* slipPosition); double getEnginePlayPos(); |