Qwen: Qwen-Audio-3.0-TTS Plus
Qwen-Audio-3.0-TTS-Plus is Qwen’s text-to-speech model focused on detailed, natural and expressive audio for narration, audiobooks and dubbing. It supports model-specific preset or cloned voices, streaming output, and instructions or tags to shape delivery.
About the model
This description covers the model’s capabilities. Available in Ailoot inputs, outputs and options are listed for the selected method below.
Qwen-Audio-3.0-TTS-Plus converts written text into expressive speech, with the Plus edition focused on synthesis quality, naturalness and detailed vocal delivery. Qwen names content creation, audiobooks, film and video dubbing and professional speech production as its main applications. The model’s updated profile describes broader low-resource-language and Chinese-dialect support, improved dialect authenticity, and stronger control of emotion, tone, character, speaking rate, volume and style. The producer also reports improved clarity, resolution and robustness under noisy or reverberant acoustic conditions.
Plus is the quality-focused edition of this text-to-speech family; Flash is separately positioned for real-time interaction. Prepare a narration as a spoken script, with the intended audience, pace and emotional direction identified. For an audiobook passage, an illustrative brief might use clear articulation, a measured pace and restrained warmth; for a video voice-over, it might ask for a serious opening followed by a more energetic explanation. These are delivery choices for supplied words. The model is a speech synthesiser rather than a transcription service or a generator of a complete visual scene.
The official system voices for Plus include Long An Ling Xin, described as warm and empathetic, and Long An Lu Feng, described as bright and cheerful. Both are listed for Mandarin and English. The producer also supplies more than 500 base voices for this edition, with previews to assess before choosing one. It recommends system voices for more consistent synthesis. Select a voice from the exact Plus list and match the script language to that voice’s supported languages; a voice from Flash is not interchangeable merely because it belongs to the same broader family.
The model supports sample-based voice cloning. Its documented cloned-voice languages include Chinese, English, Japanese, Korean, Russian, French, German, Portuguese, Thai, Indonesian, Vietnamese, Spanish, Italian, Malay, Filipino and Arabic. Chinese variants include Mandarin, Cantonese, Chongqing, Northeastern, Gansu, Guizhou, Zhejiang, Hebei, Henan, Hubei, Hunan, Jiangxi, Ningbo, Ningxia, Qingdao, Shaanxi, Shanxi, Shandong, Shanghainese, Sichuan and Yunnan, with dialects controlled through instructions. The producer’s model table distinguishes cloning from voice creation from a text description: cloning is supported for Plus, while that separate voice-design mode is not.
A suitable cloning reference is clear speech at normal speed, without music, background noise, competing speakers or singing. The producer recommends 10–20 seconds and permits up to 60 seconds, in a file no larger than 10 MB. Reference formats are 16-bit WAV, MP3 and M4A, with a minimum 16 kHz sample rate. At least five seconds of continuous clear speech is required, and remaining pauses should be no longer than two seconds. For stereo, only the first channel is processed. The created voice identifier is bound to Plus and used for synthesis when ready; reproducing the same reference through Flash requires a separately created Flash voice.
Natural-language instructions can shape the tone, pace, emotion and timbre of both system and cloned voices. Use concrete audible descriptions instead of a vague request for a good voice. Inline emotion tags can set a style within the script, and rich-language tags can insert a vocal effect at a chosen point. For example, [serious] changes the following delivery, while [sighing] inserts a sigh without changing the surrounding emotional style. Control tags apply until the next control tag or automatic sentence segmentation. This tag-based feature is documented for unidirectional streaming only, so it has a different scope from instructions used with bidirectional text input.
The producer’s output options are PCM, WAV, MP3 and Opus, at listed sample rates of 8,000, 16,000, 22,050, 24,000, 44,100 and 48,000 Hz. MP3 and 22,050 Hz are the documented defaults. Volume can be set from 0 to 100, and rate and pitch from 0.5 to 2.0; MP3 and Opus additionally allow a bitrate from 6 to 510 kbps. Choose the representation needed for playback or editing, then keep those settings consistent across the sections of a longer piece. Streaming output includes audio frames and sentence metadata, with word timestamps available for eligible voices, including cloned voices.
The documented WebSocket text-input flow allows 20,000 characters per message and 200,000 characters cumulatively, and requires a submission interval no greater than 23 seconds. It can receive a complete script or ordered text segments and finish when the input is complete. The producer also documents cancelling the current synthesis turn. These are limits and behaviours of that protocol, not a universal generated-duration cap. For a long narration, organise the script into coherent sections and retain their order and text alongside the resulting audio so the piece can be assembled and reviewed consistently.
For pronunciation, the producer provides target-language hints, pinyin annotations and text replacements to address unwanted readings of digits, abbreviations, symbols or words. SSML is a separate markup mode with eligibility constraints: the Qwen documentation supports it for cloned voices in non-streaming or unidirectional-streaming calls, with only one text submission when enabled. It does not establish SSML for every system voice or for bidirectional streaming. A practical Plus workflow starts with a compatible voice and a finished script, then adds precise delivery and pronunciation choices for the passage being narrated.
Ailoot Ultra · Text to speech POST /v1/audio/speech qwen/qwen-audio-3.0-tts-plus
qwen/qwen-audio-3.0-tts-plusOverview
Qwen-Audio-3.0-TTS-Plus is Qwen’s text-to-speech model focused on detailed, natural and expressive audio for narration, audiobooks and dubbing. It supports model-specific preset or cloned voices, streaming output, and instructions or tags to shape delivery.
- Accepted inputs
- Text
- Results
- Audio
Available in Ailoot · inputs & methods
Ailoot Ultra · Text to speech POST /v1/audio/speech
- Input types
text- Output types
audio- Output format
- mp3
| Field | Type | Requirement | Values & limits | Default |
|---|---|---|---|---|
Fieldmodel | Typestring | RequirementRequired | Values & limits qwen/qwen-audio-3.0-tts-plus | Default— |
Fieldinput | Typestring | RequirementRequired | Values & limits Minimum length: 1 Unit: Unicode characters | Default— |
Fieldvoice | Typestring | RequirementRequired | Values & limits longanlingxin, longanlufeng | Default— |
Fieldresponse_format | Typestring | RequirementRequired | Values & limits mp3 | Default— |
Input material combinations
text_to_speech · Required: input
Method parameters and lifecycle
| Parameter | Contract |
|---|---|
Parametercontent_type | Contractapplication/json |
Parameterrequired | Contractmodel, input, voice, response_format |
Parametervoice_ids | Contractlonganlingxin, longanlufeng |
Parameterresponse_format | Contractmp3 |
Parametermax_input_characters | Contractnull |
Parameterother_options | Contractfalse |
Parameterinput | Contractexact UTF-8 text; Unicode character count without normalization |
Parametermaterial_types | Contracttext |
Lifecycle: synchronous_result_then_owned_library
GET /v1/media/tasks/{task_id} · actual returned task_id or media library record
GET /v1/media/assets/{asset_id}/content
GET /v1/media/assets
GET /v1/media/assets/{asset_id}
Select exact voice from this model profile.
Input characters and audio seconds are different meters.
Pricing
Tariff references do not add request options. Supported parameters are listed for the selected method.
- Fast mode
- Not specified When fast mode is selected
- Flex mode
- Not specified When flex mode is selected
- Maximum reasoning effort
- Not specified When maximum reasoning effort uses the default adjustment
Ailoot rates
Prices by configuration
Match each charge to the conditions shown. Use one rate for each set of alternative configurations.
| Configuration | Rate schedule | Billable quantity | Billing unit | Charge |
|---|---|---|---|---|
| ConfigurationBase token rates | Rate scheduleBase rate | Billable quantity— | Billing unit— | Charge Input · Input tokens — / 1K tokens Output · Output tokens — / 1K tokens Input · Cache read — / 1K tokens Input · Cache write — / 1K tokens Input · Cache write, 1 hour — / 1K tokens |
| ConfigurationUltra | Rate schedule— | Billable quantityEach Unicode code point counts as one character, including Han characters. | Billing unitper 1000 input character | Charge Input · input character $0.04 per 1000 input character |
Reference tariff details
Model-level reference schedules do not change method selection, quotes or charges. Active charges use the selected Ailoot method rates.
Qwen: Qwen-Audio-3.0-TTS Plus
Prices by configuration
| Configuration | Billing conditions | Charge |
|---|---|---|
| ConfigurationQwen: Qwen-Audio-3.0-TTS Plus · Default configuration | Billing conditionsDefault configuration | Charge Input · Input characters $0.00004 per input character |
Ailoot reserves an estimated amount before a request. After the result, it settles the final charge from measured usage. Streaming settlement uses the final usage record. How reservation and settlement work →
Example requests
Ailoot Ultra · Text to speech
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_VOICE_ID:?Choose an accepted voice ID from this exact model profile}"
export AILOOT_VOICE_ID
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "qwen/qwen-audio-3.0-tts-plus", "input": "Good afternoon! This is a short voice take."}')
voice=os.environ["AILOOT_VOICE_ID"]
allowed=json.loads('["longanlingxin", "longanlufeng"]')
if voice not in allowed: raise SystemExit("Choose an accepted voice ID from this exact model profile")
p["voice"]=voice
p["response_format"]="mp3"
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/audio/speech \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o speech.mp3
Receive and save results
Ailoot Ultra · Text to speech
mp3
GET /v1/media/tasks/{task_id}GET /v1/media/assets/{asset_id}/contentGET /v1/media/assetsGET /v1/media/assets/{asset_id}
Other content reads
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/media/assets \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-assets.json
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_MEDIA_TASK_ID:?Set the actual ID returned by the response or media-library metadata}"
export AILOOT_MEDIA_TASK_ID
resource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_MEDIA_TASK_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/media/tasks/$resource_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-task.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("media-task.json").read_text())))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_ASSET_ID:?Set the actual ID returned by the response or media-library metadata}"
export AILOOT_ASSET_ID
resource_id=$(python3 -c 'import os,urllib.parse;print(urllib.parse.quote(os.environ["AILOOT_ASSET_ID"],safe=""))')
curl --fail-with-body --silent --show-error "https://api.ailoot.ai/v1/media/assets/$resource_id" \
-H "Authorization: Bearer $AILOOT_API_KEY" -o media-asset.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("media-asset.json").read_text())))
PY_RESULT
Keep all completed results
Keep every complete returned response, file and content part.
Keep the complete binary result and headers. If JSON/multiple outputs are returned, retain every data item and fetch each actual signed asset URL.
If the original response needs checking
Retain original operation_id/X-Client-Request-ID for reconciliation without resubmission; no dedicated audio poll route.
Response fields
| Field | Type |
|---|---|
Fieldbinary audio | Typebytes |
Fieldresponse headers | Typeheaders |
Errors and next steps
| Response | Condition | Next step |
|---|---|---|
Response400 · invalid_request_error | ConditionInvalid required fields, material representation or parameter value | Next stepCorrect the indicated fields before a new creation request. |
Responseserver_error | ConditionThe returned response says the operation or result requires a check | Next stepKeep the original returned operation/task ID, request headers and response; continue supported reads of that original operation. Do not resubmit the creation request. |
Aliases
Model aliases
Ailoot Ultra qwen/qwen-audio-3.0-tts-plus
Method path aliases
Use the method paths shown above.
Related caller IDs
FAQ · Qwen: Qwen-Audio-3.0-TTS Plus
- What inputs and results are available?
POST /v1/audio/speech·qwen/qwen-audio-3.0-tts-plus:text→audio- Which fields does the request use?
POST /v1/audio/speech·qwen/qwen-audio-3.0-tts-plus:model,input,voice,response_format