![]() |
Mixxx
|
00001 #ifndef BEATMATRIX_H 00002 #define BEATMATRIX_H 00003 00004 #include <QObject> 00005 #include <QMutex> 00006 00007 #include "trackinfoobject.h" 00008 #include "track/beats.h" 00009 00010 // BeatMatrix is an implementation of the Beats interface that implements a list 00011 // of finite beats that have been extracted or otherwise annotated for a track. 00012 class BeatMatrix : public QObject, public Beats { 00013 Q_OBJECT 00014 public: 00015 BeatMatrix(TrackPointer pTrack, const QByteArray* pByteArray=NULL); 00016 virtual ~BeatMatrix(); 00017 00018 // See method comments in beats.h 00019 00020 virtual Beats::CapabilitiesFlags getCapabilities() const { 00021 return BEATSCAP_TRANSLATE | BEATSCAP_SCALE | BEATSCAP_ADDREMOVE | BEATSCAP_MOVEBEAT; 00022 } 00023 00024 virtual QByteArray* toByteArray() const; 00025 virtual QString getVersion() const; 00026 00028 // Beat calculations 00030 00031 virtual double findNextBeat(double dSamples) const; 00032 virtual double findPrevBeat(double dSamples) const; 00033 virtual double findClosestBeat(double dSamples) const; 00034 virtual double findNthBeat(double dSamples, int n) const; 00035 virtual void findBeats(double startSample, double stopSample, QList<double>* pBeatsList) const; 00036 virtual bool hasBeatInRange(double startSample, double stopSample) const; 00037 virtual double getBpm() const; 00038 virtual double getBpmRange(double startSample, double stopSample) const; 00039 00041 // Beat mutations 00043 00044 virtual void addBeat(double dBeatSample); 00045 virtual void removeBeat(double dBeatSample); 00046 virtual void moveBeat(double dBeatSample, double dNewBeatSample); 00047 virtual void translate(double dNumSamples); 00048 virtual void scale(double dScalePercentage); 00049 00050 signals: 00051 void updated(); 00052 00053 private slots: 00054 void slotTrackBpmUpdated(double bpm); 00055 00056 private: 00057 void readByteArray(const QByteArray* pByteArray); 00058 // For internal use only. 00059 bool isValid() const; 00060 unsigned int numBeats() const; 00061 00062 mutable QMutex m_mutex; 00063 int m_iSampleRate; 00064 BeatList m_beatList; 00065 }; 00066 00067 #endif /* BEATMATRIX_H */