Files
SciFi-XZBT/telemetry_elements.md
T
ClaudeandClaude Sonnet 5 292d3cd916 Sync sound_reference.md and telemetry_elements.md with Phase 3 audio work
Phase 3 shipped bespoke who/bioship/belter telemetry eras, the transporter/
flak/breech/docking/tape-spooler/teletype one-shots, and the zocalo/teletype/
heterodyne continuous beds, but the two reference docs still described those
as outstanding gaps or "Phase 3 scope". Add Phase 3 additions sections per
universe and correct the now-stale preset/era tables.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01582UUCEBExzp3oK3Spz1Xx
2026-09-04 17:21:53 +00:00

24 KiB
Raw Blame History

Telemetry Audio Elements

Catalog of the discrete telemetry sounds the application produces. All of them live in TelemetrySynth (js/audio.js, ~line 715) and are synthesized at runtime from Web Audio oscillators, envelopes and filters — there are no samples anywhere in this project.

Telemetry is the "computer chatter" layer: short, non-musical-foreground blips that sit on top of the continuous hull / warp / life-support beds. It is the only audio layer with a density parameter, because it fires as discrete events rather than running continuously.


Element catalog

Element Method Description Where used
LCARS Single Chirp synthesizeLCARSSingleChirp(pitch?) Soft sine touch tone, ~90 ms, gentle 8 ms attack into exponential decay, with a subtle 2% downward pitch glide and a 3.2 kHz lowpass to kill the click. Accepts an optional pitch, which makes it the building block for the other LCARS elements. TNG auto-scheduler (45%), DS9 (50%), soundboard btn-chirp-single / btn-switch-pop, preset-change confirmation while playing, default fallback for any unmapped soundboard or event id
LCARS Double Chirp synthesizeLCARSDoubleChirp() Two single chirps 65 ms apart, second pitch two steps up the LCARS scale (minor third / fourth). The iconic "acknowledged" tone. TNG auto-scheduler (30%), Voyager (60%), soundboard btn-chirp-double, engage/play confirmation for non-Whoniverse, non-bioship universes
LCARS Acknowledgment Sequence synthesizeLCARSSequence() Three chirps at 75 ms spacing drawn from overlapping windows of the LCARS scale — reads as a short data-accept run rather than a single button press. TNG auto-scheduler (15%), soundboard btn-chirp-ack
Sensor Sweep synthesizeSensorSweep() 380 ms sine glide from 12002000 Hz, ramping either up ×1.6 or down ×0.65 at random. Longer and more "scanning" than the chirps. TNG auto-scheduler (10%), Voyager (40%), soundboard btn-chirp-sweep, layered under btn-scanner
TOS Computer Warble synthesizeTOSWarble() 450 ms of detuned triangle + sawtooth (fundamental and its fifth) under a 1422 Hz vibrato LFO, through a Q=3.5 bandpass at 1.2× the fundamental. Vintage 1960s analog computer voice. TOS auto-scheduler (60%)
TOS Relay Click synthesizeTOSRelayClick() 25 ms square wave falling 1400 → 300 Hz. A mechanical solenoid snap, not a tone. TOS auto-scheduler (40%)
Cardassian Sensor Tone synthesizeCardassianSensor() 550 ms pair of sines a tritone apart (×1.414) for deliberate metallic dissonance, base 420620 Hz. Cavernous, alien, unresolved. DS9 auto-scheduler (50%)
NX Hydraulic Relay synthesizeNXRelay() 40 ms triangle falling 750 → 120 Hz. Heavier and duller than the TOS click — 22nd-century industrial rather than mid-century electrical. NX auto-scheduler (50%)
NX Indicator Beep synthesizeNXIndicatorBeep() 80 ms 950 Hz sine with a flat sustain plateau and a fast tail. Plain and utilitarian; no glide, no scale membership. NX auto-scheduler (50%)
TNG Door Chime synthesizeDoorChime() Two overlapping sines, A5 (880 Hz) then D6 (1174.66 Hz) at +160 ms, each with a long 450700 ms decay. The "come in" chime. Soundboard btn-chirp-door only — never fired by the auto-scheduler

The table above is the original five-era Starfleet vocabulary. Phase 3 added three more eras — who, bioship, belter — but they don't fit this table's shape: each fires a multi-event generator (a whole 0.251.4 s phrase of staggered transients per tick) rather than picking one discrete element. They are catalogued in Phase 3 telemetry eras below.


The auto-scheduler

startAutoTelemetryScheduler() self-reschedules after every sound:

