了解即時語音合成的模型特性、串流呼叫方法和合成效果最佳化方式。
功能介紹
即時語音合成支援分段輸入文字、逐段傳回音訊,適合將大模型產生的文字即時轉換為語音。
- 多語言與方言:根據目標語言選擇模型和音色,也可透過指令指定方言。參見方言。
- 表現力控制:透過自然語言指令調整語速、情感等表達,或在文字中插入情感與副語言標籤。參見指令控制和情感與副語言標籤。
- 自訂音色:透過聲音複製從音訊樣本建立音色,或透過聲音設計使用文字描述建立音色。
- 精細控制與公式朗讀:使用 SSML 與 LaTeX控制停頓、發音等效果,或將公式轉換為語音。
- 音訊控制:可調節語速、語調、音量和位元速率,輸出 PCM、WAV、MP3、Opus 等主流音訊格式,最高支援 48 kHz 取樣率。具體取值與支援範圍以對應 API 參數說明為準。
各模型及音色支援的能力有所不同,使用前請核對對應功能的支援範圍。需要透過 HTTP 一次提交完整文字時,請參見非即時語音合成。
開始使用
- 取得 API Key並設定環境變數
DASHSCOPE_API_KEY。使用與範例地區對應的 API Key。 - 使用業務空間專屬網域時,將程式碼中的
{WorkspaceId}替換為該地區的業務空間 ID。 - 安裝 DashScope SDK,選擇 Python 或 Java 範例。
對延遲和弱網路下音訊傳輸穩定性要求較高的行動應用程式,可使用 AOQ 通訊協定。AOQ 的接入方式,以及 AOQ、WebRTC 和 WebSocket 的差異與模型支援範圍,請參見 Realtime API 概述。
- Qwen-Audio-TTS(推薦)
- CosyVoice
以下使用北京地區的
qwen-audio-3.1-tts-flash 和系統音色 longanhuan_v3.1,分段傳送文字並將傳回音訊儲存為 output.mp3。Python
合成效果最佳化
語言與發音
根據需要控制的內容,選擇對應方式:
| 需求 | 使用方式 |
|---|---|
| 指定合成語音的目標語言 | 使用 language_hints 指定整體合成語言,協助模型按目標語言朗讀數字、縮寫和符號,改善小語種合成效果。 |
| 修正特定詞語的發音或取代文字 | 使用 hot_fix 為指定詞語標註拼音,或在合成前將詞語取代為目標文字,適合統一修正專有名詞等局部內容。 |
| 精細控制停頓、數字讀法或字詞發音 | 使用 SSML 標籤標記需要控制的文字,按標籤設定停頓、讀法和發音等效果。 |
| 朗讀數學公式 | 使用 CosyVoice 的 LaTeX 公式朗讀功能,將支援的數學公式轉換為中文語音。 |
使用 SSML 時,需要一次提交完整的 SSML 文字,再逐段接收音訊,不支援分段輸入。
指令控制
透過 instruction 參數,用自然語言描述語速、情感或說話方式,控制合成語音的表現。
如需建立具有特定性別、年齡或音色特質的新音色,或參考聲音描述的撰寫建議與範例,請參見聲音設計。
- Qwen-Audio-TTS
- CosyVoice
qwen-audio-3.1-tts-plus、qwen-audio-3.1-tts-flash、qwen-audio-3.0-tts-plus、qwen-audio-3.0-tts-flash 的系統音色、複製音色和設計音色均支援在合成請求中透過 instruction 設定自然語言指令。例如,將 instruction 設為以下內容,可放慢語速:方言
透過方言功能,可將文字合成為河南話、四川話等中文方言語音。方言的選擇方式取決於模型和音色類型。
- Qwen-Audio-TTS
- CosyVoice
- 系統音色:從 Qwen-Audio-TTS 音色清單中選擇支援目標方言的音色。直接支援該方言的音色無需額外設定;支援方言指令的音色使用
instruction指定。 - 複製音色:透過
instruction指定方言,例如请用河南话表达。。
情感與副語言標籤
適用於
qwen-audio-3.1-tts-plus、qwen-audio-3.1-tts-flash、qwen-audio-3.0-tts-plus 和 qwen-audio-3.0-tts-flash。text,無需額外參數。
使用範例
以下文字先使用興奮語氣,在指定位置插入笑聲後繼續合成正文:
支援標籤
- 控制類標籤
- 副語言標籤
控制類標籤設定後續文字的情感或風格,直到出現下一個控制類標籤;長句被自動切分時,作用範圍以切分後的文字為界。
| 標籤 | 說明 |
|---|---|
[sad] | 悲傷 |
[amazed] | 驚嘆 |
[deep and loud shouting] | 深沉大聲吶喊 |
[trembling] | 顫抖 |
[angry] | 憤怒 |
[excited] | 興奮 |
[sarcastic] | 諷刺 |
[curious] | 好奇 |
[like dracula] | 吸血鬼語氣 |
[bored] | 無聊 |
[tired] | 疲倦 |
[scornful] | 輕蔑 |
[shouting] | 大喊 |
[asmr] | ASMR 輕聲 |
[panicked] | 驚慌 |
[mischievously] | 調皮 |
[empathetic] | 共情 |
[whispers] | 低聲耳語 |
[reluctantly] | 不情願 |
[crying] | 哭泣 |
[serious] | 嚴肅 |
[very slowly] | 非常緩慢 |
[very fast] | 非常快速 |
應用於生產環境
取消任務
使用 Qwen-Audio-TTS 或 CosyVoice 模型時,如需中斷目前輪次合成,可傳送取消指令。服務端會結束目前任務並傳回 task-finished。
| 呼叫方式 | 版本要求 | 使用方法 |
|---|---|---|
| Python SDK | 1.26.4 及以上版本 | 呼叫 SpeechSynthesizer.streaming_cancel()。 |
| Java SDK | 2.22.26 及以上版本 | 呼叫 SpeechSynthesizer.streamingCancel()。 |
| WebSocket 原始協議 | 無需 SDK | 傳送 finish-task 事件,並在 input 中設定 directive=cancel。 |
WebSocket 連線重用
同一 WebSocket 連線可依序處理多輪合成,各模型系列開啟下一輪的方式如下:
| 模型系列 | 本輪結束事件 | 開啟下一輪 |
|---|---|---|
| Qwen-Audio-TTS、CosyVoice | task-finished | 必須使用新的 task_id 傳送 run-task,再按該系列的流程傳送文字。取消任務後也按此流程重用連線。使用 Python SDK 呼叫 Qwen-Audio-TTS 或 CosyVoice 時,直接建立的 SpeechSynthesizer 會在任務結束或取消後關閉連線。需要重用連線時,從 SpeechSynthesizerObjectPool 借出物件。 |
| Qwen3-TTS | response.done | 在目前工作階段中繼續傳送 input_text_buffer.append。根據工作階段模式,由服務端觸發合成或傳送 input_text_buffer.commit;全部文字傳送完畢後再傳送 session.finish 結束工作階段。 |
模型限流
按對應模型的限流規則控制請求頻率和並行數。限流條件、常見錯誤及處理方法請參見限流。
高並發最佳實務
透過物件集區重用合成物件與連線,並按業務需求設定並行、預熱和錯誤處理,具體請參見語音合成高並發最佳實務。
支援模型
- 新加坡
- 華北2(北京)
API 參考
- 即時語音合成-Qwen-Audio-TTS API參考
- 即時語音合成-CosyVoice API參考
- 即時語音合成-千問API參考
- AOQ用戶端API(適用於 CosyVoice 系列模型)
常見問題
使用複刻音色產生的音頻無聲音如何排查?
確認 voice 為建立成功的音色 ID,建立音色時的 target_model 與合成時的 model 一致。音色狀態、來源音訊要求及品質建議請參見聲音複刻。
為什麼語音合成的實際時間長度與 WAV 檔案顯示的時間長度不一致?
串流傳回 WAV 時,檔案標頭可能無法反映最終音訊長度。如需準確的時間長度資訊,可將 format 設為 pcm,接收完整音訊後新增包含實際長度的 WAV 檔案標頭。
為什麼音頻無法播放?
請按以下情境逐一排查:
-
音頻儲存為完整檔案(如 xx.mp3)的情況
- 音頻格式一致性:請求參數中的音頻格式須與檔案尾碼一致(如參數為 wav 則檔案須為 .wav)。
- 播放器相容性:確認播放器支援該音訊格式和採樣率。
-
流式播放音訊情況
- 將音頻流儲存為完整檔案,嘗試用播放器播放。如果檔案無法播放,請參考情境 1 的排查方法。
- 如果檔案可正常播放,則問題在流式播放實現。請確認播放器支援流式播放(如 ffmpeg、pyaudio、AudioFormat、MediaSource 等)。
為什麼音頻播放卡頓?
請按以下步驟逐一排查:
- 檢查文本發送速度:確保發送間隔合理,避免上段音頻播完後下段文本尚未到達。
-
檢查回呼函數效能:
- 確認回呼函數中無阻塞性商務邏輯。
- 回調運行在 WebSocket 線程,阻塞會影響資料接收。建議將音頻資料寫入獨立緩衝區,在其他線程中處理。
- 檢查網路穩定性:網路波動可能導致音頻傳輸中斷或延遲。