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 <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
// group because the "nasal" subsystem may need it at GENERAL take-down.
SGTimeStamp last_time_stamp;
SGTimeStamp current_time_stamp;
+void fgInitSoundManager();
void fgSetNewSoundDevice(const char *);
// The atexit() function handler should know when the graphical subsystem
// 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;
+ }
+ } else {
+ 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();
+ smgr_enabled = false;
+ } else {
+ smgr->resume();
+ smgr_enabled = true;
+ }
}
- smgr_enabled = sound_enabled->getBoolValue();
- }
- if (smgr_enabled == true) {
- static SGPropertyNode *volume = fgGetNode("/sim/sound/volume");
- smgr->set_volume(volume->getFloatValue());
- smgr->update(delta_time_sec);
+ if (smgr_enabled == true) {
+ static SGPropertyNode *volume = fgGetNode("/sim/sound/volume");
+ smgr->set_volume(volume->getFloatValue());
+ smgr->update(delta_time_sec);
+ }
}
#endif
&& 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<const char *>(0, fgSetNewSoundDevice), false);
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)
{
globals->get_soundmgr()->suspend();