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

# Transcribe a file

Upload an audio file or record from your microphone on the Speech to Text page, wait for the transcript, and read it in place.

The **Speech to Text** page turns one audio file, or one take from your
microphone, into a transcript you can read as text, subtitles or JSON, play
against the audio, copy and download as a TXT, SRT or JSON file. Use it when you have a recording in
hand and want the text without writing any code; for transcription from
your own product, use the [Speech to Text quickstart](/docs/developers/stt-quickstart).

## What you need

- A workspace. Speech to Text is available on every workspace.
- Credits. A transcription is charged when the file is accepted, at 100 credits per minute of audio. See
  [Speech to Text limits and credits](/docs/playground/stt-limits-and-credits).
- An audio file of up to 1 hour and 150 MB in one of MP3, WAV, FLAC, OGG,
  M4A, AAC or WEBM, or a microphone the browser may use. See
  [Speech to Text formats](/docs/playground/stt-formats).

## Steps

### Step 1: Open Speech to Text

Select **Speech to Text** in the sidebar. The page is headed
**Written the way it was said.** and is built around one box with two ways in:

- A drop area reading **Drop an audio file, or click to browse**, with the
  badges MP3, WAV, M4A and WEBM and **Up to 1 h or 150 MB per file** under it.
- A **Record** button below the word **OR**, with a level meter and a timer.

Under them are three controls: **Language**, the **Numbers as digits**
switch and the **Identify speakers** switch. A status line reads **Waiting for a file**
and the **Transcribe** button sits beside it. On the right, the
**Transcripts** list shows your latest transcripts, with a
**Search transcripts** field and an **All in Assets** link that opens the
full list in **Assets**.

<!-- screenshot: transcribe-a-file/1 the empty Speech to Text page with the drop area and the Record button -->

### Step 2: Choose a file

Drop the file on the drop area, or click the area and pick it. The status
line reads **Checking the file…** while the page checks the file before
anything is sent, in this order:

| Check                                  | What you see if it fails                                                            |
| -------------------------------------- | ----------------------------------------------------------------------------------- |
| Size, 150 MB or less                   | **This file is larger than 150 MB.** This message appears for any file over 150 MB. |
| Extension is one of the seven accepted | **Please upload one of: MP3, WAV, FLAC, OGG, M4A, AAC, WEBM.**                      |
| The browser can read the file's length | **There is a problem with the uploaded file. Please try again.**                    |
| Length, 1 hour or less                 | **Audio must be 1 hour or shorter.**                                                |

A failure shows in the status line, followed by a short code in square
brackets, for example `[STT_METADATA]`. Quote the code if you contact support.

Pick the **Language**: Auto, Arabic or English. Auto suits Arabic, mixed and English speech; pick English only for speech that is all English.

**Numbers as digits** is on by
default: spoken numbers such as «واحد اتنين تلاتة» become 123. Turn it off to
keep numbers as spoken words. The switch is unavailable for English, which
always keeps numbers as spoken.

**Identify speakers** is on by default: the transcript comes back in rows,
each with the time it starts at and a label for who is speaking,
**Speaker 1**, **Speaker 2** and so on. Turn it off to get the text as one
block. It does not change the charge.

A file that passes every check is held on the page: its name replaces the
drop area text, with **Drop another file or click to replace it** under it,
and the status line reads **Ready** followed by the file name. Nothing is
sent yet. Press **Transcribe** to start the job.

### Step 3: Or record from your microphone

Press **Record**. The first time, the browser asks for permission to use the
microphone. The button then reads **Stop**, a **Cancel** button appears, the
dots move with your voice and the timer counts up in minutes and seconds.
The status line reads **Recording…**.

- **Stop** ends the take. It goes through the same checks as Step 2 and is
  held on the page, exactly like a chosen file. Press **Transcribe** to send it.
- **Cancel** discards the take. Nothing is charged.
- A take stops on its own at 1 hour, as if you had pressed **Stop**.

The take is recorded as a 16 kHz mono WAV and named `recording-` followed by
a number, with the extension `.wav`. See
[Speech to Text formats](/docs/playground/stt-formats) for what that means.

