diff options
| author | Tim Redfern <tim@eclectronics.org> | 2014-01-30 19:25:56 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2014-01-30 19:25:56 +0000 |
| commit | 36826b5680db3265e3432455c9e91a9b4ee474e4 (patch) | |
| tree | 1d2756ac69c3f6bd50854078a153a388019b5ccf | |
| parent | c2b62131b0e6984f8fea7f44e364ae5c886c211a (diff) | |
NT var type inferred from default value
| -rw-r--r-- | NT/src/nodes_audio_analysis.h | 21 | ||||
| -rw-r--r-- | NT/src/rotor.h | 32 |
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 |
