summaryrefslogtreecommitdiff
path: root/rotord/rotor.h
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-05-22 19:39:11 +0100
committerTim Redfern <tim@eclectronics.org>2013-05-22 19:39:11 +0100
commit55513473ca37841b40662e1a0221d7dd260a59b7 (patch)
treebe531f11f5258fa3cd576e2a8432513989fc82fa /rotord/rotor.h
parent2c3a51b49232ebd6776ba491f96335208d3fdc66 (diff)
baffled by audio analysis
Diffstat (limited to 'rotord/rotor.h')
-rwxr-xr-xrotord/rotor.h43
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> &params)=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> &params);
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> &params);
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: