1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
/*
* beatmap.h
*
* Created on: 08/dic/2011
* Author: vittorio
*/
#pragma once
#include "proto/beats.pb.h"
#include "track/beats.h"
#define BEAT_MAP_VERSION "BeatMap-1.0"
class Track;
typedef QList<mixxx::track::io::Beat> BeatList;
namespace mixxx {
class BeatMap final : public Beats {
public:
~BeatMap() override = default;
static BeatsPointer fromByteArray(
audio::SampleRate sampleRate,
const QString& subVersion,
const QByteArray& byteArray);
static BeatsPointer makeBeatMap(
audio::SampleRate sampleRate,
const QString& subVersion,
const QVector<mixxx::audio::FramePos>& beats);
bool hasConstantTempo() const override {
return false;
}
QByteArray toByteArray() const override;
QString getVersion() const override;
QString getSubVersion() const override;
////////////////////////////////////////////////////////////////////////////
// Beat calculations
////////////////////////////////////////////////////////////////////////////
bool findPrevNextBeats(audio::FramePos position,
audio::FramePos* prevBeatPosition,
audio::FramePos* nextBeatPosition,
bool snapToNearBeats) const override;
audio::FramePos findNthBeat(audio::FramePos position, int n) const override;
std::unique_ptr<BeatIterator> findBeats(audio::FramePos startPosition,
audio::FramePos endPosition) const override;
bool hasBeatInRange(audio::FramePos startPosition, audio::FramePos endPosition) const override;
mixxx::Bpm getBpm() const override;
mixxx::Bpm getBpmAroundPosition(audio::FramePos position, int n) const override;
audio::SampleRate getSampleRate() const override {
return m_sampleRate;
}
////////////////////////////////////////////////////////////////////////////
// Beat mutations
////////////////////////////////////////////////////////////////////////////
BeatsPointer translate(audio::FrameDiff_t offset) const override;
BeatsPointer scale(BpmScale scale) const override;
BeatsPointer setBpm(mixxx::Bpm bpm) const override;
private:
BeatMap(audio::SampleRate sampleRate,
const QString& subVersion,
BeatList beats,
mixxx::Bpm nominalBpm);
// Constructor to update the beat map
BeatMap(const BeatMap& other, BeatList beats, mixxx::Bpm nominalBpm);
BeatMap(const BeatMap& other);
bool isValid() const override;
const QString m_subVersion;
const audio::SampleRate m_sampleRate;
const mixxx::Bpm m_nominalBpm;
const BeatList m_beats;
};
} // namespace mixxx
|