Skip to content

Commit

Permalink
Merge pull request #4078 from Holzhaus/frame-refactor-rekordbox
Browse files Browse the repository at this point in the history
RekordboxFeature: Use mixxx::audio::FramePos internally
  • Loading branch information
uklotzde committed Jul 8, 2021
2 parents e19b1bf + 75630e1 commit 11de340
Showing 1 changed file with 20 additions and 17 deletions.
37 changes: 20 additions & 17 deletions src/library/rekordbox/rekordboxfeature.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ constexpr mixxx::RgbColor kColorForIDPurple(0x9808F8);
constexpr mixxx::RgbColor kColorForIDNoColor(0x0);

struct memory_cue_loop_t {
double startPosition;
double endPosition;
mixxx::audio::FramePos startPosition;
mixxx::audio::FramePos endPosition;
QString comment;
mixxx::RgbColor::optional_t color;
};
Expand Down Expand Up @@ -855,8 +855,8 @@ void clearDeviceTables(QSqlDatabase& database, TreeItem* child) {
}

void setHotCue(TrackPointer track,
double startPosition,
double endPosition,
mixxx::audio::FramePos startPosition,
mixxx::audio::FramePos endPosition,
int id,
const QString& label,
mixxx::RgbColor::optional_t color) {
Expand All @@ -870,7 +870,7 @@ void setHotCue(TrackPointer track,
}

mixxx::CueType type = mixxx::CueType::HotCue;
if (endPosition != Cue::kNoPosition) {
if (endPosition.isValid()) {
type = mixxx::CueType::Loop;
}

Expand Down Expand Up @@ -905,8 +905,7 @@ void readAnalyze(TrackPointer track,

rekordbox_anlz_t anlz = rekordbox_anlz_t(&ks);

double sampleRateKhz = sampleRate / 1000.0;
double samples = sampleRateKhz * mixxx::kEngineChannelCount;
const double sampleRateKhz = sampleRate / 1000.0;

QList<memory_cue_loop_t> memoryCuesAndLoops;
int lastHotCueIndex = 0;
Expand Down Expand Up @@ -963,15 +962,16 @@ void readAnalyze(TrackPointer track,
if (time < 1) {
time = 1;
}
double position = samples * static_cast<double>(time);
const auto position = mixxx::audio::FramePos(
sampleRateKhz * static_cast<double>(time));

switch (cuesTag->type()) {
case rekordbox_anlz_t::CUE_LIST_TYPE_MEMORY_CUES: {
switch ((*cueEntry)->type()) {
case rekordbox_anlz_t::CUE_ENTRY_TYPE_MEMORY_CUE: {
memory_cue_loop_t memoryCue;
memoryCue.startPosition = position;
memoryCue.endPosition = Cue::kNoPosition;
memoryCue.endPosition = mixxx::audio::kInvalidFramePos;
memoryCue.color = mixxx::RgbColor::nullopt();
memoryCuesAndLoops << memoryCue;
} break;
Expand All @@ -984,7 +984,8 @@ void readAnalyze(TrackPointer track,

memory_cue_loop_t loop;
loop.startPosition = position;
loop.endPosition = samples * static_cast<double>(endTime);
loop.endPosition = mixxx::audio::FramePos(
sampleRateKhz * static_cast<double>(endTime));
loop.color = mixxx::RgbColor::nullopt();
memoryCuesAndLoops << loop;
} break;
Expand All @@ -998,7 +999,7 @@ void readAnalyze(TrackPointer track,
setHotCue(
track,
position,
Cue::kNoPosition,
mixxx::audio::kInvalidFramePos,
hotCueIndex,
QString(),
mixxx::RgbColor::nullopt());
Expand All @@ -1024,15 +1025,16 @@ void readAnalyze(TrackPointer track,
if (time < 1) {
time = 1;
}
double position = samples * static_cast<double>(time);
const auto position = mixxx::audio::FramePos(
sampleRateKhz * static_cast<double>(time));

switch (cuesExtendedTag->type()) {
case rekordbox_anlz_t::CUE_LIST_TYPE_MEMORY_CUES: {
switch ((*cueExtendedEntry)->type()) {
case rekordbox_anlz_t::CUE_ENTRY_TYPE_MEMORY_CUE: {
memory_cue_loop_t memoryCue;
memoryCue.startPosition = position;
memoryCue.endPosition = Cue::kNoPosition;
memoryCue.endPosition = mixxx::audio::kInvalidFramePos;
memoryCue.comment = toUnicode((*cueExtendedEntry)->comment());
memoryCue.color = colorFromID(static_cast<int>(
(*cueExtendedEntry)->color_id()));
Expand All @@ -1050,7 +1052,8 @@ void readAnalyze(TrackPointer track,

memory_cue_loop_t loop;
loop.startPosition = position;
loop.endPosition = samples * static_cast<double>(endTime);
loop.endPosition = mixxx::audio::FramePos(
sampleRateKhz * static_cast<double>(endTime));
loop.comment = toUnicode((*cueExtendedEntry)->comment());
loop.color = colorFromID(static_cast<int>((*cueExtendedEntry)->color_id()));
memoryCuesAndLoops << loop;
Expand All @@ -1064,7 +1067,7 @@ void readAnalyze(TrackPointer track,
}
setHotCue(track,
position,
Cue::kNoPosition,
mixxx::audio::kInvalidFramePos,
hotCueIndex,
toUnicode((*cueExtendedEntry)->comment()),
mixxx::RgbColor(qRgb(
Expand Down Expand Up @@ -1097,9 +1100,9 @@ void readAnalyze(TrackPointer track,
memoryCueOrLoopIndex++) {
memory_cue_loop_t memoryCueOrLoop = memoryCuesAndLoops[memoryCueOrLoopIndex];

if (!mainCueFound && memoryCueOrLoop.endPosition == Cue::kNoPosition) {
if (!mainCueFound && !memoryCueOrLoop.endPosition.isValid()) {
// Set first chronological memory cue as Mixxx MainCue
track->setCuePoint(CuePosition(memoryCueOrLoop.startPosition));
track->setMainCuePosition(memoryCueOrLoop.startPosition);
CuePointer pMainCue = track->findCueByType(mixxx::CueType::MainCue);
pMainCue->setLabel(memoryCueOrLoop.comment);
pMainCue->setColor(*memoryCueOrLoop.color);
Expand Down

0 comments on commit 11de340

Please sign in to comment.