1
0
Fork 0

Don't initialize the soundmanager wehn defining --disable-sound. Sound can still be enabled at runtime by setting /sim/sound/working to 'true'

This commit is contained in:
ehofman 2010-01-10 11:00:52 +00:00 committed by Tim Moore
parent 0238a09c4d
commit 8e4d979aca
2 changed files with 42 additions and 32 deletions

View file

@ -1448,21 +1448,6 @@ bool fgInitSubsystems() {
globals->get_event_mgr()->init(); globals->get_event_mgr()->init();
globals->get_event_mgr()->setRealtimeProperty(fgGetNode("/sim/time/delta-realtime-sec", true)); 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 <const char*>devices =
globals->get_soundmgr()->get_available_devices();
for (unsigned int i=0; i<devices.size(); i++) {
SGPropertyNode *p = fgGetNode("/sim/sound/devices/device", i, true);
p->setStringValue(devices[i]);
}
devices.clear();
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// Initialize the property interpolator subsystem. Put into the INIT // Initialize the property interpolator subsystem. Put into the INIT
// group because the "nasal" subsystem may need it at GENERAL take-down. // group because the "nasal" subsystem may need it at GENERAL take-down.

View file

@ -104,6 +104,7 @@ long global_multi_loop;
SGTimeStamp last_time_stamp; SGTimeStamp last_time_stamp;
SGTimeStamp current_time_stamp; SGTimeStamp current_time_stamp;
void fgInitSoundManager();
void fgSetNewSoundDevice(const char *); void fgSetNewSoundDevice(const char *);
// The atexit() function handler should know when the graphical subsystem // 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 // 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- // is processing the scenery (doubled the frame-rate for me) -EMH-
#ifdef ENABLE_AUDIO_SUPPORT #ifdef ENABLE_AUDIO_SUPPORT
static SGPropertyNode *sound_enabled = fgGetNode("/sim/sound/enabled"); static bool smgr_init = true;
static SGSoundMgr *smgr = globals->get_soundmgr(); if (smgr_init == true) {
static bool smgr_enabled = true; static SGPropertyNode *sound_working = fgGetNode("/sim/sound/working");
if (smgr_enabled != sound_enabled->getBoolValue()) { if (sound_working->getBoolValue() == true) {
if (smgr_enabled == true) { // request to suspend fgInitSoundManager();
smgr->suspend(); smgr_init = false;
} else {
smgr->resume();
} }
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) { if (smgr_enabled != sound_enabled->getBoolValue()) {
static SGPropertyNode *volume = fgGetNode("/sim/sound/volume"); if (smgr_enabled == true) { // request to suspend
smgr->set_volume(volume->getFloatValue()); smgr->suspend();
smgr->update(delta_time_sec); 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 #endif
@ -507,9 +519,7 @@ static void fgMainLoop( void ) {
&& cur_fdm_state->get_inited()) { && cur_fdm_state->get_inited()) {
fgSetBool("sim/sceneryloaded",true); fgSetBool("sim/sceneryloaded",true);
if (fgGetBool("/sim/sound/working")) { if (fgGetBool("/sim/sound/working")) {
smgr->activate(); globals->get_soundmgr()->activate();
} else {
smgr->stop();
} }
globals->get_props()->tie("/sim/sound/devices/name", globals->get_props()->tie("/sim/sound/devices/name",
SGRawValueFunctions<const char *>(0, fgSetNewSoundDevice), false); SGRawValueFunctions<const char *>(0, fgSetNewSoundDevice), false);
@ -520,6 +530,21 @@ static void fgMainLoop( void ) {
SG_LOG( SG_ALL, SG_DEBUG, "" ); SG_LOG( SG_ALL, SG_DEBUG, "" );
} }
void fgInitSoundManager()
{
SGSoundMgr *smgr = globals->get_soundmgr();
smgr->bind();
smgr->init(fgGetString("/sim/sound/device-name", NULL));
vector <const char*>devices = smgr->get_available_devices();
for (unsigned int i=0; i<devices.size(); i++) {
SGPropertyNode *p = fgGetNode("/sim/sound/devices/device", i, true);
p->setStringValue(devices[i]);
}
devices.clear();
}
void fgSetNewSoundDevice(const char *device) void fgSetNewSoundDevice(const char *device)
{ {
globals->get_soundmgr()->suspend(); globals->get_soundmgr()->suspend();