1 #pragma once
2 
3 #include <QObject>
4 
5 #include "analyzer/plugins/analyzerplugin.h"
6 #include "util/memory.h"
7 #include "util/samplebuffer.h"
8 
9 namespace soundtouch {
10 class BPMDetect;
11 } // namespace soundtouch
12 
13 namespace mixxx {
14 
15 class AnalyzerSoundTouchBeats : public AnalyzerBeatsPlugin {
16   public:
pluginInfo()17     static AnalyzerPluginInfo pluginInfo() {
18         return AnalyzerPluginInfo(
19                 "mixxxbpmdetection",
20                 "Olli Parviainen",
21                 QObject::tr("SoundTouch BPM Detector (Legacy)"),
22                 false);
23     }
24 
25     AnalyzerSoundTouchBeats();
26     ~AnalyzerSoundTouchBeats() override;
27 
info()28     AnalyzerPluginInfo info() const override {
29         return pluginInfo();
30     }
31 
32     bool initialize(int samplerate) override;
33     bool processSamples(const CSAMPLE* pIn, const int iLen) override;
34     bool finalize() override;
35 
supportsBeatTracking()36     bool supportsBeatTracking() const override {
37         return false;
38     }
39 
getBpm()40     float getBpm() const override {
41         return m_fResultBpm;
42     }
43 
44   private:
45     std::unique_ptr<soundtouch::BPMDetect> m_pSoundTouch;
46     SampleBuffer m_downmixBuffer;
47     float m_fResultBpm;
48 };
49 
50 } // namespace mixxx
51