全部產品
Search
文件中心

Alibaba Cloud Model Studio:Qwen-Audio-TTS iOS SDK

更新時間:Sep 28, 2026

本文件提供了語音合成Qwen-Audio-TTS iOS SDK的詳細使用指南,協助您將文字轉換為高品質、富有表現力的語音。

NeoNui

架構特點:

  • 單例模式:透過 [StreamInputTts get_instance] 取得全域唯一執行個體
  • 回呼驅動:透過 StreamInputTtsDelegate 協定接收事件和資料
  • JSON 設定:參數透過 JSON 字串傳遞

使用流程

Qwen-Audio-TTS 支援一次性輸入和串流輸入兩種呼叫方式。

一次性輸入:適用於短文字合成、需要使用 SSML 標記語言的場景。

  1. playStreamInputTts() 或 asyncPlayStreamInputTts() - 傳送一段完整的待合成文字並開始語音合成。前者為同步請求,合成完成後返回;後者為非同步請求,發起合成後立即返回
  2. onStreamInputTtsDataCallback() - 接收音訊資料
  3. TTS_EVENT_SYNTHESIS_COMPLETE - 語音合成結束

串流輸入:適用於即時對話、長文字「邊說邊合」的場景。此方式不支援 SSML 標記語言。

  1. startStreamInputTts() - 初始化SDK,設定回呼介面和連線參數
  2. sendStreamInputTts() - 持續傳送待合成文字
  3. onStreamInputTtsDataCallback() - 接收音訊資料
  4. stopStreamInputTts() 或 asyncStopStreamInputTts() - 傳送合成結束請求。前者為同步請求,等待合成完成後返回;後者為非同步請求,發起請求後立即返回
  5. TTS_EVENT_SYNTHESIS_COMPLETE - 語音合成結束

startStreamInputTts

啟動串流語音合成任務,與伺服器建立連線。

方法簽章
- (int) startStreamInputTts:(const char *)ticket parameters:(const char *)parameters sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
參數說明
參數類型說明
ticketchar*JSON字串,包含鑑權、連線和偵錯參數。
parameterschar*JSON字串,包含語音合成的具體效果參數。
sessionIdchar*用戶端指定的會話 ID。若未傳入,伺服器端將自動產生。
logLevelNuiSdkLogLevel控制 SDK 自身日誌的列印層級。
saveLogBOOL是否儲存本機日誌。若為YES,須透過debug_path指定路徑,並可透過max_log_file_size設定檔案大小。
傳回值說明

傳回錯誤碼。

ticket JSON範例:以下為 JSON 字串範例,參數未完整列出。請按實際需求在編碼時補充:

{
  "url": "wss://dashscope.aliyuncs.com/api-ws/v1/inference",
  "apikey": "st-****",
  "device_id": "my_device_id"
}
ticket 參數說明
參數類型是否必須說明
urlstring是服務位址:
  • wss://dashscope.aliyuncs.com/api-ws/v1/inference
  • 華北 2(北京):wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/inference
  • 新加坡:wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference

呼叫時,請將 {WorkspaceId} 替換為真實的 Workspace ID。

apikeystring是API Key。建議使用時效性短、安全性更高的 臨時 API Key,以降低長期有效 Key 外洩的風險。
device_idstring是用於識別終端使用者的唯一字串,可設為應用程式內使用者 ID 或用戶端產生的裝置唯一識別碼。此 ID 主要用於日誌追蹤和問題排查。
complete_waiting_msint否呼叫stopStreamInputTts介面後,等待合成完成事件(TTS_EVENT_SYNTHESIS_COMPLETE)的逾時時間(毫秒)。

預設值:10000。

debug_pathstring否日誌檔案的儲存路徑。

此參數僅在呼叫startStreamInputTts、playStreamInputTts或asyncPlayStreamInputTts介面時將saveLog設為YES時生效。此時必須設定日誌檔案路徑,否則將報錯。

本機最多保留兩個日誌檔案。

max_log_file_sizeint否設定日誌檔案的最大位元組數。

