UtteraUttera

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

StepWhat happens
1. Write it in your own languageThe 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 itThe 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 yourselfYou 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 the third step gives you is a mirror, not a grade. If you wrote “rojo” and the transcript says “rojo”, you said it recognisably. If it says “rollo”, you now know which sound is failing you. There is no score, and that is deliberate: for learning, an honest mirror beats a number.

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

“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.

It costs considerably more than the rest, which is why you ask for it rather than getting it automatically. The word mirror costs cents of a credit; this is around 3, because your recording has to be phonemised and the explanation drafted with a language model. You are told before it runs, and you can decline. The exact charge appears afterwards, as with everything else.

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.

If the recording does not sound like the sentence, it is not analysed. This happens more than you would think: the wrong microphone picking up the television, or the system mix. In that case we tell you and the analysis is not charged, rather than explaining sound by sound a mismatch that means nothing.
What this is NOT.

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.

FieldTypeWhat it is
filefileRequired. The learner reading the sentence. Any common format; up to 1 MB, which is plenty for a few seconds of speech.
texttextRequired. The sentence they were supposed to say. It is the reference the audio is compared against, not a transcript.
languagetextDefaults 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.
explaintext"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}
}
FieldWhat it is
target_ipa / heard_ipaThe sounds that should have been there and the ones that were, in the international phonetic alphabet. Comparing them is the whole analysis.
accuracyMatching phones over expected ones, 0 to 1. It is not a grade: it is how much of what should have sounded did.
errorsThe mistakes grouped by sound, with the words they show up in. type is missing, extra or substitution.
recognisedfalse 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.
suppressedConfusions 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.
explanationThe 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.