Skip to content
View in the app

A better way to browse. Learn more.

The AVSIM Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

So you loved those old "FSX/P3D MD-11 callouts"?

Featured Replies

Well, you can have them back more or less faithfully. I made something in LUA that enables you to have them all back, but i am not prepared to give any support for this. Use it if you know how to.

You will need to extract the original PMDG MD-11 sound files (i cannot provide them obviously) from an original installation. Place them in a folder in your main FSUIPC directory called "TFDiMD11_Callouts".

The sounds will need to be renamed (i wanted to do so for my personal use) according to the callouts in the LUA script below. It's pretty straightforward. IF you want to keep the original filenames, rename them in the script instead.

 

If you want to use the names in the script, for each line with "play_callout" like this => play_callout("sound") you will need to have a file in the TFDiMD11_Callouts folder named "sound.wav".
So, for 80 knots for example play_callout("80_knots"), rename the original PMDG MD-11 sound for "80 knots" to 80_knots.wav and put it inside the TFDiMD11_Callouts folder. Easy eh?

To use it, place the .lua script in the FSUIPC root folder, call it whatever you like and have it load up automatically like this in FSUIPC.ini (bottom section):

[Auto]
1=Lua <your script name>

for

"your script name.lua". Do not put .lua in the FSUIPC.ini entry.

Now all you have to do is enjoy going back to the past with these actually real nice callouts from Mr Randazzo himself.

 

NOTE: Not all sounds are 100% accurate in placement. You will notice "reverse thrust available", "localizer's alive" and "glideslope's alive" have some trickery going on to have them play at more or less the right situation. Improvements can be made to detect these accurately, but this works good enough for me. If anyone wishes to improve on this, go ahead, this is posted here for the community.

I hope this is useful for anyone out there, it sure brought back memories of the good old days.

Enjoy!

 

local acft = ipc.readSTR(0x3C00, 256)
local acft_l = string.lower(acft)

if not string.find(acft_l, "tfdi_design_md-11", 1, true) then
    ipc.log(">>> Not an MD-11, exiting")
    ipc.log("aircraft: " .. acft)
    ipc.exit()
end

ipc.log(">>> TFDi MD-11 detected, starting callouts")

local last_sound_played = nil -- prevents simultaneous duplicate callouts
local reverse_pending = false
local called = {}
local sounds = "TFDiMD11_Callouts/"
local tick = 0
local has_been_airborne = false
local has_touched_down = false
local loc_time = 0
local prev_gs = 0

local function bit_is_set(value, bit)
    return math.floor(value / (2 ^ bit)) % 2 == 1
end

function once(name)
    if not called[name] then
        called[name] = true
        return true
    end
    return false
end

function md11_fast()

    local ias = ipc.readSD(0x02BC) / 128
    local on_ground = ipc.readUW(0x0366) == 1
    local vs = ipc.readSD(0x02C8)
    local gs = ipc.readDBL(0x6030) * 1.9438444924574

    -- Configured MD-11 MCDU Speeds
    v1_speed = ipc.readLvar("md11_v1")
    vr_speed = ipc.readLvar("md11_vr")
    local v1vr_delta = vr_speed - v1_speed

    -- AIRBORNE DETECT
    if not on_ground then
        has_been_airborne = true
    end

    -- TOUCHDOWN DETECT
    if has_been_airborne and on_ground and not has_touched_down then
        has_touched_down = true
    end

    -- THRUST SET
    if on_ground and ias >= 60 and once("thrust_set") then
        play_callout("thrust_set")
    end

    -- 80 KNOTS
    if ias >= 80 and once("80_knots") then
        play_callout("80_knots")
    end

    -- V1 (Do not play if too close to VR to avoid overlap)
    if v1_speed > 0 and ias >= v1_speed and v1vr_delta > 4 and once("v1") then
        play_callout("v1")
    end

    -- ROTATE
    if vr_speed > 0 and ias >= vr_speed and once("rotate") then
        play_callout("rotate")
    end

    -- POSITIVE RATE
    if not on_ground and vs > 300 and once("positive_rate") then
        play_callout("positive_rate")
    end

    -- 60 KNOTS (landing rollout – GS crossing)
    if has_touched_down
       and prev_gs > 60
       and gs <= 60
       and once("60_knots") then

        play_callout("60_knots")
    end

    prev_gs = gs
    md11_loc_gs_check()
