diff options
Diffstat (limited to 'rotord/nodes_audio_analysis.h')
| -rw-r--r-- | rotord/nodes_audio_analysis.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/rotord/nodes_audio_analysis.h b/rotord/nodes_audio_analysis.h new file mode 100644 index 0000000..e6c1e65 --- /dev/null +++ b/rotord/nodes_audio_analysis.h @@ -0,0 +1,47 @@ +#ifndef ROTOR_NODES_AUDIO_ANALYSIS +#define ROTOR_NODES_AUDIO_ANALYSIS + +#include "rotor.h" +#include "vampHost.h" + +namespace Rotor { + class Audio_analysis: public Base_audio_processor { + public: + Audio_analysis(){}; + Audio_analysis(map<string,string> &settings) { + base_settings(settings); + soname=find_setting(settings,"soname"); + id=find_setting(settings,"id"); + outputNo=find_setting(settings,"outputNo",0); + }; + Audio_analysis* clone(map<string,string> &_settings) { return new Audio_analysis(_settings);}; + bool init(int _channels,int _bits,int _samples,int _rate); + void cleanup(); + void set_parameter(const std::string &key,const std::string &value){params[key]=ofToFloat(value);}; + int process_frame(uint8_t *data,int samples_in_frame); + const float output(const Time_spec &time) { + if (analyser.features.size()) { + auto i=analyser.features.upper_bound(time.time); //the first element in the container whose key is considered to go after k + if (i!=analyser.features.end()){ + float uk=i->first; + i--; + float lk=i->first; + int ln=i->second; + return (((time.time-lk)/(uk-lk))+ln); + } + } + return 0.0f; + } + void print_features(); + void print_summary(){ + cerr<<"vamp plugin "<<id<<" of library "<<soname<<" found "<<analyser.features.size()<<" features "<<endl; + }; + private: + string soname,id; + int outputNo; + vampHost::Analyser analyser; + map <string,float> params; + }; +} + +#endif
\ No newline at end of file |
