Replace the single ethereal loop with the operator's chosen set — Music for Manatees, Dewdrop Fantasy, Eastminster, Overheat, Concentration (Kevin MacLeod, CC BY 4.0, drumless). The Music source now plays one track and every 5 min crossfades to a random OTHER track (pure HEFScrub.pickNextIndex, never an immediate repeat), altitude-independent, reusing the two audio elements; both primed in-gesture for Safari. Intervals injectable via window.__hefMusicRotateMs / __hefMusicXfadeMs. Media loudness-normalized + transcoded under the 25MB LFS limit (build_audio_media MUSIC), committed via LFS; ethereal loop retired. CC-BY attribution added to credits.html. Docs updated (music-candidate-pool = final set; audio-candidate-pool ethereal section superseded). +2 node unit (pickNextIndex), +2 e2e (music-playlist), audio-source spec updated. 40 unit + 49 e2e green; live probe confirms playback + rotation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8.5 KiB
Audio candidate pool — rotating pools per altitude (2026-06-26)
Candidate soundtrack/ambience for the "audio + video" setting. Following operator
feedback, each altitude now has a rotating pool (mirrors the video Scale.pool
model — random pick per landing, or pairable per-clip).
Two audio layers per altitude (operator, 2026-06-26)
The "audio + video" setting layers two kinds of audio per altitude:
- Ambience / audio track — the soundscape (waves, reef crackle, chorus, etc.). This is what we're sourcing now.
- Music track — a separate composed musical layer. Shipped (2026-07-01) as the Audio-dropdown "Music" option: unlike the earlier per-altitude idea, it is now one single ethereal loop played the same at every altitude (see § Music below).
Pools below are the ambience layer unless marked music. Distinction (operator):
the ambience/soundtrack layer is an environmental, real-world soundscape (waves, reef,
whale, room-tone hum) — not composed music. A musical pad/track, however nice, belongs
in the music layer, even for "atmospheric" altitudes like cosmos/orbit.
Media is gitignored (simulator/sample_media/**/*.{wav,mp3,…}); this file is the
re-sourceable record. Files: simulator/sample_media/audio/<altitude>/<name>.<ext>,
served at /media/audio/<altitude>/<name>.<ext>. Review gallery (gitignored):
simulator/static/review_audio.html → /review_audio.html with the sim running.
Round-2 feedback applied (operator, session 2026-06-26)
- abyss ✓ kept (blue-whale moan) · coast ✓ kept (waves + terns)
- cosmos ✗ plasma static "hurt my ears" → replaced with 3 NASA sonifications
- orbit ✗ whistlers "sound like lasers" → replaced with gentle Earth chorus (+ wind)
- reef ✗ "shouldn't have whales (too deep for a reef)" → whale removed; now crackle + diver
- Operator: "try all three… rotation of audio like the video, or per-video audio track."
Design arc
Descending the dial is one journey: cosmos & abyss = vast/dark/sparse siblings; coast = warm human middle; orbit & reef = transitional membranes. The science recordings (NASA/NOAA) keep the "machines reshaping perception" thesis literal.
Pools
| altitude | id | clip | source | dur | license |
|---|---|---|---|---|---|
| 🌌 cosmos | cosmos/pillars |
✓ KEEP — Pillars of Creation (M16), twinkly sweep | NASA/CXC/SAO — https://chandra.si.edu/sound/m16.html (sounds/m16_all.mp4) |
30s | PD (NASA, credit) |
| 🌌 cosmos | cosmos/music |
🎵 music track — TBD (deferred). Black-hole drone DROPPED (too creepy, not awe-inspiring); Galactic Center dropped earlier | — | — | — |
| 🛰 orbit | orbit/spaceamb |
✓ KEEP — station room-tone hum ("inside the orbiting craft") | Sonicfreak — https://freesound.org/s/174450/ (cdn.freesound.org/previews/174/174450_746632-hq.mp3) |
2:31 | CC0 |
| 🛰 (music) | deferred | 🎵 "Frozen Star" warm pad — moved to MUSIC layer (it's music, not ambience) | Kevin MacLeod / incompetech — https://incompetech.com/music/royalty-free/mp3-royaltyfree/Frozen%20Star.mp3 | 3:41 | CC-BY |
| 🐠 reef | reef/soundscape |
✓ richer reef (round 4) — 6-layer bake: submerged underwater bed (bubbles/sloosh) + shrimp crackle + fish chorus + toadfish + grouper + damselfish | NOAA SanctSound (FK+GR *_snappingshrimp_*, FK02_01_fishchorus, GR01_01_toadfish, FK03_01_redgrouper, PM05_01_damselfish) + DCSFX "Underwater [Loop] AMB" https://freesound.org/s/366159/ (cdn.freesound.org/previews/366/366159_6725579-hq.mp3); loop-to-60 + amix + dynaudnorm |
60s | PD (NOAA) + CC0 (underwater) |
| 🏖 coast | coast/waves |
Sea waves + tern calls | BigSoundBank #0267 — https://bigsoundbank.com/sea-waves-and-seagulls-s0267.html (/UPLOAD/mp3/0267.mp3) |
57s | CC0 |
| 🕳 abyss | abyss/whale |
NE Pacific blue-whale "AB call" | NOAA PMEL — https://www.pmel.noaa.gov/acoustics/multimedia/NETS_bluWhale.wav | 13s | PD (NOAA) |
Music (the Audio-dropdown "Music" option)
SUPERSEDED 2026-07-02: the single ethereal loop below was replaced by a rotating crossfading playlist of mellow drumless synth (Kevin MacLeod, CC BY) — see
docs/music-candidate-pool.md. The ethereal-loop record is kept for history.
(history) ethereal loop — shipped 2026-07-01, then replaced
One ethereal ambient loop, played the same at every altitude (altitude-independent — NOT the per-altitude idea the "cosmos/music" / "Frozen Star" rows above reserved; those stay as historical candidates). The operator's brief: ethereal, relaxing — like innerflo.me. CC0 (operator's sourcing choice), so attribution is courtesy, not required.
| id | clip | source | dur | license |
|---|---|---|---|---|
music/ethereal |
✓ KEEP — "Ambient F Sharp Minor Ethereal Choir Pad 1": blurry, paulstretched layered choir — "peaceful, magical, soothing" | deadrobotmusic — https://freesound.org/people/deadrobotmusic/sounds/808032/ (hq preview: cdn.freesound.org/previews/808/808032_*-hq.mp3) |
3:38 | CC0 |
Production: simulator/build_audio_media.py SOURCES["music"] → seamless loudness-normalized
loop at audio/music/ethereal.loop.mp3, served /media/audio/music/ethereal.loop.mp3
(client fallback: app.js MUSIC_FALLBACK). Download the sound page's WAV/MP3 to
simulator/sample_media/audio/music/ethereal.mp3, then python simulator/build_audio_media.py.
Sourcing rule (learned 2026-06-26)
Source only from a browsable page the operator can open and whose license is stated.
The Mixkit clips were pulled by raw CDN asset id (assets.mixkit.co/.../<id>-preview.mp3)
with no findable catalog page — operator couldn't see them, so they were removed. Good
hubs: NASA SVS / Chandra, NOAA PMEL/SanctSound (PD), BigSoundBank (CC0), Pixabay
(visible license). Avoid asset-id grabs and ND/NC licenses.
Open items / next pass
- orbit — ✅ SETTLED:
orbit/spaceamb(Sonicfreak station room-tone hum, CC0). Rejected en route: laser whistlers, Earth chorus, plain wind, "Frozen Star" pad (music). A real NASA ISS recording (Hadfield "Space Station Noise", SoundCloud) remains the authentic upgrade if ever wanted — needs a harder fetch (no yt-dlp; brew install denied). - ambience layer COMPLETE — all 5 picked: cosmos/pillars · orbit/spaceamb · coast/waves · reef/soundscape · abyss/whale. Next is the production pass + wiring (below) and the music layer.
- reef — ✅ round-4 6-layer bake (
reef/soundscape): NOAA PD biological layers + a CC0 submerged underwater "you're under" bed (DCSFX freesound #366159, hq preview). License clean. SanctSound clips:files/SanctSound_*.mp4athttps://sanctsound.ioos.us/files/(extract audio). - music layer — ✅ SHIPPED 2026-07-01 as the Audio-dropdown "Music" option, but as
ONE altitude-independent ethereal loop (
music/ethereal, CC0), not the per-altitude track once envisioned. See § Music above. (Thecosmos/music/ "Frozen Star" rows are now historical per-altitude candidates, not planned work.) - Production (after picks): loop seams, length normalization, cross-altitude crossfade (mirror video); cosmos/abyss clips are short → loop.
Re-download / re-bake
A=simulator/sample_media/audio; FF=$(python -c "import imageio_ffmpeg;print(imageio_ffmpeg.get_ffmpeg_exe())")
mkdir -p $A/cosmos $A/orbit $A/reef $A/coast $A/abyss
# NASA sonifications (mp4 -> mp3)
for u in perseus_sonification:blackhole m16_all:pillars galactic_all:galaxy; do
f=${u%%:*}; o=${u##*:}; curl -fsSL "https://chandra.si.edu/sound/sounds/$f.mp4" -o /tmp/$o.mp4
"$FF" -y -i /tmp/$o.mp4 -vn -q:a 4 $A/cosmos/$o.mp3; done
curl -fsSL "https://svs.gsfc.nasa.gov/vis/a010000/a011000/a011073/Earthsong-540-MASTER_high.mp4" -o /tmp/es.mp4
"$FF" -y -i /tmp/es.mp4 -vn -q:a 4 $A/orbit/earthsong.mp3
curl -fsSL "https://assets.mixkit.co/active_storage/sfx/1162/1162-preview.mp3" -o $A/orbit/wind.mp3
curl -fsSL "https://www.nhm.ac.uk/content/dam/nhm-www/discover/audio/sound-of-coral-reef.mp3" -o $A/reef/crackle.mp3
curl -fsSL "https://assets.mixkit.co/active_storage/sfx/1242/1242-preview.mp3" -o $A/reef/scuba.mp3
curl -fsSL "https://bigsoundbank.com/UPLOAD/mp3/0267.mp3" -o $A/coast/waves.mp3
curl -fsSL "https://www.pmel.noaa.gov/acoustics/multimedia/NETS_bluWhale.wav" -o $A/abyss/whale.wav
# layered reef
"$FF" -y -i $A/reef/crackle.mp3 -i $A/reef/scuba.mp3 \
-filter_complex "[1:a]volume=0.55[s];[0:a][s]amix=inputs=2:duration=first,dynaudnorm" -q:a 4 $A/reef/layered.mp3