Pronounce
A page separate from the Studio, at app.uttera.ai/en/pronounce,
for anyone learning a language. No formats, no voice catalogue by name, no cost estimator:
someone learning German does not want to choose between opus and
flac.
Uttera comes from to utter: to pronounce, to say aloud. This is that part of the name.
It solves a problem learning apps do not touch: they only let you hear their own content. You can repeat their lesson, but you cannot ask them how the sentence you need to say tomorrow sounds. Here you write that sentence.
The three steps
| Step | What happens |
|---|---|
| 1. Write it in your own language | The page is in your language and you write in yours. You pick which one you want to learn to say it in. Up to 300 characters: a sentence, not a text. |
| 2. This is how you say it | The sentence appears in the language you are learning together with its phonetic transcription. That is where you stop and read. The audio is generated separately, when you want it and at the speed you choose: reading the sentence is free, generating it is not, and paying for audio of something you have not read yet makes no sense. |
| 3. Now say it yourself | You record yourself — browser microphone or file — and we give you back what we understood, marking word by word what came out and what did not. |
What it costs
There is no estimate beforehand, on purpose: someone practising is not evaluating a service, and a figure before every sentence would be noise. After each operation we say what it actually cost. A full cycle — translate, listen and check yourself — is around 0.17 credits for an ordinary sentence.
The limits, said up front
- Nine languages with a voice: Spanish, English (American and British), French, Italian, Portuguese, Hindi, Japanese and Chinese.
- No phonetic transcription for Japanese and Korean. The phonemiser cannot read kanji and would return a false transcription, which for a learner is worse than none. The audio works just the same.
- Nine languages, not all of them. If yours is not there, this is not for you yet.
- Our voices are built to sound natural, not to teach phonetics. For the sound of an ordinary sentence they are more than enough; to polish one exam vowel, a teacher is still a teacher.
“Why doesn't it understand me?”: the AI analysis
The three steps give you a mirror: which words came out and which did not. When that is not enough — you know something is off but not what — a separate button compares sound by sound what you said against what it should be, and explains it.
It does not use ordinary speech recognition, and the reason matters: that is built to understand you, not to measure you. It corrects your pronunciation towards the word it thinks you meant, which is exactly the error we want to see here. The analysis uses a phoneme recogniser, which writes what it hears even when it is not a word, and compares that string with the one that should have sounded.
What you get back: the percentage of sounds that came out right, the list of those that did not — you made [s] where it should be [θ], and in which words —, the written explanation, and both phonetic transcriptions for anyone who can read them.
The idea is that you practise many times for almost nothing and ask for the analysis when you want to know what you are doing wrong, not on every repeat.
It is not a grade or an exam: it is a comparison between two strings of sounds. And the explanation is drafted by a language model from that comparison — it does not decide what is wrong, that is computed beforehand — so read it for what it is: help in understanding the data, not a verdict.
It does not replace a teacher either. For the sound of an ordinary sentence it is more than enough; to polish one exam vowel, a teacher is still a teacher.
What you upload is transcribed and deleted: recording yourself practising is exactly the kind of audio that should not sit in anyone's archive — Privacy.
Over the API
POST /v1/pronunciation — multipart, like transcribing. Returns JSON.
| Field | Type | What it is |
|---|---|---|
file | file | Required. The learner reading the sentence. Any common format; up to 1 MB, which is plenty for a few seconds of speech. |
text | text | Required. The sentence they were supposed to say. It is the reference the audio is compared against, not a transcript. |
language | text | Defaults to es.
One of: es, es-419, en, en-gb,
fr, it, pt, pt-br,
de, nl, ru, pl,
el, tr, ar, ja,
zh, hi, ko, sv,
da, nb, fi. Anything else returns
422 with the list. |
explain | text | "true" by default.
With "false" you get the phonetic diagnosis without the written
explanation — and it costs far less, because the explanation is what calls
the language model. |
curl -X POST https://api.uttera.ai/v1/pronunciation \
-H "Authorization: Bearer $UTTERA_API_KEY" \
-F "file=@sentence.mp3" \
-F "text=El perro de San Roque no tiene rabo." \
-F "language=es"
The response, exactly as it comes out:
{
"text": "El perro de San Roque no tiene rabo.",
"language": "es",
"duration_s": 2.625,
"target_ipa": "e l p e r o ð e s a n r o k e n o t j e n e r a β o",
"heard_ipa": "e l p e r o ð e s a n r o k e n o t i n e r a b o",
"accuracy": 0.9231,
"errors": [
{"type": "missing", "expected": "j", "heard": null,
"times": 1, "words": ["tiene"]},
{"type": "substitution", "expected": "e", "heard": "i",
"times": 1, "words": ["tiene"]}
],
"recognised": true,
"suppressed": 1,
"explanation": "En la palabra \"tiene\"…",
"timing_ms": {"phonetics": 5567.0, "llm": 18069.4, "total": 23640.1}
}
| Field | What it is |
|---|---|
target_ipa / heard_ipa | The sounds that should have been there and the ones that were, in the international phonetic alphabet. Comparing them is the whole analysis. |
accuracy | Matching phones over expected ones, 0 to 1. It is not a grade: it is how much of what should have sounded did. |
errors | The mistakes grouped by sound, with the words
they show up in. type is missing, extra or
substitution. |
recognised | false when what was recorded
is not the sentence — wrong microphone, another recording, another
language. Then errors comes back empty and there is no explanation:
accusing someone of fine mistakes when they said something else entirely is worse
than saying nothing. |
suppressed | Confusions discounted because they are an artefact of the analyser and not the learner's fault. They are measured by synthesising the sentence, correctly spoken, with our own voice. |
explanation | The explanation in the language being
analysed, or null if you asked for explain=false or the
sentence was not recognised. |
The cost follows the real work, not a flat rate: the X-Work-Ms
header says how much work went in, and
GET /v1/usage/last what it cost. Measured on the example above
—2.6 s of audio, with an explanation— 60.9 credits; without the explanation
most of that disappears, because the language model is what costs.