// 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
- globals->get_soundmgr()->update(delta_time_sec);
+ static SGPropertyNode *sound_pause = fgGetNode("/sim/sound/pause");
+ static SGSoundMgr *smgr = globals->get_soundmgr();
+ static bool smgr_suspend = false;
+ if (smgr_suspend != sound_pause->getBoolValue()) {
+ if (smgr_suspend == false) { // request to suspend
+ smgr->suspend();
+ } else {
+ smgr->resume();
+ }
+ smgr_suspend = sound_pause->getBoolValue();
+ }
+
+ if (smgr_suspend == false) {
+ static SGPropertyNode *volume = fgGetNode("/sim/sound/volume");
+ smgr->set_volume(volume->getFloatValue());
+ smgr->update(delta_time_sec);
+ }
#endif
// END Tile Manager udpates
if (!scenery_loaded && globals->get_tile_mgr()->isSceneryLoaded()
&& cur_fdm_state->get_inited()) {
fgSetBool("sim/sceneryloaded",true);
-#ifdef ENABLE_AUDIO_SUPPORT
- if (fgGetBool("/sim/sound/enabled") == true) {
- float volume = fgGetFloat("/sim/sound/volume");
- globals->get_soundmgr()->set_volume(volume);
- globals->get_soundmgr()->activate();
+ if (fgGetBool("/sim/sound/enabled")) {
+ smgr->activate();
+ } else {
+ smgr->stop();
}
- else
- globals->get_soundmgr()->stop();
-#endif
}
fgRequestRedraw();
#include <simgear/sound/xmlsound.hxx>
FGFX::FGFX ( SGSoundMgr *smgr, const string &refname ) :
- last_pause( false ),
+ last_enabled( true ),
last_volume( 0.0 ),
- _pause( fgGetNode("/sim/sound/pause") ),
- _volume( fgGetNode("/sim/sound/volume") )
+ _enabled( fgGetNode("/sim/sound/effects/enabled", true) ),
+ _volume( fgGetNode("/sim/sound/effects/volume", true) )
{
SGSampleGroup::_smgr = smgr;
SGSampleGroup::_refname = refname;
SGSampleGroup::_smgr->add(this, refname);
_avionics = _smgr->find("avionics", true);
_avionics->tie_to_listener();
+ _enabled->setBoolValue(true);
+ _volume->setFloatValue(1.0);
}
void
FGFX::update (double dt)
{
- bool new_pause = _pause->getBoolValue();
- if ( new_pause != last_pause ) {
- if ( new_pause ) {
- suspend();
- } else {
+ bool new_enabled = _enabled->getBoolValue();
+ if ( new_enabled != last_enabled ) {
+ if ( new_enabled ) {
resume();
+ } else {
+ suspend();
}
- last_pause = new_pause;
+ last_enabled = new_enabled;
}
- if ( !new_pause ) {
+ if ( new_enabled ) {
double volume = _volume->getDoubleValue();
if ( volume != last_volume ) {
set_volume( volume );
SGSharedPtr<SGSampleGroup> _avionics;
std::vector<SGXmlSound *> _sound;
- bool last_pause;
+ bool last_enabled;
double last_volume;
- SGPropertyNode_ptr _pause;
+ SGPropertyNode_ptr _enabled;
SGPropertyNode_ptr _volume;
};
#include <simgear/sound/sample_openal.hxx>
FGSampleQueue::FGSampleQueue ( SGSoundMgr *smgr, const string &refname ) :
- last_pause( false ),
+ last_enabled( true ),
last_volume( 0.0 ),
- _pause( fgGetNode("/sim/sound/pause") ),
- _volume( fgGetNode("/sim/sound/volume") )
+ _enabled( fgGetNode("/sim/sound/chatter/enabled", true) ),
+ _volume( fgGetNode("/sim/sound/chatter/volume", true) )
{
SGSampleGroup::_smgr = smgr;
SGSampleGroup::_smgr->add(this, refname);
SGSampleGroup::_refname = refname;
+ _enabled->setBoolValue(true);
+ _volume->setFloatValue(1.0);
}
FGSampleQueue::update (double dt)
{
// command sound manger
- bool new_pause = _pause->getBoolValue();
- if ( new_pause != last_pause ) {
- if ( new_pause ) {
- suspend();
- } else {
+ bool new_enabled = _enabled->getBoolValue();
+ if ( new_enabled != last_enabled ) {
+ if ( new_enabled ) {
resume();
+ } else {
+ suspend();
}
- last_pause = new_pause;
+ last_enabled = new_enabled;
}
- if ( !new_pause ) {
+ if ( new_enabled ) {
double volume = _volume->getDoubleValue();
if ( volume != last_volume ) {
set_volume( volume );
std::queue< SGSharedPtr<SGSoundSample> > _messages;
- bool last_pause;
+ bool last_enabled;
double last_volume;
- SGPropertyNode_ptr _pause;
+ SGPropertyNode_ptr _enabled;
SGPropertyNode_ptr _volume;
};