> For the full page index, fetch https://echonova.ai/llms.txt

# Speech to Text formats

Which files the Speech to Text page accepts, what the browser does to each format before upload, what a microphone take is saved as, and what the transcript is.

This page is the lookup table for what goes into the **Speech to Text** page
and what comes out: the seven file formats it accepts, what your browser
does to each one before it is sent, what a microphone take is saved as, the
checks that run once the file has been sent, and what the transcript
contains. For the limits and the credit rate, see
[Speech to Text limits and credits](/docs/playground/stt-limits-and-credits).

## Accepted files

The page accepts a file by its extension. The file picker filters to these
types; a file dropped on the drop area is checked the same way.

| Format | Extension | Before upload                   |
| ------ | --------- | ------------------------------- |
| MP3    | `.mp3`    | Converted to WAV by the browser |
| WAV    | `.wav`    | Sent unchanged                  |
| FLAC   | `.flac`   | Sent unchanged                  |
| OGG    | `.ogg`    | Sent unchanged                  |
| M4A    | `.m4a`    | Converted to WAV by the browser |
| AAC    | `.aac`    | Converted to WAV by the browser |
| WEBM   | `.webm`   | Converted to WAV by the browser |

Any other extension is refused before upload with
**Please upload one of: MP3, WAV, FLAC, OGG, M4A, AAC, WEBM.** The badges
under the drop area name four of the seven; all seven are accepted.

## What the browser does before upload

A WAV, FLAC or OGG file is sent as you chose it. Every other accepted format
is prepared in the browser first:

1. The browser decodes the file.
2. Stereo is mixed down to one channel; both channels are averaged, so a
   call recording with one quiet side keeps both voices.
3. The audio is resampled to 16 kHz.
4. The result is written as a 16-bit WAV, named after your file with a
   `.wav` extension, and that copy is sent.

What this means for you:

- **Playback uses the converted copy.** The player on the transcript card,
  the play buttons in the **Transcripts** list and the audio kept in
  **Assets** all carry the 16 kHz mono WAV, not the file you chose. The
  name shown on the transcript card is still your original file name.
- **The 150 MB limit is checked twice**: on your original file before
  conversion, and on the converted copy after it. One hour of 16 kHz mono
  WAV is about 115 MB, so a converted file inside the 1-hour limit always
  passes the second.
- **Preparation takes time.** The status line shows
  **Preparing audio…** while the browser works. A long MP3 can hold there
  for a while before **Uploading** and its percentage appear.
- **A file the browser cannot decode is sent unchanged.** The transcription
  then ends with a reason that starts with
  **Audio could not be decoded** and the charge is refunded. Export the
  recording again from the application that made it.

## Microphone takes

**Record** captures the take in the page itself, as 16 kHz mono 16-bit WAV,
whichever browser you use. It needs a browser with microphone capture and audio worklet support;
otherwise the page says
**Your browser does not support audio recording.**

| What you record in    | Recorded as     | Extension of the take | Before upload  |
| --------------------- | --------------- | --------------------- | -------------- |
| Any supported browser | 16 kHz mono WAV | `.wav`                | Sent unchanged |

The take is named `recording-` followed by a number, and it goes through the
same checks as an uploaded file. A take stops on its own at 1 hour. Press
**Transcribe** to send it.

## Checks after upload

Once the file has been sent, more checks run before it is accepted
and charged. Each refusal shows in the status line under the box, followed
by a short code in square brackets, with a **Try again** button.

| Check     | Rule                                           | Message                                                                                  |
| --------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------- |
| File type | The file must be audio                         | **Unsupported file type: … Please upload an audio file.**, naming the type that was sent |
| Size      | 150 MB or less                                 | **File too large**                                                                       |
| Length    | 1 hour or less, measured by decoding the audio | **Audio exceeds the 1-hour limit.**                                                      |
| Readable  | The audio length can be measured               | **Could not read the audio length. Try another file.**                                   |

The server measures the length by decoding the audio, not from the file's
header, and the credit charge uses that measured length. See
[Speech to Text limits and credits](/docs/playground/stt-limits-and-credits).

After acceptance, the audio is decoded. WAV, FLAC and OGG with Opus decode;
a stereo file is averaged to mono; audio shorter than 50 milliseconds ends
with a reason that starts with **Audio is too short**. Every failure after
acceptance refunds the charge.

## The transcript

| Fact              | Value                                                                                                                                                                                                                                                                                        |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Language          | Auto, Arabic or English, picked on the page. Auto lets the service decide, which is Arabic today.                                                                                                                                                                                            |
| Shape             | With **Identify speakers** on, the default: rows in the order they were said, each with its start time and its speaker. With it off: one block of text per file. No word timestamps and no confidence figures.                                                                               |
| Shown on the page | A transcript card with the file name, its length and the language, and three tabs: **Text** (the rows or the block), **Subtitles (SRT)** and **JSON** (the files themselves).                                                                                                                |
| Saved as          | A TXT, SRT or JSON file, matching the open tab, named after your file with its extension replaced, from **Download**; **Copy** copies the open tab instead. SRT holds cues of at most 7 seconds, each starting with its speaker; a transcript in one block gives one cue for the whole file. |

How to read the result view, and where the transcript is kept afterwards,
is on [Read a transcript](/docs/playground/reading-results).

## Worked example

You drop `memo.m4a`, a 3-minute voice memo from your phone, on the drop
area. The extension passes, the browser reads its length as 3:00, and you
press **Transcribe**. The status line shows **Preparing audio…** while the
memo is decoded, mixed to mono, resampled to 16 kHz and written as
`memo.wav`, about 5.8 MB. It then shows **Uploading** with a percentage and
switches to **Transcribing**.

When the transcript arrives, the transcript card is titled `memo.m4a`, the
player plays the WAV copy, and **Download** on the **Text** tab saves
`memo.txt`.

## FAQ

### My file is an MP3. Will it work?

Yes. The browser converts it to WAV before upload. If the conversion fails,
the transcription reports it and the charge is refunded.

### Why is the downloaded audio a WAV when I uploaded an M4A?

The page transcribes the converted copy and keeps that copy. Keep your
original if you need it in its own format.

### Why is my one-hour WAV refused when a one-hour MP3 is accepted?

The 150 MB limit applies to the file as you chose it. A one-hour MP3 is
about 57 MB; a one-hour stereo 44.1 kHz WAV is far larger. Export the WAV
as MP3, or as 16 kHz mono, before you upload it.

### Can I get timestamps or speaker labels?

Yes. With **Identify speakers** on, which is the default, each row of the
transcript shows its start time and its speaker, and the
**Subtitles (SRT)** tab and its download carry both. There are no timestamps for single words. See
[Read a transcript](/docs/playground/reading-results).

### Does a microphone take sound different after conversion?

The page records the take at 16 kHz mono, which is what transcription
uses, so no conversion happens afterwards. The transcript is unaffected.

## Related

- [Transcribe a file](/docs/playground/transcribe-a-file): the steps from upload to transcript.
- [Read a transcript](/docs/playground/reading-results): every control on the result view.
- [Speech to Text limits and credits](/docs/playground/stt-limits-and-credits): every limit and the credit rate.
- [Speech to Text formats and output](/docs/developers/stt-formats-and-output): the same checks as the API applies them.
