VIPER 11 · NotesFly it →

Note 3 of 15

The loudest thing is silence

A fighter cockpit is quiet. Building the sound of one meant taking almost everything out.

Ask someone to imagine the sound of a fighter jet and they will give you the airshow: a roar that shakes your ribs. Sit inside one, behind a sealed canopy, under a helmet with its earcups and an oxygen mask, and almost all of that roar is gone. The reference clip VIPER 11 grew out of has almost no audible engine at all. Its soundtrack is music, and between the notes, near-silence. Building the game’s sound meant taking almost everything out, and then placing the few things left very carefully.

A mix built around quiet

Every sound in the game runs through a small mixing desk built in the Web Audio API. Each kind of sound has its own bus: music, engine, air, mechanical, the pilot’s breathing, the radio, the menus. The master bus has a deliberately gentle compressor, because the browser’s automatic make-up gain would otherwise lift the quiet floor, and the quiet is the point.

The engine is real: a synthesised low rumble and turbine whine that follow the RPM, blended with generated recordings of idle and full power. But the whole engine is summed at about −21 dB, and then everything outside the cockpit passes through a canopy filter. That filter is a low-pass at 1,400 Hz with a 4 dB boost below 160 Hz: the hull lets the sub-bass through and eats the rest. Once airborne and fast, the engine drops by another 5 dB, and by 16,000 ft it sits about 9 dB below where it was on the runway. You feel it more than you hear it.

Figure 1 · The takeoff, bus by bus

The 82-second scripted takeoff that the audio was designed on, from idle on 21L to level at 16,000 ft. The levels are computed from the script’s own flight state and the game’s gain rules, shown on a relative scale. Gold blocks are radio calls, and the music ducks under each one. Drag or hover to scrub.

Breathing

The loudest thing in the cockpit, most of the time, is you. The pilot breathes through a mask: a slow inhale hiss and the click of the exhale valve, pitched down a little and filtered as if heard through rubber. The rate follows what the jet is doing. On the ground, a breath comes about every 4.3 s. In the climb it is a little quicker, and level at altitude it slows and softens. Breathing pauses while the radio talks and picks up again just after.

Pull more than 2.6 g and the breath turns into strain. Pull harder, toward 4 g and beyond, and the pilot starts the anti-G straining manoeuvre. That is a sharp inhale, a held breath against a closed throat, and a forced exhale, repeated every 2.5–3 s. It is deliberately unvoiced. The generated grunts that were tried first sounded like a video game, so they were cut. The G note explains what drives this.

The radio

The radio calls are the only voices in the game: Nellis Tower clears you for takeoff, hands you to Departure, and Departure asks you to climb to one-six thousand and ident. The lines were generated with ElevenLabs’ text-to-speech using stock voices, then played 7% slower, so that they come out lower and calmer, and pushed through a chain that imitates a UHF radio heard inside a helmet.

Figure 2 · The radio chain

The chain the game builds for every controller’s call, and its frequency response measured with the browser’s own Web Audio filters. The voice runs through two high-passes at 260 Hz, two low-passes at 2.3 kHz, a soft tanh saturation, a fast compressor, a 2 dB presence bump at 850 Hz, and finally the helmet’s earcup at 1.9 kHz. “Canopy” is the filter every sound from outside the cockpit passes through; “In cloud” adds the low-pass that slides toward 700 Hz while you are inside a cloud. The play buttons fetch the real tower line and run it through the same chain, with its key click, carrier hiss and squelch tail.

Each transmission opens with a key click (a 700 Hz tick, 18 ms long) and runs over a faint hiss of carrier noise. It ends with a short squelch burst, the receiver opening for a moment after the carrier drops. The pilot’s own calls come back as sidetone through the same chain, a little cleaner. And the music ducks under every call: it dips 6 dB starting 0.15 s before the key click and comes back up just after the squelch.

Figure 3 · Ducking

The music level around Departure’s 8.6 s “radar contact” call: down 6 dB with a 0.1 s time constant, then back with a 0.45 s release. It is a scheduled duck, not a detector. The game knows exactly when it will key the mic.

The body

Under G the body gets loud. A G-suit inflates, with a generated hiss and thump that follow how fast the pressure rises, and deflates when you let go. As the grey-out sets in, everything outside the mask closes down. The world’s sound slides through a low-pass that falls toward 280 Hz and loses up to 6 dB, while a synthesised heartbeat at 105–125 bpm fades in. The canopy creaks when you snap past 4.5 g, and keeps creaking if you hold 7. The radio and the breathing bypass all of this, because they are the sounds closest to your head.

Clouds get their own treatment. Inside a cloud, the outside sound passes through a low-pass that slides from open to 700 Hz, and gets a long, soft reverb whose impulse response is synthesised from filtered noise, as is the small, tight reverb of the cockpit itself. A bed of cloud noise and a whoosh mark the way in and the way out.

Level at 16,000 ft. By here the engine sits about 9 dB below its runway level, and the breathing has slowed to its calmest rhythm.

The score that waits for the sky

The game includes a small music director, adapted from an earlier beat-aware scheduler, for a score built of sections: pre, drop, lift, swell and open. Flight events cue them. Brake release drops the beat, rotation lifts it, breaking out of the cloud swells it by 2.5 dB over two bars, and the level-off opens it out. Each cue lands on the next bar line, and the first bar line is placed exactly on brake release. If you are slower than the music, a section holds on whole phrases until you catch up, so the music waits for the flight, never the other way round.

To be precise about what ships: the live game currently plays an original synthwave track instead of the generated score. It starts with the tower’s first call, fades in over six seconds, loops, ducks under the radio, and slows to 0.9× for a few seconds after a landing. The director and its cues are still in the code, driving the audio lab and the offline renders.

Where the sounds came from

Almost nothing here is a recording of a real jet. The sound effects (engine, breath, wind, buffet, gear whine, G-suit, cloud) came from about a hundred generations with ElevenLabs’ sound-effects model, and the long beds from a dozen with Stable Audio 2.5, each auditioned in a lab with a mixer and the event timeline. The exceptions are recorded and released into the public domain (CC0) on Freesound. The gear coming up and going down is a composite of five recordings, by kr15h, kyles, Marschal, Ramstar757 and schots, and two cockpit switches come from Moulaythami and cambrianman. Everything else is synthesised live in the browser: the engine’s sub-bass and whine, the runway joints and the nosewheel shimmy, the radio’s click, carrier and squelch, the heartbeat, and every reverb.

Fly it

viperoneone.com

VIPER 11 is a browser flight game: three.js, WebGL2 and Web Audio. Every figure on this page is drawn from the game’s own code and numbers. Made by apek. Follow me @apekshik for what’s next.