end

function md11_slow()

    local on_ground = ipc.readUW(0x0366) == 1
    local ap = ipc.readLvar("md11_ap_state")
    local gear = ipc.readUW(0x0BE8)
    local spoilers = ipc.readLvar("MD11_EXT_R_SPOILER_1")

    -- GEAR UP
    if not on_ground and gear == 0 and once("gear_up") then
        play_callout("gear_up")
    end

    -- AUTOPILOT
    if not on_ground and ap > 0 and once("autoflight") then
        play_callout("autoflight")
    end

    -- SPOILERS DEPLOYED
    if on_ground and spoilers > 30 and once("spoilers") and has_touched_down then
        play_callout("spoilers_deployed")

        reverse_pending = true
        event.timer(3000, "md11_reverse_thrust_callout")
    end

    md11_flap_slat_check()

end

function md11_reverse_thrust_callout()
    if reverse_pending then
        play_callout("reverse_thrust_available")
        reverse_pending = false
    end
end

-- helper to play a sound safely
function play_callout(name)
    if last_sound_played ~= name then
        sound.play(sounds .. name .. ".wav")
        last_sound_played = name
    end
end

-- ================= FLAPS / SLATS (FINAL) =================

local last_flap_rng = nil

function md11_flap_slat_check()

    local flap_rng = ipc.readLvar("MD11_FLAP_RNG")
    local on_ground = ipc.readUW(0x0366) == 1

    -- initialise
    if last_flap_rng == nil then
        last_flap_rng = flap_rng
        return
    end

    -- ================= SLATS EXTENDED =================
    -- CLEAN → FLAPS 0
    if last_flap_rng == 0 and flap_rng == 20 then
        play_callout("slats_extended")
    end

    -- ================= FLAPS UP =================
    -- Any FLAPS → FLAPS 0
    if last_flap_rng > 20 and flap_rng == 20 then
        play_callout("flaps_up")
    end

    -- ================= SLATS RETRACTED =================
    if last_flap_rng == 20 and flap_rng == 0 then
        play_callout("slats_retract")
    end

    -- ================= FLAP POSITION =================
    if flap_rng ~= last_flap_rng then
        if flap_rng == 70 then play_callout("flaps_28") end
        if flap_rng == 82 then play_callout("flaps_35") end
        if flap_rng == 100 then play_callout("flaps_50") end
    end

    last_flap_rng = flap_rng
end

-- ================= ILS STATE =================
local loc_announced   = false
local gs_announced    = false

local loc_detect_time = nil
local gs_detect_time  = nil

-- ================= ILS CHECK =================
function md11_loc_gs_check()

    local nav_flags = ipc.readUB(0x0C4A) -- NAV1 flags
    local gs_flag   = ipc.readUB(0x0C4C) -- GS alive
    local now       = ipc.elapsedtime()

    -- LOC is considered alive only if both bits are stable
    local loc_alive =
        bit_is_set(nav_flags, 1) and
        bit_is_set(nav_flags, 7)

    -- ================= LOCALIZER =================
    if loc_alive and not loc_announced then

        -- first time we see it → arm timer
        if not loc_detect_time then
            loc_detect_time = now
        end

        -- stable for 5 seconds → announce
        if (now - loc_detect_time) >= 10000 then
            play_callout("localizer_alive")
            loc_announced   = true
            loc_detect_time = nil
        end

    else
        -- signal dropped → reset
        loc_detect_time = nil
    end

    -- ================= GLIDESLOPE =================
    if gs_flag == 1
       and loc_announced
       and not gs_announced then

        -- arm GS timer
        if not gs_detect_time then
            gs_detect_time = now
        end

        -- stable for 5 seconds → announce
        if (now - gs_detect_time) >= 10000 then
            play_callout("glideslope_alive")
            gs_announced   = true
            gs_detect_time = nil
        end

    else
        -- GS dropped or LOC not confirmed → reset
        gs_detect_time = nil
    end
end


function md11_main()
    tick = tick + 1

    md11_fast()        -- every tick (IAS, on-ground)

    if tick % 4 == 0 then   -- every 1 second
        md11_slow()
    end
end

event.timer(250, "md11_main")


 

Edited by Nuno Pinto

