-
- // FIXME
- set_playing(crank_names[i], _engine_cranking_prop[i]->getBoolValue());
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Update the wind noise.
- ////////////////////////////////////////////////////////////////////
-
- float rel_wind = cur_fdm_state->get_V_rel_wind(); // FPS
- float airspeed_kt = cur_fdm_state->get_V_equiv_kts();
- if (rel_wind > 60.0) { // a little off 30kt
- // float volume = rel_wind/600.0; // FIXME!!!
- float volume = rel_wind/937.0; // FIXME!!!
- double pitch = 1.0+(airspeed_kt/113.0);
- _wind->set_volume(volume);
- _wind->set_pitch(pitch);
- set_playing("wind", true);
- } else {
- set_playing("wind", false);
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Update the stall horn.
- ////////////////////////////////////////////////////////////////////
-
- double stall = _stall_warning_prop->getDoubleValue();
- double vc = _vc_prop->getDoubleValue();
- if (stall > 0.0 && vc > 30.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(), int(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;
- }
- }
-
- // Now, if any of the gear is in
- // contact with the ground play the
- // rumble sound. The volume is the
- // absolute velocity in knots divided
- // by 120.0. No rumble will be played
- // if the velocity is under 6kt.
- double speed = cur_fdm_state->get_V_equiv_kts();
- if (gearOnGround > 0 && speed >= 6.0) {
- double volume = 2.0 * (gearOnGround/totalGear) * (speed/60.0);
- _rumble->set_volume(volume);
- set_playing("rumble", true);
- } else {
- set_playing("rumble", false);
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Check for flap movement.
- ////////////////////////////////////////////////////////////////////
-
- double flap_position = _flaps_prop->getDoubleValue();
- if (fabs(flap_position - _old_flap_position) > 0.1) {
- mgr->play_once("flaps");
- _old_flap_position = flap_position;
- }
-
-
- ////////////////////////////////////////////////////////////////////
- // Check for gear movement.
- ////////////////////////////////////////////////////////////////////
-
- double gear_position = _gear_prop->getDoubleValue();
- if (gear_position != _old_gear_position) {
- if (gear_position < _old_gear_position) {
- mgr->play_once("gear-up");
- } else {
- mgr->play_once("gear-down");
- }
- _old_gear_position = gear_position;
- }
-
- // TODO: click
-
-}
-
-
-void
-FGFX::set_playing (const char * soundName, bool state)
-{
- FGSoundMgr * mgr = globals->get_soundmgr();
- bool playing = mgr->is_playing(soundName);
- if (state && !playing)
- mgr->play_looped(soundName);
- else if (!state && playing)
- mgr->stop(soundName);