diff options
| author | Tim Redfern <tim@eclectronics.org> | 2013-05-22 19:39:11 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2013-05-22 19:39:11 +0100 |
| commit | 55513473ca37841b40662e1a0221d7dd260a59b7 (patch) | |
| tree | be531f11f5258fa3cd576e2a8432513989fc82fa /rotord/rotor.h | |
| parent | 2c3a51b49232ebd6776ba491f96335208d3fdc66 (diff) | |
baffled by audio analysis
Diffstat (limited to 'rotord/rotor.h')
| -rwxr-xr-x | rotord/rotor.h | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/rotord/rotor.h b/rotord/rotor.h index 137f8ee..6ca5da2 100755 --- a/rotord/rotor.h +++ b/rotord/rotor.h @@ -338,6 +338,7 @@ namespace Rotor { class Node{ public: virtual Node* clone(map<string,string> &_settings)=0; + virtual ~Node(){}; UUID uid; //every usable node has a UUID int id; vector<Signal_input*> inputs; //simple node can have signal inputs, output depends on node type @@ -357,6 +358,7 @@ namespace Rotor { output_type=find_setting(settings,"output"); ID=find_setting(settings,"ID"); } + virtual void link_params(){}; //TODO make param classes that link automatically void update_params(const Time_spec& time); }; class Signal_node: public Node{ @@ -378,8 +380,9 @@ namespace Rotor { class Base_audio_processor: public Signal_node { public: virtual int process_frame(uint8_t *data,int samples)=0; - virtual bool init(int _channels,int _bits,int _samples,int _rate)=0; + virtual bool init(int _channels,int _bits,int _samples,int _rate,const map<string,float> ¶ms)=0; virtual void cleanup()=0; + virtual void print_summary(){}; int channels,bits,samples,rate; }; //actual nodes------------------------------------------------- @@ -390,28 +393,29 @@ namespace Rotor { base_settings(settings); soname=find_setting(settings,"soname"); id=find_setting(settings,"id"); - outputNo=ofToInt(find_setting(settings,"output","0")); + 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); + bool init(int _channels,int _bits,int _samples,int _rate,const map<string,float> ¶ms); void cleanup(); 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.lower_bound(time.time); + 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; - if (i++!=analyser.features.end()){ - float uk=i->first; - return (((time.time-lk)/(uk-lk))+ln); - } - else return (float)ln; + 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; @@ -447,6 +451,8 @@ namespace Rotor { if (_op=="<") op=COMPARISON_Less; if (_op==">=") op=COMPARISON_Greater_or_equal; if (_op=="<=") op=COMPARISON_Less_or_equal; + } + void link_params() { for (auto p:parameter_inputs){ if (p->parameter=="value") p->receiver=&value; } @@ -500,7 +506,10 @@ namespace Rotor { if (_op=="*") op=ARITHMETIC_multiply; if (_op=="/") op=ARITHMETIC_divide; if (_op=="%") op=ARITHMETIC_modulo; + } + void link_params() { for (auto p:parameter_inputs){ + p->receiver=nullptr; if (p->parameter=="value") p->receiver=&value; } }; @@ -818,10 +827,15 @@ namespace Rotor { if (_op=="*") op=ARITHMETIC_multiply; if (_op=="/") op=ARITHMETIC_divide; //if (_op=="%") op=ARITHMETIC_modulo; ??what would this even mean? + image=nullptr; + } + void link_params() { for (auto p:parameter_inputs){ - if (p->parameter=="value") p->receiver=&value; + if (p->parameter=="value") { + p->receiver=&value; + } } - image=nullptr; + }; ~Image_arithmetic(){if (image) delete image;}; Image *output(const Frame_spec &frame){ @@ -863,6 +877,8 @@ namespace Rotor { base_settings(settings); levels_settings(settings); image=new Image(); + } + void link_params() { for (auto p:parameter_inputs){ if (p->parameter=="black_in") p->receiver=&black_in; if (p->parameter=="white_in") p->receiver=&white_in; @@ -954,6 +970,8 @@ namespace Rotor { image=new Image(); lastframe=-1; mode=find_setting(settings,"mode",0.0f); + } + void link_params() { for (auto p:parameter_inputs){ if (p->parameter=="black_in") p->receiver=&black_in; if (p->parameter=="white_in") p->receiver=&white_in; @@ -1105,7 +1123,7 @@ namespace Rotor { delete[] data; }; Audio_thumbnailer* clone(map<string,string> &_settings) { return new Audio_thumbnailer();}; - bool init(int _channels,int _bits,int _samples,int _rate); + bool init(int _channels,int _bits,int _samples,int _rate,const map<string,float> ¶ms); void cleanup(){}; int process_frame(uint8_t *data,int samples_in_frame); string print(); @@ -1134,7 +1152,6 @@ namespace Rotor { void cancel(); //interrupt locking process int make_preview(int nodeID, float time); //starts a frame preview - returns status code - how to retrieve? bool load_audio(const string &filename,vector<Base_audio_processor*> processors); - bool _load_audio(const string &filename,vector<Base_audio_processor*> processors); Render_requirements get_requirements(); bool load_video(const string &nodeID,const string &filename);//can be performance or clip private: |
