Merge branch 'ehofman/sound'
This commit is contained in:
commit
98d8a98ef2
5 changed files with 54 additions and 34 deletions
|
@ -144,6 +144,8 @@ void* FGATCVoice::WriteMessage(const string& message, size_t* len) {
|
||||||
token_start = message.find_first_not_of(delimiters, token_end);
|
token_start = message.find_first_not_of(delimiters, token_end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (token == "/_") continue;
|
||||||
|
|
||||||
for(string::iterator t = token.begin(); t != token.end(); t++) {
|
for(string::iterator t = token.begin(); t != token.end(); t++) {
|
||||||
// canonicalize the token, to match what's in the index
|
// canonicalize the token, to match what's in the index
|
||||||
*t = (*t == '-') ? '_' : tolower(*t);
|
*t = (*t == '-') ? '_' : tolower(*t);
|
||||||
|
|
|
@ -97,8 +97,9 @@ void FGATCMgr::init() {
|
||||||
try {
|
try {
|
||||||
voiceOK = v1->LoadVoice("default");
|
voiceOK = v1->LoadVoice("default");
|
||||||
voice = true;
|
voice = true;
|
||||||
} catch ( sg_io_exception & ) {
|
} catch ( sg_io_exception & e) {
|
||||||
voiceOK = false;
|
voiceOK = false;
|
||||||
|
SG_LOG(SG_ATC, SG_ALERT, "Unable to load default voice : " << e.getFormattedMessage().c_str());
|
||||||
voice = false;
|
voice = false;
|
||||||
delete v1;
|
delete v1;
|
||||||
v1 = 0;
|
v1 = 0;
|
||||||
|
|
|
@ -1455,21 +1455,6 @@ bool fgInitSubsystems() {
|
||||||
globals->get_event_mgr()->init();
|
globals->get_event_mgr()->init();
|
||||||
globals->get_event_mgr()->setRealtimeProperty(fgGetNode("/sim/time/delta-realtime-sec", true));
|
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
|
// Initialize the property interpolator subsystem. Put into the INIT
|
||||||
// group because the "nasal" subsystem may need it at GENERAL take-down.
|
// group because the "nasal" subsystem may need it at GENERAL take-down.
|
||||||
|
|
|
@ -105,6 +105,7 @@ long global_multi_loop;
|
||||||
SGTimeStamp last_time_stamp;
|
SGTimeStamp last_time_stamp;
|
||||||
SGTimeStamp current_time_stamp;
|
SGTimeStamp current_time_stamp;
|
||||||
|
|
||||||
|
void fgInitSoundManager();
|
||||||
void fgSetNewSoundDevice(const char *);
|
void fgSetNewSoundDevice(const char *);
|
||||||
|
|
||||||
// The atexit() function handler should know when the graphical subsystem
|
// 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
|
// 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
|
||||||
static SGPropertyNode *sound_enabled = fgGetNode("/sim/sound/enabled");
|
static bool smgr_init = true;
|
||||||
static SGSoundMgr *smgr = globals->get_soundmgr();
|
if (smgr_init == true) {
|
||||||
static bool smgr_enabled = true;
|
static SGPropertyNode *sound_working = fgGetNode("/sim/sound/working");
|
||||||
if (smgr_enabled != sound_enabled->getBoolValue()) {
|
if (sound_working->getBoolValue() == true) {
|
||||||
if (smgr_enabled == true) { // request to suspend
|
fgInitSoundManager();
|
||||||
smgr->suspend();
|
smgr_init = false;
|
||||||
} else {
|
|
||||||
smgr->resume();
|
|
||||||
}
|
}
|
||||||
smgr_enabled = sound_enabled->getBoolValue();
|
} else {
|
||||||
}
|
static SGPropertyNode *sound_enabled = fgGetNode("/sim/sound/enabled");
|
||||||
|
static SGSoundMgr *smgr = globals->get_soundmgr();
|
||||||
|
static bool smgr_enabled = true;
|
||||||
|
|
||||||
if (smgr_enabled == true) {
|
if (smgr_enabled != sound_enabled->getBoolValue()) {
|
||||||
static SGPropertyNode *volume = fgGetNode("/sim/sound/volume");
|
if (smgr_enabled == true) { // request to suspend
|
||||||
smgr->set_volume(volume->getFloatValue());
|
smgr->suspend();
|
||||||
smgr->update(delta_time_sec);
|
smgr_enabled = false;
|
||||||
|
} else {
|
||||||
|
smgr->resume();
|
||||||
|
smgr_enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (smgr_enabled == true) {
|
||||||
|
static SGPropertyNode *volume = fgGetNode("/sim/sound/volume");
|
||||||
|
smgr->set_volume(volume->getFloatValue());
|
||||||
|
smgr->update(delta_time_sec);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -508,9 +520,7 @@ static void fgMainLoop( void ) {
|
||||||
&& cur_fdm_state->get_inited()) {
|
&& cur_fdm_state->get_inited()) {
|
||||||
fgSetBool("sim/sceneryloaded",true);
|
fgSetBool("sim/sceneryloaded",true);
|
||||||
if (fgGetBool("/sim/sound/working")) {
|
if (fgGetBool("/sim/sound/working")) {
|
||||||
smgr->activate();
|
globals->get_soundmgr()->activate();
|
||||||
} else {
|
|
||||||
smgr->stop();
|
|
||||||
}
|
}
|
||||||
globals->get_props()->tie("/sim/sound/devices/name",
|
globals->get_props()->tie("/sim/sound/devices/name",
|
||||||
SGRawValueFunctions<const char *>(0, fgSetNewSoundDevice), false);
|
SGRawValueFunctions<const char *>(0, fgSetNewSoundDevice), false);
|
||||||
|
@ -521,6 +531,21 @@ static void fgMainLoop( void ) {
|
||||||
SG_LOG( SG_ALL, SG_DEBUG, "" );
|
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)
|
void fgSetNewSoundDevice(const char *device)
|
||||||
{
|
{
|
||||||
globals->get_soundmgr()->suspend();
|
globals->get_soundmgr()->suspend();
|
||||||
|
|
|
@ -1644,9 +1644,16 @@ fgParseArgs (int argc, char **argv)
|
||||||
|
|
||||||
} else if (result == FG_OPTIONS_SHOW_SOUND_DEVICES) {
|
} else if (result == FG_OPTIONS_SHOW_SOUND_DEVICES) {
|
||||||
SGSoundMgr smgr;
|
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();
|
vector <const char*>devices = smgr.get_available_devices();
|
||||||
for (int i=0; i<devices.size(); i++) {
|
for (int i=0; i<devices.size(); i++) {
|
||||||
printf("%i. \"%s\"\n", i, devices[i]);
|
cout << i << ". \"" << devices[i] << "\"" << endl;
|
||||||
}
|
}
|
||||||
devices.clear();
|
devices.clear();
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|
Loading…
Add table
Reference in a new issue