]> git.mxchange.org Git - flightgear.git/commitdiff
Chatter-queue moved out of globals
authorJames Turner <zakalawe@mac.com>
Fri, 1 Jan 2016 20:53:02 +0000 (14:53 -0600)
committerJames Turner <zakalawe@mac.com>
Sun, 3 Jan 2016 18:00:15 +0000 (12:00 -0600)
- now lives as part of the sound-manager, yay.

src/Main/fg_commands.cxx
src/Main/fg_init.cxx
src/Main/globals.cxx
src/Main/globals.hxx
src/Sound/soundmanager.cxx
src/Sound/soundmanager.hxx

index 3151b2bf6a2e0be48d0aacf316126662a8f69114..a7a5945dc473c4e836fc09895f6e2eda0e93301b 100644 (file)
@@ -1061,46 +1061,6 @@ do_add_model (const SGPropertyNode * arg)
     return true;
 }
 
-/**
- * Built-in command: play an audio message (i.e. a wav file) This is
- * fire and forget.  Call this once per message and it will get dumped
- * into a queue.  Messages are played sequentially so they do not
- * overlap.
- */
-static bool
-do_play_audio_sample (const SGPropertyNode * arg)
-{
-    SGSoundMgr *smgr = globals->get_subsystem<SGSoundMgr>();
-    if (!smgr) {
-        SG_LOG(SG_GENERAL, SG_WARN, "play-audio-sample: sound-manager not running");
-        return false;
-    }
-  
-    string path = arg->getStringValue("path");
-    string file = arg->getStringValue("file");
-    float volume = arg->getFloatValue("volume");
-    // cout << "playing " << path << " / " << file << endl;
-    try {
-        FGSampleQueue *queue = globals->get_chatter_queue();
-        if ( !queue ) {
-            queue = new FGSampleQueue(smgr, "chatter");
-            queue->tie_to_listener();
-            globals->set_chatter_queue(queue);
-        }
-
-        SGSoundSample *msg = new SGSoundSample(file.c_str(), path);
-        msg->set_volume( volume );
-        queue->add( msg );
-
-        return true;
-
-    } catch (const sg_io_exception&) {
-        SG_LOG(SG_GENERAL, SG_ALERT, "play-audio-sample: "
-                "failed to load" << path << '/' << file);
-        return false;
-    }
-}
-
 /**
  * Built-in command: commit presets (read from in /sim/presets/)
  */
