Speech Packs
A speech pack is the set of cabin announcements pilots hear through ACARS during a flight: what the crew says at boarding, pushback, cruise, the meal service, landing and so on. Each announcement is a line: text read by the flight attendant voice of its language (generated with ElevenLabs), or an uploaded audio file such as boarding music or a chime.
Backoffice path: Flight Attendants → Speech Packs (backoffice/speech-packs)
Available to roles: System Administrator, Administrator
The list
The list shows, for every pack:
| Column | Meaning |
|---|---|
| Phase coverage | One block per trigger, lit when the pack has lines for it, with the trigger and line counts |
| Languages | The languages its lines are written in. A language is flagged when it has no voice (its lines are skipped), has empty lines, or has fewer lines than the pack's main language |
| Plays on | The most specific place the pack is assigned, and at which level. Not assigned — never plays means no flight will ever hear it |
| Active | Inactive packs never play, even where assigned |
The ⋯ menu edits, duplicates (the copy is inactive and unassigned) or deletes a pack.
Creating a pack
Create speech pack opens a two-step dialog:
- Start from a script. Full service, Short-haul and Captain only fill the triggers with standard cabin wording; Blank starts empty. You can also copy an existing pack instead.
- Languages and voices. Pick the languages the pack is spoken in. Every starter line is created once per language, in that order, already written in that language. Each language is read by its voice from the Voices page.
The starter scripts come translated into every supported language. A language the airline added with its own code (a regional variant such as pt-br, for example) is translated by AI the first time; the result is kept, so the same sentence is never translated twice. If a translation is not available, the line is left empty for you to write, and the checks list it. Read the translated lines before you activate the pack: they are a starting point, not approved wording.
The editor
Flight profile
The top of the editor draws a flight from boarding to the gate, with a marker for every trigger. Click a marker to edit its lines; a filled marker has lines, a hollow one is silent. Drag a line card onto a marker to move it to that trigger.
The Sample controls preview the pack on a real schedule of yours: departing by day or by night, with a smooth, normal or hard touchdown. Variables are filled with that flight's values, lines that would not play on it say why, and Fly it plays the whole flight back, line by line.
Plays on opens the pack settings: its name, description, whether it is active, and where it plays.
Triggers
| Trigger | Identifier | When it plays |
|---|---|---|
| Boarding | gate_departure | When boarding starts at the departure gate. With GSX, when GSX starts boarding; otherwise when the flight starts |
| Boarding Complete | boarding_complete | When boarding is finished: GSX boarding complete; without GSX, just before pushback |
| Pushback | pushback | During pushback from the gate: GSX pushback; without GSX, when the aircraft leaves the stand or starts an engine there |
| Taxi | taxi | Taxiing to the runway |
| Climb Out | climb_out | Shortly after take-off, in the climb |
| Passing 10,000ft | passing_10000 | Climbing through 10,000 ft |
| Seatbelt Sign Off | seatbelt_off | Every time the pilot switches the seatbelt sign off in flight |
| Cruise | cruise | On reaching cruise, or at a share of the planned flight time |
| Meal Service | meal_service | In cruise, once per meal service (see below) |
| Seatbelt Sign On | seatbelt_on | Every time the pilot switches the seatbelt sign on in flight |
| Descend | descend | When the descent begins near destination |
| Descending 10,000ft | descending_10000 | Descending through 10,000 ft |
| Final Approach | final_approach | On final approach to the runway |
| After Landing | after_landing | After touchdown and rollout |
| Gate Arrival | gate_arrival | Parked at the destination gate |
| Alternate Declared | alternate_declared | When the flight diverts to an alternate |
Each trigger plays once per flight, except the seatbelt sign, which plays whenever it changes in flight, but not again within the cooldown set on its trigger.
Lines
Each card is one line. Its chips set when it plays within its trigger:
| Chip | Where | Meaning |
|---|---|---|
| Language | Text lines | The language it is written in; the voice set for that language reads it. Languages without a voice are skipped |
| Any time / Day only / Night only | All lines | Day is 06:00–22:00 at the departure airport, local time |
| Any / Smooth / Hard landing | After Landing | Play only after that kind of touchdown. The thresholds are set on the After Landing trigger. A touchdown between smooth and hard plays only Any landing lines |
| On reaching cruise / At 25, 50, 75 % | Cruise | When in the cruise the line plays, as a share of the planned flight time |
| Plays once / Repeats every N min | Boarding | Repeating lines play again on their interval until Boarding Complete. Repeating audio loops between them, which is how boarding music is set up |
Lines of a trigger play in card order, back to back; drag the handle to reorder. Add in another language adds a copy of the line, with the same conditions, in a language that does not have it yet, and fills it with a translation of the line (Translating… shows while it is written). Variables are kept as they are; a translation that loses or adds one is discarded and the copy stays empty. Listen generates the line with its voice (once; it is cached) and plays it. The eye icon disables a line without deleting it.
Audio lines play in every language. The PA microphone effect (band-pass, compression and cabin echo) is applied when the file is uploaded.
Variables
Type { in a line, or use Insert variable, to add a value that changes per flight. A variable that is not in the list is underlined in red and would be read out as written.
| Group | Variables |
|---|---|
| Flight | {flight_number} (digit by digit, in the line's language), {callsign}, {airline} |
| Route | {origin}, {destination}, {origin_airport}, {destination_airport}, {alternate}, {distance} |
| Time | {salute}, {meal}, {flight_time}, {local_time}, {sched_arrival}, {dep_status}, {arr_status}, {delay} |
| Aircraft & crew | {aircraft_type}, {aircraft_name}, {cruise_altitude}, {captain} |
| Weather | {destination_weather}, {destination_temperature} (from the destination METAR) |
Planned times, distance and cruise level come from the SimBrief OFP when the booking has one, and are estimated from the route otherwise. {flight_time} is rounded up to the next 10 minutes (9 h 43 is announced as nine hours and fifty minutes). {local_time}, the statuses, {delay}, {salute} and the weather are worked out when the line plays.
Diversions: after a diversion, {destination} names the alternate in every line. In Alternate Declared lines, {destination} is still the airport the flight was going to and {alternate} the one it now goes to. A pack assigned to the alternate airport as an arrival airport takes over from then on.
Meal service
The Meal Service trigger plays once per service:
- Meal 1 starts a set time after reaching cruise. Its meal follows the departure local time.
- Meal 2 (optional) runs on flights over a set length, a set time before descent. Its meal follows the arrival local time.
- Flights under a set length get one snack service only.
Breakfast, lunch and dinner each have a local-time window; outside them the meal is a snack. Write lines under Every meal to play at every service (use {meal} to name it), and under a meal's tab for that meal only; at a service, the Every meal lines play first.
Checks
The checks panel lists what will not play as you might expect: silent triggers, a meal service with no lines, empty lines, unknown variables and languages without a voice. Click one to go to it.
Where a pack plays
A pack plays on flights matching any of its assignments. Several packs can match one flight; they are combined trigger by trigger:
-
The packs that match the flight are taken level by level, most specific first:
Priority Level 1 (highest) Aircraft 2 Arrival airport 3 Departure airport 4 Subfleet 5 Fleet 6 (lowest) Airline -
For each trigger, the first pack in that order with at least one active line for it supplies all of that trigger's lines, in its own order. Lines of less specific packs for that trigger are not played.
-
A trigger that pack has no lines for falls through to the next level.
So an airline pack can supply most triggers while an arrival-airport pack with only After Landing lines replaces the After Landing announcements, and an aircraft pack with only Cruise lines replaces the Cruise ones. To change one announcement of a trigger for an aircraft or an airport, the override pack must carry every line that trigger should play there, not only the changed one.
- Inactive packs and disabled lines are ignored. A pack whose lines for a trigger are all disabled does not take that trigger; it falls through.
- Packs on the same level (two airline packs, for instance) are not ranked against each other: which one plays is arbitrary. Do not assign overlapping packs on the same level.
- Meal Service is one trigger: the pack that wins it supplies all the meal lines, both Every meal and the per-meal ones.
- After a diversion the flight's arrival becomes the alternate, so a pack assigned to the alternate as an arrival airport takes over its triggers from then on.
- The same rule applies everywhere a pack plays: the announcements Airspace sends to older ACARS versions, the pack current ACARS versions download, and the editor's sample flight.
How ACARS plays the announcements
Current ACARS versions download the flight's pack when the flight starts and play each line themselves at the right moment: from the aircraft's seatbelt sign, GSX boarding, the touchdown and the flight's progress. They show what is playing and why in their Flight Attendant tab.
Older ACARS versions keep working as before: Airspace detects the flight phase from position reports and sends them the audio to play. They do not get the seatbelt-sign lines, and hear Boarding Complete just before pushback and the first meal service in cruise.
See ACARS API v2 for the endpoints.
Generated audio
Text is generated with ElevenLabs once per sentence, voice and text, then cached, so lines without per-flight variables cost credits only once. Changing a line's text or its language's voice generates it again the next time it plays.