CASE: Fractal Terra Silver CPU: AMD R5 7800X3D 5.0Ghz RAM: 32GB DDR5 6000 GPU: nVidia RTX 4070 Ti SUPER · SSDs: Samsung 990 PRO 2TB M.2 PCIe · PNY XLR8 CS3040 2TB M.2 PCIe · VIDEO: LG-32GK650F QHD 32" 144Hz FREE/G-SYNC · MISC: Thrustmaster TCA Airbus Joystick + Throttle Quadrant · MSFS2024 · Windows 11

O Nuno está na Lua 😁

Flying gliders since 1980

Flightsimming since 1992

AMD Ryzen 5600x, 32GB RAM, GPU Nvidia RTX 3060 Ti 8 GB, 1 TB and 500 GB nvme2 SSD drives, HP 27" 60Hz LED monitor @ 1920x1080, T16000, Hotas from old X52 Pro, Saitek Combat Rudder Pro (2010 model)

Do you mean like STABLIZER MOTION 

STABILIZER MOTION

Or do you mean like 200 100 50 etc.

Rhett

7800X3D 96 GB G.Skill Flare  Gigabyte 4090  Crucial P5 Plus 2TB

Thanks.

A bit of nice memory from that good old PMDG MD-11…🙂

I had always found those call-out sounds right after liftoff and especially during the engagement of AUTOFLIGHT and PROF etc., rather pleasing…

  • Author
1 hour ago, Mace said:

Do you mean like STABLIZER MOTION 

STABILIZER MOTION

Or do you mean like 200 100 50 etc.

No, i mean

"Thrust set!" "80 Knots!" "V1!" "Rotate" etc etc just like PMDG's MD-11 had back in the day.

CASE: Fractal Terra Silver CPU: AMD R5 7800X3D 5.0Ghz RAM: 32GB DDR5 6000 GPU: nVidia RTX 4070 Ti SUPER · SSDs: Samsung 990 PRO 2TB M.2 PCIe · PNY XLR8 CS3040 2TB M.2 PCIe · VIDEO: LG-32GK650F QHD 32" 144Hz FREE/G-SYNC · MISC: Thrustmaster TCA Airbus Joystick + Throttle Quadrant · MSFS2024 · Windows 11

  • Author
4 hours ago, jcomm said:

O Nuno está na Lua 😁

LOL you bet!

CASE: Fractal Terra Silver CPU: AMD R5 7800X3D 5.0Ghz RAM: 32GB DDR5 6000 GPU: nVidia RTX 4070 Ti SUPER · SSDs: Samsung 990 PRO 2TB M.2 PCIe · PNY XLR8 CS3040 2TB M.2 PCIe · VIDEO: LG-32GK650F QHD 32" 144Hz FREE/G-SYNC · MISC: Thrustmaster TCA Airbus Joystick + Throttle Quadrant · MSFS2024 · Windows 11

6 hours ago, jcomm said:

O Nuno está na Lua 😁

I gather you're over the moon about having those calllouts back? 😉

11 hours ago, weaklink said:

I gather you're over the moon about having those calllouts back? 😉

No speak Portuguese here...🙂...so, the Google Translator helped...though I believe something essential is always lost in the process of translation...🙂...

12 hours ago, Nuno Pinto said:

No, i mean

"Thrust set!" "80 Knots!" "V1!" "Rotate" etc etc just like PMDG's MD-11 had back in the day.

Does the TDFI MD-11 not have those callouts?

Rhett

7800X3D 96 GB G.Skill Flare  Gigabyte 4090  Crucial P5 Plus 2TB

Just FYI, here are the PMDG MD-11 (specific) set of automated aural callouts (per Deep Dive AI; completeness and accuracy un-verified):

Takeoff and Climb:

  • 80 Knots: Annunciated during the takeoff roll to verify airspeed.
  • V1: Indicates the takeoff decision speed has been reached.
  • Rotate / VR: Signifies the speed to rotate the aircraft nose upward.
  • Positive Rate: Often followed by the landing gear being raised.
  • Stabilizer Motion: A unique MD-11 warning (a "clacker" sound) that triggers during continuous horizontal stabilizer movement

Radio Altitude (Approach/Landing):
The aircraft provides specific height callouts based on radio altimeters to assist with landing flares: 

  • 1000, 500, 400, 300, 200, 100
  • 50, 40, 30, 20, 10
  • Minimums: Triggered based on the pilot-set decision altitude.