@@ -1470,7 +1430,6 @@ static struct {
     { "open-browser", do_open_browser },
     { "gui-redraw", do_gui_redraw },
     { "add-model", do_add_model },
-    { "play-audio-sample", do_play_audio_sample },
     { "presets-commit", do_presets_commit },
     { "log-level", do_log_level },
     { "replay", do_replay },
index 64232f96e3b7777735db891951cb6b0688e08529..b2639671d27269f37d2876183088c185bd0dbd2f 100644 (file)
@@ -1069,7 +1069,6 @@ void fgStartNewReset()
     
     globals->set_renderer(NULL);
     globals->set_matlib(NULL);
-    globals->set_chatter_queue(NULL);
     
     simgear::clearEffectCache();
     simgear::SGModelLib::resetPropertyRoot();
index 42a27bd46b74782d45028b6169dac8da078c5c7f..58fb75eecd96b50e1d1577ec18031a1e4e9d0d7b 100644 (file)
@@ -54,7 +54,6 @@
 #include <Navaids/navlist.hxx>
 #include <Viewer/renderer.hxx>
 #include <Viewer/viewmgr.hxx>
-#include <Sound/sample_queue.hxx>
 
 #include "globals.hxx"
 #include "locale.hxx"
@@ -160,8 +159,7 @@ FGGlobals::FGGlobals() :
     channel_options_list( NULL ),
     initial_waypoints( NULL ),
     channellist( NULL ),
-    haveUserSettings(false),
-    _chatter_queue(NULL)
+    haveUserSettings(false)
 {
     SGPropertyNode* root = new SGPropertyNode;
     props = SGPropertyNode_ptr(root);
@@ -224,7 +222,6 @@ FGGlobals::~FGGlobals()
 
     // renderer touches subsystems during its destruction
     set_renderer(NULL);
-    _chatter_queue.clear();
 
     delete subsystem_mgr;
     subsystem_mgr = NULL; // important so ::get_subsystem returns NULL
@@ -720,16 +717,6 @@ FGControls *FGGlobals::get_controls() const
     return get_subsystem<FGControls>();
 }
 
-FGSampleQueue* FGGlobals::get_chatter_queue() const
-{
-    return _chatter_queue;
-}
-
-void FGGlobals::set_chatter_queue(FGSampleQueue* queue)
-{
-    _chatter_queue = queue;
-}
-
 void FGGlobals::addListenerToCleanup(SGPropertyChangeListener* l)
 {
     _listeners_to_cleanup.push_back(l);
index 4951792c98ba77b59883300b8dbe70c813284d60..34eff9c6f2ac7a8f091b804a3b9a1ad523416c4b 100644 (file)
@@ -63,7 +63,6 @@ class FGTileMgr;
 class FGViewMgr;
 class FGViewer;
 class FGRenderer;
-class FGSampleQueue;
 
 namespace simgear { namespace pkg {
   class Root;
@@ -140,9 +139,7 @@ private:
      * helper to initialise standard properties on a new property tree
      */
     void initProperties();
-    
-    SGSharedPtr<FGSampleQueue> _chatter_queue;
-    
+        
     void cleanupListeners();
     
     typedef std::vector<SGPropertyChangeListener*> SGPropertyChangeListenerVec;
@@ -341,9 +338,6 @@ public:
      */
     void saveUserSettings();
     
-    FGSampleQueue* get_chatter_queue() const;
-    void set_chatter_queue(FGSampleQueue* queue);
-    
     void addListenerToCleanup(SGPropertyChangeListener* l);
   
     simgear::pkg::Root* packageRoot();
index bb1b83418bf07e252fe9604148e82ffe92d90b5f..0637b96a0e070d34a15daeb9d5618aef44ebcea1 100644 (file)
 #endif
 
 #include <simgear/sound/soundmgr_openal.hxx>
+#include <simgear/structure/commands.hxx>
 
 #if defined(ENABLE_FLITE)
 #include "VoiceSynthesizer.hxx"
 #endif
+
+#include "sample_queue.hxx"
 #include "soundmanager.hxx"
 #include "Main/globals.hxx"
 #include "Main/fg_props.hxx"
@@ -87,6 +90,9 @@ void FGSoundManager::init()
     SGPropertyNode_ptr scenery_loaded = fgGetNode("sim/sceneryloaded", true);
     scenery_loaded->addChangeListener(_listener.get());
 
+    globals->get_commands()->addCommand("play-audio-sample", this, &FGSoundManager::playAudioSampleCommand);
+
+
     reinit();
 }
 
@@ -96,7 +102,11 @@ void FGSoundManager::shutdown()
     scenery_loaded->removeChangeListener(_listener.get());
     
     stop();
-    
+
+    _chatterQueue.clear();
+    globals->get_commands()->removeCommand("play-audio-sample");
+
+
     SGSoundMgr::shutdown();
 }
 
@@ -202,6 +212,37 @@ void FGSoundManager::update(double dt)
     }
 }
 
+/**
+ * Built-in command: play an audio message (i.e. a wav file) This is
+ * fire and forget.  Call this once per message and it will get dumped
+ * into a queue.  Messages are played sequentially so they do not
+ * overlap.
+ */
+bool FGSoundManager::playAudioSampleCommand(const SGPropertyNode * arg)
+{
+    string path = arg->getStringValue("path");
+    string file = arg->getStringValue("file");
+    float volume = arg->getFloatValue("volume");
+    // cout << "playing " << path << " / " << file << endl;
+    try {
+        if ( !_chatterQueue ) {
+            _chatterQueue = new FGSampleQueue(this, "chatter");
+            _chatterQueue->tie_to_listener();
+        }
+
+        SGSoundSample *msg = new SGSoundSample(file.c_str(), path);
+        msg->set_volume( volume );
+        _chatterQueue->add( msg );
+
+        return true;
+
+    } catch (const sg_io_exception&) {
+        SG_LOG(SG_GENERAL, SG_ALERT, "play-audio-sample: "
+               "failed to load" << path << '/' << file);
+        return false;
+    }
+}
+
 #if defined(ENABLE_FLITE)
 VoiceSynthesizer * FGSoundManager::getSynthesizer( const std::string & voice )
 {
index a22b738845157685ff01746380b21a28c6cceb9e..cebf34806cc515192f9d5a613069201e3342732c 100644 (file)
@@ -26,6 +26,7 @@
 #include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/sound/soundmgr_openal.hxx>
 
+class FGSampleQueue;
 class SGSoundMgr;
 class Listener;
 #if defined(ENABLE_FLITE)
@@ -51,7 +52,11 @@ public:
 #endif
 private:
     bool stationaryView() const;
-  
+
+    bool playAudioSampleCommand(const SGPropertyNode * arg);
+
+    SGSharedPtr<FGSampleQueue> _chatterQueue;
+
     bool _is_initialized, _enabled;
     SGPropertyNode_ptr _sound_working, _sound_enabled, _volume, _device_name;
     SGPropertyNode_ptr _currentView;