If the browser cannot record, an error dialog names the reason:
**Your browser does not support audio recording.**,
**Microphone permission is required.**, **Could not start recording.** or
**Could not process the recorded audio.** Each is followed by a short code in
square brackets.

<!-- screenshot: transcribe-a-file/2 the Speech to Text page while recording, with the Stop and Cancel buttons and the timer -->

### Step 4: Wait for the transcript

Press **Transcribe**. The button reads **Working** with a spinner, the
**Language**, **Numbers as digits** and **Identify speakers** controls are disabled, and the status line follows the job through
these states:

1. **Preparing audio…**, for an MP3, M4A, AAC or WEBM file only. The browser
   converts the file before it sends it, and a long file can sit here for a
   while.
2. **Uploading**, with the percentage sent so far and a progress bar under
   the box.
3. **Transcribing**, followed by the file name. The file has been received;
   once it passes the checks that run after upload it is charged, and the
   transcript is produced. A long file takes longer than a short one.

The job runs on the server, so the transcript is kept in **Assets** even if
you leave the page before it arrives. What the page does while it waits, and
for how long, is on
[Immediate and queued transcription](/docs/playground/sync-versus-async).

<!-- screenshot: transcribe-a-file/3 the status line in its Transcribing state -->

### Step 5: Read the result

When the transcript arrives the status line reads **Done** followed by the
file name, and under the box you see the length of the audio and
**Used** followed by the credits charged. A transcript card opens below the
box: the file name, its length and the language, then three tabs, **Text**,
**Subtitles (SRT)** and **JSON**, and under them the transcript in that
view. **Copy** copies what the open tab shows, and **Download** saves it as a
TXT, SRT or JSON file. **Clean Noise** opens Sound Cleaning with this audio
already chosen, for a noisy file you want to clean and transcribe again.
Every control on this view is described on
[Read a transcript](/docs/playground/reading-results).

<!-- screenshot: transcribe-a-file/4 the transcript card with the Text, Subtitles (SRT) and JSON tabs, the Copy, Download and Clean Noise buttons, and the Transcripts list -->

Each new transcript is added to the **Transcripts** list. Click a row to
show that transcript again, or press its play button to hear the audio. To
transcribe another file, drop it on the drop area or press **Record**; the
**Transcribe** button stays off until a new file or take is chosen, so a
finished file is never charged twice by accident. If a file has no speech in
it, the card reads **No speech was found in this file.**

## Get it right

The 150 MB limit applies to the file as you chose it, whatever its length.
A compressed file reaches the full hour; an uncompressed one does not.

**Recommended**

- A one-hour meeting exported as MP3, which is about 57 MB and is accepted.

**Less effective**

- The same meeting exported as stereo 44.1 kHz WAV, which passes 150 MB long
  before the hour ends and is refused before upload.

## Worked example

You drop `interview.mp3`, a 12-minute stereo interview of 11 MB, on the
drop area and press **Transcribe**. The status line
reads **Preparing audio…**, then **Uploading**, then
**Transcribing** followed by `interview.mp3`. When it reads **Done**, a
transcript card titled `interview.mp3` opens with a length of 12:00, and
`interview.mp3` is the first row of the **Transcripts** list.

The charge is for 12 minutes, or 720 seconds, of audio: 1,200 credits, taken when the file was accepted. **Used** shows 1,200 credits under the box. With the card on **Text**,
**Download** saves `interview.txt`.

## What happens next

- The transcript stays on the page for the rest of your visit, and every
  further file or take is added to the **Transcripts** list.
- The transcript and the audio that was transcribed are kept in **Assets**,
  so you can come back to them after leaving the page. Open them from the
  **All in Assets** link or the sidebar.
- The credit counter in the sidebar, shown as used out of total with the
  label **Used**, refreshes when the transcript arrives.

## Limits

