Try it, right here
The frame below is the app itself, not a picture of it. It needs a microphone — or drop in a clip. No microphone in the frame? Use the buttons to see populated screens.
The frame is the app itself. Open it full size →
What it does
Eight measurements, taken from the audio in your browser. Then a comparison against twelve accent profiles, and a band on how far ahead the winner is.
01
It measures, not guesses
Median pitch, pitch movement, syllable rate, voiced share, two formants, vowel spread and voice quality. All of it computed here, from the samples themselves.
02
It says how sure it is
A single confident answer is how an app gets to be wrong in public. The result carries a band, and when the top two profiles are tied it says so instead of picking.
03
Every accent has a card
Where it is heard, what it is commonly confused with, and one thing worth knowing. This is the part that turns a party trick into something you keep.
What it refuses to do
- Name a nationality, an ethnicity or an identity. It names an accent — something you learned from the people around you, which travels when you do.
- Claim to place you. It reports on the speech in that one sample, and says so on the result screen.
- Send your audio anywhere. The page carries a
Content-Security-Policythat forbids every network connection, so a fetch would be blocked by the browser itself. - Keep the recording. It is decoded into eight numbers and dropped — the sample is discarded the moment the guess is made.
- Pretend the numbers are settled science. The profiles are hand-set starting values, not values measured from a labelled corpus, and the app says so where you can see it.
How it is built
One HTML file. No build step, no dependencies, no model download — which is also why it works with the network switched off.
| piece | what it does |
|---|---|
docs/play/index.html | The whole app: engine, interface, cards, support panel. |
| engine | Frames the audio, finds pitch by autocorrelation, formants by cepstral smoothing, syllable onsets by spectral flux, then scores twelve profiles. |
ACCENTS.md | The closed set of twelve, the card copy, and what it would take to replace the hand-set profiles with measured ones. |
test/engine.test.js | Lifts the engine out of the page and runs it in Node against synthesised voices with known pitch and formants. |