此參數僅在呼叫startStreamInputTts、playStreamInputTts或asyncPlayStreamInputTts介面時將saveLog設為YES時生效。

預設值:104857600(100 * 1024 * 1024 位元組,即 100MiB)。

log_track_levelint否控制透過日誌回呼(onStreamInputTtsLogTrackCallback)對外傳送的日誌內容的過濾層級。

預設值:2。

取值範圍:

  • 0:LOG_LEVEL_VERBOSE
  • 1:LOG_LEVEL_DEBUG
  • 2:LOG_LEVEL_INFO
  • 3:LOG_LEVEL_WARNING
  • 4:LOG_LEVEL_ERROR
  • 5:LOG_LEVEL_NONE(表示關閉此功能)

注意:log_track_level與logLevel(透過startStreamInputTts、playStreamInputTts或asyncPlayStreamInputTts介面設定)共同決定最終回呼的日誌。一條日誌的層級數值必須同時大於或等於log_track_level和logLevel的值,才會被回呼。例如,log_track_level設為2 (INFO),logLevel設為3 (WARNING),則只有WARNING及以上層級(數值>=3)的日誌才會被回呼。

parameters JSON 範例:以下為 JSON 字串範例,參數未完整列出。請按實際需求在編碼時補充:

{
  "model": "qwen-audio-3.0-tts-flash",
  "voice": "longanlingxi",
  "format": "mp3",
  "sample_rate": 24000,
  "volume": 50,
  "rate": 1,
  "pitch": 1,
  "language_hints": ["zh"],
  "enable_ssml": false
}
parameters 參數說明
參數類型是否必須說明
modelstring是模型名稱。
voicestring是語音合成所使用的音色。
  • 系統音色:參見Qwen-Audio-TTS音色清單
  • 複製音色:透過聲音複製功能客製化
  • 聲音設計音色:透過聲音設計功能客製化
formatstring否音訊編碼格式。

取值範圍:

  • pcm
  • wav
  • mp3(預設)
  • opus
enable_audio_decoderBOOL否是否啟用 SDK 內部解碼器。預設值:NO。

僅在音訊編碼格式為 opus 或 mp3 時生效。啟用後,SDK 會將 opus 或 mp3 音訊資料解碼為 PCM 資料後傳回。

volumeint否音量。

預設值:50。

取值範圍:[0, 100]。

sample_rateint否音訊取樣率(Hz)。

取值範圍:8000, 16000, 22050(預設), 24000, 44100, 48000。

ratefloat否語速。

預設值:1.0。

取值範圍:[0.5, 2.0]。

pitchfloat否音調。

預設值:1.0。

取值範圍:[0.5, 2.0]。

bit_rateint否音訊位元率(kbps)。音訊格式為 mp3 或 opus 時,支援透過 bit_rate 參數調整位元率。

預設值:32。

取值範圍:[6, 510]。

enable_ssmlboolean否是否開啟SSML功能。

預設值:false。

  • true:開啟。
  • false:關閉。

SSML 的使用限制(支援的模型、音色和介面),請參閱 使用限制。

word_timestamp_enabledboolean否是否開啟字級別時間戳記。

預設值:false。

僅在串流輸出模式下可用。支援複製音色;支援的系統音色請參見Qwen-Audio-TTS音色清單。

時間戳記結果在onStreamInputTtsEventCallback的all_response中。

seedint否產生時使用的隨機數種子,使合成的效果產生變化。在模型版本、文字、音色及其他參數均相同的前提下,使用相同的 seed 可重現相同的合成結果。

預設值0。

取值範圍:[0, 65535]。

language_hintsarray[string]否

重要

  • 此參數為陣列,但目前版本僅處理第一個元素,因此建議只傳入一個值。
  • 此參數用於指定語音合成的目標語言,此設定與聲音複製時的範例音訊的語種無關。如需設定複製任務的來源語言,請參閱聲音複製 API 參考。

指定語音合成的目標語言,提升合成效果。