baseDelay = 12000 * (1.05 - density)   // ms
interval  = max(800, baseDelay + random(0..4000))
  • density 0 → scheduler does not arm at all (<= 0.01 returns early).
  • density 1 → ~0.6 s base + jitter, floored at 800 ms — a busy bridge.
  • Mid values land in the 212 s range the parameter comment describes.
  • Density comes from the active preset's telemetry.density and is also live on the slider-telemetry-density UI control.

Era routing

playRandomTelemetrySound() picks an element by params.era. Each era draws from exactly two or four elements — this is the table to extend when adding an era or a new element.

Era Elements and weights
tng (also the default) Single Chirp 45% · Double Chirp 30% · Acknowledgment Sequence 15% · Sensor Sweep 10%
voyager Double Chirp 60% · Sensor Sweep 40%
tos Computer Warble 60% · Relay Click 40%
ds9 Cardassian Sensor 50% · Single Chirp 50%
nx Hydraulic Relay 50% · Indicator Beep 50%
who (Phase 3) Dedicated mechanical-telemetry generator — see Phase 3 telemetry eras
bioship (Phase 3) Dedicated organic-telemetry generator — see Phase 3 telemetry eras
belter (Phase 3) Dedicated jury-rigged-telemetry generator — see Phase 3 telemetry eras

Note the era is a telemetry property, not a universe property: it is set per preset in js/config.js (telemetry.era) and is independent of the universe that governs the visuals. Originally every preset in every universe used one of the five Trek eras, so non-Trek themes played Trek telemetry. Phase 3 gave three universes their own dedicated eras instead (Whoniverse → who, Bioships → bioship, and Ceres/Tycho/Rocinante → belter) — the remaining universes still borrow Trek telemetry. See Preset → telemetry era reference for the full, corrected per-preset mapping.


The activity event contract

Every scheduled telemetry sound dispatches a window event after it plays:

window.dispatchEvent(new CustomEvent('scifi-telemetry-activity', {
  detail: { era, density, firedAt }
}));

js/app.js listens for this and calls triggerObservationActivity('telemetry'), which is what synchronizes observation-mode transient visuals to the audio. The visual side deliberately treats the pulse as abstract activity — no specific beep means a specific thing on screen. The observation activity slider then gates whether a given pulse becomes visible:

responseChance = 0.18 + activity * 0.82

Important: only playRandomTelemetrySound() dispatches the event. Elements triggered directly (soundboard, play/stop, preset change) are silent as far as the visual layer is concerned. If a new element should drive visuals, it must either be reachable through the era router or dispatch the event itself.


Pitch material

Two fixed scales are the source of all pitched telemetry. Reuse them rather than inventing loose frequencies — they are what makes the layer sound coherent.

  • lcarsPitches — 12 entries, 880 Hz → 2637 Hz, a pentatonic-flavored set built on perfect fourths and fifths. Used by every LCARS element.
  • tosFrequencies — 9 entries, 440 Hz → 2217 Hz, wider and more angular, matching the era's less "designed" sound.

Unpitched elements (relay clicks, sweeps, the Cardassian tone) generate their own frequencies and intentionally sit outside both scales. The three Phase 3 eras below are unpitched entirely — none of them touch lcarsPitches or tosFrequencies, on purpose: they are meant to sound like mechanisms, not computers.


Phase 3 telemetry eras

Added under audio_gaps.md Phase 3 to give three universes a telemetry vocabulary of their own instead of borrowed Trek chirps. Each is a private method (trailing underscore, by convention for the multi-event generators added in this phase) invoked once per scheduler tick from the same playRandomTelemetrySound() switch as the five Trek eras — but where a Trek era picks one discrete element, each Phase 3 era fires a whole phrase of several staggered transients scheduled on absolute ctx time in a single call.

Era Method (TelemetrySynth) Universe(s) Acoustic output
who synthesizeWhoMechanicalTelemetry_() Whoniverse (all 7 tardis-* presets) 25 transients per tick, drawn at random from: dual-filtered toggle snaps (2045 ms noise pulses through paired bandpass filters), 60120 Hz spring-lever square clicks collapsing in pitch, and damped sine rotary-selector clunks. No electronic beeps.
bioship synthesizeBioshipOrganicTelemetry_() Bioships (all 6 bio-* presets) 24 events per phrase: asymmetric 3090 Hz vascular-surge sine thumps (sometimes with a lub-dub echo beat), high-Q bandpass chitin-snap noise ticks, bandpass-filtered wet bioplasmic fluid pops, and AM-stepped membrane-flutter noise between 300700 Hz.
belter synthesizeBelterJuryRiggedTelemetry_() sta-tycho, sta-ceres (Space Stations) and ind-rocinante (Industrial) 36 events per volley: jittered square relay pulses with randomized micro-dropouts, contact-bounce double/triple clicks, metallic bandpass ticks, and unstable "dying oscillator" clock pings — plus an occasional late catch-up sub-volley mimicking a station clock that skips then recovers.

