What's new in 00.02.10
- 00.02.10 — Scrubbing drives the scope, the plate and the archetype/glyph resonance from the clip at the playhead, forward or backward.
- 00.02.09 — Saved detections are matched to the call library and the species catalogue (signature, band, kind) and carry the result; ≈ re‑matches any kept recording.
- 00.02.09 — Life gate saves every isolated detection to the browser database as WAV (pre‑roll, source, score), downloadable.
- 00.02.09 — Life gate: streams and live input pass only detected calls and click trains; noise floor learned, ship rumble filtered, plate rests on noise.
- 00.02.08 — True picks: real infrasound recordings (MBARI MARS 2 kHz fetched in‑app; AAD Antarctic, Antarctic Peninsula CC0) and eight more archives; Keep stores recordings in the browser; ÷10 preset for sped‑up archive clips.
- 00.02.07 — Walk mode: step slowly through calls and their rhymes by hand or on a timer; the playhead is grabbable and scrubs with audio.
- 00.02.06 — Install as an app from Settings (with iPad instructions), share button, maskable icons and a proper share card drawn from the J₁₂ plate figure.
- 00.02.05 — Guide: why a teleprompter hood shows a pane instead of a ghost, and how to turn one into a stage (strip the box, mask the edges, dark depth behind, a real object at the image distance).
- 00.02.04 — Reflector setup wizard with test patterns (orientation, size, black level, motion) and saved forms.
- 00.02.03 — Single‑pane ghost mode (one view for a sheet at 45°), and a reflector build guide: teleprompter hoods, acrylic pyramids, acetate in a plexi frame, cutting tables.
- 00.02.02 — Tempo mode: slow or speed a clip with every frequency held (granular time‑stretch); tape mode still shifts pitch.
- 00.02.01 — Ogham and Celtic signs (triple spiral, triquetra, ringed cross, Awen) join the glyph rhymes, each dated; Indigenous forms drawn procedurally; lists re‑render only when the signature changes.
- True render — the real, unshifted infrasound on your subwoofer (main output) or on a second device for a shaker plate, an ES‑9 or a tank. Sub‑only mode, adjustable sub high‑pass, 16 Hz test tone. ∿ Subsonic → ⏚ True render, and ⚙ Settings.
- Subsonic mode — infrasound noted for the ear as a binaural beat on a carrier (or octaves ↑3), marked below hearing / felt with the true frequency.
- Transport — pause holds the sand; drag the waveform to isolate one phrase; speed 0.25–16× as tape; Space toggles play.
- Link devices — laptop controls, iPad or a second monitor displays the ghost, synchronized.
- Settings ⚙ — every knob, audio devices, ghost tuning, persistence.
- Glyph rhymes — Egyptian signs, Sanskrit lotus syllables with their petal letters, Indigenous forms, Ogham and Celtic signs (with honest dates), Chinese, runic and Greek forms matched on symmetry, with overlays.
- Guide, onboarding, key coach — this panel, also published at
/guide.
The guide reopens on this page once per version. Close it and it stays closed until the next release.
Start here
Whalesong Rosette turns whale and dolphin sound into the figure sand would make on a vibrating circular plate, then asks what that figure rhymes with.
- Start the engine. The first sperm‑whale coda model begins looping and the sand starts to move. Audio needs a tap first — browsers insist.
- Pick a source. Eight built‑in call models work anywhere. Drop a WAV from Watkins on the plate, paste a URL, stream Orcasound live, or route a hydrophone through line‑in.
- Watch the sand settle. It collects on the nodal lines of the combined plate modes. The fold tile is the rotational symmetry, rings the radial order.
- Read the resonance list. Rose windows, mandalas, yantras and girih stars ranked by geometric similarity. Tap one to lay it over the plate.
- Isolate a phrase. Drag on the waveform strip to loop just that stretch; grab the playhead's tab to scrub; pause to hold the figure; slow it down or speed it up.
- Walk. ⋯ Walk steps through the calls and, for each, its rhymes — arrow keys, or ▷ auto for a slow unattended tour.
- Draw your own. ✎ Draw by intuition: sketch inside the circle, analyse it, hear it sonified, and see which calls in the library come closest.
- Go below hearing. ∿ Subsonic finds 3–60 Hz, notes it as a binaural beat, and marks it as below hearing. ⏚ True render sends the real frequency to your subwoofer so you feel it.
- Take it to the glass. ◈ Pepper's ghost draws the figure for a four‑sided pyramid or a single pane at 45° — a tablet teleprompter hood, or acetate in a plexi frame; the ghost's ⚒ setup wizard checks your glass with test patterns and saves it as a form; the guide's Ghost & linking page says what to buy or cut. ⇄ Link devices drives an iPad or a second monitor from this one.
- Install it. ⚙ Settings → Install (or Share → Add to Home Screen on iPad) puts the rosette icon on your home screen and opens it full‑screen, offline‑capable.
- Tune it once. ⚙ Settings holds every knob and your audio devices; it remembers. The ? button brings this guide back; Key coach is in it.
Space bar toggles play. Esc leaves the ghost. Nothing you do here is uploaded anywhere; keys and settings stay in this browser.
Sources & archives
Every source feeds one analyser, so the plate does not care where sound comes from.
Built‑in call library
Synthesized from the published structure of each call — inter‑click intervals for codas, contour and harmonic stack for orca and humpback, FM sweep for a signature whistle. They are models, useful because they run offline and always sound the same. Blue and fin are pitched up eight times because their real calls are below the plate and below hearing; Subsonic mode is for the real recordings.
True picks
Recordings with real infrasound in them, for the subwoofer and the plate. The MBARI MARS hydrophone in Monterey Bay is the best of these: ten‑minute 24‑bit WAV files at 2 kHz on a public bucket — the whole 0–1000 Hz band, a few megabytes each, every ten minutes since 2015. fetch pulls one straight into the plate; if the bucket refuses a browser, the link downloads it and you open it. The Australian Antarctic Division's annotated blue‑and‑fin library and the CC0 Antarctic Peninsula 0–125 Hz set are the cleanest baleen infrasound in the open.
Archive "sound clips" (NOAA, DOSITS) are often sped up ×10 so people can hear them. The ÷10 speed preset in tape mode puts them back where the whale put them.
Your own recording
Open or drop any audio file. Keep stores the current file or fetched recording in this browser's own database, so it is there next visit without redeploying anything; ✕ forgets it. Files you ship in data/samples/ and list in its manifest appear here as buttons when the site is served.
Life gate
A live hydrophone is mostly water and ships. ⌁ Life gate listens for life and passes only that: it learns the noise floor of the stream over a few seconds (falling fast, rising slowly, so brief calls never become "floor"), then scores each moment two ways — a tonal score for a narrow peak standing well above the floor between 300 Hz and 16 kHz (whistles, moans, pulsed calls), and a click score for three or more sharp onsets within a second in the 2–20 kHz band (sperm clicks, echolocation). A broadband rise with a flat spectrum — a ship passing, flow noise — scores nothing. Above the sensitivity the gate opens, holds for a couple of seconds after the call, and closes; while closed the monitor is silent, the sand rests, and the true‑render rig is muted. A high‑pass (300 Hz by default) removes rumble while open. The meter on the button shows the live score; ⚙ Settings has sensitivity, hold, rumble cut and the last detections.
Saved detections. While the gate is on, a ring buffer taps the raw stream and every opening is cut — one second of pre‑roll, up to sixty seconds — normalised, encoded as 16‑bit WAV and stored in the browser's own database next to your kept recordings, named by time, kind and length and tagged with the source and score. They appear under Your own recording marked ⌁, play back into the plate like any file, download with ↓, and forget with ✕. The newest sixty are kept; older auto‑saves make room. Nothing leaves the browser.
Matched to what is known. As each detection is saved, its plate signature is computed offline and compared with the call library by the same measure the drawing uses, and its dominant frequency and kind (tonal or clicks) are checked against every species' band and call types in the catalogue. The card then reads, for instance, 12‑fold/2 · 3.2 kHz · ≈ Sperm whale coda 5R 71% · band: Orca / Pilot whale. The ≈ button does the same for any kept recording and shows the nearest calls under the signature. It is a resemblance of form and band, not an identification — a trained detector's job.
It is a heuristic, not a trained detector: it will open for a creaking mooring or a boat's sonar ping and miss a faint distant call. For the real thing, Orcasound's OrcaHello and Earth Species' NatureLM are trained models; this gate is what a browser can do alone.
Archives
Choose a species and the panel lists the archives that hold it, with a direct link and a note on whether a browser may fetch audio from it:
| Archive | Holds | From the browser |
| Watkins (WHOI) | ~15,000 cuts, 60+ species, 1940s on | download the WAV, then open it here |
| Orcasound | live Salish Sea hydrophones + archive | streams in place (Stream button) |
| Pacific Sound (MBARI) | continuous deep‑sea hydrophone, Monterey | open bucket — paste a file URL |
| NOAA PMEL | curated clips with spectrograms | per‑page links |
| NCEI passive acoustics | terabytes of raw sanctuary recordings | open bucket — paste a file URL |
| Macaulay Library | curated cuts | streams only in their player — route through line‑in |
| DOSITS | one reference clip per species | open web |
| Earth Species Project | ML datasets incl. a Watkins subset, NatureLM | GitHub / Hugging Face (token for gated sets) |
| Project CETI | coda annotations, no audio yet | paper repository |
| Freesound | CC crowd recordings | search and preview here with an API key (see Key coach) |
| IMOS / AAD | Southern Ocean passive acoustics | AODN portal |
A host that refuses cross‑origin audio is not a bug here — download the file and open it. The catalogue lives in data/catalogue.json; edit it and the panel follows without a rebuild.
The plate
Sprinkle sand on a plate, bow its edge, and the grains flee the moving regions and gather where the surface stands still — the nodal lines. Ernst Chladni drew these in 1787; the CymaScope at cymaticslabs.com photographs the same standing waves on water.
For a circular membrane the standing waves are known exactly. Each mode has m nodal diameters and n nodal circles, its shape is Jm(jm,n r) · cos(mθ), and its pitch rises with the square of the Bessel zero jm,n. Low modes are simple crosses and rings; high ones are fine rosettes.
The app finds the strongest peaks in the incoming spectrum, assigns each to the mode whose eigenvalue is nearest, and sums the fields with weights from the peaks' levels. Sand is a particle simulation: each grain slides down the gradient of the squared displacement with a little jitter proportional to loudness, so silence freezes it and a loud call shakes it loose.
- Sand grains — more grains draw finer lines and cost more CPU.
- Drive — how hard the plate is shaken; low drive lets delicate figures survive.
- Modes tracked — how many spectral peaks are allowed to shape the field. One mode gives a textbook Chladni figure; six gives a whale.
- Nodal lines — draws the zero set of the field directly, useful when the sand is still travelling.
The plate is idealized (a free circular membrane). A real steel plate has edge conditions that shift the pattern, and water adds surface tension. Same physics, simpler medium.
Reading the signature
Fold is the rotational symmetry of the dominant mode: 12‑fold means the figure repeats twelve times around the circle. Rings is its radial order. m = 0 modes have no diameters, only concentric rings, and are shown as "rings".
The tracked modes table lists each peak's frequency, its mode, and its weight relative to the strongest. In Subsonic mode infrasonic rows are marked in amber with the true frequency and a below hearing or felt chip.
Archetype resonance scores twenty‑one circular archetypes against the signature. Symmetry match counts for 72 %: exact fold scores full, a divisor or multiple (6 against 12) scores about half, a neighbour scores a little. Ring‑count closeness is the other 28 %. Tap an archetype to overlay its geometry on the plate.
Glyph rhymes
Below the archetypes, signs from writing systems whose form carries a rotational symmetry — matched on that symmetry and nothing else. Egyptian: 𓇳 rꜥ the sun disk (rings), 𓊖 niwt the quartered circle for "town" (4‑fold), 𓇼 sbꜣ the five‑pointed star. Sanskrit: the tantric lotuses, whose petal counts are fold numbers — Mūlādhāra 4 (लं), Svādhiṣṭhāna 6 (वं), Maṇipūra 10 (रं), Anāhata 12 (यं), Viśuddha 16 (हं), Ājñā 2 (ॐ) — each petal carrying a letter of the alphabet, after the Ṣaṭ‑cakra‑nirūpaṇa. Indigenous forms, drawn rather than typed because Unicode has no glyphs for them: the Zia sun (four rays to each direction), the Maya k'in day‑sign, the Nahua ollin at the centre of the Sun Stone, the Western Desert concentric‑circle site sign, the Māori koru, Hopi sun faces, and the Akan Adinkra Adinkrahene and Nsoromma. Chinese 日 田 米 回, the dharmacakra, the hexagram, the hail rune, theta.
Druidic? The druids left no writing, so the app says what each Celtic sign actually is: Ogham (4th–6th‑c. Irish; letters named for trees in the medieval Auraicept na nÉces — duir the oak shares its root with "druid"), matched by stroke count, one to five, against the fold; the triple spiral of Newgrange (c. 3200 BCE, two millennia before any druid); the triquetra and ringed cross of the Insular period; and the Awen /|\ of the Druid revival (Iolo Morganwg, 1792), which modern orders use. Each card carries its date.
Some of these are living sacred signs. The Zia Pueblo asks that its sun not be used commercially without permission; the app shows it as a form and says so on the card. Meanings given are the communities' own published ones, kept short.
Tap a glyph to lay it on the plate. A lotus also writes its petal letters around the rim at its own fold, so a twelve‑fold whale figure wears the twelve Anāhata letters — anāhata, "the unstruck sound", being the tradition's own word for a tone with no source. That is a rhyme, not a reading: the plate knows symmetry orders, not meanings.
The archetypes are drawn procedurally from their symmetry, not copied from photographs: a twelve‑petal rose with three tiers stands for Chartres, nine interlocking triangles for the Sri Yantra, eleven broken circuits for the labyrinth.
Drawing & sonify
✎ Draw by intuition flips the plate into a canvas. Sketch anything inside the circle — a window you remember, a figure from a dream, a doodle. Analyze drawing samples it on 28 rings, runs a Fourier transform around each ring to find its rotational symmetry, counts ridges along the radius for its ring order, and builds a signature from the strongest components.
The sand then settles into that signature without any audio, the archetype list re‑ranks, and a second list shows the nearest calls in the library — which whale would have drawn what you drew. Tap one to hear it.
♪ Sonify plays the drawing: each mode's eigenvalue is mapped back to a frequency and sounded as a sine for a few seconds. A four‑fold drawing sounds lower than a sixteen‑fold one, because on a plate it is.
Transport & speed
Walk
⋯ Walk steps slowly through the calls and, for each, through its rhymes. ← → move between calls; the sand is given three seconds to find the figure, then ↑ ↓ move through the ranked archetypes and glyphs, each laid over the plate with its name, origin and score. ▷ auto lets it run on its own — a call every 15 s to 2 min, the rhymes shown in turn inside that time — which is the mode for a gallery wall or a ghost left running. Picking a call from the library while walking keeps the walk in step.
The strip under the plate is the loaded clip. The amber band is the loop region. The bright line is the playhead: it has a small tab at the top — grab it and drag to scrub, forward or back. The scope, the tracked modes, the sand and the archetype and glyph lists all read the clip at the playhead as it moves — a windowed spectrum taken from the file at that instant, not from what the speaker is doing — so a coda can be read click by click and a moan's sweep watched change fold as it rises; you hear short grains under your finger. Let go and playback resumes from there if it was playing.
- Drag across the strip to isolate one phrase — one coda, one moan — and loop only that. Double‑click to return to the whole clip. Click to seek.
- ❚❚ pauses. A paused plate is a still plate: the sand holds where it is so you can read or photograph the figure. Space does the same.
- Speed has two modes, switched by the small button beside it. Tape: pitch follows rate — ½× lets a fast dolphin whistle be heard as contour; 8× lifts a 16 Hz blue‑whale call to 128 Hz; the readout shows semitones. Tempo: the clip slows or speeds but every frequency stays put, so the plate figure holds while a coda's clicks spread apart. Tempo is a granular time‑stretch (46 ms grains, half overlap); below about ¼× it takes on a soft, phasey grain, which is the price of the trick.
- Loop off plays the region once and stops.
- Monitor mic lets you hear a microphone or line‑in source; it is muted by default to stop feedback. Use headphones.
Streams (URL, Orcasound) support pause and speed but not region looping — there is no clip to scrub. Speed and loop are also in ⚙ Settings, where they persist.
Subsonic
A blue whale's B call sits near 16 Hz; a fin whale pulses at 20 Hz. Human hearing gives out around 20 Hz, and no laptop or tablet speaker goes anywhere near it. Open such a recording and you will see the plate move and hear nothing — which is correct, and unsatisfying.
∿ Subsonic adds a second analyser with a long window (32,768 points, about 1.5 Hz resolution) watching 3–60 Hz. Each infrasonic peak it finds:
- becomes a plate mode, so the figure is shaped by the whale's real fundamental;
- is noted for the ear, by one of two human approximations;
- is marked everywhere as below hearing (under 20 Hz) or felt (20–60 Hz), with its true frequency shown.
Binaural beat (headphones)
The left ear receives a carrier tone (default 200 Hz); the right ear receives the carrier plus the true sub‑frequency. The brain perceives the difference as a beat — so the pulse you feel is the whale's own 16 Hz. The second and third peaks ride carriers a fifth and an octave above. Nothing is transposed; the rate is real. Needs headphones, since the two ears must hear different tones.
Octaves ↑3
Each peak is played eight times higher as a sine. Pitch relations between peaks are kept; rates are eight times too fast. Works on speakers.
True render
Proxies are for the ear. To feel the real frequency, turn on ⏚ True render under the proxy row: the unshifted infrasound goes to the main output, where your subwoofer takes it. True render & rigs in this guide has the subwoofer checklist and the specs for plates, DC‑coupled interfaces and tanks.
The ×8 library models are already audible, so Subsonic finds little in them beyond pulse‑rate sidebands. It is for the real recordings: Pacific Sound, NCEI, a Watkins blue‑whale cut. Keep speed at 1× when the sub is doing the work.
Pepper's ghost & linking
Pepper's ghost is the Victorian stage illusion: a bright image reflected in an angled sheet of glass appears to float in the dark behind it. A four‑sided clear pyramid on a flat tablet does the same in four directions at once.
◈ Pepper's ghost turns the plate field into a slowly turning wireframe relief drawn four times around a black centre, each copy mirrored and rotated so its reflection stands upright on its face of the pyramid. Loud calls raise the relief. The ground is pure black, which on an OLED means the pixels are simply off.
Linking two devices
⇄ Link devices makes one device the controller — sources, transport, sliders — and any number of others displays. What travels is the plate's mode signature, a few dozen bytes about twelve times a second; displays run their own sand and need no audio.
- Same computer, second monitor: press Open a display window, drag it to the other screen, press F11. It links through a broadcast channel — no network at all.
- iPad or another computer: open
/?ghost=CODE there, or type the code after tapping ⇄ on that device and choose displays. The link is WebRTC peer‑to‑peer; the public PeerJS cloud only introduces the two devices.
Spin, tilt, view size, mirror and grain brightness are in ⚙ Settings → Pepper's ghost and persist per browser — tune them on the display device.
Setup wizard
In the ghost, ⚒ setup opens a coach that runs on the display device: it shows test patterns in the ghost's own geometry — an arrow and an R for orientation and mirroring, a circle for size and centring, grey steps for black level, a turning relief for spin and tilt — offers the fix for each thing you see wrong, and saves the result as a named form ("iPad teleprompter", "27″ OLED pyramid") to pick later in ⚙ Settings → Reflector form. Run it once per reflector.
Two reflectors
The ghost has two layouts, switched in the ghost's own corner button or ⚙ Settings → Reflector. Pyramid: four views around a black centre for a four‑sided pyramid. Single pane: one large view for a single sheet of glass or plastic at 45° — the original 1862 stage geometry, and the simpler build. Set which edge of the screen the pane stands at; the view's top points that way so the reflection stands upright.
Why 45°
With the screen flat and the pane at 45°, the virtual image stands vertical behind the pane, at the same distance behind it as the screen is below it. Any other angle leans the figure and shortens it by the cosine of the error; with four faces it also stops them agreeing. Hold 45° and use Tilt for taste.
Existing forms that already work
| Form | Layout | Notes |
| iPad / tablet teleprompter hood (Glide Gear TMP100‑class, Padcaster, generic "iPad teleprompter") | single pane — glass and holder only | The best glass you can buy: a 60/40 or 70/30 beamsplitter at 45°, 4–8× brighter than acrylic, no double image. But as sold it does not make a ghost: the tablet sits ~15 cm under the glass, so the image forms ~15 cm behind it — inside the hood's own box — and the shroud and frame tell your eye where the glass is. You see text on a pane, not a figure in space. Strip it to the base plate, the 45° holder and the glass (see Turning a hood into a stage). |
| Smartphone teleprompter (Parrot‑class, Elgato Prompter) | single pane | Same geometry for a phone; Elgato is a monitor‑style unit, better for a laptop feed than a flat screen. |
| "3D hologram pyramid" for tablets (acrylic, sold for 7–13″ screens) | pyramid | Truncated four‑sided pyramids, faces at 45°, 1–2 mm acrylic. Check the listing says 45° (some are 60°). Sizes for iPad mini, iPad, and 12–13″. |
| Phone pyramid (the CD‑case classic) | pyramid | Four trapezoids from a jewel case; fine for a phone as the display device. |
| Acrylic slant‑back sign holder (8.5×11″, 11×17″) | single pane, with a shim | Most are 60–70° from horizontal; tilt the whole holder back on a wedge until the face is 45°, or use it as the frame for an acetate insert (below). |
| Acrylic photo frame / block frame | single pane frame | A rigid clear frame to hold thin film — see the acetate build. |
Turning a hood into a stage
A ghost needs three things a teleprompter deliberately removes: invisible glass edges, a dark space behind the glass with depth, and something real for the image to stand among. The image always forms behind the glass at the same distance the screen is below it, so the fix is to give it room there.
- Strip the hood. Keep the base, the 45° glass holder and the beamsplitter. Remove the cloth shroud and the camera box entirely, so you can look through the glass into the room.
- Hide the edges. Mask the glass frame and holder with matte black gaffer tape or black felt. Any visible edge or reflection of the holder pins the glass in place and kills the illusion.
- Build the dark behind. Black velvet or felt as a backdrop 30–60 cm behind the glass — further than the image depth, so the figure floats in front of nothing. Kill room light; a single dim lamp on the real object, none on the glass.
- Put something real there. This is the stage trick that makes it a ghost rather than a screen: a small object at the image depth — a model whale, a stone, or best, the real sand plate from the true‑render rig — so the wireframe hovers above a physical thing your eye can focus on. Both are the same distance from you, so they fuse.
- Deepen if needed. Raising the glass on risers (screen further below) pushes the image further behind and makes the float more convincing; 20–25 cm below → 20–25 cm behind. Brightness falls with the square of distance, so an OLED screen at full brightness helps.
- Run ⚒ setup with the glass in place: pane at the far edge, mirror as the R test says, size to fit the glass with black around it.
A pyramid works because its faces meet in the dark centre with nothing behind them but each other; a single pane has to manufacture that darkness. Do that, and the beamsplitter outperforms any acrylic pyramid.
Making a single reflector: acetate in a plexi frame
Thin film beats thick acrylic here: a 3 mm sheet reflects from both surfaces and gives a double image; 0.1–0.2 mm acetate has one effective surface. Acetate alone sags, so it lives inside a rigid clear frame.
- Frame. An acrylic photo frame or two strips of 3 mm plexi with a 45° slot cut along one edge (a table saw or a router with the fence at 45°; a hobby shop will do it). Or a slant‑back sign holder shimmed to 45°.
- Film. Overhead‑projector acetate or clear PET (0.1–0.2 mm), cut 10 mm larger than the view on each side. Tape it flat to the frame's back face with clear tape at the edges only; keep the centre untouched.
- Angle. Set the frame so the film is 45° to the screen: a 45° wedge of foam board behind it, or two plexi triangles (equal legs) as feet. Check with a phone level.
- Placement. Screen flat, pane standing at the far edge (or set the edge in Settings). The figure appears floating behind the pane; put matte black card behind it so the ghost hangs in nothing.
- Room. Dark. The ghost is only as bright as the screen and as invisible as the room is black. On an OLED the ground is truly black; on an LCD, drop the screen's black level.
Cutting a pyramid yourself
Four identical trapezoids. For 45° faces the slant height equals (base − top) ÷ 2 × √2. Sizes that fit common screens:
| Screen | Base | Top | Slant height | Film |
| phone | 60 mm | 10 mm | 35 mm | CD case or 0.5 mm PET |
| iPad mini | 110 mm | 20 mm | 64 mm | 0.5–1 mm PET/acrylic |
| iPad 11″ | 150 mm | 25 mm | 88 mm | 1 mm acrylic |
| 27″ OLED, laid flat | 300 mm | 50 mm | 177 mm | 2 mm acrylic, taped inside corners |
Tape the faces edge‑to‑edge from the inside with clear tape; the base and top stay open. If reflections read backwards, flip Mirror views in ⚙ Settings.
True render & rigs
Proxies let you hear a 16 Hz call. A true render lets you feel it. ⏚ True render sends the actual infrasonic frequencies — unshifted — to a second output, for whatever can move at that speed.
How the signal is made
- Clean sines at detected peaks — up to three oscillators at the true frequencies the subsonic analyser found, levelled by their strength. Best for shakers and plates: pure tones make pure Chladni figures.
- Recording, low‑passed below 60 Hz — the actual audio through a 4th‑order low‑pass, so a blue whale's B call arrives with its own envelope and its harmonics. Best for subwoofers and tanks.
- Either way the rig gets a high‑pass set by the rig profile (0 Hz for a DC‑coupled interface), a brick‑wall limiter, then the level control. The main monitor still carries the binaural or octave proxy; the rig gets the truth.
- Output routing needs a browser that can pick a device per element (Chrome, Edge, Chromium). Safari sends everything to the system default — there, set the rig's interface as the system output and use headphones on the interface's second pair for the proxy.
Rig 1 — a plate that vibrates at the whale's frequency
A real Chladni plate at 16 Hz is a tactile‑transducer job, not a loudspeaker job. Ranges below are from the makers' datasheets; check the current sheet before buying.
| Part | Spec that matters | Examples |
| Tactile transducer | rated response reaching 5–10 Hz; force, not SPL | ButtKicker LFE (5–200 Hz, 400–1500 W amp), ButtKicker Mini Concert (5–200 Hz), Dayton Audio BST‑1 (≈5–150 Hz, 50 W), Clark Synthesis TST429 (≈5 Hz–17 kHz) |
| Plate | aluminium 1.5–3 mm or acrylic 3 mm, 300–500 mm round; centre‑mounted on the transducer stud, edge free | a free edge gives the Bessel modes this app assumes; clamp the edge and the figure changes |
| Amplifier | stable into the transducer's impedance, flat to ≤ 5 Hz, DC‑safe | ButtKicker BKA300 / BKA1000, or a sub plate amp with its high‑pass defeated |
| Interface / DAC | most audio interfaces are AC‑coupled and roll off around 5–10 Hz — fine for 16–20 Hz, not for 3 Hz | any interface for 15 Hz and up; Expert Sleepers ES‑9 (DC‑coupled) for the full range |
| Sand | fine, dry, light: table salt, semolina, or 0.3–0.5 mm sand; avoid dust | a raised rim (tape) keeps it on the plate at high drive |
Scale: a 16 Hz figure on a 400 mm free plate is a very low mode — expect one or two nodal circles, not a rosette. The rosettes belong to the kilohertz calls, which any small full‑range driver can excite on a plate. Two rigs make the whole range: a shaker for the baleen whales, a small speaker under a thin plate for the dolphins.
Rig 2 — a subwoofer on the main output (the default)
With a sub in the system nothing extra is needed: the true‑render chain joins the main output and the system crossover sends everything under ~80 Hz to the sub. Setup, once:
- On the receiver or the sub's plate amp: crossover 80 Hz (or LFE), phase 0°, and if there is a subsonic filter set it to its lowest (10–15 Hz) — this is the switch that usually hides the whales.
- In the app: ∿ Subsonic on → ⏚ True render on, route main output, signal recording < 60 Hz, level 50 %. Press 16 Hz test: the cone should move visibly and slowly; you should feel it rather than hear it.
- Sealed box: lower the sub high‑pass to 10 Hz in ⚙ Settings. Ported box: leave it at 15 Hz or higher than the port tuning — below tuning the driver unloads.
- Tick sub only to mute the binaural/octave proxies and feel the call bare; untick to hear and feel together (the beat on headphones, the pressure from the sub).
- Level: to where the chest feels it, no further. Infrasound is uncomfortable (pressure, queasiness) long before it is harmful, and long exposure at high level is not worth it.
Speed still applies: at 1× the sub gets the whale's real 16 Hz; at 8× the call moves up into the proxy range and the sub goes quiet. Keep 1× for the true render.
Rig 3 — DC‑coupled interface (your ES‑9 plan)
The ES‑9's outputs pass DC, so the app's true render can drive it to 0 Hz with the high‑pass off. From there: a CV‑able bass shaker amp, an Eurorack VCA into a transducer amp, or straight into a modular patch where the whale's 16 Hz becomes a clock or an LFO. That is the most interesting place this signal can go.
Rig 4 — underwater, in a tank
| Projector | Approximate range | Note |
| Lubell LL916 / LL9162T | ≈ 200 Hz – 23 kHz | pool speakers; no infrasound |
| Electro‑Voice UW30 | ≈ 100 Hz – 10 kHz | the classic; dolphin whistles yes, baleen no |
| Clark Synthesis AQ339 Diluvio | ≈ 20 Hz – 17 kHz | a tactile transducer in a housing — the one consumer unit that reaches the fin‑whale band |
| Navy‑type J‑9 / J‑11 projectors | ≈ 40 Hz / ≈ 20 Hz upward | research gear, heavy, costly |
The low‑frequency limit is physics: to radiate 16 Hz in water you need to move a lot of water, and a tank shorter than a wavelength (≈ 90 m at 16 Hz) does not support the wave at all — you get pressure oscillation, which a hydrophone still reads. For demonstration that is enough: hydrophone in the tank, its output back into this app, and the plate shows the round trip.
Never in open water. Playing cetacean calls into the sea is playback harassment under the U.S. Marine Mammal Protection Act and similar law elsewhere, and can draw animals toward boats. Tanks, pools and plates only.
Recorded here for future implementation
- Rig profiles, output device, signal type and level persist in ⚙ Settings → True render.
- The 16 Hz test tone is a 3 s ramped sine into the same chain, for wiring checks.
- Planned: per‑rig calibration (measure the plate's response with the mic and pre‑emphasise), a CV/gate output mode for the ES‑9, and a hydrophone round‑trip view.
Key coach
Most of this tool needs no key at all — the plate, subsonic, true render, the subwoofer, device links and the open archives all work without one. Three things do, and each one lives somewhere different. Keys you paste here stay in this browser's local storage and never enter the site folder or the zip.
Coaching order: start with none. Add Freesound only when you want to search recordings from inside the app; Hugging Face only for a gated dataset; Cloudflare only if you deploy from a machine that cannot open a browser for wrangler login. ⚙ Settings → Keys shows which are stored.
Rules of the road
- A key in
site/ is a key on the internet. The deploy script's FORBIDDEN list refuses .env and .dev.vars for that reason.
- Browser‑side keys (Freesound, Hugging Face read tokens) are visible to anyone who opens your page's dev tools. Use the least‑privileged scope, and revoke and re‑issue if you ever paste one into a shared screen.
- Deploy keys (Cloudflare) belong in your shell, never in a page.
deploy.sh reads them from the environment.
- Rotate a key whenever it has been in a screenshot, a chat, or a commit.
Deploy
The package is a deploy kit: deploy.sh (never edited), deploy.conf (this project's settings), DEPLOYMENT.md (why the script is paranoid), and site/ — exactly what goes live.
unzip v00.02.10_WhalesongRosette.zip && cd v00.02.10_WhalesongRosette
./deploy.sh --check # validate, publish nothing
./deploy.sh # publish to production, verify over the wire
./deploy.sh --verify # what is live right now?
First time: npx wrangler login, then npx wrangler pages project create whalesong-rosette --production-branch whalesong-rosette, then add whalesongrosette.org under Custom domains.
The script treats wrangler's "Success" as a claim: it cd's into site/ so the wrong folder cannot be published, refuses a stale build unless the APP_VERSION marker is present, pins the production branch, then curls the live domain for the marker.
Release checklist
- Edit
site/index.html; bump APP_VERSION.
- Bump
CACHE in site/sw.js to match, or returning visitors keep the old app.
- Update the version markers in
deploy.conf.
./deploy.sh --check, then ./deploy.sh.
Install, icon, share card
The site is a PWA: manifest.webmanifest (name, standalone display, rosette icons in any and maskable forms, a screenshot for the install sheet) and sw.js (offline shell). Install from ⚙ Settings → Install, the browser's install button, or on iPad Safari → Share → Add to Home Screen. Installed, it opens full‑screen with the icon, which is also how the ghost loses the browser chrome. Link previews on Slack, iMessage, X and LinkedIn use assets/share-card.png (1200×630) through the Open Graph and Twitter tags in the head; the favicon and apple‑touch‑icon are the same rosette, a real J12 plate figure.
Served over https the site gains Orcasound, bucket fetches, microphone on iOS, offline caching and install. From file:// the models, file drop, drawing and the ghost still work.
What this is not
It is not a translator, and the archetype match is not evidence of meaning. A sperm‑whale coda that settles into a twelve‑fold rosette is not "saying" Chartres. What the plate shows is that a click rhythm and a Gothic mason arrive at the same small family of symmetries, because both are constrained by the same mathematics of a circle. That is interesting on its own terms.
The real decoding work — Project CETI's coda alphabet, DolphinGemma, NatureLM‑audio — is about grounding: pairing sound with who made it, to whom, doing what. This tool has no context channel at all. Use it as an instrument for looking, and as a reason to go listen to the recordings themselves.
The call models are synthesized approximations, labelled as such. Direct‑file URL patterns in the catalogue were compiled from each archive's documentation and are flagged verify until you confirm one. Subsonic proxies are human approximations of things humans cannot hear, and the app says so on every row.