]> git.mxchange.org Git - flightgear.git/blobdiff - src/Main/main.cxx
Merge branch 'torsten/auto'
[flightgear.git] / src / Main / main.cxx
index dac1bd432bd6ea973843040e800b5ecb712bf147..8ac54aa5695984ea8d671a3e80b50954dad03b14 100644 (file)
@@ -105,6 +105,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
@@ -483,22 +484,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;
+        }
+    } 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
 
@@ -508,9 +520,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<const char *>(0, fgSetNewSoundDevice), false);
@@ -521,6 +531,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 <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();
@@ -758,7 +783,7 @@ static void fgIdleFunction ( void ) {
 
 # if defined( __CYGWIN__ )
             string command = "start /m `cygpath -w " + mp3file.str() + "`";
-# elif defined( WIN32 )
+# elif defined( _WIN32 )
             string command = "start /m " + mp3file.str();
 # else
             string command = "mpg123 " + mp3file.str() + "> /dev/null 2>&1";
@@ -866,7 +891,7 @@ bool fgMainInit( int argc, char **argv ) {
     fgInitFGRoot(argc, argv);
 
     // Check for the correct base package version
-    static char required_version[] = "1.9.0";
+    static char required_version[] = "2.0.0";
     string base_version = fgBasePackageVersion();
     if ( !(base_version == required_version) ) {
         // tell the operator how to use this application