summaryrefslogtreecommitdiff
path: root/rotord/src
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-09-05 17:55:35 +0100
committerTim Redfern <tim@eclectronics.org>2013-09-05 17:55:35 +0100
commit741fb4b9e135cfb161a749db88713229038577bb (patch)
tree08bc9925659cbcac45162bacf31dc6336d4f60b4 /rotord/src
parenta2e1bf3495b7bfefdaedb8fc737e969ab06df079 (diff)
making act segmenter
Diffstat (limited to 'rotord/src')
-rwxr-xr-xrotord/src/libavwrapper.h3
-rw-r--r--rotord/src/nodes_audio_analysis.cpp8
-rw-r--r--rotord/src/nodes_audio_analysis.h72
-rw-r--r--rotord/src/rendercontext.cpp7
-rwxr-xr-xrotord/src/rotor.cpp1
-rwxr-xr-xrotord/src/rotor.h8
6 files changed, 66 insertions, 33 deletions
diff --git a/rotord/src/libavwrapper.h b/rotord/src/libavwrapper.h
index 6ae6bd2..7f3d549 100755
--- a/rotord/src/libavwrapper.h
+++ b/rotord/src/libavwrapper.h
@@ -33,6 +33,9 @@
//http://dranger.com/ffmpeg/
//the mnost up to date tutorial?
+//https://github.com/lbrandy/ffmpeg-fas/tree/master
+//try this!
+
#ifndef UINT64_C
#define UINT64_C(c) (c ## ULL)
#endif
diff --git a/rotord/src/nodes_audio_analysis.cpp b/rotord/src/nodes_audio_analysis.cpp
index 925858f..c997cae 100644
--- a/rotord/src/nodes_audio_analysis.cpp
+++ b/rotord/src/nodes_audio_analysis.cpp
@@ -90,7 +90,7 @@ namespace Rotor{
}
XML.addValue("data",vdata);
}
- bool Audio_analysis::init(int _channels,int _bits,int _samples, int _rate) {
+ bool Vamp_node::init(int _channels,int _bits,int _samples, int _rate) {
//need these to make sense of data
channels=_channels;
bits=_bits;
@@ -104,15 +104,15 @@ namespace Rotor{
//maybe neater to contain it in terms of headers etc
}
- int Audio_analysis::process_frame(uint8_t *data,int samples_in_frame) {
+ int Vamp_node::process_frame(uint8_t *data,int samples_in_frame) {
analyser.process_frame(data,samples_in_frame);
return 1;
}
- void Audio_analysis::cleanup() {
+ void Vamp_node::cleanup() {
analyser.cleanup();
//print_features();
}
- string Audio_analysis::get_features(){
+ string Vamp_node::get_features(){
string data;
for (auto i: analyser.features) {
data=data+" ["+ofToString(i.second.number)+":"+ofToString(i.first);
diff --git a/rotord/src/nodes_audio_analysis.h b/rotord/src/nodes_audio_analysis.h
index d192d26..ee98c3b 100644
--- a/rotord/src/nodes_audio_analysis.h
+++ b/rotord/src/nodes_audio_analysis.h
@@ -9,31 +9,11 @@ namespace Rotor {
#define VAMPHOST_Timesteps 2
#define VAMPHOST_Valueline 3
#define VAMPHOST_Values 4
- class Audio_analysis: public Audio_processor {
+ class Vamp_node: public Audio_processor {
+ //base class for vamp plugin hosts
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("mode","Data output mode","Mode","timeline",{"timeline","timesteps","valueline","values"});
- create_parameter("outputNo","number","Plugin output to use","Output number",0.0f);
- title="Audio analysis";
- description="Analyse audio and output";
- };
- Audio_analysis(map<string,string> &settings):Audio_analysis() {
- base_settings(settings);
- vector< pair< string, string>> sonames={
- {"qm-vamp-plugins","qm-barbeattracker"}
- };
- soname=find_setting(settings,"soname");
- id=find_setting(settings,"id");
- outputNo=find_setting(settings,"outputNo",0);
- };
- ~Audio_analysis(){};
- 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()) {
@@ -67,12 +47,58 @@ namespace Rotor {
void print_summary(){
cerr<<"vamp plugin "<<id<<" of library "<<soname<<" found "<<analyser.features.size()<<" features "<<endl;
};
- private:
+ protected:
string soname,id;
int outputNo;
+ private:
vampHost::Analyser analyser;
map <string,float> params;
};
+ class Audio_analysis: public Vamp_node {
+ //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("mode","Data output mode","Mode","timeline",{"timeline","timesteps","valueline","values"});
+ create_parameter("outputNo","number","Plugin output to use","Output number",0.0f);
+ title="Audio analysis";
+ description="Analyse audio and output";
+ };
+ Audio_analysis(map<string,string> &settings):Audio_analysis() {
+ base_settings(settings);
+ soname=find_setting(settings,"soname");
+ id=find_setting(settings,"id");
+ outputNo=find_setting(settings,"outputNo",0);
+ };
+ ~Audio_analysis(){};
+ Audio_analysis* clone(map<string,string> &_settings) { return new Audio_analysis(_settings);};
+ private:
+ };
+ class Act_segmenter: public Vamp_node {
+ //vamp node that applies a ruleset to manage a set of acts via a cycler
+ public:
+ Act_segmenter(){
+ create_parameter("outputNo","number","Plugin output to use","Output number",0.0f);
+ create_parameter("acts","number","Number of acts defined","Acts",0.0f);
+ title="Act manager";
+ description="Applies a ruleset to manage acts based on segments";
+ };
+ Act_segmenter(map<string,string> &settings):Act_segmenter() {
+ base_settings(settings);
+ soname="qm-vamp-plugins";
+ id="qm-segmenter";
+ outputNo=find_setting(settings,"outputNo",0);
+ };
+ ~Act_segmenter(){};
+ Act_segmenter* clone(map<string,string> &_settings) { return new Act_segmenter(_settings);};
+ void cleanup(){
+ Vamp_node::cleanup();
+ cerr<<"act segmenter custom cleanup"<<endl;
+ }
+ private:
+ };
}
#endif
diff --git a/rotord/src/rendercontext.cpp b/rotord/src/rendercontext.cpp
index d160527..47113c1 100644
--- a/rotord/src/rendercontext.cpp
+++ b/rotord/src/rendercontext.cpp
@@ -17,9 +17,10 @@ void Render_context::runTask() {
state=ANALYSING_AUDIO;
vector<Audio_processor*> processors;
processors.push_back(audio_thumb);
- vector<Node*> analysers=graph.find_nodes("audio_analysis");
- for (auto a: analysers) {
- processors.push_back(dynamic_cast<Audio_processor*>(a));
+ for (auto a: graph.nodes) {
+ if (dynamic_cast<Audio_processor*>(a.second)){
+ processors.push_back(dynamic_cast<Audio_processor*>(a.second));
+ }
}
if (load_audio(graph.audio_filename,processors)) {
graph.audio_loaded=true;
diff --git a/rotord/src/rotor.cpp b/rotord/src/rotor.cpp
index 616e128..87874d8 100755
--- a/rotord/src/rotor.cpp
+++ b/rotord/src/rotor.cpp
@@ -26,6 +26,7 @@ Node_factory::Node_factory(){
add_type("difference_matte",new Difference_matte());
//nodes_audio_analysis.h
add_type("audio_analysis",new Audio_analysis());
+ add_type("act_segmenter",new Act_segmenter());
//nodes_maths.h
add_type("comparison",new Comparison()); //TODO: alias to symbols
add_type("arithmetic",new Arithmetic()); //TODO: alias to symbols
diff --git a/rotord/src/rotor.h b/rotord/src/rotor.h
index 20089b8..6c030ec 100755
--- a/rotord/src/rotor.h
+++ b/rotord/src/rotor.h
@@ -199,13 +199,13 @@ namespace Rotor {
for (auto a: attributes){
if (find_setting(settings,a.first,"")!="") {
attributes[a.first]->init(find_setting(settings,a.first,""));
- cerr<<"setting attribute '"<<a.first<<"'' to "<<find_setting(settings,a.first,"")<<" (index: "<<attributes[a.first]->intVal<<")"<<endl;
+ cerr<<"setting attribute '"<<a.first<<"' to "<<find_setting(settings,a.first,"")<<" (index: "<<attributes[a.first]->intVal<<")"<<endl;
}
}
for (auto p: parameters){
if (find_setting(settings,p.first,"")!="") {
parameters[p.first]->init(find_setting(settings,p.first,0.0f));
- cerr<<"setting parameter '"<<p.first<<"'' to "<<find_setting(settings,p.first,0.0f)<<endl;
+ cerr<<"setting parameter '"<<p.first<<"' to "<<find_setting(settings,p.first,0.0f)<<endl;
}
}
}
@@ -214,7 +214,9 @@ namespace Rotor {
p.second->get(time);
}
}
- virtual void set_parameter(const std::string &key,const std::string &value){};
+ void set_parameter(const std::string &key,const std::string &value){
+ if (parameters.find(key)!=parameters.end()) parameters[key]->value=ofToFloat(value);
+ };
};
class Signal_node: public Node{
public: