Earcon Workshop: static earcon family generator with WAV/JSON export (unheard) #9

Merged
aqua merged 2 commits from aqua/earcon-workshop into main 2026-11-06 05:36:47 +00:00
Member

What

tools/earcon-workshop: a static, dependency-free page that generates a family of short earcons (events: success, fail, warning, message, done, waiting; identities: warm bell, glass chime, soft triangle, muted pluck, from the Dings catalog). Audition each or the family, five sliders (tempo, transpose, brightness, decay, level), export WAVs (16-bit mono, offline render), pack.json, or a zip with both plus a README on CI, chat bots and apps. cli.mjs does the same export from a shell.

Entry points: web/earcon.js (engine), web/index.html, test.mjs, README.md.

Check

node tools/earcon-workshop/test.mjs: 882 checks passed locally. Per identity x event at default and two slider extremes: non-silent, onset < 20 ms, sample and true peak < 1.0 (cap 0.9), no clipping, sibling spectral distance >= 8 dB (closest pair 13.8 dB), identity-vs-identity distance, determinism, WAV and ZIP round trips.

Unheard and unverified

  • Nobody has listened to any earcon. Signal checks do not say anything sounds good, pleasant, or distinguishable in a room. A human ear is needed (follow-up recorded).
  • A headless Chromium loaded the page, ran the family audition (no audio device), downloaded the zip, no console errors. No person has used it on a display.
  • Not the playground's Faust engine: that needs the wasm compiler, not dependency-free. The voices are a JS reimplementation of the Dings instruments' ideas and will not sound like the shipped Dings.
  • The distance metric and threshold were changed after the first run (documented in test.mjs and the README): the first averaging diluted differences with shared silence; motifs for warning, message, waiting and fail were also reworked. Real finding on the way: true-peak overs from FM aliasing at the bright/high extreme, fixed with a two-pole 9 kHz lowpass.
  • WAV only; no Ogg, no custom motifs.

🤖 Generated with Claude Code

## What `tools/earcon-workshop`: a static, dependency-free page that generates a family of short earcons (events: success, fail, warning, message, done, waiting; identities: warm bell, glass chime, soft triangle, muted pluck, from the Dings catalog). Audition each or the family, five sliders (tempo, transpose, brightness, decay, level), export WAVs (16-bit mono, offline render), `pack.json`, or a zip with both plus a README on CI, chat bots and apps. `cli.mjs` does the same export from a shell. Entry points: `web/earcon.js` (engine), `web/index.html`, `test.mjs`, `README.md`. ## Check `node tools/earcon-workshop/test.mjs`: 882 checks passed locally. Per identity x event at default and two slider extremes: non-silent, onset < 20 ms, sample and true peak < 1.0 (cap 0.9), no clipping, sibling spectral distance >= 8 dB (closest pair 13.8 dB), identity-vs-identity distance, determinism, WAV and ZIP round trips. ## Unheard and unverified - **Nobody has listened to any earcon.** Signal checks do not say anything sounds good, pleasant, or distinguishable in a room. A human ear is needed (follow-up recorded). - A headless Chromium loaded the page, ran the family audition (no audio device), downloaded the zip, no console errors. No person has used it on a display. - Not the playground's Faust engine: that needs the wasm compiler, not dependency-free. The voices are a JS reimplementation of the Dings instruments' ideas and will not sound like the shipped Dings. - The distance metric and threshold were changed after the first run (documented in `test.mjs` and the README): the first averaging diluted differences with shared silence; motifs for warning, message, waiting and fail were also reworked. Real finding on the way: true-peak overs from FM aliasing at the bright/high extreme, fixed with a two-pole 9 kHz lowpass. - WAV only; no Ogg, no custom motifs. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Six events x four Dings-derived identities, pure-JS deterministic renderer shared by
page and node, five sliders, offline export. Unheard: signal checks only.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
aqua merged commit df21ea7bea into main 2026-11-06 05:36:47 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/AquaSynth!9
No description provided.