Wavelets listens through your microphone and shows what it hears. Everything runs on your device — no audio ever leaves the browser.
Scout — a scrolling spectrogram with the detected pitch drawn on top, for seeing exactly what’s sounding: the fundamental versus its overtones, competing strings, and background noise.
Tuner — locks onto a held note and tracks its pitch drift in cents, for fine tuning.
Chords — a momentary snapshot across the same frequency span as Scout, turned on its side, that pulls out the several notes sounding at once. The filled grey curve is the live spectrum (what’s actually sounding); the teal curve is the detector’s shape-fit score — how well a harmonic-comb model matches the spectrum at each frequency — so you can see why a note wins. It fits the strongest note, removes it, fits again, and so on, marking each detected note in magenta with its name. Notes are held briefly after they fade so they don’t flicker.
Amp — everything about amplitude in one place: an oscilloscope of the raw waveform on top, then a loudness meter and running min / average / max below. Sync locks the scope trace to a repeating edge so a steady tone stands still; the ↑/↓ button picks the rising or falling edge, and turning Sync off gives a free-running sweep.
A played note is never a single frequency. A vibrating string or column of air sounds its fundamental — the pitch you name — together with a stack of overtones at whole-number multiples of it: 2×, 3×, 4× and up. Their relative strengths are what make a violin and a flute sound different on the very same note. In Scout that’s the ladder of parallel lines riding above the fundamental; in Chords it’s why the detector fits a whole comb of them instead of trusting the loudest peak — the fundamental is sometimes weaker than an overtone, or even missing, yet you still hear the low note.
You can’t pin down a sound’s pitch and its exact timing at once — sharpen one and the other blurs. Measuring a low frequency means listening over many slow cycles, which takes time; a high frequency completes a cycle almost instantly. Wavelets leans into this rather than fighting it: every octave gets its own window — long for the bass (~0.7 s at the very bottom), a few milliseconds for the treble.
You can watch it happen. At the live (right) edge of Scout, the trace funnels in: high notes lock immediately while the bass takes a fraction of a second to firm up — its frequency confidence gradually established. A sharp click is the mirror image: crisp and well-placed in time up high, but smeared into a temporally fuzzy blob down low, where the long window can’t say precisely when it happened. That trade-off isn’t a flaw in the display — it’s the physics of listening.
Notes use Scientific Pitch Notation, where middle C is C4 and A4 = 440 Hz — so a guitar’s low string reads E2 and its high string E4.
Wavelets sets the spectrogram’s brightness from your device’s microphone level — microphones vary by 20 dB or more between devices. It learns this as you play (rising to the loudest level you sustain for a few seconds, then holding steady — a brief noise won’t skew it) and remembers it across sessions. If it ends up mis-set — the spectrogram stays washed out (all teal) or too dim, or you switch microphones — recalibrate the microphone to forget the stored level and learn it fresh. The current value is shown as “mic calibration” in the Amp tab.
The inverse of a spectrogram, for two devices: on this one, turn an image into sound whose spectrogram is that image (between A3 and E8) and play it aloud. Point a second device running Wavelets at it — in Scout, wide (⤢) — and the picture comes through its microphone. A square image is rendered square in that view. (No need to press ▶ on the playing device.)
Wavelets works in any modern browser — Safari, Chrome, and Edge, on both computer and phone. Just allow microphone access when the browser asks for it.
Add this page to your phone’s home screen (via your browser’s Share or menu button) to use it like a regular app — it opens full-screen with no browser bars.
The app doesn’t automatically fetch updates once added. If something looks out of date, force a reload to fetch the latest version.