These three eras are documented in full, with source-material context, in sound_reference.md under each universe's "Phase 3 additions" section.


Signal-chain conventions

Every element follows the same shape. Match it when adding one:

  1. Bail out early on !ctx || !this.gainNode.
  2. Capture const now = ctx.currentTime once and schedule everything relative to it — never use setTimeout for sample-accurate timing (it is used only for the deliberate multi-note spacing in the double chirp and sequence).
  3. Build oscillator → per-voice envelope gain → optional filter → this.gainNode.
  4. Envelopes start at 0.001, linearRampToValueAtTime up, then exponentialRampToValueAtTime down to ~0.0001. Never ramp exponentially to or from exactly zero.
  5. Peak envelope gain stays in the 0.180.35 band so no element dominates the bed. Clicks sit at the top of that range because they are so short.
  6. Explicitly stop() every node at the end of its life. Nothing here loops.

this.gainNode carries the layer volume and connects to am.compressor, so individual elements should never touch master volume or the destination.


Short event sounds for non-Starfleet universes live in sibling classes and are routed by handleSoundboardTrigger() in js/app.js. Check these before adding a new telemetry element — the sound you want may already exist:

  • WhoniverseAudioSynth — sonic screwdriver, fast return, demat switch, telepathic chime, cloister strike.
  • ExpandedSciFiAudioSynth — DRADIS ping, HAL chime, Geiger burst, docking clamp, improbability flip, cheerful door, and the various drive effects.
  • AlertSynth — red/yellow alert cycles and the warp jump swell. Alerts are a separate layer with its own trigger path, not telemetry. They are not purely user-triggered: in Observation Mode the cinematic director's Hull Breach sequence calls alerts.triggerRedAlert('tng') on its own, roughly 6.5 s before restoring the previous state. It is in the sequence pool for the military, outlaw and industrial universes and fires on a random timer (4575 s for the first sequence, 90180 s between later ones). This is the only non-telemetry sound in the app that can start without user action.

Preset changes and play/stop pick between these three families by activeUniverseId — see js/app.js around lines 305365.


Adding or reusing an element

Reuse an existing element when the need is generic UI feedback — the Single Chirp and Double Chirp are explicitly the neutral confirm/acknowledge sounds and are already the fallbacks for unmapped ids. Reaching for them costs nothing.

Invent a new element when the sound must carry era or universe identity that no existing element has. In that case:

  1. Add the method to TelemetrySynth following the signal-chain conventions.
  2. Give it a doc comment naming the era and the physical thing it imitates — every existing element has one.
  3. Wire it into the playRandomTelemetrySound() era switch with an explicit probability, or leave it manual-only (like the Door Chime) if it is too characterful to fire unattended.
  4. If it is manual-only, add a soundboard case in handleSoundboardTrigger() and a button in index.html.
  5. Reuse lcarsPitches / tosFrequencies if the element is pitched and belongs to those eras.
  6. Keep the duration under ~600 ms. This is an ambient layer; anything longer reads as a foreground event and belongs in AlertSynth instead.

Preset → telemetry era reference

telemetry.era is assigned per preset, and it is the only thing that decides which elements the auto-scheduler fires. It is not derived from the universe. Originally all 70 presets across all 10 universes used one of the five Star Trek eras, so non-Trek universes played Trek telemetry: a retrofuture profile could chatter in TOS warbles, and a living-ship profile could ring with the Cardassian sensor tone. Phase 3 broke that pattern for three universes — see Phase 3 telemetry eras above — so Whoniverse, Bioships, and three belter presets (Tycho, Ceres, Rocinante) now have their own vocabulary instead. Everything else below still borrows Trek telemetry; if you hear a sound that seems foreign to the theme you are on, this table is where to look it up.

Era Elements fired
tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
voyager Double Chirp 60% · Sensor Sweep 40%
tos TOS Computer Warble 60% · TOS Relay Click 40%
ds9 Cardassian Sensor 50% · Single Chirp 50%
nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
who who-era mechanical telemetry (see above)
bioship bioship-era organic telemetry (see above)
belter belter-era jury-rigged telemetry (see above)

