- FGSoundMgr * mgr = globals->get_soundmgr();
-
-
- ////////////////////////////////////////////////////////////////////
- // Update the engine sound.
- ////////////////////////////////////////////////////////////////////
-
- if (_engine_running_prop->getBoolValue()) {
- // pitch corresponds to rpm
- // volume corresponds to manifold pressure
-
- double rpm_factor;
- if ( cur_fdm_state->get_num_engines() > 0 )
- rpm_factor = cur_fdm_state->get_engine(0)->get_RPM() / 2500.0;
- else
- rpm_factor = 1.0;
-
- double pitch = 0.3 + rpm_factor * 3.0;
-
- // don't run at absurdly slow rates -- not realistic
- // and sounds bad to boot. :-)
- if (pitch < 0.7)
- pitch = 0.7;
- if (pitch > 5.0)
- pitch = 5.0;
-
- double mp_factor;
- if ( cur_fdm_state->get_num_engines() > 0 )
- mp_factor = cur_fdm_state->get_engine(0)->get_Manifold_Pressure() / 100;
- else
- mp_factor = 0.3;
-
- double volume = 0.15 + mp_factor / 2.0;
-
- if (volume < 0.15)
- volume = 0.15;
- if (volume > 0.5)
- volume = 0.5;
-
- _engine->set_pitch( pitch );
- _engine->set_volume( volume );
- set_playing("engine", true);
- } else {
- set_playing("engine", false);
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Update the cranking sound.
- ////////////////////////////////////////////////////////////////////
-
- // FIXME
- set_playing("crank", _engine_cranking_prop->getBoolValue());
-
-
- ////////////////////////////////////////////////////////////////////
- // Update the wind noise.
- ////////////////////////////////////////////////////////////////////
-
- float rel_wind = cur_fdm_state->get_V_rel_wind(); // FPS
- if (rel_wind > 60.0) { // a little off 30kt
- float volume = rel_wind/1200.0; // FIXME!!!
- _wind->set_volume(volume);
- set_playing("wind", true);
- } else {
- set_playing("wind", false);
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Update the stall horn.
- ////////////////////////////////////////////////////////////////////
-
- double stall = _stall_warning_prop->getDoubleValue();
- if (stall > 0.0) {
- _stall->set_volume(stall);
- set_playing("stall", true);
- } else {
- set_playing("stall", false);
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Update the rumble.
- ////////////////////////////////////////////////////////////////////
-
- float totalGear = min(cur_fdm_state->get_num_gear(), MAX_GEAR);
- float gearOnGround = 0;
-
-
- // Calculate whether a squeal is
- // required, and set the volume.
- // Currently, the squeal volume is the
- // current local down velocity in feet
- // per second divided by 10.0, and
- // will not be played if under 0.1.
-
- // FIXME: take rotational velocities
- // into account as well.
- for (int i = 0; i < totalGear; i++) {
- if (cur_fdm_state->get_gear_unit(i)->GetWoW()) {
- gearOnGround++;
- if (!_gear_on_ground[i]) {
- double squeal_volume = cur_fdm_state->get_V_down() / 5.0;
- if (squeal_volume > 0.1) {
- _squeal->set_volume(squeal_volume);
- mgr->play_once("squeal");
- }
- _gear_on_ground[i] = true;
- }
- } else {
- _gear_on_ground[i] = false;