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/types.h"
11 
12 class GetKeyMode;
13 
14 namespace mixxx {
15 
16 class AnalyzerQueenMaryKey : public AnalyzerKeyPlugin {
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-keydetector:2",
23                 QObject::tr("Queen Mary University London"),
24                 QObject::tr("Queen Mary Key Detector"),
25                 false);
26     }
27 
28     AnalyzerQueenMaryKey();
29     ~AnalyzerQueenMaryKey() 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 
getKeyChanges()39     KeyChangeList getKeyChanges() const override {
40         return m_resultKeys;
41     }
42 
43   private:
44     std::unique_ptr<GetKeyMode> m_pKeyMode;
45     DownmixAndOverlapHelper m_helper;
46     size_t m_currentFrame;
47     KeyChangeList m_resultKeys;
48     mixxx::track::io::key::ChromaticKey m_prevKey;
49 };
50 
51 } // namespace mixxx
52