diff options
author | Jan Holthuis <jan.holthuis@ruhr-uni-bochum.de> | 2020-03-09 11:14:37 +0100 |
---|---|---|
committer | Jan Holthuis <jan.holthuis@ruhr-uni-bochum.de> | 2020-03-09 11:17:55 +0100 |
commit | 20ce76f02f5c67190e5dcc2575656a31083658c6 (patch) | |
tree | d933204664affc85cb415fce2355c3f90157427b /src/track/cue.cpp | |
parent | 90b1109d32edad4c055c01406e0cfadfb5939b39 (diff) | |
parent | 7a3095d87adb27e7d6a162b1cd0f0f376eb474f7 (diff) |
Merge branch 'master' of github.com:mixxxdj/mixxx into hotcue-rgb-colors
Diffstat (limited to 'src/track/cue.cpp')
-rw-r--r-- | src/track/cue.cpp | 85 |
1 files changed, 53 insertions, 32 deletions
diff --git a/src/track/cue.cpp b/src/track/cue.cpp index 8831d68596..a923ab7a94 100644 --- a/src/track/cue.cpp +++ b/src/track/cue.cpp @@ -12,7 +12,32 @@ #include "util/color/colorpalette.h" namespace { - const QString kDefaultLabel = ""; // empty string, not null + +inline std::optional<double> positionSamplesToMillis( + double positionSamples, + mixxx::AudioSignal::SampleRate sampleRate) { + VERIFY_OR_DEBUG_ASSERT(sampleRate.valid()) { + return Cue::kNoPosition; + } + if (positionSamples == Cue::kNoPosition) { + return std::nullopt; + } + // Try to avoid rounding errors + return (positionSamples * 1000) / (sampleRate * mixxx::kEngineChannelCount); +} + +inline double positionMillisToSamples( + std::optional<double> positionMillis, + mixxx::AudioSignal::SampleRate sampleRate) { + VERIFY_OR_DEBUG_ASSERT(sampleRate.valid()) { + return Cue::kNoPosition; + } + if (!positionMillis) { + return Cue::kNoPosition; + } + // Try to avoid rounding errors + return (*positionMillis * sampleRate * mixxx::kEngineChannelCount) / 1000; +} } //static @@ -22,20 +47,18 @@ void CuePointer::deleteLater(Cue* pCue) { } } -Cue::Cue(TrackId trackId) +Cue::Cue() : m_bDirty(false), m_iId(-1), - m_trackId(trackId), m_type(mixxx::CueType::Invalid), m_sampleStartPosition(Cue::kNoPosition), m_sampleEndPosition(Cue::kNoPosition), - m_iHotCue(-1), - m_label(kDefaultLabel), + m_iHotCue(Cue::kNoHotCue), m_color(ColorPalette::kDefaultCueColor) { - DEBUG_ASSERT(!m_label.isNull()); } -Cue::Cue(int id, +Cue::Cue( + int id, TrackId trackId, mixxx::CueType type, double position, @@ -51,7 +74,6 @@ Cue::Cue(int id, m_iHotCue(hotCue), m_label(label), m_color(color) { - DEBUG_ASSERT(!m_label.isNull()); if (length) { if (position != Cue::kNoPosition) { m_sampleEndPosition = position + length; @@ -63,34 +85,35 @@ Cue::Cue(int id, } } -Cue::Cue(TrackId trackId, mixxx::AudioSignal::SampleRate sampleRate, const mixxx::CueInfo& cueInfo) +Cue::Cue( + const mixxx::CueInfo& cueInfo, + mixxx::AudioSignal::SampleRate sampleRate) : m_bDirty(false), m_iId(-1), - m_trackId(trackId), m_type(cueInfo.getType()), - m_sampleStartPosition(Cue::kNoPosition), - m_sampleEndPosition(Cue::kNoPosition), - m_iHotCue(Cue::kNoHotCue), + m_sampleStartPosition( + positionMillisToSamples( + cueInfo.getStartPositionMillis(), + sampleRate)), + m_sampleEndPosition( + positionMillisToSamples( + cueInfo.getEndPositionMillis(), + sampleRate)), + m_iHotCue(cueInfo.getHotCueNumber() ? *cueInfo.getHotCueNumber() : kNoHotCue), m_label(cueInfo.getLabel()), m_color(cueInfo.getColor().value_or(ColorPalette::kDefaultCueColor)) { - DEBUG_ASSERT(!m_label.isNull()); - DEBUG_ASSERT(sampleRate.valid()); - - const double sampleRateKhz = sampleRate / 1000.0; - const double millisecsToSamplesFactor = sampleRateKhz * mixxx::kEngineChannelCount; - DEBUG_ASSERT(millisecsToSamplesFactor > 0); - - if (cueInfo.getStartPositionMillis()) { - m_sampleStartPosition = (*cueInfo.getStartPositionMillis()) * millisecsToSamplesFactor; - } - - if (cueInfo.getEndPositionMillis()) { - m_sampleEndPosition = (*cueInfo.getEndPositionMillis()) * millisecsToSamplesFactor; - } +} - if (cueInfo.getHotCueNumber()) { - m_iHotCue = *cueInfo.getHotCueNumber(); - } +mixxx::CueInfo Cue::getCueInfo( + mixxx::AudioSignal::SampleRate sampleRate) const { + QMutexLocker lock(&m_mutex); + return mixxx::CueInfo( + m_type, + positionSamplesToMillis(m_sampleStartPosition, sampleRate), + positionSamplesToMillis(m_sampleEndPosition, sampleRate), + m_iHotCue == kNoHotCue ? std::nullopt : std::make_optional(m_iHotCue), + m_label, + m_color); } int Cue::getId() const { @@ -184,8 +207,6 @@ QString Cue::getLabel() const { } void Cue::setLabel(const QString label) { - //qDebug() << "setLabel()" << m_label << "-" << label; - DEBUG_ASSERT(!label.isNull()); QMutexLocker lock(&m_mutex); m_label = label; m_bDirty = true; |