summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/analyzer/analyzerbeats.cpp18
-rw-r--r--src/engine/controls/bpmcontrol.cpp14
-rw-r--r--src/library/banshee/bansheeplaylistmodel.cpp2
-rw-r--r--src/library/baseexternalplaylistmodel.cpp2
-rw-r--r--src/library/baseexternaltrackmodel.cpp2
-rw-r--r--src/library/basesqltablemodel.cpp2
-rw-r--r--src/library/browse/browsetablemodel.cpp2
-rw-r--r--src/library/dao/trackdao.cpp5
-rw-r--r--src/library/dlgtrackinfo.cpp6
-rw-r--r--src/library/rekordbox/rekordboxfeature.cpp2
-rw-r--r--src/mixer/basetrackplayer.cpp2
-rw-r--r--src/test/beatgridtest.cpp14
-rw-r--r--src/test/beatmaptest.cpp14
-rw-r--r--src/test/beatstranslatetest.cpp4
-rw-r--r--src/test/cuecontrol_test.cpp8
-rw-r--r--src/test/enginesynctest.cpp172
-rw-r--r--src/test/looping_control_test.cpp48
-rw-r--r--src/test/searchqueryparsertest.cpp38
-rw-r--r--src/track/track.cpp101
-rw-r--r--src/track/track.h25
-rw-r--r--src/widget/wtrackmenu.cpp7
21 files changed, 250 insertions, 238 deletions
diff --git a/src/analyzer/analyzerbeats.cpp b/src/analyzer/analyzerbeats.cpp
index b3d81f3aee..6f01c2dbf6 100644
--- a/src/analyzer/analyzerbeats.cpp
+++ b/src/analyzer/analyzerbeats.cpp
@@ -256,23 +256,7 @@ void AnalyzerBeats::storeResults(TrackPointer pTrack) {
pBeats = BeatFactory::makeBeatGrid(m_iSampleRate, bpm, 0.0f);
}
- mixxx::BeatsPointer pCurrentBeats = pTrack->getBeats();
-
- // If the track has no beats object then set our newly generated one
- // regardless of beat lock.
- if (!pCurrentBeats) {
- pTrack->setBeats(pBeats);
- return;
- }
-
- // If the track received the beat lock while we were analyzing it then we
- // abort setting it.
- if (pTrack->isBpmLocked()) {
- qDebug() << "Track was BPM-locked as we were analyzing it. Aborting analysis.";
- return;
- }
-
- pTrack->setBeats(pBeats);
+ pTrack->trySetBeats(pBeats, false);
}
// static
diff --git a/src/engine/controls/bpmcontrol.cpp b/src/engine/controls/bpmcontrol.cpp
index 7e932797e9..67612b5778 100644
--- a/src/engine/controls/bpmcontrol.cpp
+++ b/src/engine/controls/bpmcontrol.cpp
@@ -172,7 +172,7 @@ void BpmControl::slotAdjustBeatsFaster(double v) {
if (pBeats && (pBeats->getCapabilities() & mixxx::Beats::BEATSCAP_SETBPM)) {
double bpm = pBeats->getBpm();
double adjustedBpm = bpm + kBpmAdjustStep;
- pTrack->setBeats(pBeats->setBpm(adjustedBpm));
+ pTrack->trySetBeats(pBeats->setBpm(adjustedBpm), false);
}
}
@@ -188,7 +188,7 @@ void BpmControl::slotAdjustBeatsSlower(double v) {
if (pBeats && (pBeats->getCapabilities() & mixxx::Beats::BEATSCAP_SETBPM)) {
double bpm = pBeats->getBpm();
double adjustedBpm = math_max(kBpmAdjustMin, bpm - kBpmAdjustStep);
- pTrack->setBeats(pBeats->setBpm(adjustedBpm));
+ pTrack->trySetBeats(pBeats->setBpm(adjustedBpm), false);
}
}
@@ -204,7 +204,7 @@ void BpmControl::slotTranslateBeatsEarlier(double v) {
if (pBeats &&
(pBeats->getCapabilities() & mixxx::Beats::BEATSCAP_TRANSLATE)) {
const double translate_dist = getSampleOfTrack().rate * -.01;
- pTrack->setBeats(pBeats->translate(translate_dist));
+ pTrack->trySetBeats(pBeats->translate(translate_dist), false);
}
}
@@ -221,7 +221,7 @@ void BpmControl::slotTranslateBeatsLater(double v) {
(pBeats->getCapabilities() & mixxx::Beats::BEATSCAP_TRANSLATE)) {
// TODO(rryan): Track::getSampleRate is possibly inaccurate!
const double translate_dist = getSampleOfTrack().rate * .01;
- pTrack->setBeats(pBeats->translate(translate_dist));
+ pTrack->trySetBeats(pBeats->translate(translate_dist), false);
}
}
@@ -255,7 +255,7 @@ void BpmControl::slotTapFilter(double averageLength, int numSamples) {
// (60 seconds per minute) * (1000 milliseconds per second) / (X millis per
// beat) = Y beats/minute
double averageBpm = 60.0 * 1000.0 / averageLength / rateRatio;
- pTrack->setBeats(pBeats->setBpm(averageBpm));
+ pTrack->trySetBeats(pBeats->setBpm(averageBpm), false);
}
void BpmControl::slotControlBeatSyncPhase(double value) {
@@ -1020,7 +1020,7 @@ void BpmControl::slotBeatsTranslate(double v) {
if (delta % 2 != 0) {
delta--;
}
- pTrack->setBeats(pBeats->translate(delta));
+ pTrack->trySetBeats(pBeats->translate(delta), false);
}
}
@@ -1039,7 +1039,7 @@ void BpmControl::slotBeatsTranslateMatchAlignment(double v) {
m_dUserOffset.setValue(0.0);
double offset = getPhaseOffset(getSampleOfTrack().current);
- pTrack->setBeats(pBeats->translate(-offset));
+ pTrack->trySetBeats(pBeats->translate(-offset), false);
}
}
diff --git a/src/library/banshee/bansheeplaylistmodel.cpp b/src/library/banshee/bansheeplaylistmodel.cpp
index 6590377225..a7f59eeeb9 100644
--- a/src/library/banshee/bansheeplaylistmodel.cpp
+++ b/src/library/banshee/bansheeplaylistmodel.cpp
@@ -287,7 +287,7 @@ TrackPointer BansheePlaylistModel::getTrack(const QModelIndex& index) const {
pTrack->setRating(getFieldString(index, CLM_RATING).toInt());
pTrack->setTrackNumber(getFieldString(index, CLM_TRACKNUMBER));
double bpm = getFieldString(index, CLM_BPM).toDouble();
- bpm = pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, false);
pTrack->setBitrate(getFieldString(index, CLM_BITRATE).toInt());
pTrack->setComment(getFieldString(index, CLM_COMMENT));
pTrack->setComposer(getFieldString(index, CLM_COMPOSER));
diff --git a/src/library/baseexternalplaylistmodel.cpp b/src/library/baseexternalplaylistmodel.cpp
index c419cdba6b..366339f75a 100644
--- a/src/library/baseexternalplaylistmodel.cpp
+++ b/src/library/baseexternalplaylistmodel.cpp
@@ -65,7 +65,7 @@ TrackPointer BaseExternalPlaylistModel::getTrack(const QModelIndex& index) const
float bpm = index.sibling(
index.row(), fieldIndex("bpm")).data().toString().toFloat();
- pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, false);
}
return pTrack;
}
diff --git a/src/library/baseexternaltrackmodel.cpp b/src/library/baseexternaltrackmodel.cpp
index ca48510a08..6cdcd15aeb 100644
--- a/src/library/baseexternaltrackmodel.cpp
+++ b/src/library/baseexternaltrackmodel.cpp
@@ -74,7 +74,7 @@ TrackPointer BaseExternalTrackModel::getTrack(const QModelIndex& index) const {
pTrack->setAlbum(album);
pTrack->setYear(year);
pTrack->setGenre(genre);
- pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, false);
}
} else {
qWarning() << "Failed to load external track" << location;
diff --git a/src/library/basesqltablemodel.cpp b/src/library/basesqltablemodel.cpp
index 7a5421c4ab..2648bbf367 100644
--- a/src/library/basesqltablemodel.cpp
+++ b/src/library/basesqltablemodel.cpp
@@ -702,7 +702,7 @@ bool BaseSqlTableModel::setTrackValueForColumn(
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_COMMENT) == column) {
pTrack->setComment(value.toString());
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_BPM) == column) {
- pTrack->setBpm(static_cast<double>(value.toDouble()));
+ pTrack->trySetBpm(static_cast<double>(value.toDouble()), false);
} else if (fieldIndex(ColumnCache::COLUMN_LIBRARYTABLE_PLAYED) == column) {
// Update both the played flag and the number of times played
pTrack->updatePlayCounter(value.toBool());
diff --git a/src/library/browse/browsetablemodel.cpp b/src/library/browse/browsetablemodel.cpp
index ec1a422ba8..216550b6f7 100644
--- a/src/library/browse/browsetablemodel.cpp
+++ b/src/library/browse/browsetablemodel.cpp
@@ -397,7 +397,7 @@ bool BrowseTableModel::setData(
pTrack->setAlbum(value.toString());
break;
case COLUMN_BPM:
- pTrack->setBpm(value.toDouble());
+ pTrack->trySetBpm(value.toDouble(), false);
break;
case COLUMN_KEY:
pTrack->setKeyText(value.toString());
diff --git a/src/library/dao/trackdao.cpp b/src/library/dao/trackdao.cpp
index c678e66fac..46b89082e2 100644
--- a/src/library/dao/trackdao.cpp
+++ b/src/library/dao/trackdao.cpp
@@ -1090,11 +1090,10 @@ bool setTrackBeats(const QSqlRecord& record, const int column,
const mixxx::BeatsPointer pBeats = BeatFactory::loadBeatsFromByteArray(
pTrack->getSampleRate(), beatsVersion, beatsSubVersion, beatsBlob);
if (pBeats) {
- pTrack->setBeats(pBeats);
+ pTrack->trySetBeats(pBeats, bpmLocked);
} else {
- pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, bpmLocked);
}
- pTrack->setBpmLocked(bpmLocked);
return false;
}
diff --git a/src/library/dlgtrackinfo.cpp b/src/library/dlgtrackinfo.cpp
index 1ff7dbdc64..2e953e4381 100644
--- a/src/library/dlgtrackinfo.cpp
+++ b/src/library/dlgtrackinfo.cpp
@@ -396,10 +396,8 @@ void DlgTrackInfo::saveTrack() {
m_pLoadedTrack->setTrackNumber(txtTrackNumber->text());
m_pLoadedTrack->setComment(txtComment->toPlainText());
- if (!m_pLoadedTrack->isBpmLocked()) {
- m_pLoadedTrack->setBeats(m_pBeatsClone);
- reloadTrackBeats(*m_pLoadedTrack);
- }
+ m_pLoadedTrack->trySetBeats(m_pBeatsClone, false);
+ reloadTrackBeats(*m_pLoadedTrack);
// If the user is editing the key and hits enter to close DlgTrackInfo, the
// editingFinished signal will not fire in time. Run the key text changed
diff --git a/src/library/rekordbox/rekordboxfeature.cpp b/src/library/rekordbox/rekordboxfeature.cpp
index 901050aa86..80a52bb99b 100644
--- a/src/library/rekordbox/rekordboxfeature.cpp
+++ b/src/library/rekordbox/rekordboxfeature.cpp
@@ -870,7 +870,7 @@ void readAnalyze(TrackPointer track,
static_cast<SINT>(sampleRate),
mixxx::rekordboxconstants::beatsSubversion,
beats);
- track->setBeats(pBeats);
+ track->trySetBeats(pBeats, false);
} break;
case rekordbox_anlz_t::SECTION_TAGS_CUES: {
if (ignoreCues) {
diff --git a/src/mixer/basetrackplayer.cpp b/src/mixer/basetrackplayer.cpp
index c0503d8b4c..d6ad555479 100644
--- a/src/mixer/basetrackplayer.cpp
+++ b/src/mixer/basetrackplayer.cpp
@@ -209,7 +209,7 @@ TrackPointer BaseTrackPlayerImpl::loadFakeTrack(bool bPlay, double filebpm) {
mixxx::audio::Bitrate(),
mixxx::Duration::fromSeconds(10));
if (filebpm > 0) {
- pTrack->setBpm(filebpm);
+ pTrack->trySetBpm(filebpm, false);
}
TrackPointer pOldTrack = m_pLoadedTrack;
diff --git a/src/test/beatgridtest.cpp b/src/test/beatgridtest.cpp
index 311b459578..4f63317191 100644
--- a/src/test/beatgridtest.cpp
+++ b/src/test/beatgridtest.cpp
@@ -27,7 +27,7 @@ TEST(BeatGridTest, Scale) {
TrackPointer pTrack = newTrack(sampleRate);
double bpm = 60.0;
- pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, false);
auto pGrid = BeatGrid::makeBeatGrid(pTrack->getSampleRate(), QString(), bpm, 0);
@@ -57,7 +57,7 @@ TEST(BeatGridTest, TestNthBeatWhenOnBeat) {
double bpm = 60.1;
const int kFrameSize = 2;
- pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, false);
double beatLength = (60.0 * sampleRate / bpm) * kFrameSize;
auto pGrid = BeatGrid::makeBeatGrid(pTrack->getSampleRate(), QString(), bpm, 0);
@@ -91,7 +91,7 @@ TEST(BeatGridTest, TestNthBeatWhenOnBeat_BeforeEpsilon) {
double bpm = 60.1;
const int kFrameSize = 2;
- pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, false);
double beatLength = (60.0 * sampleRate / bpm) * kFrameSize;
auto pGrid = BeatGrid::makeBeatGrid(pTrack->getSampleRate(), QString(), bpm, 0);
@@ -127,7 +127,7 @@ TEST(BeatGridTest, TestNthBeatWhenOnBeat_AfterEpsilon) {
double bpm = 60.1;
const int kFrameSize = 2;
- pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, false);
double beatLength = (60.0 * sampleRate / bpm) * kFrameSize;
auto pGrid = BeatGrid::makeBeatGrid(pTrack->getSampleRate(), QString(), bpm, 0);
@@ -163,7 +163,7 @@ TEST(BeatGridTest, TestNthBeatWhenNotOnBeat) {
double bpm = 60.1;
const int kFrameSize = 2;
- pTrack->setBpm(bpm);
+ pTrack->trySetBpm(bpm, false);
double beatLength = (60.0 * sampleRate / bpm) * kFrameSize;
auto pGrid = BeatGrid::makeBeatGrid(pTrack->getSampleRate(), QString(), bpm, 0);
@@ -195,13 +195,13 @@ TEST(BeatGridTest, FromMetadata) {
TrackPointer pTrack = newTrack(sampleRate);
double bpm = 60.1;
- double echoBpm = pTrack->setBpm(bpm);
+ double echoBpm = pTrack->trySetBpm(bpm, false);
EXPECT_DOUBLE_EQ(echoBpm, bpm);
auto pBeats = pTrack->getBeats();
EXPECT_DOUBLE_EQ(pBeats->getBpm(), bpm);
- echoBpm = pTrack->setBpm(-60.1);
+ echoBpm = pTrack->trySetBpm(-60.1, false);
EXPECT_DOUBLE_EQ(echoBpm, mixxx::Bpm::kValueUndefined);
pBeats = pTrack->getBeats();
diff --git a/src/test/beatmaptest.cpp b/src/test/beatmaptest.cpp
index 66abad5ae4..880b994714 100644
--- a/src/test/beatmaptest.cpp
+++ b/src/test/beatmaptest.cpp
@@ -49,7 +49,7 @@ class BeatMapTest : public testing::Test {
TEST_F(BeatMapTest, Scale) {
const double bpm = 60.0;
- m_pTrack->setBpm(bpm);
+ m_pTrack->trySetBpm(bpm, false);
double beatLengthFrames = getBeatLengthFrames(bpm);
double startOffsetFrames = 7;
const int numBeats = 100;
@@ -79,7 +79,7 @@ TEST_F(BeatMapTest, Scale) {
TEST_F(BeatMapTest, TestNthBeat) {
const double bpm = 60.0;
- m_pTrack->setBpm(bpm);
+ m_pTrack->trySetBpm(bpm, false);
double beatLengthFrames = getBeatLengthFrames(bpm);
double startOffsetFrames = 7;
double beatLengthSamples = getBeatLengthSamples(bpm);
@@ -111,7 +111,7 @@ TEST_F(BeatMapTest, TestNthBeat) {
TEST_F(BeatMapTest, TestNthBeatWhenOnBeat) {
const double bpm = 60.0;
- m_pTrack->setBpm(bpm);
+ m_pTrack->trySetBpm(bpm, false);
double beatLengthFrames = getBeatLengthFrames(bpm);
double startOffsetFrames = 7;
double beatLengthSamples = getBeatLengthSamples(bpm);
@@ -148,7 +148,7 @@ TEST_F(BeatMapTest, TestNthBeatWhenOnBeat) {
TEST_F(BeatMapTest, TestNthBeatWhenOnBeat_BeforeEpsilon) {
const double bpm = 60.0;
- m_pTrack->setBpm(bpm);
+ m_pTrack->trySetBpm(bpm, false);
double beatLengthFrames = getBeatLengthFrames(bpm);
double startOffsetFrames = 7;
double beatLengthSamples = getBeatLengthSamples(bpm);
@@ -187,7 +187,7 @@ TEST_F(BeatMapTest, TestNthBeatWhenOnBeat_BeforeEpsilon) {
TEST_F(BeatMapTest, TestNthBeatWhenOnBeat_AfterEpsilon) {
const double bpm = 60.0;
- m_pTrack->setBpm(bpm);
+ m_pTrack->trySetBpm(bpm, false);
double beatLengthFrames = getBeatLengthFrames(bpm);
double startOffsetFrames = 7;
double beatLengthSamples = getBeatLengthSamples(bpm);
@@ -227,7 +227,7 @@ TEST_F(BeatMapTest, TestNthBeatWhenOnBeat_AfterEpsilon) {
TEST_F(BeatMapTest, TestNthBeatWhenNotOnBeat) {
const double bpm = 60.0;
- m_pTrack->setBpm(bpm);
+ m_pTrack->trySetBpm(bpm, false);
double beatLengthFrames = getBeatLengthFrames(bpm);
double startOffsetFrames = 7;
double beatLengthSamples = getBeatLengthSamples(bpm);
@@ -264,7 +264,7 @@ TEST_F(BeatMapTest, TestNthBeatWhenNotOnBeat) {
TEST_F(BeatMapTest, TestBpmAround) {
const double filebpm = 60.0;
double approx_beat_length = getBeatLengthSamples(filebpm);
- m_pTrack->setBpm(filebpm);
+ m_pTrack->trySetBpm(filebpm, false);
const int numBeats = 64;
QVector<double> beats;
diff --git a/src/test/beatstranslatetest.cpp b/src/test/beatstranslatetest.cpp
index acdc5ec1d7..a5f13e0517 100644
--- a/src/test/beatstranslatetest.cpp
+++ b/src/test/beatstranslatetest.cpp
@@ -11,12 +11,12 @@ TEST_F(BeatsTranslateTest, SimpleTranslateMatch) {
const double firstBeat = 0.0;
auto grid1 = mixxx::BeatGrid::makeBeatGrid(
m_pTrack1->getSampleRate(), QString(), bpm, firstBeat);
- m_pTrack1->setBeats(mixxx::BeatsPointer(grid1));
+ m_pTrack1->trySetBeats(grid1, false);
ASSERT_DOUBLE_EQ(firstBeat, grid1->findClosestBeat(0));
auto grid2 = mixxx::BeatGrid::makeBeatGrid(
m_pTrack2->getSampleRate(), QString(), bpm, firstBeat);
- m_pTrack2->setBeats(mixxx::BeatsPointer(grid2));
+ m_pTrack2->trySetBeats(grid2, false);
ASSERT_DOUBLE_EQ(firstBeat, grid2->findClosestBeat(0));
// Seek deck 1 forward a bit.
diff --git a/src/test/cuecontrol_test.cpp b/src/test/cuecontrol_test.cpp
index d24e86d676..336742d42b 100644
--- a/src/test/cuecontrol_test.cpp
+++ b/src/test/cuecontrol_test.cpp
@@ -169,7 +169,7 @@ TEST_F(CueControlTest, LoadAutodetectedCues_QuantizeEnabled) {
m_pQuantizeEnabled->set(1);
TrackPointer pTrack = createTestTrack();
- pTrack->setBpm(120.0);
+ pTrack->trySetBpm(120.0, false);
const int frameSize = 2;
const int sampleRate = pTrack->getSampleRate();
@@ -201,7 +201,7 @@ TEST_F(CueControlTest, LoadAutodetectedCues_QuantizeEnabledNoBeats) {
m_pQuantizeEnabled->set(1);
TrackPointer pTrack = createTestTrack();
- pTrack->setBpm(0.0);
+ pTrack->trySetBpm(0.0, false);
pTrack->setCuePoint(CuePosition(100.0));
@@ -228,7 +228,7 @@ TEST_F(CueControlTest, LoadAutodetectedCues_QuantizeDisabled) {
m_pQuantizeEnabled->set(0);
TrackPointer pTrack = createTestTrack();
- pTrack->setBpm(120.0);
+ pTrack->trySetBpm(120.0, false);
pTrack->setCuePoint(CuePosition(240.0));
@@ -333,7 +333,7 @@ TEST_F(CueControlTest, FollowCueOnQuantize) {
config()->set(ConfigKey("[Controls]", "CueRecall"),
ConfigValue(static_cast<int>(SeekOnLoadMode::MainCue)));
TrackPointer pTrack = createTestTrack();
- pTrack->setBpm(120.0);
+ pTrack->trySetBpm(120.0, false);
const int frameSize = 2;
const int sampleRate = pTrack->getSampleRate();
diff --git a/src/test/enginesynctest.cpp b/src/test/enginesynctest.cpp
index 377f39e62c..4216af58b3 100644
--- a/src/test/enginesynctest.cpp
+++ b/src/test/enginesynctest.cpp
@@ -194,9 +194,9 @@ TEST_F(EngineSyncTest, ExplicitMasterPersists) {
// If we set an explicit master, enabling sync or pressing play on other decks
// doesn't cause the master to move around.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 120, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 124, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
auto pButtonMasterSync1 =
std::make_unique<ControlProxy>(m_sGroup1, "sync_mode");
@@ -226,11 +226,11 @@ TEST_F(EngineSyncTest, ExplicitMasterPersists) {
TEST_F(EngineSyncTest, SetMasterWhilePlaying) {
// Make sure we don't get two master lights if we change masters while playing.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 120, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 124, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
mixxx::BeatsPointer pBeats3 = BeatFactory::makeBeatGrid(m_pTrack3->getSampleRate(), 128, 0.0);
- m_pTrack3->setBeats(pBeats3);
+ m_pTrack3->trySetBeats(pBeats3, false);
auto pButtonMasterSync1 =
std::make_unique<ControlProxy>(m_sGroup1, "sync_mode");
@@ -260,7 +260,7 @@ TEST_F(EngineSyncTest, SetMasterWhilePlaying) {
TEST_F(EngineSyncTest, SetEnabledBecomesMaster) {
// If we set the first channel with a valid tempo to follower, it should be master.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 80, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
auto pButtonMasterSync1 =
std::make_unique<ControlProxy>(m_sGroup1, "sync_mode");
pButtonMasterSync1->slotSet(SYNC_FOLLOWER);
@@ -287,10 +287,10 @@ TEST_F(EngineSyncTest, DisableInternalMasterWhilePlaying) {
// Make sure both decks are playing.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 80, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
ControlObject::getControl(ConfigKey(m_sGroup1, "play"))->set(1.0);
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 80, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
ControlObject::getControl(ConfigKey(m_sGroup2, "play"))->set(1.0);
ProcessBuffer();
@@ -306,13 +306,13 @@ TEST_F(EngineSyncTest, DisableInternalMasterWhilePlaying) {
TEST_F(EngineSyncTest, DisableSyncOnMaster) {
// Channel 1 follower, channel 2 master.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 130, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
auto pButtonSyncMode1 =
std::make_unique<ControlProxy>(m_sGroup1, "sync_mode");
pButtonSyncMode1->slotSet(SYNC_FOLLOWER);
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 130, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
auto pButtonSyncMaster2 =
std::make_unique<ControlProxy>(m_sGroup2, "sync_master");
pButtonSyncMaster2->slotSet(1.0);
@@ -344,7 +344,7 @@ TEST_F(EngineSyncTest, InternalMasterSetFollowerSliderMoves) {
// Set the file bpm of channel 1 to 80 bpm.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 80, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
auto pButtonMasterSync1 =
std::make_unique<ControlProxy>(m_sGroup1, "sync_mode");
@@ -362,7 +362,7 @@ TEST_F(EngineSyncTest, AnySyncDeckSliderStays) {
// master BPM if a new deck enables sync.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 80, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
auto pButtonSyncEnabled1 =
std::make_unique<ControlProxy>(m_sGroup1, "sync_enabled");
pButtonSyncEnabled1->set(1.0);
@@ -373,7 +373,7 @@ TEST_F(EngineSyncTest, AnySyncDeckSliderStays) {
->get());
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 100, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
auto pButtonSyncEnabled2 =
std::make_unique<ControlProxy>(m_sGroup2, "sync_enabled");
pButtonSyncEnabled2->set(1.0);
@@ -397,11 +397,11 @@ TEST_F(EngineSyncTest, InternalClockFollowsFirstPlayingDeck) {
// Set up decks so they can be playing, and start deck 1.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 100, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
ControlObject::set(ConfigKey(m_sGroup1, "rate"), getRateSliderValue(1.0));
ControlObject::set(ConfigKey(m_sGroup1, "play"), 1.0);
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 130, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
ControlObject::set(ConfigKey(m_sGroup2, "rate"), getRateSliderValue(1.0));
ControlObject::set(ConfigKey(m_sGroup2, "play"), 0.0);
ProcessBuffer();
@@ -467,10 +467,10 @@ TEST_F(EngineSyncTest, SetExplicitMasterByLights) {
// Set the file bpm of channel 1 to 160bpm.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 160, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
// Set the file bpm of channel 2 to 150bpm.
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 150, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
// Set channel 1 to be explicit master.
pButtonSyncMaster1->slotSet(1.0);
@@ -553,7 +553,7 @@ TEST_F(EngineSyncTest, RateChangeTest) {
// Set the file bpm of channel 1 to 160bpm.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 160, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
EXPECT_DOUBLE_EQ(
160.0, ControlObject::get(ConfigKey(m_sGroup1, "file_bpm")));
ProcessBuffer();
@@ -572,7 +572,7 @@ TEST_F(EngineSyncTest, RateChangeTest) {
// Set the file bpm of channel 2 to 120bpm.
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 120, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
EXPECT_DOUBLE_EQ(
120.0, ControlObject::get(ConfigKey(m_sGroup2, "file_bpm")));
@@ -594,13 +594,13 @@ TEST_F(EngineSyncTest, RateChangeTestWeirdOrder) {
// Set the file bpm of channel 1 to 160bpm.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 160, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
EXPECT_DOUBLE_EQ(
160.0, ControlObject::get(ConfigKey(m_sInternalClockGroup, "bpm")));
// Set the file bpm of channel 2 to 120bpm.
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 120, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
// Set the rate slider of channel 1 to 1.2.
ControlObject::set(ConfigKey(m_sGroup1, "rate"), getRateSliderValue(1.2));
@@ -618,13 +618,13 @@ TEST_F(EngineSyncTest, RateChangeTestWeirdOrder) {
TEST_F(EngineSyncTest, RateChangeTestOrder3) {
// Set the file bpm of channel 1 to 160bpm.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 160, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
EXPECT_DOUBLE_EQ(
160.0, ControlObject::get(ConfigKey(m_sGroup1, "file_bpm")));
// Set the file bpm of channel 2 to 120bpm.
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 120, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
EXPECT_DOUBLE_EQ(
120.0, ControlObject::get(ConfigKey(m_sGroup2, "file_bpm")));
@@ -662,11 +662,11 @@ TEST_F(EngineSyncTest, FollowerRateChange) {
// Set the file bpm of channel 1 to 160bpm.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 160, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
// Set the file bpm of channel 2 to 120bpm.
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 120, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
// Set the rate slider of channel 1 to 1.2.
ControlObject::set(ConfigKey(m_sGroup1, "rate"), getRateSliderValue(1.2));
@@ -708,13 +708,13 @@ TEST_F(EngineSyncTest, InternalRateChangeTest) {
// Set the file bpm of channel 1 to 160bpm.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 160, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
EXPECT_DOUBLE_EQ(160.0,
ControlObject::getControl(ConfigKey(m_sGroup1, "file_bpm"))->get());
// Set the file bpm of channel 2 to 120bpm.
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 120, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
EXPECT_DOUBLE_EQ(120.0,
ControlObject::getControl(ConfigKey(m_sGroup2, "file_bpm"))->get());
@@ -762,9 +762,9 @@ TEST_F(EngineSyncTest, InternalRateChangeTest) {
TEST_F(EngineSyncTest, MasterStopSliderCheck) {
// If the master is playing, and stop is pushed, the sliders should stay the same.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 120, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 128, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
auto pButtonMasterSync1 =
std::make_unique<ControlProxy>(m_sGroup1, "sync_mode");
@@ -806,7 +806,7 @@ TEST_F(EngineSyncTest, EnableOneDeckInitsMaster) {
// Set up the deck to play.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 130, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
ControlObject::getControl(ConfigKey(m_sGroup1, "rate"))
->set(getRateSliderValue(1.0));
ControlObject::getControl(ConfigKey(m_sGroup1, "beat_distance"))->set(0.2);
@@ -833,7 +833,7 @@ TEST_F(EngineSyncTest, EnableOneDeckInitsMaster) {
// Enable second deck, bpm and beat distance should still match original setting.
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 140, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
ControlObject::getControl(ConfigKey(m_sGroup2, "rate"))
->set(getRateSliderValue(1.0));
ControlObject::getControl(ConfigKey(m_sGroup2, "beat_distance"))->set(0.2);
@@ -860,7 +860,7 @@ TEST_F(EngineSyncTest, EnableOneDeckInitializesMaster) {
// Enabling sync on a deck causes it to be master, and sets bpm and clock.
// Set the deck to play.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 130, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
ControlObject::getControl(ConfigKey(m_sGroup1, "rate"))
->set(getRateSliderValue(1.0));
ControlObject::getControl(ConfigKey(m_sGroup1, "beat_distance"))->set(0.2);
@@ -1049,7 +1049,7 @@ TEST_F(EngineSyncTest, EnableOneDeckSliderUpdates) {
std::make_unique<ControlProxy>(m_sGroup1, "sync_enabled");
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 130, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
ControlObject::getControl(ConfigKey(m_sGroup1, "rate"))
->set(getRateSliderValue(1.0));
@@ -1076,11 +1076,11 @@ TEST_F(EngineSyncTest, SyncToNonSyncDeck) {
std::make_unique<ControlProxy>(m_sGroup2, "sync_enabled");
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 130, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
ProcessBuffer();
ControlObject::set(ConfigKey(m_sGroup1, "rate"), getRateSliderValue(1.0));
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 100, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
ControlObject::getControl(ConfigKey(m_sGroup2, "rate"))
->set(getRateSliderValue(1.0));
@@ -1159,11 +1159,11 @@ TEST_F(EngineSyncTest, MomentarySyncDependsOnPlayingStates) {
// Set up decks so they can be playing, and start deck 1.
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 100, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
ControlObject::set(ConfigKey(m_sGroup1, "rate"), getRateSliderValue(1.0));
ControlObject::set(ConfigKey(m_sGroup1, "play"), 1.0);
mixxx::BeatsPointer pBeats2 = BeatFactory::makeBeatGrid(m_pTrack2->getSampleRate(), 130, 0.0);
- m_pTrack2->setBeats(pBeats2);
+ m_pTrack2->trySetBeats(pBeats2, false);
ControlObject::set(ConfigKey(m_sGroup2, "rate"), getRateSliderValue(1.0));
ControlObject::set(ConfigKey(m_sGroup2, "play"), 1.0);
ProcessBuffer();
@@ -1232,7 +1232,7 @@ TEST_F(EngineSyncTest, EjectTrackSyncRemains) {
auto pButtonEject1 = std::make_unique<ControlProxy>(m_sGroup1, "eject");
mixxx::BeatsPointer pBeats1 = BeatFactory::makeBeatGrid(m_pTrack1->getSampleRate(), 120, 0.0);
- m_pTrack1->setBeats(pBeats1);
+ m_pTrack1->trySetBeats(pBeats1, false);
pButtonSyncEnabled1->set(1.0);
ProcessBuffer();
@@ -1257,7 +1257,7