Home Blog

How to Use Qwen Audio 3.0 ASR and ASR Stream

Qwen Audio 3.0 ASR and ASR Stream API blog cover

Nov 3, 2026

EmpirioLabs AI

Disclosure: This article was written with AI assistance and reviewed by EmpirioLabs AI.

Qwen Audio 3.0 ASR and Qwen Audio 3.0 ASR Stream are available on EmpirioLabs. ASR transcribes recorded audio through POST /v1/audio/transcriptions, and ASR Stream transcribes live audio over wss://api.empiriolabs.ai/v1/realtime. Both recognize 30 languages and the major Chinese dialects, both work in the API and in the Playground, and both are priced per hour of audio and billed by the second.

Watch the launch film

The request in the film is the one on the model's own page, and the score was generated by ACE-Step on EmpirioLabs. Watch it on YouTube.

Transcribing a recording

curl https://api.empiriolabs.ai/v1/audio/transcriptions \
  -H "Authorization: Bearer $EMPIRIOLABS_API_KEY" \
  -F model=qwen-audio-3-0-asr \
  -F file=@interview.mp3

A JSON body with audio_url or audio_base64 works in place of the file upload. Short clips and long recordings are both accepted. The response is a job; poll GET /v1/jobs/<job_id> until status is completed, then read the transcript from result.text and the timed sentences from result.segments. The language is detected automatically.

Live transcription over a WebSocket

wss://api.empiriolabs.ai/v1/realtime?model=qwen-audio-3-0-asr-stream
Authorization: Bearer YOUR_EMPIRIOLABS_API_KEY

Right after session.created, before the first audio, send any settings the session needs:

{"type": "session.update", "session": {
    "input_audio_transcription": {"language": "en", "prompt": "Speakers: Dr. Okafor, Priya Raman. Terms: angioplasty, stent."},
    "turn_detection": {"silence_duration_ms": 600}
}}

Then stream 16 kHz, 16-bit mono PCM audio as base64 in input_audio_buffer.append events. There is no commit to send: the model ends each sentence at the pause that follows it. conversation.item.input_audio_transcription.delta carries the sentence so far while the speaker is talking, and conversation.item.input_audio_transcription.completed the settled sentence.

  • Prompt. input_audio_transcription.prompt takes up to 400 characters of names and terms the speaker uses, written exactly as they should appear.
  • Pauses. turn_detection.silence_duration_ms (200 to 6000, default 800) sets how long a pause ends a sentence, and turn_detection.threshold (0.0 to 1.0) how loud speech must be to count.
  • Room. input_audio_noise_reduction takes near_field for a headset or far_field for a room microphone, and keep_dialect keeps Chinese dialect words as spoken.

Operational notes

  • Every transcription request returns a job, even a short clip. Read the transcript from GET /v1/jobs/<job_id> once status is completed.
  • Send ASR Stream's settings before the audio. A setting changed while audio is streaming ends the sentence in progress and applies only to the audio sent after it.
  • ASR Stream bills the audio you send, silence included. Stop sending when no one is speaking, and close the socket when the session is over.

Pricing

Both models are pay as you go, priced per hour of audio and billed by the second: ASR by the length of each recording, rounded up to the next whole second, and ASR Stream by the audio sent in the session, billed when the session ends. ASR Stream has the higher rate, so use ASR for recordings that do not need results while the speaker is talking. Current rates are on the ASR and ASR Stream model pages and the pricing page.

Start building

Try Qwen Audio 3.0 ASR in the Playground by uploading a recording, or ASR Stream by clicking Start session and speaking. The API reference is at ASR and ASR Stream. For word timestamps and token pricing, see How to Use Qwen Audio 3.1 ASR, ASR Stream and ASR Message.

Ready to use better endpoints?

Explore our models, or contact us about business inquiries, custom deployments, or anything else.