aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/MachineBuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/MachineBuilder.cpp')
-rw-r--r--src/engine/MachineBuilder.cpp73
1 files changed, 3 insertions, 70 deletions
diff --git a/src/engine/MachineBuilder.cpp b/src/engine/MachineBuilder.cpp
index b62e90e..8be9148 100644
--- a/src/engine/MachineBuilder.cpp
+++ b/src/engine/MachineBuilder.cpp
@@ -12,7 +12,7 @@
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <algorithm>
@@ -91,22 +91,15 @@ MachineBuilder::connect_nodes(SharedPtr<Machine> m,
SharedPtr<Node> delay_node;
- /*cerr << "******" << endl;
- cerr << "Connect nodes durations: " << tail->duration() << " .. " << head->duration() << endl;
- cerr << "Connect nodes times: " << tail_end_time << " .. " << head_start_time << endl;*/
-
if (is_delay_node(tail) && tail->outgoing_edges().size() == 0) {
// Tail is a delay node, just accumulate the time difference into it
- //cerr << "Accumulating delay " << tail_end_time << " .. " << head_start_time << endl;
set_node_duration(tail, tail->duration() + head_start_time - tail_end_time);
tail->add_outgoing_edge(SharedPtr<Edge>(new Edge(tail, head)));
} else if (head_start_time == tail_end_time) {
// Connect directly
- //cerr << "Connnecting directly " << tail_end_time << " .. " << head_start_time << endl;
tail->add_outgoing_edge(SharedPtr<Edge>(new Edge(tail, head)));
} else {
// Need to actually create a delay node
- //cerr << "Adding delay node for " << tail_end_time << " .. " << head_start_time << endl;
delay_node = SharedPtr<Node>(new Node());
set_node_duration(delay_node, head_start_time - tail_end_time);
tail->add_outgoing_edge(SharedPtr<Edge>(new Edge(tail, delay_node)));
@@ -114,8 +107,6 @@ MachineBuilder::connect_nodes(SharedPtr<Machine> m,
m->add_node(delay_node);
}
- /*cerr << "******" << endl << endl;*/
-
return delay_node;
}
@@ -130,10 +121,7 @@ MachineBuilder::event(Raul::BeatTime time_offset,
if (ev_size == 0)
return;
- //cerr << "t = " << t << endl;
-
if ((buf[0] & 0xF0) == MIDI_CMD_NOTE_ON) {
- //cerr << "NOTE ON: " << (int)buf[1] << ", channel = " << (int)(buf[0] & 0x0F) << endl;
SharedPtr<Node> node(new Node());
node->set_enter_action(SharedPtr<Action>(new MidiAction(ev_size, buf)));
@@ -148,7 +136,6 @@ MachineBuilder::event(Raul::BeatTime time_offset,
if (j->second->outgoing_edges().empty()) {
this_connect_node = j->second;
this_connect_node_end_time = j->first + j->second->duration();
- cerr << "POLY CONNECT!\n";
break;
}
}
@@ -157,7 +144,6 @@ MachineBuilder::event(Raul::BeatTime time_offset,
// Currently monophonic, or didn't find a poly node, so use _connect_node
// which is maintained below on note off events.
if ( ! this_connect_node) {
- cerr << "NO POLY CONNECT\n";
this_connect_node = _connect_node;
this_connect_node_end_time = _connect_node_end_time;
}
@@ -166,9 +152,6 @@ MachineBuilder::event(Raul::BeatTime time_offset,
SharedPtr<Node> delay_node = connect_nodes(_machine,
this_connect_node, this_connect_node_end_time, node, t);
- if (delay_node)
- cerr << "XXXXXXXXXXXXXX NOTE ON DELAY NODE\n";
-
if (delay_node) {
_connect_node = delay_node;
_connect_node_end_time = t;
@@ -178,7 +161,7 @@ MachineBuilder::event(Raul::BeatTime time_offset,
_active_nodes.push_back(node);
} else if ((buf[0] & 0xF0) == MIDI_CMD_NOTE_OFF) {
- //cerr << "NOTE OFF: " << (int)buf[1] << endl;
+
for (ActiveList::iterator i = _active_nodes.begin(); i != _active_nodes.end(); ++i) {
SharedPtr<MidiAction> action = PtrCast<MidiAction>((*i)->enter_action());
if (!action)
@@ -191,8 +174,6 @@ MachineBuilder::event(Raul::BeatTime time_offset,
&& (ev[0] & 0x0F) == (buf[0] & 0x0F) // same channel
&& ev[1] == buf[1]) // same note
{
- //cerr << "FOUND MATCHING NOTE OFF!\n";
-
SharedPtr<Node> resolved = *i;
resolved->set_exit_action(SharedPtr<Action>(new MidiAction(ev_size, buf)));
@@ -201,15 +182,11 @@ MachineBuilder::event(Raul::BeatTime time_offset,
// Last active note
if (_active_nodes.size() == 1) {
- cerr << "{ RESOLVING, t= " << t << "\n";
-
_connect_node_end_time = t;
// Finish a polyphonic section
if (_poly_nodes.size() > 0) {
- cerr << "POLY\n";
-
_connect_node = SharedPtr<Node>(new Node());
_machine->add_node(_connect_node);
@@ -228,14 +205,11 @@ MachineBuilder::event(Raul::BeatTime time_offset,
// Just monophonic
} else {
- cerr << "NO POLY\n";
-
// Trim useless delay node if possible (these appear after poly sections)
if (is_delay_node(_connect_node) && _connect_node->duration() == 0
&& _connect_node->outgoing_edges().size() == 1
&& (*_connect_node->outgoing_edges().begin())->head() == resolved) {
- cerr << "TRIMMING\n";
_connect_node->outgoing_edges().clear();
assert(_connect_node->outgoing_edges().empty());
_connect_node->set_enter_action(resolved->enter_action());
@@ -248,18 +222,13 @@ MachineBuilder::event(Raul::BeatTime time_offset,
_machine->add_node(_connect_node);
} else {
-
- cerr << "RESOLVED\n";
_connect_node = resolved;
_machine->add_node(resolved);
}
}
- cerr << "}";
-
// Polyphonic, add this state to poly list
} else {
- cerr << "ADDING POLY\n";
_poly_nodes.push_back(make_pair(resolved->enter_time(), resolved));
_connect_node = resolved;
_connect_node_end_time = t;
@@ -273,6 +242,7 @@ MachineBuilder::event(Raul::BeatTime time_offset,
break;
}
}
+
}
}
@@ -309,43 +279,6 @@ MachineBuilder::resolve()
&& _machine->nodes().find(_initial_node) == _machine->nodes().end())
_machine->add_node(_initial_node);
-#if 0
- // Quantize
- if (_quantization > 0) {
- for (Machine::Nodes::iterator i = _machine->nodes().begin();
- i != _machine->nodes().end(); ++i) {
- Raul::BeatTime q_dur = Quantizer::quantize(_quantization, (*i)->duration());
-
- // Never quantize a note to duration 0
- if (q_dur > 0 || ( !(*i)->enter_action() && !(*i)->exit_action() ))
- (*i)->set_duration(q_dur);
- }
- }
-
- // Remove any useless states
- for (Machine::Nodes::iterator i = _machine->nodes().begin();
- i != _machine->nodes().end() ; ) {
-
- if (!(*i)->enter_action() && !(*i)->exit_action() && (*i)->duration() == 0
- && (*i)->outgoing_edges().size() <= 1) {
-
- // Connect any predecessors to the successor
- if ((*i)->outgoing_edges().size() == 1) {
- SharedPtr<Node> successor = *((*i)->outgoing_edges().begin())->head();
-
- for (Machine::Nodes::iterator i = _machine->nodes().begin();
- i != _machine->nodes().end() ; ) {
-
-
- Machine::Nodes::iterator next = i;
- ++next;
-
- _machine->remove_node(*i);
-
- i = next;
- }
- }
-#endif
}