Playground Audio
The Playground has three audio workspaces: transcribing an audio file, synthesizing speech from text, and transcribing your microphone live. Which one you get is decided by the model you select. See Surfaces.
| Model type | Surface | Covered in |
|---|---|---|
| Speech to text | Audio file | Transcription |
| Speech to text with realtime support | Audio file and Live microphone | Transcription and Live microphone |
| Text to speech | Speech | Speech |
There is no Speech-to-Text entry in the sidebar. Everything audio lives under Playground, and the retired /playground-stt route redirects there, forwarding any ?model= value.
For the API behind each surface, see Speech to Text, Text to Speech and Realtime Transcription.
All three workspaces carry the Playground's standing output notice under the surface — "Models can make mistakes. Verify important information." It applies to a transcript and to synthesized speech exactly as it does to a chat reply.
Transcription (Audio file)
Upload or record a clip, and get the full transcript back once processing finishes.
The Input Dock
Drop a file onto the dock ("Drag and drop an audio file here, or"), or use one of the two buttons:
- Browse files: pick a file from your device
- Record audio: capture a clip with your microphone
A constraints line under the dock names what the selected model accepts: "Supported formats: {formats} · up to {maxMb} MB". The values come from the model itself; where a model declares nothing, the platform defaults apply: mp3, mp4, mpeg, mpga, m4a, wav, webm, flac, ogg, up to 25 MB.
When the model has no realtime support, one more sentence appears so that Record audio is not mistaken for live transcription:
Recording captures a clip on your device and transcribes it after you stop. Live transcription as you speak is not available for this model.
Recording States
Microphone permission is the usual stumbling block, so the record button reports exactly where it is.
Before you click. A note beside the control says what the microphone is for, and what your browser has already decided about it. The Playground reads the permission from the browser rather than waiting to find out the hard way, and it follows the browser's own state, so a permission you change in site settings is reflected here without reloading.
| What the browser says | What the note says |
|---|---|
| Not asked yet, or the browser will not tell us | Recording uses your microphone. "Your browser asks for permission the first time you record. The clip is captured on this device and is only uploaded when you press Transcribe." |
| Already allowed | "You have already allowed the microphone for this site, so recording starts as soon as you press Record audio." |
| Blocked | An amber block: Microphone access is blocked. "This site is blocked from using the microphone, so pressing Record cannot open a prompt. Allow the microphone in your browser's site settings, usually behind the icon at the left of the address bar, then reload this page. Browse files works either way." |
Not every browser publishes the permission. Where it does not, you get the first note — the one a first-time visitor sees. You are never told you are blocked on a guess.
Idle. The button reads Record audio. Click it to ask the browser for microphone access.
Waiting for permission. The button shows a spinner and both it and Browse files are disabled while the prompt is outstanding. The status line reads "Waiting for microphone access...", followed by guidance:
Your browser will ask for microphone access. If you do not see a prompt, check the microphone icon in the address bar.
If nothing has answered after 20 seconds, the Playground gives up rather than spinning forever:
The microphone request is still waiting for an answer. Allow access in your browser and try again, or use Browse files to upload a recording.
Denied or failed. A red band names the specific problem, because the fix differs in each case:
| Cause | Message |
|---|---|
| Permission refused | "Microphone access was denied. Allow it in your browser's site settings and try again." |
| No microphone attached | "No microphone was found. Connect one and try again." |
| Device busy | "The microphone is in use by another application. Close it and try again." |
| Anything else | "Could not access the microphone. Check the browser permission and try again." |
Unsupported. On a browser that cannot capture audio or on a page that is not served over a secure connection, the button is visible but disabled:
Recording needs a browser that supports audio capture over a secure connection. Use Browse files to upload an audio file instead.
While recording, the dock shows a Recording indicator with elapsed time, and the button becomes Stop recording.
Options
The Options panel carries the request parameters, in this order. Which of them appear depends on what the selected model declares and on the task you picked.
Task
"Task" offers Transcribe and Translate to English. It appears only on models that can translate -- a model that cannot gets no control at all, rather than a disabled option explaining a feature it does not have.
Choosing translation sends the request to a different endpoint, so parts of the panel change with it:
Translation always produces English, whatever language is spoken. The language field and segment timestamps do not apply.
Transcript language and Segment timestamps disappear, the response formats narrow to json, text and verbose_json, and the run button reads Translate.
Transcript language
The field is labelled "Transcript language (ISO 639-1, optional)", and it comes in two shapes depending on what the model declares.
A dropdown, when the model publishes the languages it is configured for. You pick from that list, and the model's own default language is marked "{language} · model default". The first entry, "Auto (model default)", sends nothing and lets the model decide.
A free-text box, when the model publishes no language list. Type an ISO 639-1 code (en, tr, de), or leave it empty for the model default. The placeholder names that default where the model declares one: "Default: {language}".
Either way the hint under the field is worth reading in full, because setting the wrong value silently changes what the model does:
This sets the language the transcript is written in. If you choose a language other than the one spoken in the audio, the model translates instead of transcribing. Choose Auto to use the model default.
(The free-text version of the same sentence ends "Leave it blank to use the model default", because "leave it blank" is not something a dropdown can act on.)
This is a language for the output, not a hint about the input. Setting en on Turkish audio does not "help the model hear Turkish better"; it asks for an English translation. Leave it on the default unless you specifically want translation -- and if translation is what you want, use the Task selector, which sends the request to the endpoint built for it.
Glossary
"Glossary" is a free-text box for "Names, jargon and acronyms you want spelled correctly." An info button beside the hint opens the longer explanation:
This text is given to the model as context before it transcribes, so the words in it are far more likely to be written the way you spell them here. It is the single strongest lever on transcription quality for brand names, product names and technical terms. Keep it relevant. A glossary about something the recording is not about makes the transcript worse, not better. On long audio it is applied to the first chunk and the running transcript carries the rest.
It is the prompt parameter of the API. If a recording keeps coming back with a product name mangled, this is the first thing to try.
Temperature
"Temperature" runs from 0 to 1 in steps of 0.1 and defaults to 0. At 0 the field is not sent at all, so the model's own behaviour applies.
Higher values give a more creative transcript and more mistakes. Leave it at 0 unless you have a reason.
The info button explains why the default is where it is: at 0 the model always picks its most likely next word, so the same audio gives the same transcript every time; above 0 it samples, which can recover an unusual word but can also invent one.
Response format
"Response format" offers json, text, verbose_json, srt and vtt.
| Format | Use it for |
|---|---|
json | A transcript string in a JSON envelope |
text | The plain transcript, nothing else |
verbose_json | The transcript plus timing metadata and per-segment detail |
srt | SubRip subtitles |
vtt | WebVTT subtitles |
On the Translate to English task only the first three are offered; the translation endpoint produces no subtitles.
Segment timestamps
"Segment timestamps" asks for "a start and end time for each segment of the transcript." It is available only with the verbose_json response format, and says so when it is not: "Choose the verbose_json response format to request segment timestamps."
There is deliberately no word-level option. The API does not offer word timestamps, so a control for them would exist only to produce an error.
Streaming
"Stream results as they are generated" is on by default. It is disabled for verbose_json, srt and vtt, with the sub-line "Available for json and text formats only"; those formats are only meaningful once the whole file has been processed.
Start the job with Transcribe (or Translate); Cancel appears while it is running.
The Transcript Pane
Results land in the "Transcript" pane, with Copy and Download actions once there is something to take. Download names the file by format: .srt, .vtt, or .txt.
When you asked for verbose_json, a metadata line appears above the transcript:
| Field | Meaning |
|---|---|
| Language | The language the model detected |
| Duration | The billed length of the audio |
| Segments | How many timed segments came back |
Duration is the figure you are charged for. It is shown to two decimals and is always rounded up; 2.001 seconds displays as 2.01 s. Speech-to-text is metered per second of input audio, and some models also carry a minimum billed duration per request; the model's page in Models states both.
The other response formats do not carry that metadata, so the line is not shown for them.
Speech (Text to speech)
Turn text into an audio file.
The Text You Send
The input is labelled "Text to synthesize", with a live counter reading "{count} / {max} characters".
The cap is 4096 characters. It is counted in Unicode code points after normalization (the same way the platform bills it), so an accented character or an emoji counts once, not once per byte. Over the cap, the counter is replaced by:
Over the 4096 character limit. Shorten the text or split it into several requests.
Text-to-speech is billed on the text you send, priced per 1,000,000 characters. The length of the audio that comes back does not change the price.
Options
Voice
"Voice" is a dropdown of the voices the model publishes to your organization. Each row carries a monogram derived from the voice name and the name itself, and nothing else -- the model publishes voice names, not descriptions, so the row says only what the name actually tells you.
A Preview button sits beside the dropdown and applies to the selected voice, not to each row. Selecting is free and instant, so choosing a voice and then previewing it costs one extra click and never a request you did not mean to send. The sample plays in a small player under the control, and it is tied to the voice it belongs to: switch voices and the previous sample is cleared rather than left playing under the new name.
A preview is a real request. As the panel states: "A preview synthesizes one short sample sentence with the selected voice, and is billed like any other request."
The list is per model and per organization: a model's catalogue can include voices that belong to a single customer, so what you see is what you may use. default is always the first entry, and it is the voice a request with no voice named resolves to.
When a model publishes no voice list, the panel says "This model does not publish a voice list, so its own default voice is used." and there is nothing to choose.
Voice lists are declared per model by your platform operator rather than probed from the engine, so it is possible for a listed voice to be refused at synthesis time. If that happens, pick another voice and tell your administrator.
Output format
"Output format" offers the platform's contract set: mp3, opus, aac, flac, wav, pcm, narrowed to what the selected model actually supports. mp3 is preselected where available. Every option and its one-line description is visible at rest rather than hidden behind a menu, so you can compare the containers without opening anything, and the arrow keys move between them:
| Format | Row description |
|---|---|
mp3 | Compressed, plays everywhere |
opus | Compressed, low latency |
aac | Compressed, wide device support |
flac | Lossless, compressed |
wav | Lossless, uncompressed |
pcm | Raw samples, no container |
No bitrate or sample rate is quoted, because neither is published per model.
If a model declares no supported format at all, synthesis is unavailable and the panel says so: "This model does not declare any supported output format, so synthesis is unavailable. Ask your administrator to set one."
Speed
"Speed" runs from 0.25 to 4.00 in steps of 0.05, default 1, and is displayed as a multiplier: 1.25×. Models that do not implement it show "This model does not support speed control." instead of the slider.
Speed is a request parameter: it asks the model to speak faster or slower, and it changes the audio you get back. It is not a playback control, and the player has none -- replaying a clip at a different rate would tell you nothing about the file you would actually receive.
Streaming
"Stream the audio as it is generated" asks the model to produce the audio incrementally.
The audio arrives in pieces and plays once the last one lands. Streaming also lets the service report a failure that starts after synthesis has begun, instead of returning a file that is quietly incomplete.
The control is shown for every model and disabled on models that do not declare incremental synthesis, with the sub-line "This model does not declare incremental synthesis, so its audio is produced in one piece." -- so comparing two models tells you which of them can do it.
While a streamed synthesis is running, a line above the player counts what has arrived: "{size} received in {chunks} pieces", and "First audio after {seconds}s" once the first piece lands.
Generating
Click Synthesize. The result appears in the "Audio" pane, on a Generated audio surface whose state is named by a chip rather than left for you to infer: Nothing yet, Generating, Ready or Failed. The surface keeps the same height throughout, so nothing jumps when a run starts or finishes.
While a run is in flight the surface reads "Synthesizing. The player appears once the whole file has arrived.", and a new run clears the previous clip — you are never offered a player for audio that is not the answer to the text in the box. A synthesis that fails says so here, under a Failed chip, rather than at the other end of the panel; a failed voice preview stays beside the control that started it, which is a different thing that failed.
A finished run carries a Download button and a player.
The player has play/pause, a seek bar, mute, a chip pairing the file name (speech.mp3, or whatever container you asked for) with the voice that spoke it, and a current/total clock. Behind the seek bar it draws a waveform of the audio you actually received: the bars are peak amplitudes read out of the returned bytes, normalised against that clip's own loudest sample. They show the shape of the clip, not an absolute loudness level, and two clips are not comparable by bar height.
The bars are drawn only when the browser can decode the file. Where it cannot -- pcm has no container at all, and codec support varies between browsers -- the player falls back to a plain progress track and everything else keeps working. A missing waveform means "not decoded here", never "quiet audio".
If the browser cannot play the format either, the player says "Your browser cannot play this format. Download the file to listen to it in another player." and Download still works.
Live Microphone (Realtime)
Stream your microphone and watch the transcript appear as you speak. This mode is offered only by speech-to-text models that support realtime; use the "Mode" switch to reach it.
Choosing a Microphone
A "Microphone" picker sits above the session controls and lists the input devices your browser reports, plus "System default" as an option of its own. Your choice is remembered in that browser for the next session.
The picker is locked while a session is running -- the capture is bound to one device for the life of the session, so switching mid-flight would silently keep streaming the old one. Stop, choose, start again.
Two things are worth knowing about the list:
- Device names appear only after you have granted microphone access once. Browsers hide the labels until then, so the list fills in properly after your first session. A device the browser refuses to name is still listed and still selectable, as "Microphone {n}".
- A remembered device that is no longer plugged in falls back to the system default rather than failing the session: "The microphone you selected is no longer available, so the system default has been restored. Pick an input device and try again."
Conferencing, screen-recording and audio-routing tools install virtual input devices, and they frequently become the operating system's default. A virtual device happily produces audio frames in which every sample is zero: the session connects, streams and meters exactly as a working one does, and the transcript stays empty.
Choosing the device explicitly is what avoids it -- which is why the picker offers "System default" as a named choice rather than silently taking whatever the OS points at.
Silent Input Guard
If the first couple of seconds of captured audio are digital silence, the Playground ends the session itself and says why:
No audio is reaching the page from the selected microphone, so the session was stopped before it recorded anything. This usually means the input is a virtual or muted device. Pick a different microphone and start again.
The test is for exactly zero samples, not for quietness. A real microphone in a silent room still emits faint noise, so a loudness threshold would eventually stop a session because you paused to think; a stream of pure zeroes only ever means the audio path is not connected to anything.
Those first seconds are streamed normally while the check runs -- so a working session gains no delay -- which is why a stopped session still shows a second or two of Audio streamed.
Reading the Transcript
The "Live transcript" pane fills in as you talk. A legend distinguishes the two kinds of text:
- Final: settled; the model will not revise it
- Still being revised: shown in italics, and may change as more audio arrives
Treat revised text as a preview. Copy the transcript with Copy once you have stopped.
Session Status
The status line moves through these states:
| Status | Meaning |
|---|---|
| Not connected | Nothing running yet |
| Waiting for microphone access... | The browser permission prompt is outstanding |
| Opening the live session... | Connecting to the realtime endpoint |
| Live · M:SS | Streaming, with elapsed session time |
| Finishing the last segment... | You pressed Stop; the tail of the audio is still being transcribed |
| Session ended | Closed |
Start with Start listening, end with Stop, and use Start again to run another session. The microphone failure messages are the same as on the Audio file surface.
Audio is sent as 16 kHz mono PCM16, the format the live API accepts; the browser handles the conversion for you.
The Session Panel
A "Session" side panel tracks the run:
| Row | Meaning |
|---|---|
| Session time | Wall-clock time since the session opened |
| Audio streamed | The billed figure: seconds of audio actually sent, to two decimals, rounded up |
| Time left | Remaining session allowance, shown when the server sets one |
Billing counts the audio you stream, not how long the session stays open. Silence between sentences is not charged.
Session time and Audio streamed therefore diverge, and that is expected. Leaving a session open while you think costs nothing; only the audio your microphone actually sends is metered.
The session also closes itself after a period without audio, so a forgotten tab does not hold a connection open. The panel states the exact idle window when the server supplies one.
If your connection cannot keep up, a warning appears: "Some audio was dropped in the last few seconds because your connection could not keep up, so words spoken then may be missing. Check your network." Words spoken during that window may be missing from the transcript; repeat them, and check your network before relying on a long session.
Audio and Your Plan
Audio usage is pay as you go. It is billed at the model's own audio rate and does not draw on a plan's included tokens or a commitment allowance in either direction. Only successful requests are billed; requests that fail with a server-side error appear in your usage history for visibility and carry no charge. One exception: an aac render is not checked for truncation, so a short aac file still comes back as a success and is still charged. Ask for one of the other five formats if that would be a problem.
See Usage for where audio appears in your reporting, and Models for each model's rate.