當數字、縮寫、符號等朗讀方式或者小語種合成效果不符合預期時使用,例如:

  • 數字朗讀方式不符合預期,「hello, this is 110」讀成「hello, this is one one zero」而非「hello, this is 么么零」
  • 符號朗讀不準確,「@」讀成「艾特」而非「at」
  • 小語種合成效果差,合成不自然

取值範圍

  • zh:中文
  • en:英語
  • fr:法語
  • de:德語
  • ja:日語
  • ko:韓語
  • ru:俄語
  • pt:葡萄牙語
  • th:泰語
  • id:印尼語
  • vi:越南語
  • es:西班牙語
  • it:義大利語
  • ms:馬來西亞語
  • fil:菲律賓語
  • ar:阿拉伯語
instructionstring否設定指令,用於控制方言、情感或角色等合成效果。

使用說明請參閱 指令控制。

enable_aigc_tagboolean否是否在產生的音訊中新增 AIGC 隱性標識。設定為 true 時,會將隱性標識嵌入到支援格式(wav/mp3/opus)的音訊中。

預設值:false。

aigc_propagatorstring否設定 AIGC 隱性標識中的 ContentPropagator 欄位,用於標識內容的傳播者。僅在 enable_aigc_tag 為 true 時生效。

預設值:阿里雲UID。

aigc_propagate_idstring否設定 AIGC 隱性標識中的 PropagateID 欄位,用於唯一標識一次具體的傳播行為。僅在 enable_aigc_tag 為 true 時生效。

預設值:本次語音合成請求 Request ID。

hot_fixobject否文字熱修復設定,用於自訂指定詞語的發音或對待合成文字進行替換。

參數介紹:

  • pronunciation:自訂發音。指定詞語的拼音標註,用於糾正預設發音不準確的情況。
  • replace:文字替換。在語音合成前將指定詞語替換為目標文字,替換後的文字將作為實際合成內容。

範例:

"hot_fix": {
  "pronunciation": [
    {"天气": "tian1 qi4"}
  ],
  "replace": [
    {"今天": "金天"}
  ]
}

sendStreamInputTts

傳送待合成的文字,與 startStreamInputTts 搭配使用。

在呼叫 startStreamInputTts 後,使用此介面持續傳送文字。

所有文字傳送完畢後,需呼叫stopStreamInputTts或asyncStopStreamInputTts來結束傳送。

方法簽章
- (int) sendStreamInputTts:(const char *)text;
參數說明
參數類型說明
textchar*待合成文字。不支援 SSML。如果傳入的文字包含 SSML 標籤,這些標籤將被當作一般文字讀出,不會被剖析。
傳回值說明

傳回錯誤碼。

stopStreamInputTts

同步介面,通知伺服器文字已全部傳送,並阻塞等待所有音訊資料合成並收到 TTS_EVENT_SYNTHESIS_COMPLETE。

封鎖等待的逾時時間由參數 complete_waiting_ms 控制。

方法簽章
- (int) stopStreamInputTts;
傳回值說明

傳回錯誤碼。

asyncStopStreamInputTts

非同步介面,通知伺服器端文字已全部傳送。呼叫後立即傳回,合成在背景繼續進行。

透過 TTS_EVENT_SYNTHESIS_COMPLETE 判斷合成是否完成。

方法簽章
- (int) asyncStopStreamInputTts;
傳回值說明

傳回錯誤碼。

cancelStreamInputTts

立即中斷與伺服器端的連線並終止目前合成任務。呼叫後不會再收到任何音訊資料回呼。

方法簽章
- (int) cancelStreamInputTts;
傳回值說明

傳回錯誤碼。

playStreamInputTts

同步執行的一次性合成介面。該介面會傳送文字並阻塞等待接收所有音訊資料,直到合成完成後才返回。無需再呼叫stopStreamInputTts介面。

該介面預設啟用SSML,可透過parameters中的enable_ssml參數關閉。

方法簽章
- (int) playStreamInputTts:(const char *)ticket parameters:(const char *)parameters text:(const char *)text sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
參數說明

ticket、parameters等參數與startStreamInputTts介面中的定義相同。

