1 // soundmanager.cxx -- Wraps the SimGear OpenAl sound manager class
3 // Copyright (C) 2001 Curtis L. Olson - http://www.flightgear.org/~curt
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License as
7 // published by the Free Software Foundation; either version 2 of the
8 // License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful, but
11 // WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 #include <simgear/sound/soundmgr_openal.hxx>
22 #include "soundmanager.hxx"
23 #include "Main/globals.hxx"
24 #include "Main/fg_props.hxx"
29 #ifdef ENABLE_AUDIO_SUPPORT
31 * Listener class that monitors the sim state.
33 class Listener : public SGPropertyChangeListener
36 Listener(FGSoundManager *wrapper) : _wrapper(wrapper) {}
37 virtual void valueChanged (SGPropertyNode * node);
40 FGSoundManager* _wrapper;
43 void Listener::valueChanged(SGPropertyNode * node)
45 _wrapper->activate(node->getBoolValue());
48 FGSoundManager::FGSoundManager()
49 : _is_initialized(false),
50 _listener(new Listener(this))
52 SGPropertyNode_ptr scenery_loaded = fgGetNode("sim/sceneryloaded", true);
53 scenery_loaded->addChangeListener(_listener);
56 FGSoundManager::~FGSoundManager()
60 void FGSoundManager::init()
62 _sound_working = fgGetNode("/sim/sound/working");
63 _sound_enabled = fgGetNode("/sim/sound/enabled");
64 _volume = fgGetNode("/sim/sound/volume");
65 _device_name = fgGetNode("/sim/sound/device-name");
70 void FGSoundManager::reinit()
72 _is_initialized = false;
74 if (_is_initialized && !_sound_working->getBoolValue())
76 // shutdown sound support
81 if (!_sound_working->getBoolValue())
88 select_device(_device_name->getStringValue());
90 _is_initialized = true;
92 activate(fgGetBool("sim/sceneryloaded", true));
95 void FGSoundManager::activate(bool State)
101 SGSoundMgr::activate();
106 void FGSoundManager::update_device_list()
108 std::vector <const char*>devices = get_available_devices();
109 for (unsigned int i=0; i<devices.size(); i++) {
110 SGPropertyNode *p = fgGetNode("/sim/sound/devices/device", i, true);
111 p->setStringValue(devices[i]);
116 // Update sound manager and propagate property values,
117 // since the sound manager doesn't read any properties itself.
118 // Actual sound update is triggered by the subsystem manager.
119 void FGSoundManager::update(double dt)
121 if (_is_initialized && _sound_working->getBoolValue() && _sound_enabled->getBoolValue())
123 set_volume(_volume->getFloatValue());
124 SGSoundMgr::update(dt);
128 #endif // ENABLE_AUDIO_SUPPORT