Warning and Alert Sounds:
These sounds correspond to system status or emergency conditions: 

  • "Pull Up" / "Terrain": GPWS warnings for ground proximity.
  • "Windshear": Alerts the crew to rapid changes in wind speed or direction.
  • "Sink Rate": Warns of an excessive rate of descent.
  • "Bank Angle": Warns when the aircraft exceeds safe roll limits.
  • Master Warning/Caution: Flashing lights accompanied by distinct aural alerts for system failures (e.g., engine fire, hydraulic failure).

Configuration and Surface Alerts:

  • "Spoilers": Confirms spoiler deployment.
  • "Flaps": Callouts relating to flap and slat configuration.
  • "Landing Gear": Alerts for gear position or movement.
  • Author
42 minutes ago, Mace said:

Does the TDFI MD-11 not have those callouts?

Nope. That's why i made the script, it enriches the cockpit. I particularly liked those voices dunno why.

There is a similar script for the Fenix A320 which inspired me to do this (the fenix script is WAY more complex and elaborated).

CASE: Fractal Terra Silver CPU: AMD R5 7800X3D 5.0Ghz RAM: 32GB DDR5 6000 GPU: nVidia RTX 4070 Ti SUPER · SSDs: Samsung 990 PRO 2TB M.2 PCIe · PNY XLR8 CS3040 2TB M.2 PCIe · VIDEO: LG-32GK650F QHD 32" 144Hz FREE/G-SYNC · MISC: Thrustmaster TCA Airbus Joystick + Throttle Quadrant · MSFS2024 · Windows 11

Lovely idea but I wonder if anyone still has access to the PMDG MD-11, in FS9 or FSX. 😊  Wouldn't you need FS9 or FSX to be installed, in order to extract the sound files?

 

Bill 😎
FS2024 • Currently in 'GA mode' : A2A Comanche 2024 & Aerostar • Black Square C208, Bonanzas, Barons, TBM850, Dukes • COWS DA40 & DA42 • FSW Legacy, C24R Sierra & C414 • Echo Falco F8L • FFX HJET, Visionjet and P180 2024 • Got Friends A32 Vixxen • FSReborn Sirius TL3000, Sting S4 and Piper M500 • Flyboy Rans S6S • Skyward DA50RG • SWS Zenith CH701, RV-8, RV-10, RV-14, PC12 • Milviz C310R • Air Foil Labs Bristell B23 
TrackIR • BeyondATC • PMS GTN Payware • RealTurb • Axis & Ohs • FS Realistic Pro
9800X3D • RTX 3080 • 64GB DDR5-6000
NPPL licence holder in the UK

24 minutes ago, JYW said:

Lovely idea but I wonder if anyone still has access to the PMDG MD-11, in FS9 or FSX. 😊  Wouldn't you need FS9 or FSX to be installed, in order to extract the sound files?

 

Yes, correct, JY.

That’s why Nuno can only tell you how to do it but “cannot provide the sounds obviously” .

My FSX PC with the installed PMDG MD-11 is still around in the basement…though possibly covered by cobwebs by now…🙂…but I can bear to fire it up for a few minutes to recover the sound files, if so needed.

6 hours ago, Nuno Pinto said:

Nope. That's why i made the script, it enriches the cockpit. I particularly liked those voices dunno why.

There is a similar script for the Fenix A320 which inspired me to do this (the fenix script is WAY more complex and elaborated).

Wow! I am surprised the TDFI one doesn't have those callouts.  I remember those from the PMDG days but that was a long time ago!

I wonder if only certain customers had all of those callouts, or just some of them, or if all MD-11's had all of them.  If all had them, maybe TDFI can add them or someone can do a sound set for it.

Rhett

7800X3D 96 GB G.Skill Flare  Gigabyte 4090  Crucial P5 Plus 2TB

I loved the PMDG MD11. Those callouts were great especially APPROACHING MINIMUM and then a really quick Minimum! The whole soundset was top notch.

Edited by Max Kraus

Regards,

Max    

(YSSY)

i7-12700K | Corsair Vengeance LPX 64GB 3600MHz DDR4 | Gigabyte RTX4090 24Gb | Gigabyte Z690 AORUS ELITE DDR4 | Corsair HX1200 PSU

 

Create an account or sign in to comment

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.