![]() |
Mixxx
|
00001 00002 #ifndef TonalAnalysis_hxx 00003 #define TonalAnalysis_hxx 00004 00005 #include "DataTypes.hxx" 00006 #include "DiscontinuousSegmentation.hxx" 00007 #include "OutPort.hxx" 00008 #include "AudioInPort.hxx" 00009 #include "Processing.hxx" 00010 #include "Audio.hxx" 00011 #include "ProcessingConfig.hxx" 00012 #include <string> 00013 00014 namespace Simac { class ChordExtractor; } 00015 00016 namespace CLAM 00017 { 00018 00019 class TonalAnalysisConfig : public ProcessingConfig 00020 { 00021 public: 00022 DYNAMIC_TYPE_USING_INTERFACE (TonalAnalysisConfig, 5, ProcessingConfig); 00023 DYN_ATTRIBUTE (0, public, double, FilterInertia); 00024 DYN_ATTRIBUTE (1, public, bool, TunningEnabled); 00025 DYN_ATTRIBUTE (2, public, bool, PeakWindowingEnabled); 00026 DYN_ATTRIBUTE (3, public, double, HopRatio); 00027 DYN_ATTRIBUTE (4, public, unsigned, SegmentationMethod); 00028 protected: 00029 void DefaultInit(void); 00030 }; 00031 00032 class TonalAnalysis : public Processing 00033 { 00034 private: 00035 00036 TonalAnalysisConfig _config; 00037 AudioInPort _input; 00038 OutPort<std::vector<CLAM::TData> > _pcp; 00039 OutPort<std::vector<CLAM::TData> > _chordCorrelation; 00040 OutPort<DiscontinuousSegmentation> _segmentation; 00041 OutPort<std::vector<std::pair<CLAM::TData, CLAM::TData> > > _chromaPeaks; 00042 OutPort<std::pair<CLAM::TData, CLAM::TData> > _tunning; 00043 00044 public: 00045 TonalAnalysis( const TonalAnalysisConfig & config = TonalAnalysisConfig() ); 00046 00047 bool Do(); 00048 virtual ~TonalAnalysis(); 00049 const char * GetClassName() const {return "TonalAnalysis";} 00050 00051 inline const ProcessingConfig &GetConfig() const { return _config;} 00052 bool ConcreteConfigure(const ProcessingConfig& c); 00053 bool ConcreteStart(); 00054 bool ConcreteStop(); 00055 private: 00056 Simac::ChordExtractor * _implementation; 00057 std::vector<float> _floatBuffer; 00058 CLAM::TData _currentTime; 00059 00060 }; 00061 00062 } //namespace CLAM 00063 00064 #endif 00065 00066 00067