Mixxx

/home/maxime/Projets/Mixxx/1.10/mixxx/src/track/beatmatrix.h

Go to the documentation of this file.
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 */
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines