summaryrefslogtreecommitdiff
path: root/rotord/nodes_audio_analysis.h
diff options
context:
space:
mode:
Diffstat (limited to 'rotord/nodes_audio_analysis.h')
-rw-r--r--rotord/nodes_audio_analysis.h47
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