From 8e4d979aca11bd7836d34154da1289475a609f30 Mon Sep 17 00:00:00 2001 From: ehofman Date: Sun, 10 Jan 2010 11:00:52 +0000 Subject: [PATCH] Don't initialize the soundmanager wehn defining --disable-sound. Sound can still be enabled at runtime by setting /sim/sound/working to 'true' --- src/Main/fg_init.cxx | 15 ----------- src/Main/main.cxx | 59 +++++++++++++++++++++++++++++++------------- 2 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx index f2784e234..a78759c42 100644 --- a/src/Main/fg_init.cxx +++ b/src/Main/fg_init.cxx @@ -1448,21 +1448,6 @@ bool fgInitSubsystems() { globals->get_event_mgr()->init(); globals->get_event_mgr()->setRealtimeProperty(fgGetNode("/sim/time/delta-realtime-sec", true)); - //////////////////////////////////////////////////////////////////// - // Initialize the sound manager subsystem. - //////////////////////////////////////////////////////////////////// - - globals->get_soundmgr()->bind(); - globals->get_soundmgr()->init(fgGetString("/sim/sound/device-name", NULL)); - - vector devices = - globals->get_soundmgr()->get_available_devices(); - for (unsigned int i=0; isetStringValue(devices[i]); - } - devices.clear(); - //////////////////////////////////////////////////////////////////// // Initialize the property interpolator subsystem. Put into the INIT // group because the "nasal" subsystem may need it at GENERAL take-down. diff --git a/src/Main/main.cxx b/src/Main/main.cxx index 330ef0a5a..5df7d9116 100644 --- a/src/Main/main.cxx +++ b/src/Main/main.cxx @@ -104,6 +104,7 @@ long global_multi_loop; SGTimeStamp last_time_stamp; SGTimeStamp current_time_stamp; +void fgInitSoundManager(); void fgSetNewSoundDevice(const char *); // The atexit() function handler should know when the graphical subsystem @@ -482,22 +483,33 @@ static void fgMainLoop( void ) { // Update the sound manager last so it can use the CPU while the GPU // is processing the scenery (doubled the frame-rate for me) -EMH- #ifdef ENABLE_AUDIO_SUPPORT - static SGPropertyNode *sound_enabled = fgGetNode("/sim/sound/enabled"); - static SGSoundMgr *smgr = globals->get_soundmgr(); - static bool smgr_enabled = true; - if (smgr_enabled != sound_enabled->getBoolValue()) { - if (smgr_enabled == true) { // request to suspend - smgr->suspend(); - } else { - smgr->resume(); + static bool smgr_init = true; + if (smgr_init == true) { + static SGPropertyNode *sound_working = fgGetNode("/sim/sound/working"); + if (sound_working->getBoolValue() == true) { + fgInitSoundManager(); + smgr_init = false; } - smgr_enabled = sound_enabled->getBoolValue(); - } + } else { + static SGPropertyNode *sound_enabled = fgGetNode("/sim/sound/enabled"); + static SGSoundMgr *smgr = globals->get_soundmgr(); + static bool smgr_enabled = true; - if (smgr_enabled == true) { - static SGPropertyNode *volume = fgGetNode("/sim/sound/volume"); - smgr->set_volume(volume->getFloatValue()); - smgr->update(delta_time_sec); + if (smgr_enabled != sound_enabled->getBoolValue()) { + if (smgr_enabled == true) { // request to suspend + smgr->suspend(); + smgr_enabled = false; + } else { + smgr->resume(); + smgr_enabled = true; + } + } + + if (smgr_enabled == true) { + static SGPropertyNode *volume = fgGetNode("/sim/sound/volume"); + smgr->set_volume(volume->getFloatValue()); + smgr->update(delta_time_sec); + } } #endif @@ -507,9 +519,7 @@ static void fgMainLoop( void ) { && cur_fdm_state->get_inited()) { fgSetBool("sim/sceneryloaded",true); if (fgGetBool("/sim/sound/working")) { - smgr->activate(); - } else { - smgr->stop(); + globals->get_soundmgr()->activate(); } globals->get_props()->tie("/sim/sound/devices/name", SGRawValueFunctions(0, fgSetNewSoundDevice), false); @@ -520,6 +530,21 @@ static void fgMainLoop( void ) { SG_LOG( SG_ALL, SG_DEBUG, "" ); } +void fgInitSoundManager() +{ + SGSoundMgr *smgr = globals->get_soundmgr(); + + smgr->bind(); + smgr->init(fgGetString("/sim/sound/device-name", NULL)); + + vector devices = smgr->get_available_devices(); + for (unsigned int i=0; isetStringValue(devices[i]); + } + devices.clear(); +} + void fgSetNewSoundDevice(const char *device) { globals->get_soundmgr()->suspend();