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