From b8d793ccd8c98dfb5edb7808f6e67cb913d7967a Mon Sep 17 00:00:00 2001 From: Comment Date: Mon, 11 Mar 2013 17:22:48 +0000 Subject: signal graph rendering --- rotord/01.xml | 11 +++++++---- rotord/rotor.cpp | 3 ++- rotord/rotor.h | 30 +++++++++++++++++++++++++----- 3 files changed, 34 insertions(+), 10 deletions(-) (limited to 'rotord') 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 @@ segmenter - outputs 0 except when signal first passes a new integer: then 1 - signal to analyse + signal divide + signal to divide - outputs data when changed - signal to output + outputs 0 except when signal first passes a new integer: then 1 + signal to analyse + + outputs data when changed + signal to output 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 &settings) { + base_settings(settings); + divide_amount=ofToFloat(check(settings,"amount")); + }; + Signal_divide* clone(map &_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 &_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 type_map; -- cgit v1.2.3