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