beep boop beep = hello, world?
Sonoglyph
Watch sound become symbols.
A browser-first, extensible signal recognition framework: a reusable DSP pipeline — microphone to spectrum to detected features — and a plugin architecture that turns those features into glyphs, symbolic representations of recognized signals.
(1) keypad
press a key · ♪
(2) scope · time domain
(3) spectrum · 0–1.7 kHz
(4) glyph
awaiting signal
(1) a key press synthesizes its two tones — row + column · (2) the raw samples, exactly what a microphone would hear · (3) FFT magnitudes; the two peaks are the key’s coordinates · (4) the recognized glyph, with its confidence and measured frequencies
Theory of operation
The core never knows what a signal means; plugins do. A DTMF key, a Morse dash, a musical chord, and a syllable of an alien language are all glyphs — one abstraction, any structured signal system. And every stage of the pipeline is observable, because the project is as much about teaching signal processing as performing it. Inspired by the translator in Project Hail Mary.
Specifications
| unit | function |
|---|---|
| packages/core | Shared contracts — Glyph, FeatureFrame, RecognizerPlugin, DspEngine, AudioSource. Types only, zero dependencies. |
| packages/dsp | The TypeScript reference DSP engine: windowing, radix-2 FFT, spectral peaks, envelope, and the pipeline runner. |
| packages/browser | Browser audio: microphone capture via a dumb AudioWorklet, ring buffer, WAV codec, streaming buffer source. |
| packages/plugin-sdk | defineRecognizer(...) and friends — per-frame classifiers get debouncing and segmentation for free. |
| plugins/dtmf | The reference recognizer: all 16 DTMF keys from spectral peak pairs — FFT and Goertzel strategies, side by side. |
| plugins/morse | Time-domain recognition off the envelope stream: dots, dashes, letters — and a translator that gives them meaning. |
in progress: a hosted playground and a Learn section — interactive articles grown from the playground’s embedded explainers. until then: clone the repo, pnpm dev.