summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NT/src/nodes_audio_analysis.h21
-rw-r--r--NT/src/rotor.h32
2 files changed, 26 insertions, 27 deletions
diff --git a/NT/src/nodes_audio_analysis.h b/NT/src/nodes_audio_analysis.h
index aa4abeb..e239e87 100644
--- a/NT/src/nodes_audio_analysis.h
+++ b/NT/src/nodes_audio_analysis.h
@@ -49,7 +49,7 @@ namespace Rotor {
//base class for vamp plugin hosts
public:
Vamp_node(){
- create_attribute("mode","Data output mode","Mode","timeline",{"timeline","timesteps","valueline","values"});
+ mode=create_attribute("mode","Data output mode","Mode",Enum({"timeline","timesteps","valueline","values"},0));
};
bool init(int _channels,int _bits,int _samples,int _rate);
void cleanup();
@@ -61,7 +61,7 @@ namespace Rotor {
double v1,v2;
v1=v2=0.0;
if (i==features.end()) {
- uk=time.duration;
+ uk=frame.duration;
}
else {
uk=i->first;
@@ -71,20 +71,20 @@ namespace Rotor {
double lk=i->first;
int ln=i->second.number;
if (i->second.values.size()) v1=i->second.values[0];
- switch (attributes["mode"]->intVal){
+ switch (mode->get().get_value()){
case VAMPHOST_Timeline:
- return (((frame.time-lk)/(uk-lk))+ln);
+ value= (((frame.time-lk-lk)/(uk-lk))+ln);
case VAMPHOST_Timesteps:
- return (double)ln;
+ value= (double)ln;
case VAMPHOST_Valueline:
- return ((frame.time-lk)/(uk-lk))+v1; //((((time.time-lk)/(uk-lk))*(v2-v1))+v1);
+ value= ((frame.time-lk)/(uk-lk))+v1; //((((time.time-lk)/(uk-lk))*(v2-v1))+v1);
case VAMPHOST_Values:
- return v1;
+ value= v1;
}
//}
//return (--features.end())->second.values[0];
}
- return 0.0;
+ return value;
}
string get_features();
void print_summary(){
@@ -96,7 +96,8 @@ namespace Rotor {
map <string,float> params;
map<double,vampHost::feature> features;
private:
- vampHost::Analyser analyser;
+ vampHost::Analyser analyser;
+ Variable_type<Enum> *mode;
};
class Audio_analysis: public Vamp_node {
//vamp node that allows the user to choose a plugin
@@ -105,7 +106,7 @@ namespace Rotor {
//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.0);
+ create_inlet("outputNo","Plugin output to use","Output number",0.0);
//title="Audio analysis";
//description="Analyse audio and output";
NODEID="b769f54e-2d0b-11e3-87dd-f73fc7b1c636";
diff --git a/NT/src/rotor.h b/NT/src/rotor.h
index d2d7d00..8fbba7d 100644
--- a/NT/src/rotor.h
+++ b/NT/src/rotor.h
@@ -88,7 +88,8 @@ namespace Rotor {
class Enum{
//enumerated string type for menus
public:
- Enum(std::initializer_list<std::string> init) : labels(init){};
+ Enum(std::initializer_list<std::string> init={},int def=0) : labels(init), value(def){};
+ int get_value(){return value;};
private:
std::vector<std::string> labels;
int value;
@@ -105,10 +106,11 @@ namespace Rotor {
int channels,numsamples;
};
class Frame_parameters{
+ //chosen to be used as a struct: less overhead etc
public:
- Frame_parameters(double _time,double _framerate,double _duration,int _w,int _h,Audio_frame *_audio=nullptr)
+ Frame_parameters(double _time=0.0,double _framerate=25.0,double _duration=20.0,int _w=640,int _h=360,Audio_frame *_audio=nullptr)
{ time=_time; framerate=_framerate; duration=_duration; w=_w; h=_h;audio=_audio;};
- Frame_parameters(int _frame,double _framerate,double _duration,int _w,int _h,Audio_frame *_audio=nullptr)
+ Frame_parameters(int _frame,double _framerate=25.0,double _duration=20.0,int _w=640,int _h=360,Audio_frame *_audio=nullptr)
{ time=((double)_frame)/_framerate; framerate=_framerate; duration=_duration; w=_w; h=_h;audio=_audio;};
int h,w;
Frame_parameters lastframe() const{
@@ -117,13 +119,10 @@ namespace Rotor {
Frame_parameters nextframe() const{
return Frame_parameters(time+(1.0/framerate),framerate,duration,w,h);
}
- double get_time() const{
- return time;
- }
- private:
double time; //num/denom ?
double framerate;
double duration;
+ private:
Audio_frame *audio;
};
class Variable { //pure virtual base type for variable pointers
@@ -149,9 +148,8 @@ namespace Rotor {
};
template <class T> class Variable_type : public Variable {
public:
- Variable_type(std::string _name="",std::string _input="",bool _connectable=true){
- name=_name;
- input=_input;
+ Variable_type(std::string _name="",std::string _description="",std::string _title="",bool _connectable=true){
+ Variable(_name,_description,_title);
connectable=_connectable;
};
void init(Json::Value s){
@@ -182,12 +180,12 @@ namespace Rotor {
}
return false;
}
- const T& get(const Frame_parameters &frame){
+ const T& get(const Frame_parameters &frame=Frame_parameters()){
//if (connection) std::cerr<<"still connected to '"<<(dynamic_cast<Node_type<T>*>(connection))->get_type()<<"'"<<std::endl;
//else std::cerr<<"connection disappeared"<<std::endl;
if (connection){
//std::cerr<<"retreiving value from '"<<(dynamic_cast<Node_type<T>*>(connection))->get_type()<<"' node ("<<get_type()<<"):"<<(dynamic_cast<Node_type<T>*>(connection))->get_output(frame)<<std::endl;
- return (dynamic_cast<Node_type<T>*>(connection))->get_output(frame);
+ value=(dynamic_cast<Node_type<T>*>(connection))->get_output(frame);
}
//else std::cerr<<"variable: returning default"<<std::endl;
return value;
@@ -321,16 +319,16 @@ namespace Rotor {
if (!settings["log_id"].empty()) log_id=settings["log_id"].asString();
}
std::string get_output_type(){return TypeName<NT>::Get();};
- template <class IT> Variable_type<IT>* create_inlet(std::string name){
- vars[name]=new Variable_type<IT>(name,"",true);
+ template <class IT> Variable_type<IT>* create_inlet(std::string name="",std::string description="",std::string title="",IT _default=IT()){
+ vars[name]=new Variable_type<IT>(name,description,title,true);
return (dynamic_cast<Variable_type<IT>*>(vars[name]));
}
template <class IT> Variable_type<IT>* create_attribute(std::string name="",std::string description="",std::string title="",IT _default=IT()){
- vars[name]=new Variable_type<IT>(name,"",false);
+ vars[name]=new Variable_type<IT>(name,description,title,false);
return (dynamic_cast<Variable_type<IT>*>(vars[name]));
}
- template <class IT> Variable_array_type<IT>* create_array(std::string name){
- vars[name]=new Variable_array_type<IT>(name);
+ template <class IT> Variable_array_type<IT>* create_array(std::string name="",std::string description="",std::string title="",IT _default=IT()){
+ vars[name]=new Variable_array_type<IT>(name,description,title);
return (dynamic_cast<Variable_array_type<IT>*>(vars[name]));
}
//enum will require specialisation