1 #pragma once 2 3 #include <vector> 4 5 #include <QObject> 6 7 #include "analyzer/plugins/analyzerplugin.h" 8 #include "analyzer/plugins/buffering_utils.h" 9 #include "util/memory.h" 10 #include "util/samplebuffer.h" 11 12 class DetectionFunction; 13 14 namespace mixxx { 15 16 class AnalyzerQueenMaryBeats : public AnalyzerBeatsPlugin { 17 public: pluginInfo()18 static AnalyzerPluginInfo pluginInfo() { 19 return AnalyzerPluginInfo( 20 // Don't change this ID. It was auto generated by VAMP until 21 // Mixxx 2.1 and we keep it for a compatible config. 22 "qm-tempotracker:0", 23 QObject::tr("Queen Mary University London"), 24 QObject::tr("Queen Mary Tempo and Beat Tracker"), 25 true); 26 } 27 28 AnalyzerQueenMaryBeats(); 29 ~AnalyzerQueenMaryBeats() override; 30 info()31 AnalyzerPluginInfo info() const override { 32 return pluginInfo(); 33 } 34 35 bool initialize(int samplerate) override; 36 bool processSamples(const CSAMPLE* pIn, const int iLen) override; 37 bool finalize() override; 38 supportsBeatTracking()39 bool supportsBeatTracking() const override { 40 return true; 41 } 42 getBeats()43 QVector<double> getBeats() const override { 44 return m_resultBeats; 45 } 46 47 private: 48 std::unique_ptr<DetectionFunction> m_pDetectionFunction; 49 DownmixAndOverlapHelper m_helper; 50 int m_iSampleRate; 51 int m_windowSize; 52 int m_stepSize; 53 std::vector<double> m_detectionResults; 54 QVector<double> m_resultBeats; 55 }; 56 57 } // namespace mixxx 58