From 7416f0b38e8eec05aea63604bdf23b5905c15754 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sat, 31 Mar 2007 07:04:04 +0000 Subject: Fixed tempo skew (record vs playback). Recording/building algorithm fixes. Polished up GUI things. git-svn-id: http://svn.drobilla.net/lad/machina@384 a436a847-0d15-0410-975c-d299462d15a1 --- src/engine/MachineBuilder.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) (limited to 'src/engine/MachineBuilder.cpp') diff --git a/src/engine/MachineBuilder.cpp b/src/engine/MachineBuilder.cpp index a1a6ed8..515f1a0 100644 --- a/src/engine/MachineBuilder.cpp +++ b/src/engine/MachineBuilder.cpp @@ -73,25 +73,30 @@ MachineBuilder::connect_nodes(SharedPtr m, SharedPtr delay_node; - //cerr << "Connect nodes durations: " << tail->duration() << " .. " << head->duration() << endl; - //cerr << "Connect nodes times: " << tail_end_time << " .. " << head_start_time << endl; + cerr << "******" << endl; + cerr << "Connect nodes durations: " << tail->duration() << " .. " << head->duration() << endl; + cerr << "Connect nodes times: " << tail_end_time << " .. " << head_start_time << endl; - if (head_start_time == tail_end_time) { - // Connect directly - tail->add_outgoing_edge(SharedPtr(new Edge(tail, head))); - } else if (is_delay_node(tail)) { + 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; tail->set_duration(tail->duration() + head_start_time - tail_end_time); tail->add_outgoing_edge(SharedPtr(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(new Edge(tail, head))); } else { // Need to actually create a delay node - //cerr << "Adding delay node for " << tail_end_time << " .. " << head_start_time << endl; + cerr << "Adding delay node for " << tail_end_time << " .. " << head_start_time << endl; delay_node = SharedPtr(new Node()); delay_node->set_duration(head_start_time - tail_end_time); tail->add_outgoing_edge(SharedPtr(new Edge(tail, delay_node))); delay_node->add_outgoing_edge(SharedPtr(new Edge(delay_node, head))); m->add_node(delay_node); } + + cerr << "******" << endl << endl; return delay_node; } @@ -116,10 +121,10 @@ MachineBuilder::event(Raul::BeatTime time_offset, SharedPtr delay_node = connect_nodes(_machine, _connect_node, _connect_node_end_time, node, t); - if (delay_node) { + /*if (delay_node) { _connect_node = delay_node; _connect_node_end_time = t; - } + }*/ node->enter(SharedPtr(), t); _active_nodes.push_back(node); @@ -144,9 +149,10 @@ MachineBuilder::event(Raul::BeatTime time_offset, resolved->set_exit_action(SharedPtr(new MidiAction(ev_size, buf))); resolved->set_duration(t - resolved->enter_time()); - _connect_node_end_time = t; - if (_active_nodes.size() == 1) { + + _connect_node_end_time = t; + if (_poly_nodes.size() > 0) { _connect_node = SharedPtr(new Node()); @@ -170,6 +176,7 @@ MachineBuilder::event(Raul::BeatTime time_offset, 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()); -- cgit v1.2.1