summaryrefslogtreecommitdiffstats
path: root/src/test
diff options
context:
space:
mode:
authorJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2021-03-10 21:44:57 +0100
committerJan Holthuis <jan.holthuis@ruhr-uni-bochum.de>2021-03-10 21:44:57 +0100
commit648a114afda2e8164fce43e8d64a176422ec73cd (patch)
treead8b4fd77100f4e010c276d9b7b8944c9a8bd499 /src/test
parent4b3afa3884b3c1e49d8044f6b05b1333fe9e3055 (diff)
test: Add non-const beatmap serialization test for SeratoBeatGrid
Diffstat (limited to 'src/test')
-rw-r--r--src/test/seratobeatgridtest.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/test/seratobeatgridtest.cpp b/src/test/seratobeatgridtest.cpp
index 5c056f0ad3..357b7f4af6 100644
--- a/src/test/seratobeatgridtest.cpp
+++ b/src/test/seratobeatgridtest.cpp
@@ -6,6 +6,7 @@
#include <QtDebug>
#include "track/beatgrid.h"
+#include "track/beatmap.h"
#include "track/serato/beatgrid.h"
#include "util/memory.h"
@@ -120,4 +121,45 @@ TEST_F(SeratoBeatGridTest, SerializeConstBeatgrid) {
EXPECT_NE(seratoBeatGrid.terminalMarker(), nullptr);
EXPECT_FLOAT_EQ(seratoBeatGrid.terminalMarker()->bpm(), static_cast<float>(bpm));
}
+
+TEST_F(SeratoBeatGridTest, SerializeNonConstBeatgrid) {
+ // Create a non-const beatmap
+ constexpr double bpm = 100.0;
+ const auto sampleRate = mixxx::audio::SampleRate(44100);
+ const auto signalInfo = mixxx::audio::SignalInfo(mixxx::audio::ChannelCount(2), sampleRate);
+ const double framesPerMinute = signalInfo.getSampleRate() * 60;
+ const double framesPerBeat = framesPerMinute / bpm;
+
+ QVector<double> beatPositionsFrames;
+ double beatPositionFrames = 0;
+ // Add 2 minutes of beats at 100 bpm to the beatgrid
+ for (int i = 0; i < 2 * bpm; i++) {
+ beatPositionsFrames.append(beatPositionFrames);
+ beatPositionFrames += framesPerBeat;
+ }
+
+ // Now add 3 minutes of beats at 50 bpm to the beatgrid
+ for (int i = 0; i < 3 * bpm / 2; i++) {
+ beatPositionsFrames.append(beatPositionFrames);
+ beatPositionFrames += framesPerBeat * 2;
+ }
+ qWarning() << "beats" << beatPositionsFrames;
+
+ const auto pBeats = mixxx::BeatMap::makeBeatMap(
+ sampleRate, QString("Test"), beatPositionsFrames);
+ // At the 1 minute mark the BPM should be 100
+ EXPECT_EQ(pBeats->getBpmAroundPosition(framesPerMinute, 1), bpm);
+ // At the 4 minute mark the BPM should be 50
+ EXPECT_EQ(pBeats->getBpmAroundPosition(framesPerMinute * 4, 1), bpm / 2);
+ const auto streamInfo = mixxx::audio::StreamInfo(signalInfo,
+ mixxx::audio::Bitrate(320),
+ mixxx::Duration::fromSeconds<int>(300));
+
+ mixxx::SeratoBeatGrid seratoBeatGrid;
+ seratoBeatGrid.setBeats(pBeats, streamInfo, 0);
+ EXPECT_EQ(seratoBeatGrid.nonTerminalMarkers().size(), 2);
+ EXPECT_NE(seratoBeatGrid.terminalMarker(), nullptr);
+ EXPECT_FLOAT_EQ(seratoBeatGrid.terminalMarker()->bpm(), static_cast<float>(bpm / 2));
+}
+
} // namespace