From cc406602062529086e4e77e07d9234ce059bcf0e Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Sun, 4 Dec 2011 21:43:21 +0100 Subject: [PATCH 1/3] Performance improvement Avoid frequently creating/dropping an identical sound sample, when the nav radio signal is flickering. Always keep most recent sound when signal is lost (only stop it/turn volume off). --- src/Instrumentation/kr_87.cxx | 4 +++- src/Sound/audioident.cxx | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Instrumentation/kr_87.cxx b/src/Instrumentation/kr_87.cxx index 0fa58012e..8ea39569c 100644 --- a/src/Instrumentation/kr_87.cxx +++ b/src/Instrumentation/kr_87.cxx @@ -524,7 +524,9 @@ void FGKR_87::search() { xyz = adf->cart(); if ( _sgr->exists( "adf-ident" ) ) { - _sgr->remove( "adf-ident" ); + // stop is required! -- remove alone wouldn't stop immediately + _sgr->stop( "adf-ident" ); + _sgr->remove( "adf-ident" ); } SGSoundSample *sound; sound = FGMorse::instance()->make_ident( trans_ident, FGMorse::LO_FREQUENCY ); diff --git a/src/Sound/audioident.cxx b/src/Sound/audioident.cxx index 782526c9b..829ce9ab6 100644 --- a/src/Sound/audioident.cxx +++ b/src/Sound/audioident.cxx @@ -70,7 +70,15 @@ void AudioIdent::setVolumeNorm( double volumeNorm ) void AudioIdent::setIdent( const std::string & ident, double volumeNorm ) { - if( _ident == ident ) { + // Signal may flicker very frequently (due to our realistic newnavradio...). + // Avoid recreating identical sound samples all the time, instead turn off + // volume when signal is lost, and save the most recent sample. + if (ident.empty()) + volumeNorm = 0; + + if(( _ident == ident )|| + (volumeNorm == 0)) // don't bother with sounds when volume is OFF anyway... + { if( false == _ident.empty() ) setVolumeNorm( volumeNorm ); return; @@ -88,6 +96,7 @@ void AudioIdent::setIdent( const std::string & ident, double volumeNorm ) sound->set_volume( volumeNorm ); if (!_sgr->add( sound, _fx_name )) { SG_LOG(SG_SOUND, SG_WARN, "Failed to add sound '" << _fx_name << "' for ident '" << ident << "'" ); + delete sound; return; } From b61e22bdb3f4adf788d7f817e2ee9693e74c7e81 Mon Sep 17 00:00:00 2001 From: Vivian Meazza Date: Mon, 5 Dec 2011 08:55:33 +0000 Subject: [PATCH 2/3] Windows fixes/work-arounds Signed-off-by: Vivian Meazza --- src/Radio/radio.cxx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/Radio/radio.cxx b/src/Radio/radio.cxx index 4c80a9fe5..e5719e0dc 100644 --- a/src/Radio/radio.cxx +++ b/src/Radio/radio.cxx @@ -362,8 +362,10 @@ double FGRadioTransmission::ITM_calculate_attenuation(SGGeod pos, double freq, i _elevations.push_front(point_distance); _elevations.push_front(num_points -1); - int size = _elevations.size(); - double itm_elev[size]; + + int size = _elevations.size(); + double itm_elev[10000]; + for(int i=0;i Date: Mon, 5 Dec 2011 21:40:01 +0100 Subject: [PATCH 3/3] Fix a typo in the radio propagation code And for sentimental reason: keep the VC90 project file working --- projects/VC90/FlightGear/FlightGear.vcproj | 24 ++++++++++++++++++++++ src/Radio/itm.cpp | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/projects/VC90/FlightGear/FlightGear.vcproj b/projects/VC90/FlightGear/FlightGear.vcproj index 364454c1b..fd2548b0a 100644 --- a/projects/VC90/FlightGear/FlightGear.vcproj +++ b/projects/VC90/FlightGear/FlightGear.vcproj @@ -3198,6 +3198,30 @@ > + + + + + + + + + + + + diff --git a/src/Radio/itm.cpp b/src/Radio/itm.cpp index 1b970d067..184ac3765 100644 --- a/src/Radio/itm.cpp +++ b/src/Radio/itm.cpp @@ -1000,7 +1000,7 @@ double avar(double zzt, double zzl, double zzc, prop_type &prop, propv_type &pro kdv = propv.mdvar; no_situation_variability = kdv >= 20; if (no_situation_variability) - no_situation_variability -= 20; + kdv -= 20; no_location_variability = kdv >= 10; if (no_location_variability)