參數類型說明
textchar*待合成文字。支援 SSML。
傳回值說明

傳回錯誤碼。

asyncPlayStreamInputTts

此介面非同步傳送全部待合成文字。呼叫後立即返回,不等待合成資料。無需再呼叫stopStreamInputTts介面。

該介面預設啟用SSML,可透過parameters中的enable_ssml參數關閉。

方法簽章
- (int) asyncPlayStreamInputTts:(const char *)ticket parameters:(const char *)parameters text:(const char *)text sessionId:(const char *)sessionId logLevel:(NuiSdkLogLevel)logLevel saveLog:(BOOL)saveLog;
參數說明

ticket、parameters等參數與startStreamInputTts介面中的定義相同。

參數類型說明
textchar*待合成文字。支援 SSML。
傳回值說明

傳回錯誤碼。

StreamInputTtsDelegate

Qwen-Audio-TTS 串流語音合成回呼協定,用於接收合成事件、音訊資料和日誌。

onStreamInputTtsEventCallback:監聽事件

方法簽章
- (void)onStreamInputTtsEventCallback:(StreamInputTtsCallbackEvent)event taskId:(char*)taskid sessionId:(char*)sessionId ret_code:(int)ret_code error_msg:(char*)error_msg timestamp:(char*)timestamp all_response:(char*)all_response;
參數說明
參數類型說明
eventStreamInputTtsCallbackEvent回調事件。
taskidchar*語音合成任務ID。
sessionIdchar*會話 ID。用戶端傳入則原樣傳回;未傳入時由伺服器端產生。
ret_codeint錯誤碼,僅在事件 TTS_EVENT_TASK_FAILED 中有效。參見錯誤碼。
error_msgchar*錯誤訊息,僅在事件 TTS_EVENT_TASK_FAILED 中有效。
timestampchar*合成結果的時間戳記資訊。
all_responsechar*完整的 JSON 字串回應。可剖析以取得所需資料。

onStreamInputTtsDataCallback:監聽音訊資料

合成過程中,SDK 會連續觸發此回呼,需在回呼中取得音訊資料。

方法簽章
- (void)onStreamInputTtsDataCallback:(char*)buffer len:(int)len;
參數說明
參數類型說明
bufferchar*返回目前片段的音訊資料,可用於:
  • 合成完整的音訊檔案並播放。
  • 透過支援串流播放的播放器即時播放。

注意:

  • 對於 mp3/opus 壓縮格式,分段傳輸必須使用串流播放器,不能逐幀播放,否則可能解碼失敗。
  • 組裝完整檔案時需採用附加模式寫入同一檔案。
  • 對於 wav 和 mp3 格式,僅在第一次 onStreamInputTtsDataCallback 回呼的資料中包含檔案標頭,後續回呼均為純音訊資料。處理時需將所有回呼的 buffer 按順序拼接。opus 格式的每一幀都是獨立的 Ogg page,可直接拼接。
lenint音訊資料的長度(位元組)。

onStreamInputTtsLogTrackCallback:監聽追蹤日誌

此回調用於接收 SDK 內部的詳細日誌,方便進行問題定位和偵錯。

方法簽章
- (void)onStreamInputTtsLogTrackCallback:(NuiSdkLogLevel)level
                            logMessage:(const char *)log;
參數說明
參數類型說明
levelNuiSdkLogLevel日誌層級。
logchar*日誌內容。

StreamInputTtsCallbackEvent

Qwen-Audio-TTS 串流語音合成事件類型列舉。

