diff options
| -rw-r--r-- | rotord/01.xml | 11 | ||||
| -rw-r--r-- | rotord/rotor.cpp | 3 | ||||
| -rwxr-xr-x | rotord/rotor.h | 30 |
3 files changed, 34 insertions, 10 deletions
diff --git a/rotord/01.xml b/rotord/01.xml index e6c8697..830c3a3 100644 --- a/rotord/01.xml +++ b/rotord/01.xml @@ -4,10 +4,13 @@ </node> <node ID="02" type="audio_analysis" soname="qm-vamp-plugins" id="qm-segmenter" output="signal">segmenter </node> - <node ID="03" type="==" output="signal">outputs 0 except when signal first passes a new integer: then 1 - <signal_input from="01">signal to analyse</signal_input> + <node ID="03" type="divide" amount="2.0" output="signal">signal divide + <signal_input from="01">signal to divide</signal_input> </node> - <node ID="04" type="signal_output">outputs data when changed - <signal_input from="03">signal to output</signal_input> + <node ID="04" type="==" output="signal">outputs 0 except when signal first passes a new integer: then 1 + <signal_input from="03">signal to analyse</signal_input> + </node> + <node ID="05" type="signal_output">outputs data when changed + <signal_input from="04">signal to output</signal_input> </node> </patchbay> diff --git a/rotord/rotor.cpp b/rotord/rotor.cpp index 7f22a5f..28dab1e 100644 --- a/rotord/rotor.cpp +++ b/rotord/rotor.cpp @@ -313,7 +313,7 @@ bool Render_context::load_graph(string filename){ graph.nodes[nodeID]->create_signal_input(xml.getValue("signal_input","",i2)); string fromID=xml.getAttribute("signal_input","from","",i2); if (graph.nodes.find(fromID)!=graph.nodes.end()) { - if (!graph.nodes[nodeID]->inputs[i2]->connect(graph.nodes[fromID])){ + if (!graph.nodes[nodeID]->inputs[i2]->connect((Signal_node*)graph.nodes[fromID])){ cerr << "Rotor: graph loader cannot connect input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; return false; } @@ -377,6 +377,7 @@ bool Render_context::load_graph(string filename){ Node_factory::Node_factory(){ //for now, statically load prototype map in constructor add_type("audio_analysis",new Audio_analysis()); + add_type("divide",new Signal_divide()); add_type("==",new Is_new_integer()); add_type("signal_output",new Signal_output()); }
\ No newline at end of file diff --git a/rotord/rotor.h b/rotord/rotor.h index 96db4f7..c4f5c38 100755 --- a/rotord/rotor.h +++ b/rotord/rotor.h @@ -140,7 +140,7 @@ namespace Rotor { }; class Signal_node: public Node{ public: - virtual float get_output(const float &time) {}; + virtual float get_output(const float &time) { return 0.0f; }; /*{ //default is to pass through first input, if disconnected returns 0 cerr << "getting output for " << type << "," << ID << endl; @@ -179,6 +179,23 @@ namespace Rotor { return t; } }; + class Signal_divide: public Signal_node { + //divides incoming signal by a fixed amount + public: + Signal_divide(){}; + Signal_divide(map<string,string> &settings) { + base_settings(settings); + divide_amount=ofToFloat(check(settings,"amount")); + }; + Signal_divide* clone(map<string,string> &_settings) { return new Signal_divide(_settings);}; + float get_output(const float &time) { + if (inputs[0]->connection) { + return (((Signal_node*)inputs[0]->connection)->get_output(time))/divide_amount; + } + return 0.0f; + } + float divide_amount; + }; class Is_new_integer: public Signal_node { //does this require knowing what the framerate is? //for now, assume 25 @@ -191,10 +208,13 @@ namespace Rotor { Is_new_integer* clone(map<string,string> &_settings) { return new Is_new_integer(_settings);}; float get_output(const float &time) { if (inputs[0]->connection) { - //cerr << "== checking: " << ((int)(((Signal_node*)(inputs[0]->connection))->get_output(time))) << ">" <<((int)(((Signal_node*)(inputs[0]->connection))->get_output(time-.04))) << " ?" << endl; - if (((int)(((Signal_node*)(inputs[0]->connection))->get_output(time)))>((int)(((Signal_node*)(inputs[0]->connection)))->get_output(time-.04))) return 1.0f; + float s1=(((Signal_node*)(inputs[0]->connection))->get_output(time)); + float s2=(((Signal_node*)(inputs[0]->connection))->get_output(time-.04)); + if (((int)s1)>((int)s2)) { + return 1.0f; + } } - else return 0.0f; + return 0.0f; } }; class Signal_output: public Signal_node { @@ -225,7 +245,7 @@ namespace Rotor { return type_map[settings["type"]]->clone(settings); } } - else return NULL; + return NULL; }; private: unordered_map<string,Node*> type_map; |
