From d890dce875753b77e1f3d6109326e4a7877aed37 Mon Sep 17 00:00:00 2001 From: Be Date: Wed, 29 Apr 2020 14:03:23 -0500 Subject: add ControlObjects for shifting cue points To correct for timing offsets when importing from other software. This does not shift the beatgrid because Mixxx does not currently import beatgrids. --- src/track/cue.cpp | 13 +++++++++++++ src/track/cue.h | 1 + src/track/track.cpp | 15 +++++++++++++++ src/track/track.h | 2 ++ 4 files changed, 31 insertions(+) (limited to 'src/track') diff --git a/src/track/cue.cpp b/src/track/cue.cpp index b2d9233d34..df4be3da7a 100644 --- a/src/track/cue.cpp +++ b/src/track/cue.cpp @@ -195,6 +195,19 @@ void Cue::setEndPosition(double samplePosition) { emit updated(); } +void Cue::shiftPosition(double frameOffset) { + QMutexLocker lock(&m_mutex); + if (m_sampleStartPosition != kNoPosition) { + m_sampleStartPosition += frameOffset * mixxx::kEngineChannelCount; + } + if (m_sampleEndPosition != kNoPosition) { + m_sampleEndPosition += frameOffset * mixxx::kEngineChannelCount; + } + m_bDirty = true; + lock.unlock(); + emit updated(); +} + double Cue::getLength() const { QMutexLocker lock(&m_mutex); if (m_sampleEndPosition == Cue::kNoPosition) { diff --git a/src/track/cue.h b/src/track/cue.h index 7eacf9d231..2608ee2760 100644 --- a/src/track/cue.h +++ b/src/track/cue.h @@ -39,6 +39,7 @@ class Cue : public QObject { double samplePosition = kNoPosition); void setEndPosition( double samplePosition = kNoPosition); + void shiftPosition(double frameOffset); double getLength() const; diff --git a/src/track/track.cpp b/src/track/track.cpp index 2d6e459f60..16c95cba66 100644 --- a/src/track/track.cpp +++ b/src/track/track.cpp @@ -744,6 +744,21 @@ void Track::setCuePoint(CuePosition cue) { emit cuesUpdated(); } +void Track::shiftCuePositions(double milliseconds) { + QMutexLocker lock(&m_qMutex); + + VERIFY_OR_DEBUG_ASSERT(m_streamInfo) { + return; + } + double frames = m_streamInfo->getSignalInfo().millis2frames(milliseconds); + for (const CuePointer& pCue : m_cuePoints) { + pCue->shiftPosition(frames); + } + + markDirtyAndUnlock(&lock); + emit cuesUpdated(); +} + void Track::analysisFinished() { emit analyzed(); } diff --git a/src/track/track.h b/src/track/track.h index 111f04517c..81318a0445 100644 --- a/src/track/track.h +++ b/src/track/track.h @@ -245,6 +245,8 @@ class Track : public QObject { CuePosition getCuePoint() const; // Set the track's main cue point void setCuePoint(CuePosition cue); + /// Shift all cues by a constant offset + void shiftCuePositions(double milliseconds); // Call when analysis is done. void analysisFinished(); -- cgit v1.2.3 From 34b200ef070bf0ed526ade036e257d5df7eb4c27 Mon Sep 17 00:00:00 2001 From: Be Date: Thu, 30 Apr 2020 19:27:56 -0500 Subject: Track: remove emission of unnecessary cuesUpdated signal --- src/track/track.cpp | 1 - 1 file changed, 1 deletion(-) (limited to 'src/track') diff --git a/src/track/track.cpp b/src/track/track.cpp index 16c95cba66..1784bdccbb 100644 --- a/src/track/track.cpp +++ b/src/track/track.cpp @@ -756,7 +756,6 @@ void Track::shiftCuePositions(double milliseconds) { } markDirtyAndUnlock(&lock); - emit cuesUpdated(); } void Track::analysisFinished() { -- cgit v1.2.3 From 5446090a3318aa1189a32952b97845b897360865 Mon Sep 17 00:00:00 2001 From: Be Date: Fri, 15 May 2020 17:08:15 -0500 Subject: specify units in cue shift function names --- src/track/cue.cpp | 2 +- src/track/cue.h | 2 +- src/track/track.cpp | 4 ++-- src/track/track.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/track') diff --git a/src/track/cue.cpp b/src/track/cue.cpp index df4be3da7a..96d0365f64 100644 --- a/src/track/cue.cpp +++ b/src/track/cue.cpp @@ -195,7 +195,7 @@ void Cue::setEndPosition(double samplePosition) { emit updated(); } -void Cue::shiftPosition(double frameOffset) { +void Cue::shiftPositionFrames(double frameOffset) { QMutexLocker lock(&m_mutex); if (m_sampleStartPosition != kNoPosition) { m_sampleStartPosition += frameOffset * mixxx::kEngineChannelCount; diff --git a/src/track/cue.h b/src/track/cue.h index 2608ee2760..21490c375c 100644 --- a/src/track/cue.h +++ b/src/track/cue.h @@ -39,7 +39,7 @@ class Cue : public QObject { double samplePosition = kNoPosition); void setEndPosition( double samplePosition = kNoPosition); - void shiftPosition(double frameOffset); + void shiftPositionFrames(double frameOffset); double getLength() const; diff --git a/src/track/track.cpp b/src/track/track.cpp index 1784bdccbb..94bc81b10f 100644 --- a/src/track/track.cpp +++ b/src/track/track.cpp @@ -744,7 +744,7 @@ void Track::setCuePoint(CuePosition cue) { emit cuesUpdated(); } -void Track::shiftCuePositions(double milliseconds) { +void Track::shiftCuePositionsMillis(double milliseconds) { QMutexLocker lock(&m_qMutex); VERIFY_OR_DEBUG_ASSERT(m_streamInfo) { @@ -752,7 +752,7 @@ void Track::shiftCuePositions(double milliseconds) { } double frames = m_streamInfo->getSignalInfo().millis2frames(milliseconds); for (const CuePointer& pCue : m_cuePoints) { - pCue->shiftPosition(frames); + pCue->shiftPositionFrames(frames); } markDirtyAndUnlock(&lock); diff --git a/src/track/track.h b/src/track/track.h index 81318a0445..cb88dd3a20 100644 --- a/src/track/track.h +++ b/src/track/track.h @@ -246,7 +246,7 @@ class Track : public QObject { // Set the track's main cue point void setCuePoint(CuePosition cue); /// Shift all cues by a constant offset - void shiftCuePositions(double milliseconds); + void shiftCuePositionsMillis(double milliseconds); // Call when analysis is done. void analysisFinished(); -- cgit v1.2.3