From 71f632d459471c2e75ed04b808df9671539a182c Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 12 Dec 2006 12:45:33 +0000 Subject: Connection loading. Command line parameter for server to allow connecting to specific JACK server. git-svn-id: http://svn.drobilla.net/lad/ingen@217 a436a847-0d15-0410-975c-d299462d15a1 --- src/libs/engine/Engine.cpp | 44 +++++++++++++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 15 deletions(-) (limited to 'src/libs/engine/Engine.cpp') diff --git a/src/libs/engine/Engine.cpp b/src/libs/engine/Engine.cpp index 6cf50f52..56245534 100644 --- a/src/libs/engine/Engine.cpp +++ b/src/libs/engine/Engine.cpp @@ -14,6 +14,7 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include "Engine.h" #include "config.h" #include "tuning.h" @@ -48,16 +49,8 @@ using std::cout; using std::cerr; using std::endl; namespace Ingen { -Engine::Engine(AudioDriver* audio_driver) -: m_event_source(NULL), - m_audio_driver( (audio_driver) ? audio_driver : new JackAudioDriver(*this) ), -#ifdef HAVE_JACK_MIDI - m_midi_driver(new JackMidiDriver(((JackAudioDriver*)m_audio_driver)->jack_client())), -#elif HAVE_ALSA_MIDI - m_midi_driver(new AlsaMidiDriver(m_audio_driver)), -#else - m_midi_driver(new DummyMidiDriver()), -#endif +Engine::Engine() +: m_midi_driver(NULL), m_maid(new Maid(maid_queue_size)), m_post_processor(new PostProcessor(*m_maid, post_processor_queue_size)), m_broadcaster(new ClientBroadcaster()), @@ -88,7 +81,6 @@ Engine::~Engine() delete m_broadcaster; delete m_node_factory; delete m_midi_driver; - delete m_audio_driver; delete m_maid; @@ -105,7 +97,7 @@ Engine::~Engine() template<> Driver* Engine::driver() { return m_midi_driver; } template<> -Driver* Engine::driver() { return m_audio_driver; } +Driver* Engine::driver() { return m_audio_driver.get(); } int @@ -147,12 +139,28 @@ Engine::main_iteration() } -void -Engine::activate() +bool +Engine::activate(SharedPtr ad, SharedPtr es) { if (m_activated) - return; + return false; + + // Setup drivers + m_audio_driver = ad; +#ifdef HAVE_JACK_MIDI + m_midi_driver = new JackMidiDriver(((JackAudioDriver*)m_audio_driver.get())->jack_client()); +#elif HAVE_ALSA_MIDI + m_midi_driver = new AlsaMidiDriver(m_audio_driver); +#else + m_midi_driver = new DummyMidiDriver(); +#endif + // Set event source (FIXME: handle multiple sources) + m_event_source = es; + + m_audio_driver->activate(); + m_event_source->activate(); + // Create root patch CreatePatchEvent create_ev(*this, SharedPtr(new Responder()), 0, "/", 1); create_ev.pre_process(); @@ -173,6 +181,8 @@ Engine::activate() m_post_processor->start(); m_activated = true; + + return true; } @@ -199,6 +209,10 @@ Engine::deactivate() m_post_processor->whip(); m_post_processor->stop(); + m_audio_driver.reset(); + + m_event_source.reset(); + m_activated = false; } -- cgit v1.2.1