Starfleet Command (10 presets — ds9 ×2 · nx ×1 · tng ×3 · tos ×2 · voyager ×2)

Preset Era Elements heard
Enterprise-D: Main Bridge tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
Enterprise-D: Main Engineering tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
Enterprise-D: Crew Quarters tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
USS Voyager: Bridge voyager Double Chirp 60% · Sensor Sweep 40%
USS Voyager: Class-9 Warp Core voyager Double Chirp 60% · Sensor Sweep 40%
USS Defiant: Tactical Bridge ds9 Cardassian Sensor 50% · Single Chirp 50%
Deep Space 9: Ops Center ds9 Cardassian Sensor 50% · Single Chirp 50%
Enterprise NCC-1701: Bridge (TOS) tos TOS Computer Warble 60% · TOS Relay Click 40%
Enterprise NCC-1701: Engineering (TOS) tos TOS Computer Warble 60% · TOS Relay Click 40%
Enterprise NX-01: Command Bridge nx NX Hydraulic Relay 50% · NX Indicator Beep 50%

The Whoniverse (7 presets — who ×7, all Phase 3)

Preset Era Elements heard
1963 Classic Console (1st / 2nd Doctors) who who-era mechanical telemetry (25 transients/tick)
Victorian Secondary Console (4th Doctor) who who-era mechanical telemetry (25 transients/tick)
The Coral Living TARDIS (9th / 10th Doctors) who who-era mechanical telemetry (25 transients/tick)
The Copper Workshop (11th Doctor) who who-era mechanical telemetry (25 transients/tick)
The Cold Machine (12th Doctor) who who-era mechanical telemetry (25 transients/tick)
The Singing Crystal Console (13th Doctor) who who-era mechanical telemetry (25 transients/tick)
The Infinite White (14th / 15th Doctors) who who-era mechanical telemetry (25 transients/tick)

Industrial (8 presets — belter ×1 · ds9 ×1 · nx ×3 · tos ×3, 1 Phase 3)

Preset Era Elements heard
USCSS Nostromo: Ore Refinery Bridge nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Serenity: Firefly-Class Cargo Hold tos TOS Computer Warble 60% · TOS Relay Click 40%
Red Dwarf: Main Drive Corridor nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Starbug 1: Cockpit Environment tos TOS Computer Warble 60% · TOS Relay Click 40%
The Raza: Dark Matter Bridge ds9 Cardassian Sensor 50% · Single Chirp 50%
Rocinante: Combat Ops & Epstein Drive belter belter-era jury-rigged telemetry (36 events/volley)
Eagle Transporter: Command Module tos TOS Computer Warble 60% · TOS Relay Click 40%
Valley Forge: Agro-Dome Forest Hub nx NX Hydraulic Relay 50% · NX Indicator Beep 50%

Bioships (6 presets — bioship ×6, all Phase 3)

Preset Era Elements heard
Moya: Leviathan Central Nexus bioship bioship-era organic telemetry (24 events/phrase)
Talyn: Gunship Neural Bridge bioship bioship-era organic telemetry (24 events/phrase)
The Lexx: Primary Organ Bridge bioship bioship-era organic telemetry (24 events/phrase)
Vorlon Cruiser: Sentient Core bioship bioship-era organic telemetry (24 events/phrase)
Wraith Hive Ship: Throne Chamber bioship bioship-era organic telemetry (24 events/phrase)
Species 8472: Fluidic Bioship bioship bioship-era organic telemetry (24 events/phrase)

Retrofuture (8 presets — nx ×2 · tng ×2 · tos ×3 · voyager ×1)

Preset Era Elements heard
Jupiter 2: Upper Deck Astrogator tos TOS Computer Warble 60% · TOS Relay Click 40%
The Liberator: Zen Flight Bridge tos TOS Computer Warble 60% · TOS Relay Click 40%
USS Cygnus: Victorian Engine Hall nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
USS Palomino: Deep Research Pod nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Discovery One: Habitation Centrifuge tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
Dark Star: Bomb Bay & Quarters tos TOS Computer Warble 60% · TOS Relay Click 40%
Gunstar: Tactical Combat Cockpit voyager Double Chirp 60% · Sensor Sweep 40%
The Searcher: 25th Century Flagship tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%

Military (7 presets — ds9 ×3 · nx ×1 · tng ×1 · voyager ×2)

