diff options
| author | Comment <tim@gray.(none)> | 2013-10-16 08:45:27 -0700 |
|---|---|---|
| committer | Comment <tim@gray.(none)> | 2013-10-16 08:45:27 -0700 |
| commit | fa1a3122c2c2b07daa5b03c7def8f31a1e5a89fc (patch) | |
| tree | 82ea2783779bcb746608340299d8b37804eeaff9 | |
| parent | 9d6fe33bea0f070356d02a9196e9dfbfa3d0cf8d (diff) | |
audio_analyser2
| -rw-r--r-- | rotord/src/graph.cpp | 1 | ||||
| -rw-r--r-- | rotord/src/nodes_audio_analysis.h | 52 | ||||
| -rw-r--r-- | rotord/src/rendercontext.h | 6 | ||||
| -rw-r--r-- | rotord/src/rotor.cpp | 1 | ||||
| -rw-r--r-- | rotord/src/rotor.h | 15 |
5 files changed, 65 insertions, 10 deletions
diff --git a/rotord/src/graph.cpp b/rotord/src/graph.cpp index 9f90486..0c47c78 100644 --- a/rotord/src/graph.cpp +++ b/rotord/src/graph.cpp @@ -407,6 +407,7 @@ bool Graph::parseJson(string &data,string &media_path){ string val=jnodes[i]["attributes"][m]["value"].asString(); if (val!=nodes[nodeID]->attributes.find(attribute)->second->value){ nodes[nodeID]->attributes.find(attribute)->second->value=val; + nodes[nodeID]->init_attribute(attribute); cerr << "Rotor: set attribute '"<<attribute<<"' of "<<nodeID<<" to "<<val<<endl; } nodes[nodeID]->attributes.find(attribute)->second->value=val; diff --git a/rotord/src/nodes_audio_analysis.h b/rotord/src/nodes_audio_analysis.h index a3fdd8b..44ea3eb 100644 --- a/rotord/src/nodes_audio_analysis.h +++ b/rotord/src/nodes_audio_analysis.h @@ -86,12 +86,12 @@ namespace Rotor { //vamp node that allows the user to choose a plugin public: Audio_analysis(){ - //create_attribute("soname","Plugin library to use","Plugin library","vamp-example-plugins",{"horiz","vert","horizR","vertR"}); - //create_attribute("id","ID of Plugin to use","Plugin ID","percussiononsets",{"horiz","vert","horizR","vertR"}); - create_attribute("analyser","Analyser Plugin to use","Analyser plugin","barbeattracker",{"barbeattracker","segmenter"}); + //create_attribute("soname","Plugin library to use","Plugin library","vamp-example-plugins"); + //create_attribute("id","ID of Plugin to use","Plugin ID","percussiononsets"); + //create_attribute("analyser","Analyser Plugin to use","Analyser plugin","barbeattracker",{"barbeattracker","segmenter"}); create_parameter("outputNo","number","Plugin output to use","Output number",0.0f); - title="Audio analysis"; - description="Analyse audio and output"; + //title="Audio analysis"; + //description="Analyse audio and output"; UID="b769f54e-2d0b-11e3-87dd-f73fc7b1c636"; }; Audio_analysis(map<string,string> &settings):Audio_analysis() { @@ -104,6 +104,48 @@ namespace Rotor { Audio_analysis* clone(map<string,string> &_settings) { return new Audio_analysis(_settings);}; private: }; + class Audio_analysis2: public Vamp_node { + //reworked the plugin loader + public: + Audio_analysis2(){ + //create_attribute("soname","Plugin library to use","Plugin library","vamp-example-plugins",{"horiz","vert","horizR","vertR"}); + //create_attribute("id","ID of Plugin to use","Plugin ID","percussiononsets",{"horiz","vert","horizR","vertR"}); + create_attribute("analyser","Analyser Plugin to use","Analyser plugin","barbeattracker",{"adaptivespectrum","barbeattracker","chromagram","dwt","mfcc","onsetdetector","segmenter","similarity","tempotracker","transcription"}); + create_parameter("outputNo","number","Plugin output to use","Output number",0.0f); + title="Audio analysis"; + description="Analyse audio and output"; + UID="b769f54e-2d0b-11e3-87dd-f73fc7b1c636"; + plugins.push_back(make_pair("qm-adaptivespectrogram","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-barbeattracker","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-chromagram","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-dwt","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-mfcc","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-onsetdetector","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-segmenter","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-similarity","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-tempotracker","qm-vamp-plugins")); + plugins.push_back(make_pair("qm-transcription","qm-vamp-plugins")); + }; + Audio_analysis2(map<string,string> &settings):Audio_analysis2() { + base_settings(settings); + soname=plugins[attributes["analyser"]->intVal-1].second; + id=plugins[attributes["analyser"]->intVal-1].first; + outputNo=find_setting(settings,"outputNo",0); + }; + ~Audio_analysis2(){}; + void init_attribute(const string &attr){ + if (attr=="analyser") { + soname=plugins[attributes["analyser"]->intVal-1].second; + id=plugins[attributes["analyser"]->intVal-1].first; + } + if (attr=="outputNo") { + outputNo=parameters["outputNo"]->value; + } + }; + Audio_analysis2* clone(map<string,string> &_settings) { return new Audio_analysis2(_settings);}; + private: + vector< pair<string,string>> plugins; + }; class Act_segmenter: public Vamp_node { //vamp node that applies a ruleset to manage a set of acts via a cycler public: diff --git a/rotord/src/rendercontext.h b/rotord/src/rendercontext.h index b0f8649..cb02e31 100644 --- a/rotord/src/rendercontext.h +++ b/rotord/src/rendercontext.h @@ -102,9 +102,9 @@ namespace Rotor { std::deque<Session_task> work_queue; std::unordered_map<string,Render_status> renders; std::string output_filename; - std::string graph_dir; - std::string media_dir; - std::string output_dir; + //std::string graph_dir; + //std::string media_dir; + //std::string output_dir; std::string graph_filename; std::string graph_body; diff --git a/rotord/src/rotor.cpp b/rotord/src/rotor.cpp index 26fc4a4..b86e067 100644 --- a/rotord/src/rotor.cpp +++ b/rotord/src/rotor.cpp @@ -57,6 +57,7 @@ Node_factory::Node_factory(){ category["audio"]=vector<Node*>(); add_type("audio_analysis",new Audio_analysis(),category["audio"]); + add_type("audio_analysis2",new Audio_analysis2(),category["audio"]); category["maths"]=vector<Node*>(); add_type("comparison",new Comparison(),category["maths"]); //TODO: alias to symbols diff --git a/rotord/src/rotor.h b/rotord/src/rotor.h index 2d66d51..82d7f37 100644 --- a/rotord/src/rotor.h +++ b/rotord/src/rotor.h @@ -90,6 +90,10 @@ Requirements #include "cvimage.h" #include "libavwrapper.h" +static std::string media_dir; +static std::string graph_dir; +static std::string output_dir; + //using namespace cv; namespace Rotor { //forward declarations @@ -243,13 +247,14 @@ namespace Rotor { attributes[_attr]=new Attribute(_desc,_title,_value,_vals); }; void create_attribute(string *alias,const string &_attr,const string &_desc,const string &_title,const string &_value,std::vector<std::string> _vals={}) { - attributes[_attr]=new Attribute(_desc,_title,_value,_vals); + create_attribute(_attr,_desc,_title,_value,_vals); alias=&(attributes[_attr]->value); }; void create_attribute(int *alias,const string &_attr,const string &_desc,const string &_title,const string &_value,std::vector<std::string> _vals={}) { - attributes[_attr]=new Attribute(_desc,_title,_value,_vals); + create_attribute(_attr,_desc,_title,_value,_vals); alias=&(attributes[_attr]->intVal); }; + virtual void init_attribute(const string &attr){}; string description; string type; string ID; @@ -492,6 +497,11 @@ namespace Rotor { logger.error("Video_loader failed to load "+filename); return false; } + void init_attribute(const string &attr){ + if (attr=="filename") { + load(media_dir+attributes[attr]->value); + } + }; Image *output(const Frame_spec &frame){ if (isLoaded){ float clipframerate=(parameters["framerate"]->value==0.0f?player.get_framerate():parameters["framerate"]->value); @@ -570,6 +580,7 @@ namespace Rotor { libav::video_decoder player; int lastframe; Image in1,in2,in2t,temp; //for blend frames; + string *filename; }; class Video_output: public Image_node { //Video_output 'presents' the output movie. Aspect ratio, bars, fadein/fadeout would happen here |
