aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/Machine.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-11-17 06:01:02 +0000
committerDavid Robillard <d@drobilla.net>2008-11-17 06:01:02 +0000
commita22ca975556ef1516302f5e559748f9a37dbcd99 (patch)
treeeb328b572987769284931e2d74474556d2725c80 /src/engine/Machine.cpp
parent3e3a237c0272d322d102e30b60ddea6dca69d077 (diff)
downloadmachina-a22ca975556ef1516302f5e559748f9a37dbcd99.tar.gz
machina-a22ca975556ef1516302f5e559748f9a37dbcd99.tar.bz2
machina-a22ca975556ef1516302f5e559748f9a37dbcd99.zip
Run. Sorta.
git-svn-id: http://svn.drobilla.net/lad/trunk/machina@1757 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/Machine.cpp')
-rw-r--r--src/engine/Machine.cpp18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/engine/Machine.cpp b/src/engine/Machine.cpp
index 4106a98..7530637 100644
--- a/src/engine/Machine.cpp
+++ b/src/engine/Machine.cpp
@@ -34,7 +34,7 @@ Machine::Machine(TimeUnit unit)
: _active_nodes(MAX_ACTIVE_NODES, SharedPtr<Node>())
, _is_activated(false)
, _is_finished(false)
- , _time(unit)
+ , _time(unit, 0, 0)
{
}
@@ -49,7 +49,7 @@ Machine::Machine(const Machine& copy)
, _active_nodes(MAX_ACTIVE_NODES, SharedPtr<Node>())
, _is_activated(false)
, _is_finished(false)
- , _time(copy.time().unit())
+ , _time(copy.time())
, _sink(copy._sink)
{
map< SharedPtr<Node>, SharedPtr<Node> > replacements;
@@ -76,7 +76,7 @@ Machine::operator=(const Machine& other)
_active_nodes = std::vector< SharedPtr<Node> >(MAX_ACTIVE_NODES, SharedPtr<Node>());
_is_activated = false;
_is_finished = false;
- _time = 0;
+ _time = other._time;
_pending_learn = SharedPtr<LearnRequest>();
_sink = other._sink;
_nodes.clear();
@@ -181,7 +181,7 @@ Machine::reset(Raul::TimeStamp time)
_active_nodes.at(i).reset();
}
- _time = 0;
+ _time = TimeStamp(_time.unit(), 0, 0);
_is_finished = false;
}
@@ -307,7 +307,8 @@ Machine::run(const Raul::TimeSlice& time)
SharedPtr<Raul::MIDISink> sink = _sink.lock();
- const TimeStamp cycle_end = time.start_ticks() + time.length_ticks();
+ const TimeStamp cycle_end_frames = time.start_ticks() + time.length_ticks();
+ const TimeStamp cycle_end = time.ticks_to_beats(cycle_end_frames);
assert(_is_activated);
@@ -349,16 +350,15 @@ Machine::run(const Raul::TimeSlice& time)
break;
// Earliest active state ends this cycle
- } else if (time.beats_to_ticks(earliest->exit_time()) <= cycle_end) {
+ } else if (earliest->exit_time() <= cycle_end) {
this_time += earliest->exit_time() - _time;
- _time = time.ticks_to_beats(
- time.beats_to_ticks(earliest->exit_time()));
+ _time = earliest->exit_time();
exit_node(sink, earliest);
// Earliest active state ends in the future, done this cycle
} else {
_time = cycle_end;
- this_time = time.length_beats(); // ran the entire cycle
+ this_time = cycle_end; // ran the entire cycle
break;
}