diff options
Diffstat (limited to 'src/engine/Engine.cpp')
-rw-r--r-- | src/engine/Engine.cpp | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/src/engine/Engine.cpp b/src/engine/Engine.cpp index c43d643..047abb9 100644 --- a/src/engine/Engine.cpp +++ b/src/engine/Engine.cpp @@ -62,15 +62,13 @@ Engine::new_driver(Raul::Forge& forge, SPtr<Machine> Engine::load_machine(const Glib::ustring& uri) { - SPtr<Machine> machine = _loader.load(uri); - SPtr<Machine> old_machine; + SPtr<Machine> machine = _loader.load(uri); + SPtr<Machine> old_machine = _driver->machine(); // Keep reference if (machine) { - old_machine = _driver->machine(); // Keep a reference to old machine... - _driver->set_machine(machine); // Switch driver to new machine + _driver->set_machine(machine); // Switch driver to new machine and wait } - // .. and drop it in this thread (to prevent deallocation in the RT thread) - + // Drop (possibly last) reference to old_machine in this thread return machine; } @@ -82,16 +80,13 @@ Engine::load_machine_midi(const Glib::ustring& uri, double q, Raul::TimeDuration dur) { - SPtr<SMFDriver> file_driver(new SMFDriver(_forge, dur.unit())); - SPtr<Machine> machine = file_driver->learn(uri, q, dur); - SPtr<Machine> old_machine; + SPtr<Machine> machine = _loader.load_midi(uri, q, dur); + SPtr<Machine> old_machine = _driver->machine(); // Keep reference if (machine) { - old_machine = _driver->machine(); // Keep a reference to old machine... - _driver->set_machine(machine); // Switch driver to new machine + _driver->set_machine(machine); // Switch driver to new machine and wait } - // .. and drop it in this thread (to prevent deallocation in the RT thread) - + // Drop (possibly last) reference to old_machine in this thread return machine; } |