Preset Era Elements heard
USS Sulaco: Conestoga Hangar Deck nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Battlestar Galactica: Combat Information Center (CIC) ds9 Cardassian Sensor 50% · Single Chirp 50%
White Star: Minbari/Vorlon Hybrid Bridge voyager Double Chirp 60% · Sensor Sweep 40%
EAS Agamemnon: Omega Destroyer Bridge ds9 Cardassian Sensor 50% · Single Chirp 50%
Andromeda Ascendant: Command Deck tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
Excalibur: Victory-Class Heavy Combat Core ds9 Cardassian Sensor 50% · Single Chirp 50%
Colonial Viper Mk II: Cockpit Atmosphere voyager Double Chirp 60% · Sensor Sweep 40%

Deep Space (7 presets — ds9 ×2 · nx ×2 · tng ×2 · voyager ×1)

Preset Era Elements heard
The Avalon: Interstellar Cruise Concourse tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
The Nightflyer: Telepathic Corridor ds9 Cardassian Sensor 50% · Single Chirp 50%
USS Ascension: Generation Ship Promenade nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Ark One: Evacuation Ark Bridge voyager Double Chirp 60% · Sensor Sweep 40%
Icarus II: Solar Shield Core tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
Event Horizon: Gravity Singularity Core nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Lewis & Clark: Rescue Cutter Bridge ds9 Cardassian Sensor 50% · Single Chirp 50%

Outlaw (6 presets — ds9 ×1 · nx ×1 · tos ×2 · voyager ×2)

Preset Era Elements heard
The Betty: Salvage Freighter Mess nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Bebop: Living Quarters & Hangar tos TOS Computer Warble 60% · TOS Relay Click 40%
Outlaw Star: Grappler Bridge voyager Double Chirp 60% · Sensor Sweep 40%
Scorpio: Wanderer Salvage Vessel tos TOS Computer Warble 60% · TOS Relay Click 40%
The Marauder: Havoc Shuttle Bridge ds9 Cardassian Sensor 50% · Single Chirp 50%
The Milano: M-Ship Cockpit Lounge voyager Double Chirp 60% · Sensor Sweep 40%

Space Stations (6 presets — belter ×2 · ds9 ×1 · nx ×1 · tng ×1 · tos ×1, 2 Phase 3)

Preset Era Elements heard
Babylon 5: Core Control & Zocalo ds9 Cardassian Sensor 50% · Single Chirp 50%
Moonbase Alpha: Main Mission Control tos TOS Computer Warble 60% · TOS Relay Click 40%
Sevastopol Station: Habitation Deck nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Tycho Station: Asteroid Construction Bay belter belter-era jury-rigged telemetry (36 events/volley)
Ceres Station: Sub-Crustal Tunnels belter belter-era jury-rigged telemetry (36 events/volley)
Gateway Station: Quarantine Transfer Deck tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%

Comedy (5 presets — nx ×1 · tng ×2 · tos ×1 · voyager ×1)

Preset Era Elements heard
USS Orville: Command Bridge tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
NSEA Protector: Beryllium Engine Room voyager Double Chirp 60% · Sensor Sweep 40%
Heart of Gold: Improbability Bridge tng Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10%
HMS Camden Lock: Flight Deck & Mess nx NX Hydraulic Relay 50% · NX Indicator Beep 50%
Spaceball One: Mega-Warship Bridge tos TOS Computer Warble 60% · TOS Relay Click 40%

Notes on the spread

  • Starfleet is the only universe where the era always matches the fiction.
  • Whoniverse and Bioships no longer borrow Trek eras at all as of Phase 3 — every preset in both universes runs its own dedicated era (who, bioship).
  • Space Stations and Industrial are mixed: Tycho, Ceres (Space Stations) and Rocinante (Industrial) run the Phase 3 belter era; the rest of both universes still borrow Trek eras.
  • Retrofuture leans on tos (3 of 8), which is at least era-plausible for mid-century-styled ships, but Discovery One and The Searcher are on full TNG LCARS. Untouched by Phase 3's telemetry-era work.
  • Comedy, Outlaw, Deep Space, and Military are entirely Trek-era telemetry, also untouched by Phase 3.

Two consequences worth keeping in mind when editing:

  1. Changing a preset's telemetry.era silently changes which sounds it makes. There is no UI anywhere that names the active era, so the change is audible but not visible.
  2. Any era value outside the eight above falls through the switch in playRandomTelemetrySound() to the tng default. A typo does not fail loudly — it just produces LCARS chirps.

If a universe should stop borrowing Trek telemetry, the fix is a new era vocabulary (new elements plus a new case in the era router) — exactly what Phase 3 did for who, bioship, and belter — not a change to preset assignments alone; the router has nothing else to offer them otherwise.