| Limit           | Value                               | Applies to                                 |
| --------------- | ----------------------------------- | ------------------------------------------ |
| Audio length    | 1 hour                              | Uploaded files and microphone takes        |
| File size       | 150 MB                              | Uploaded files, checked before upload      |
| Formats         | MP3, WAV, FLAC, OGG, M4A, AAC, WEBM | Uploaded files, by extension               |
| Files at a time | One                                 | The page sends one file per upload or take |

The full table, with the credit rate and the messages for each limit, is on
[Speech to Text limits and credits](/docs/playground/stt-limits-and-credits).

## Troubleshooting

Every failure appears in the status line under the box, in red, with the
reason followed by a short code in square brackets. When the failure came
after the file passed the checks in Step 2, a **Try again** button appears
beside **Transcribe**. It sends the same file again as a new transcription,
with a new charge if it is accepted. The reasons:

### This file is larger than 150 MB.

The file is over 150 MB. Export it at a lower bitrate, or as mono, and drop
it again.

### Please upload one of: MP3, WAV, FLAC, OGG, M4A, AAC, WEBM.

The file's extension is not one of the seven. Export the audio in one of
them; renaming the file is not enough, because the browser must be able to
read it in Step 2.

### Audio must be 1 hour or shorter.

Split the recording and transcribe each part.

### Insufficient subscription balance

The workspace balance does not cover the charge for this file. Nothing was
transcribed and nothing was charged. The same text also appears as an error
notice. Add credits from **Subscription & billing** in the user menu, or
use a shorter file.

### Transcription is temporarily unavailable. Please try again.

The file could not be handed over for transcription. The charge is refunded.
Press **Try again** once; if it repeats, wait a few minutes.

### Job timed out — AI server did not respond

No transcript arrived within 10 minutes of the file being accepted, and the
transcription was marked failed within the following 5 minutes. The charge
is refunded. Transcribe a shorter file, or split this one.

### Audio could not be decoded. Supported: WAV, FLAC, OGG/Opus, and raw PCM via the format parameter.

The audio inside the file could not be read. The charge is refunded. Export
the recording again as WAV or MP3 from the application that made it.

### Could not read the audio length. Try another file.

The server could not decode the audio to measure its length. Nothing was
charged. Export the recording again as WAV or MP3 from the application that
made it.

### There is a problem with the uploaded file. Please try again.

When this is the whole message, the browser could not read the file's
length, or the transcription failed without a reason. Re-export the file
with a proper header, then drop it again.

## FAQ

### Which language is the transcript in?

Pick the language under the file: Auto, Arabic or English. Auto lets the service decide. That is Arabic today, which also handles mixed Arabic/English and clean English speech. Pick Arabic for Arabic and mixed speech. Pick English only for speech that is all English, because Arabic sent as English comes back garbled.

### Does the page tell speakers apart?

Yes, with **Identify speakers** on, which is the default. Each row of the
transcript carries its speaker's label and start time, and a line above the
text shows each speaker's talk time. See
[Read a transcript](/docs/playground/reading-results).

### Is a failed transcription charged?

No. The charge is taken when the file is accepted and refunded when the
transcription fails. A file refused before upload is never charged.

### Can I transcribe two files at once?

One at a time. The page works on one file or take, and the controls stay
off until it finishes. Each transcript is added to the **Transcripts** list
when it finishes.

### Where does a transcript go when I leave the page?

To **Assets**, from the **All in Assets** link on this page or the sidebar.
The **Transcripts** list on this page keeps showing your latest transcripts
on your next visit.

### Can I do this from my own code?

Yes. The same transcription is available over the API, with a synchronous
call for files of up to 10 minutes. Start at the
[Speech to Text quickstart](/docs/developers/stt-quickstart).

## Related

- [Read a transcript](/docs/playground/reading-results): every control on the result view, and how to save the text.
- [Speech to Text formats](/docs/playground/stt-formats): what each format goes through before upload, and what your browser records.
- [Immediate and queued transcription](/docs/playground/sync-versus-async): what the page does while it waits, and for how long.
- [Speech to Text limits and credits](/docs/playground/stt-limits-and-credits): every limit, the credit rate and the messages.
- [Speech to Text quickstart](/docs/developers/stt-quickstart): the same transcription from your own code.
