1
0
Fork 0

New Property layout:

/sim/sound/enabled		enable/disable the use of OpenAL
/sin/sound/pause		master mute, effects all SampleGroups
/sim/sound/volume		master volume
/sim/sound/effects/enabled	enable/disable (mute) sound fx
/sim/sound/effects/volume	effects volume
/sim/sound/chatter/enabled	enable/disable (mute) atc chatter
/sim/sound/chatter/volume	chatter (sample queue) volume
This commit is contained in:
ehofman 2009-11-29 10:24:47 +00:00 committed by Tim Moore
parent 3abb7afa45
commit 3a4892cede
5 changed files with 49 additions and 33 deletions

View file

@ -480,7 +480,23 @@ static void fgMainLoop( void ) {
// Update the sound manager last so it can use the CPU while the GPU // 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- // is processing the scenery (doubled the frame-rate for me) -EMH-
#ifdef ENABLE_AUDIO_SUPPORT #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 #endif
// END Tile Manager udpates // END Tile Manager udpates
@ -488,15 +504,11 @@ static void fgMainLoop( void ) {
if (!scenery_loaded && globals->get_tile_mgr()->isSceneryLoaded() if (!scenery_loaded && globals->get_tile_mgr()->isSceneryLoaded()
&& cur_fdm_state->get_inited()) { && cur_fdm_state->get_inited()) {
fgSetBool("sim/sceneryloaded",true); fgSetBool("sim/sceneryloaded",true);
#ifdef ENABLE_AUDIO_SUPPORT if (fgGetBool("/sim/sound/enabled")) {
if (fgGetBool("/sim/sound/enabled") == true) { smgr->activate();
float volume = fgGetFloat("/sim/sound/volume"); } else {
globals->get_soundmgr()->set_volume(volume); smgr->stop();
globals->get_soundmgr()->activate();
} }
else
globals->get_soundmgr()->stop();
#endif
} }
fgRequestRedraw(); fgRequestRedraw();

View file

@ -39,16 +39,18 @@
#include <simgear/sound/xmlsound.hxx> #include <simgear/sound/xmlsound.hxx>
FGFX::FGFX ( SGSoundMgr *smgr, const string &refname ) : FGFX::FGFX ( SGSoundMgr *smgr, const string &refname ) :
last_pause( false ), last_enabled( true ),
last_volume( 0.0 ), last_volume( 0.0 ),
_pause( fgGetNode("/sim/sound/pause") ), _enabled( fgGetNode("/sim/sound/effects/enabled", true) ),
_volume( fgGetNode("/sim/sound/volume") ) _volume( fgGetNode("/sim/sound/effects/volume", true) )
{ {
SGSampleGroup::_smgr = smgr; SGSampleGroup::_smgr = smgr;
SGSampleGroup::_refname = refname; SGSampleGroup::_refname = refname;
SGSampleGroup::_smgr->add(this, refname); SGSampleGroup::_smgr->add(this, refname);
_avionics = _smgr->find("avionics", true); _avionics = _smgr->find("avionics", true);
_avionics->tie_to_listener(); _avionics->tie_to_listener();
_enabled->setBoolValue(true);
_volume->setFloatValue(1.0);
} }
@ -116,17 +118,17 @@ FGFX::reinit()
void void
FGFX::update (double dt) FGFX::update (double dt)
{ {
bool new_pause = _pause->getBoolValue(); bool new_enabled = _enabled->getBoolValue();
if ( new_pause != last_pause ) { if ( new_enabled != last_enabled ) {
if ( new_pause ) { if ( new_enabled ) {
suspend();
} else {
resume(); resume();
} else {
suspend();
} }
last_pause = new_pause; last_enabled = new_enabled;
} }
if ( !new_pause ) { if ( new_enabled ) {
double volume = _volume->getDoubleValue(); double volume = _volume->getDoubleValue();
if ( volume != last_volume ) { if ( volume != last_volume ) {
set_volume( volume ); set_volume( volume );

View file

@ -60,10 +60,10 @@ private:
SGSharedPtr<SGSampleGroup> _avionics; SGSharedPtr<SGSampleGroup> _avionics;
std::vector<SGXmlSound *> _sound; std::vector<SGXmlSound *> _sound;
bool last_pause; bool last_enabled;
double last_volume; double last_volume;
SGPropertyNode_ptr _pause; SGPropertyNode_ptr _enabled;
SGPropertyNode_ptr _volume; SGPropertyNode_ptr _volume;
}; };

View file

@ -37,14 +37,16 @@
#include <simgear/sound/sample_openal.hxx> #include <simgear/sound/sample_openal.hxx>
FGSampleQueue::FGSampleQueue ( SGSoundMgr *smgr, const string &refname ) : FGSampleQueue::FGSampleQueue ( SGSoundMgr *smgr, const string &refname ) :
last_pause( false ), last_enabled( true ),
last_volume( 0.0 ), last_volume( 0.0 ),
_pause( fgGetNode("/sim/sound/pause") ), _enabled( fgGetNode("/sim/sound/chatter/enabled", true) ),
_volume( fgGetNode("/sim/sound/volume") ) _volume( fgGetNode("/sim/sound/chatter/volume", true) )
{ {
SGSampleGroup::_smgr = smgr; SGSampleGroup::_smgr = smgr;
SGSampleGroup::_smgr->add(this, refname); SGSampleGroup::_smgr->add(this, refname);
SGSampleGroup::_refname = refname; SGSampleGroup::_refname = refname;
_enabled->setBoolValue(true);
_volume->setFloatValue(1.0);
} }
@ -61,17 +63,17 @@ void
FGSampleQueue::update (double dt) FGSampleQueue::update (double dt)
{ {
// command sound manger // command sound manger
bool new_pause = _pause->getBoolValue(); bool new_enabled = _enabled->getBoolValue();
if ( new_pause != last_pause ) { if ( new_enabled != last_enabled ) {
if ( new_pause ) { if ( new_enabled ) {
suspend();
} else {
resume(); resume();
} else {
suspend();
} }
last_pause = new_pause; last_enabled = new_enabled;
} }
if ( !new_pause ) { if ( new_enabled ) {
double volume = _volume->getDoubleValue(); double volume = _volume->getDoubleValue();
if ( volume != last_volume ) { if ( volume != last_volume ) {
set_volume( volume ); set_volume( volume );

View file

@ -57,10 +57,10 @@ private:
std::queue< SGSharedPtr<SGSoundSample> > _messages; std::queue< SGSharedPtr<SGSoundSample> > _messages;
bool last_pause; bool last_enabled;
double last_volume; double last_volume;
SGPropertyNode_ptr _pause; SGPropertyNode_ptr _enabled;
SGPropertyNode_ptr _volume; SGPropertyNode_ptr _volume;
}; };