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