]> git.mxchange.org Git - flightgear.git/commitdiff
Merge branch 'ehofman/sound'
authorTim Moore <timoore@redhat.com>
Wed, 13 Jan 2010 06:30:52 +0000 (07:30 +0100)
committerTim Moore <timoore@redhat.com>
Wed, 13 Jan 2010 06:30:52 +0000 (07:30 +0100)
src/ATCDCL/ATCVoice.cxx
src/ATCDCL/ATCmgr.cxx
src/Main/fg_init.cxx
src/Main/main.cxx
src/Main/options.cxx

index 7437884f7de34fa6b136f621ac95df346f1f33d8..07825f78c3f5c64239c7e94e9f4c0e922e6a95c8 100644 (file)
@@ -144,6 +144,8 @@ void* FGATCVoice::WriteMessage(const string& message, size_t* len) {
                        token_start = message.find_first_not_of(delimiters, token_end);
                }
 
+                if (token == "/_") continue;
+
                for(string::iterator t = token.begin(); t != token.end(); t++) {
                        // canonicalize the token, to match what's in the index
                        *t = (*t == '-') ? '_' : tolower(*t);
index 0d78c458bb3c73742cb0ed8d86bfa4069ceb3fd4..9e5085adbdb8bb2d4f9bd6741abafb54026a22fa 100644 (file)
@@ -97,8 +97,9 @@ void FGATCMgr::init() {
     try {
         voiceOK = v1->LoadVoice("default");
         voice = true;
-    } catch ( sg_io_exception & ) {
+    } catch ( sg_io_exception & e) {
         voiceOK  = false;
+        SG_LOG(SG_ATC, SG_ALERT, "Unable to load default voice : " << e.getFormattedMessage().c_str());
         voice = false;
         delete v1;
         v1 = 0;
index 26a7987f4fc53ebf5f0c6fcd06982f4ede3c3dd2..dc64bc9c3b452b0bfc7312760adff91bdef1c0b3 100644 (file)
@@ -1455,21 +1455,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 <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.
index dac1bd432bd6ea973843040e800b5ecb712bf147..fdf0bfd38fb4a8b145d8dc6340d7c293a197e2d7 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();
index dae9342aab23c8182be2c7992e90dfbac27f280d..bededfb71e43ed8cbbfe535954bb60a1f5d57440 100644 (file)
@@ -1644,9 +1644,16 @@ fgParseArgs (int argc, char **argv)
 
             } else if (result == FG_OPTIONS_SHOW_SOUND_DEVICES) {
               SGSoundMgr smgr;
+
+              smgr.init();
+              string vendor = smgr.get_vendor();
+              string renderer = smgr.get_renderer();
+              cout << renderer << " provided by " << vendor << endl;
+              cout << endl << "No. Device" << endl;
+
               vector <const char*>devices = smgr.get_available_devices();
               for (int i=0; i<devices.size(); i++) {
-                printf("%i. \"%s\"\n", i, devices[i]);
+                cout << i << ".  \"" << devices[i] << "\"" << endl;
               }
               devices.clear();
               exit(0);