Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/engine/controls/bpmcontrol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,9 @@ void BpmControl::adjustBeatsBpm(double deltaBpm) {

const mixxx::Bpm bpm = pBeats->getBpmInRange(
mixxx::audio::kStartFramePos, frameInfo().trackEndPosition);
// FIXME: calling bpm.value() without checking bpm.isValid()
if (!bpm.isValid()) {
return;
}
const auto centerBpm = mixxx::Bpm(math_max(kBpmAdjustMin, bpm.value() + deltaBpm));
mixxx::Bpm adjustedBpm = BeatUtils::roundBpmWithinRange(
centerBpm - kBpmAdjustStep / 2, centerBpm, centerBpm + kBpmAdjustStep / 2);
Expand Down
12 changes: 10 additions & 2 deletions src/track/beatutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -336,8 +336,13 @@ std::optional<mixxx::Bpm> BeatUtils::trySnap(mixxx::Bpm minBpm,
// static
mixxx::Bpm BeatUtils::roundBpmWithinRange(
mixxx::Bpm minBpm, mixxx::Bpm centerBpm, mixxx::Bpm maxBpm) {
// If any BPM is invalid, return the centerBpm as-is to avoid
// unexpected results in the following calculations
if (!minBpm.isValid() || !centerBpm.isValid() || !maxBpm.isValid()) {
return centerBpm;
}

// First try to snap to a full integer BPM
// FIXME: calling bpm.value() without checking bpm.isValid()
std::optional<mixxx::Bpm> snapBpm = trySnap(minBpm, centerBpm, maxBpm, 1.0);
if (snapBpm) {
return *snapBpm;
Expand Down Expand Up @@ -405,7 +410,10 @@ mixxx::audio::FramePos BeatUtils::adjustPhase(
mixxx::Bpm bpm,
mixxx::audio::SampleRate sampleRate,
const QVector<mixxx::audio::FramePos>& beats) {
// FIXME: calling bpm.value() without checking bpm.isValid()
if (!bpm.isValid()) {
return firstBeat;
}

const double beatLength = 60 * sampleRate / bpm.value();
const mixxx::audio::FramePos startOffset =
mixxx::audio::FramePos(fmod(firstBeat.value(), beatLength));
Expand Down
Loading