Files
SciFi-XZBT/telemetry_elements.md
T
ClaudeandClaude Haiku 4.5 97b0faa4a6 Add sound reference documentation and fix air-handler/docking-clamp duplicate
- Add sound_reference.md (937 lines): Real-world production reference covering Star Trek (TOS–ENT), Doctor Who/Whoniverse, Bioships (six ships across five franchises), and Space Stations (six stations across five sources).
- Add agents.md: Project architecture guide (file ownership, load order, conventions).
- Add telemetry_elements.md: Catalog of 10 telemetry elements with per-era selection weights and preset-by-preset routing.
- Add visual_elements.md: Canvas/SVG split architecture, layer declarations, per-theme casts.
- Fix duplicate soundboard mapping: Separate 'AIR HANDLER THUD' from 'DOCKING CLAMP LATCH'. Create ExpandedSciFiAudioSynth.synthesizeAirHandlerThud() (dull triangle-wave thump + sub-octave + slow airflow whoosh) distinct from synthesizeDockingClamp() (bright square-wave impact + pneumatic hiss). Update js/app.js to wire btn-air-handler to the new method.

Key findings:
* All 70 presets across 10 universes use Star Trek telemetry eras only — cross-universe borrowing is structural, not accidental.
* Doctor Who TARDIS demat correctly implements Brian Hodgson's 1963 technique (piano strings + tape feedback).
* Sevastopol Station's production sound design (Jeff van Dyck, Pinewood foley) is the best-documented non-Trek entry.
* The Expanse's "jury-rigged" Belter signature (Nelson Ferreira) is the single most actionable production detail found.

Co-Authored-By: Claude Haiku 4.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NbMozG2xjcgLBia8vrzTrr
2026-09-04 05:08:04 +00:00

344 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 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% |
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. In practice every preset in every universe
uses one of these five Trek eras, so non-Trek themes play Trek telemetry — see
[Preset → telemetry era reference](#preset--telemetry-era-reference) for the
full per-preset mapping.
---
## The activity event contract
Every scheduled telemetry sound dispatches a window event **after** it plays:
```js
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.
---
## 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.
---
## Related but not telemetry
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. All 70 presets across all 10 universes currently use one of the five
Star Trek eras, so non-Trek universes play Trek telemetry: a retrofuture profile
can chatter in TOS warbles, and a living-ship profile can ring with the
Cardassian sensor tone. 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% |
### 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 — ds9 ×1 · nx ×1 · tng ×2 · tos ×1 · voyager ×2)
| Preset | Era | Elements heard |
| --- | --- | --- |
| 1963 Classic Console (1st / 2nd Doctors) | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Victorian Secondary Console (4th Doctor) | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| The Coral Living TARDIS (9th / 10th Doctors) | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| The Copper Workshop (11th Doctor) | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| The Cold Machine (12th Doctor) | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| The Singing Crystal Console (13th Doctor) | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| The Infinite White (14th / 15th Doctors) | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
### Industrial (8 presets — ds9 ×1 · nx ×3 · tos ×3 · voyager ×1)
| 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 | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| 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 — ds9 ×1 · nx ×2 · tng ×1 · voyager ×2)
| Preset | Era | Elements heard |
| --- | --- | --- |
| Moya: Leviathan Central Nexus | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Talyn: Gunship Neural Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| The Lexx: Primary Organ Bridge | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Vorlon Cruiser: Sentient Core | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| Wraith Hive Ship: Throne Chamber | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Species 8472: Fluidic Bioship | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
### 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 — ds9 ×1 · nx ×2 · tng ×1 · tos ×1 · voyager ×1)
| 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 | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| Ceres Station: Sub-Crustal Tunnels | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| 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** spans all five eras across its seven presets — the widest
spread of any universe, and the most likely place to hear something
unexpected.
- **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.
- **Bioships** has no acoustic relationship to any Trek era; `Talyn` on `ds9`
produces the Cardassian tritone tone inside a living-ship profile.
- **Comedy** and **Spaceball One** on `tos` produce the analog warble.
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 five 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), not a change to
these preset assignments alone — the router has nothing else to offer them.