if ( nav1_vol_btn > 0.1 && nav1_ident_btn ) {
FGSimpleSound *sound;
sound = globals->get_soundmgr()->find( "nav1-vor-ident" );
- sound->set_volume( nav1_vol_btn * 0.3 );
+ if ( sound != NULL ) {
+ sound->set_volume( nav1_vol_btn );
+ } else {
+ SG_LOG( SG_COCKPIT, SG_ALERT,
+ "Can't find nav1-vor-ident sound" );
+ }
sound = globals->get_soundmgr()->find( "nav1-dme-ident" );
- sound->set_volume( nav1_vol_btn * 0.3 );
+ if ( sound != NULL ) {
+ sound->set_volume( nav1_vol_btn );
+ } else {
+ SG_LOG( SG_COCKPIT, SG_ALERT,
+ "Can't find nav1-dme-ident sound" );
+ }
+ // cout << "nav1_last_time = " << nav1_last_time << " ";
+ // cout << "cur_time = " << globals->get_time_params()->get_cur_time();
if ( nav1_last_time <
globals->get_time_params()->get_cur_time() - 30 ) {
nav1_last_time = globals->get_time_params()->get_cur_time();
nav1_play_count = 0;
}
+ // cout << " nav1_play_count = " << nav1_play_count << endl;
+ // cout << "playing = "
+ // << globals->get_soundmgr()->is_playing("nav1-vor-ident")
+ // << endl;
if ( nav1_play_count < 4 ) {
// play VOR ident
if ( !globals->get_soundmgr()->is_playing("nav1-vor-ident") ) {
globals->get_soundmgr()->play_once( "nav1-vor-ident" );
++nav1_play_count;
- }
+ }
} else if ( nav1_play_count < 5 && nav1_has_dme ) {
// play DME ident
if ( !globals->get_soundmgr()->is_playing("nav1-vor-ident") &&
if ( nav2_vol_btn > 0.1 && nav2_ident_btn ) {
FGSimpleSound *sound;
sound = globals->get_soundmgr()->find( "nav2-vor-ident" );
- sound->set_volume( nav2_vol_btn * 0.3 );
+ if ( sound != NULL ) {
+ sound->set_volume( nav2_vol_btn );
+ } else {
+ SG_LOG( SG_COCKPIT, SG_ALERT,
+ "Can't find nav2-vor-ident sound" );
+ }
sound = globals->get_soundmgr()->find( "nav2-dme-ident" );
- sound->set_volume( nav2_vol_btn * 0.3 );
- if ( nav2_last_time <
+ if ( sound != NULL ) {
+ sound->set_volume( nav2_vol_btn );
+ } else {
+ SG_LOG( SG_COCKPIT, SG_ALERT,
+ "Can't find nav2-dme-ident sound" );
+ }
+ if ( nav2_last_time <
globals->get_time_params()->get_cur_time() - 30 ) {
nav2_last_time = globals->get_time_params()->get_cur_time();
nav2_play_count = 0;
if ( adf_vol_btn > 0.1 && adf_ident_btn ) {
FGSimpleSound *sound;
sound = globals->get_soundmgr()->find( "adf-ident" );
- sound->set_volume( adf_vol_btn * 0.3 );
+ if ( sound != NULL ) {
+ sound->set_volume( adf_vol_btn );
+ } else {
+ SG_LOG( SG_COCKPIT, SG_ALERT, "Can't find adf-ident sound" );
+ }
if ( adf_last_time <
globals->get_time_params()->get_cur_time() - 30 ) {
adf_last_time = globals->get_time_params()->get_cur_time();
FGSimpleSound *sound;
sound = morse.make_ident( nav1_trans_ident, LO_FREQUENCY );
sound->set_volume( 0.3 );
- globals->get_soundmgr()->add( sound, "nav1-vor-ident" );
+ if ( globals->get_soundmgr()->add( sound, "nav1-vor-ident" ) ) {
+ // cout << "Added nav1-vor-ident sound" << endl;
+ } else {
+ // cout << "Failed to add v1-vor-ident sound" << endl;
+ }
if ( globals->get_soundmgr()->exists( "nav1-dme-ident" ) ) {
globals->get_soundmgr()->remove( "nav1-dme-ident" );
nav1_trans_ident = "";
last_nav1_ident = "";
#ifdef ENABLE_AUDIO_SUPPORT
- globals->get_soundmgr()->remove( "nav1-vor-ident" );
+ if ( ! globals->get_soundmgr()->remove( "nav1-vor-ident" ) ) {
+ // cout << "Failed to remove nav1-vor-ident sound" << endl;
+ }
globals->get_soundmgr()->remove( "nav1-dme-ident" );
#endif
// cout << "not picking up vor1. :-(" << endl;
void FGSimpleSound::play( slScheduler *sched, bool looped ) {
requests++;
- if (requests > 1)
- return;
+
+ // make sure sound isn't already playing
+ if ( sample->getPlayCount() > 0 ) {
+ return;
+ }
// sched->stopSample(sample);
- if (looped)
- sched->loopSample(sample);
- else
- sched->playSample(sample);
+ if ( looped ) {
+ sched->loopSample(sample);
+ } else {
+ sched->playSample(sample);
+ }
sched->addSampleEnvelope(sample, 0, 0, pitch_envelope, SL_PITCH_ENVELOPE);
sched->addSampleEnvelope(sample, 0, 1, volume_envelope, SL_VOLUME_ENVELOPE);
void FGSimpleSound::stop( slScheduler *sched, bool quick ) {
- if (quick)
- requests = 0;
- else
- if (--requests < 0)
- requests = 0;
+ if ( quick ) {
+ requests = 0;
+ } else {
+ if ( --requests < 0 ) {
+ requests = 0;
+ }
+ }
- if (requests > 0)
+ if ( requests > 0 ) {
return;
+ }
sched->stopSample( sample );
}
// add a sound effect, return true if successful
bool FGSoundMgr::add( FGSimpleSound *sound, const string& refname ) {
- sample_map_iterator it = samples.find(refname);
- if (it != samples.end())
- return false;
+ sound_map_iterator sound_it = sounds.find( refname );
+ if ( sound_it != sounds.end() ) {
+ // sound already exists
+ return false;
+ }
+
+ sample_map_iterator sample_it = samples.find( refname );
+ if ( sample_it != samples.end() ) {
+ // this sound has existed in the past and it's sample is still
+ // here, delete the sample so we can replace it.
+ samples.erase( sample_it );
+ }
sample_ref *sr = new sample_ref;
return true;
}
+
// add a sound from a file, return the sample if successful, else return NULL
FGSimpleSound *FGSoundMgr::add( const string& refname, const string &file ) {
FGSimpleSound *sound;
return sound;
}
+
// remove a sound effect, return true if successful
bool FGSoundMgr::remove( const string& refname ) {
// delete sample;
sounds.erase( it );
+ // cout << "sndmgr: removed -> " << refname << endl;
return true;
- } else {
- return false;
+ } else {
+ // cout << "sndmgr: failed remove -> " << refname << endl;
+ return false;
}
}
sound_map_iterator it = sounds.find( refname );
if ( it != sounds.end() ) {
return it->second;
- } else {
+ } else {
return NULL;
}
}
if ((sample = find( refname )) == NULL)
return false;
- return sample->is_playing();
+ return (sample->get_sample()->getPlayCount() > 0 );
}