事件說明
TTS_EVENT_SYNTHESIS_STARTED表示伺服器已成功接收請求並開始處理。通常在此事件後,onStreamInputTtsDataCallback將很快開始返回第一批音訊資料。
TTS_EVENT_SENTENCE_SYNTHESIS語音合成執行過程中的資訊,包括計費資訊等。
TTS_EVENT_SYNTHESIS_COMPLETE表示伺服器已傳送完全部音訊資料,此後 onStreamInputTtsDataCallback將不會再被呼叫。收到此事件是資料流結束的明確信號。
TTS_EVENT_TASK_FAILED表示任務失敗。此時可從onStreamInputTtsEventCallback的all_response取得task_id、error_code、error_message用於判斷具體錯誤。
{
  "header": {
      "task_id": "2bf83b9a-baeb-4fda-8d9a-xxxxxxxxxxxx",
      "event": "task-failed",
      "error_code": "InvalidParameter",
      "error_message": "[tts:]Engine return error code: 418",
      "attributes": {}
  },
  "payload": {}
}

NuiSdkLogLevel

SDK 日誌層級列舉,用於控制日誌輸出。

層級說明
0:LOG_LEVEL_VERBOSE最詳細的日誌,包含所有偵錯資訊。
1:LOG_LEVEL_DEBUG偵錯層級日誌。
2:LOG_LEVEL_INFO常規資訊層級日誌(預設值)。
3:LOG_LEVEL_WARNING警告層級日誌。
4:LOG_LEVEL_ERROR錯誤層級日誌。
5:LOG_LEVEL_NONE關閉日誌輸出。

範例程式碼

  1. 取得API Key:取得與設定 API Key。

說明當您需要為第三方應用程式或使用者提供臨時存取權限,或者希望嚴格控制敏感資料存取、刪除等高風險操作時,建議使用臨時 API Key。臨時 API Key 擁有固定的 60 秒有效期,過期後需重新取得。

  1. 下載 SDK 並執行範例程式碼:
    • 下載最新SDK整合包。
    • 解壓縮 ZIP 套件,將其中的 nuisdk.framework 新增至專案。
    • 在 Build Phases → Link Binary With Libraries 中新增 nuisdk.framework。
    • 在 General → Frameworks, Libraries, and Embedded Content 中將 nuisdk.framework 設定為 Embed & Sign。
    • 使用 Xcode 開啟範例專案。範例程式碼位於DashCosyVoiceStreamInputTTSViewController.m,替換 API Key 後體驗功能。

呼叫方式

呼叫方式說明
一次性輸入待合成文字呼叫步驟:
  1. 初始化 SDK 和播放器元件。
  2. 按業務需求設定參數。
  3. 呼叫 playStreamInputTts或asyncPlayStreamInputTts傳送文字並開始語音合成。
  4. 接收到 TTS_EVENT_SYNTHESIS_COMPLETE 回呼,語音合成結束。
適用場景:
  • 短文字合成
  • 需要使用 SSML 標記語言
串流輸入待合成文字呼叫步驟:
  1. 初始化 SDK 和播放器元件。
  2. 按業務需求設定參數。
  3. 呼叫 startStreamInputTts 開始串流文字語音合成。
  4. 呼叫 sendStreamInputTts 持續傳送文字。
  5. 在 onStreamInputTtsDataCallback 中,取得二進位音訊資料。
  6. 呼叫 stopStreamInputTts 或 asyncStopStreamInputTts 結束傳送,等待合成完成。
  7. 接收到 TTS_EVENT_SYNTHESIS_COMPLETE 回呼,語音合成結束。
適用場景:
  • 即時對話、長文字「邊說邊合」
  • 此方式不支援 SSML 標記語言

進階功能

SSML 標記語言

目的:透過在文字中嵌入 XML 標籤,實現對發音、語速、停頓等細節的精確控制。

使用限制:僅支援一次性輸入待合成文字(playStreamInputTts 或 asyncPlayStreamInputTts 介面),不支援串流輸入待合成文字(sendStreamInputTts介面)。

使用方法:呼叫 playStreamInputTts 或 asyncPlayStreamInputTts 介面時,SDK 會自動啟用 SSML,此時直接在 text 參數中傳入包含 SSML 標籤的文字即可。

更多說明請參閱 SSML 與 LaTeX。

數學運算式

目的:使模型能夠正確朗讀常見的數學公式和運算式。

使用方法:直接在 text 參數中傳入包含 LaTeX 格式的數學運算式的文字即可。更多說明請參見 LaTeX 公式轉語音。