API詳情
流式文本語音合成
流式文本語音合成可以將流式文本合成為語音二進制數(shù)據(jù),并實時地、流式地返回結(jié)果。終端用戶可以聽到接近同步的語音輸出,從而極大地提升交互體驗,減少了等待時間。一個典型適用的場景是,將大規(guī)模語言模型(LLM)返回的流式文本,無需做任何處理(如拼接、整合等),直接送入流式文本語音合成服務,并得到實時音頻流。流式文本語音合成還具備如下特點:
支持輸出PCM、WAV和MP3編碼格式的數(shù)據(jù)。
支持流式發(fā)送文本。在同一會話中,可以分批次發(fā)送文本并接收音頻。所合成的音頻能夠?qū)崟r播放,且具有低延遲的特點。此外,每次發(fā)送的文本不需要構(gòu)成完整的單詞或句子,服務端將根據(jù)語義進行恰當?shù)臄嗑浜椭亟M。
在同一個流式TTS會話中,單次合成不超過2千字符,總計不超過20萬字符,其中1個漢字算作2個字符,1個英文字母、1個標點或1個句子中間空格均算作1個字符。
支持采用UTF-8編碼的文本輸入。
支持設置不同場景的聲音。
前提條件
獲取鑒權需要的Appkey以及Token。具體操作,請參見管理項目和通過SDK獲取Token。
如果通過SDK方式接入,需要下載安裝SDK。具體操作,請參見快速開始。
服務地址
訪問類型 | 說明 | URL |
外網(wǎng)訪問(默認北京地域) | 所有服務器均可使用外網(wǎng)訪問URL(SDK中默認設置了外網(wǎng)訪問URL)。 | 北京: |
ECS內(nèi)網(wǎng)訪問 | 使用阿里云北京ECS(即ECS地域為華北2(北京)),可使用內(nèi)網(wǎng)訪問URL。 ECS的經(jīng)典網(wǎng)絡不能訪問AnyTunnel,即不能在內(nèi)網(wǎng)訪問語音服務;如果希望使用AnyTunnel,需要創(chuàng)建專有網(wǎng)絡在其內(nèi)部訪問。 說明 使用內(nèi)網(wǎng)訪問方式,將不產(chǎn)生ECS實例的公網(wǎng)流量費用。 關于ECS的網(wǎng)絡類型請參見網(wǎng)絡類型。 | 北京: |
服務交互流程說明
客戶端與服務端的交互流程分為三個階段:
階段一:客戶端會與服務端建立連接,并發(fā)送【StartSynthesis】指令,服務端返回響應的事件以確認建立連接成功,并可以正式開啟TTS語音合成服務。
階段二:用戶循環(huán)調(diào)用發(fā)送文本接口,向服務端發(fā)送文本流。同時服務端返回語音合成數(shù)據(jù)以及相應的事件響應。
階段三:文本發(fā)送完畢后,客戶端調(diào)用【StopSynthesis】指令,此時客戶端會等待服務端將所有的語音合成數(shù)據(jù)發(fā)送完畢后斷開連接。
API接口說明
本文僅提供SDK API說明,此外您還可以通過WebSocket協(xié)議方式接入,詳情參考WebSocket協(xié)議說明。
startStreamInputTts:與服務端進行websocket建連操作,并完成回調(diào)、參數(shù)設置等操作
/** * 初始化并建連,開始流式語音合成任務 * @param callback:事件監(jiān)聽回調(diào),參見下文具體回調(diào)。 * @param ticket:json string形式的鑒權參數(shù),參見下方參數(shù)設置 * @param parameters:json string形式的初始化配置參數(shù),參見下方說明或接口說明:xxxxx * @param session_id:會話ID,可傳入32個字節(jié)的uuid,或傳入空內(nèi)容由SDK自動生成。 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ public synchronized int startStreamInputTts(INativeTtsCallback callback, String ticket, String parameters String session_id);
/** * 與服務端完成建鏈,并開始流式語音合成任務 * @param ticket:json string形式的鑒權參數(shù),參見下方說明或接口說明:xxxxx * @param parameters:json string形式的初始化配置參數(shù),參見下方說明或接口說明:xxxxx * @param session_id:會話ID,可傳入32個字節(jié)的uuid,或傳入空內(nèi)容由SDK自動生成。 * @param level:log打印級別,值越小打印越多。 * @param save_log:是否保存log為文件,存儲目錄為ticket中的debug_path字段值。 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ - (int) startStreamInputTts:(const char *)ticket parameters:(const char *)parameters sessionId:(const char *)sessionId logLevel:(int)logLevel 、 saveLog:(BOOL)saveLog;
/** * 開始語音轉(zhuǎn)寫:發(fā)送語音轉(zhuǎn)寫請求,同步接收服務端確認 * @throws Exception */ public void startSteamInputTTS()
""" 開始語音轉(zhuǎn)寫:發(fā)送語音轉(zhuǎn)寫請求,同步接收服務端確認 Parameters: ----------- voice: str voice for text-to-speech, default is xiaoyun aformat: str audio binary format, support: 'pcm', 'wav', 'mp3', default is 'pcm' sample_rate: int audio sample rate, default is 24000, support:8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 volume: int audio volume, from 0~100, default is 50 speech_rate: int speech rate from -500~500, default is 0 pitch_rate: int pitch for voice from -500~500, default is 0 ex: dict dict which will merge into 'payload' field in request """ def startStreamInputTts( self, voice="longxiaochun", aformat="pcm", sample_rate=24000, volume=50, speech_rate=0, pitch_rate=0, )
//本接口實際是鴻蒙系統(tǒng)的ArkTS語言 /** * 初始化并建連,開始流式語音合成任務 * @param callback:事件監(jiān)聽回調(diào),參見下文具體回調(diào)。 * @param ticket:json string形式的鑒權參數(shù),參見下方參數(shù)設置 * @param parameters:json string形式的初始化配置參數(shù),參見下方說明或接口說明:xxxxx * @param session_id:會話ID,可傳入32個字節(jié)的uuid,或傳入空內(nèi)容由SDK自動生成。 * @param log_level:日志等級。 * @param save_log:是否保存SDK內(nèi)的日志文件。 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ public startStreamInputTts( callback:INativeStreamInputTtsCallback, ticket:string, parameters:string, session_id:string, log_level:number, save_log:boolean):number
ticket參數(shù)設置說明
參數(shù)
類型
是否必選
說明
url
String
否
服務地址,默認使用北京服務。
app_key
String
是
管控臺創(chuàng)建項目的appkey。
token
String
是
請確保該Token可以使用并在有效期內(nèi)。
complete_waiting_ms
Integer
否
調(diào)用stop后等待STREAM_INPUT_TTS_EVENT_SYNTHESIS_COMPLETE的超時時間,單位ms,默認10s。
parameter參數(shù)設置說明
參數(shù)
類型
是否必選
說明
voice
String
否
發(fā)音人,默認是longxiaochun。
format/aformat(python sdk)
String
否
音頻編碼格式,默認值:pcm。支持格式:pcm、wav、mp3。
sample_rate
String
否
音頻采樣率,默認值:24000
volume
String
否
朗讀音量,范圍是0~100,默認50。
speech_rate
String
否
語速,范圍是-500~500,默認是0。
pitch_rate
String
否
語調(diào),取值范圍:-500~500,默認值:0,值越大聲音越尖銳。
sendStreamInputTts:以流式的方式發(fā)送文本
/** * 以流式的方式發(fā)送文本 * @param text:從大模型當中生成的流式文本 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ public synchronized int sendStreamInputTts(String text);
/** * 以流式的方式發(fā)送文本 * @param text:從大模型當中生成的流式文本 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ - (int) sendStreamInputTts:(const char *)text;
/** * 以流式的方式發(fā)送文本 * @throws Exception * @param text:從大模型當中生成的流式文本 */ public void sendStreamInputTts(String text);
""" 以流式的方式發(fā)送文本 Parameters: ----------- text: str utf-8 text """ def sendStreamInputTts(self, text)
//本接口實際是鴻蒙系統(tǒng)的ArkTS語言 /** * 以流式的方式發(fā)送文本 * @param text:從大模型當中生成的流式文本 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ public sendStreamInputTts(text:string):number
stopStreamInputTts:以阻塞的方式停止流式文本語音合成,并與服務端斷開websocket連接
/** * 結(jié)束合成任務,通知服務端流入文本數(shù)據(jù)發(fā)送完畢,阻塞等待服務端處理完成,并返回所有合成音頻。阻塞超時可以通過start接口中的complete_waiting_ms設置 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ public synchronized int stopStreamInputTts()
/** * 停止合成任務,等待收到剩余合成結(jié)果后返回 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ public synchronized int stopStreamInputTts()
/** * 結(jié)束合成任務,通知服務端流入文本數(shù)據(jù)發(fā)送完畢,阻塞等待服務端處理完成,并返回所有合成音頻。阻塞超時可以通過start接口中的complete_waiting_ms設置 */ public void stopStreamInputTts()
""" 停止合成任務,等待收到剩余合成結(jié)果后返回 """ def stopStreamInputTts(self)
//本接口實際是鴻蒙系統(tǒng)的ArkTS語言 /** * 結(jié)束合成任務,通知服務端流入文本數(shù)據(jù)發(fā)送完畢,阻塞等待服務端處理完成,并返回所有合成音頻。阻塞超時可以通過start接口中的complete_waiting_ms設置 * @param flag_async:stop接口是否使用異步等待。若為true,則stop接口非阻塞直接返回;若為false,則stop接口會阻塞直到轉(zhuǎn)寫完成或者報錯。 推薦使用true。 * @return:參見錯誤碼:http://m.bestwisewords.com/document_detail/459864.html。 */ public stopStreamInputTts(flag_async:boolean=true):number
回調(diào)函數(shù)說明
事件回調(diào)函數(shù):用于響應回調(diào)事件
/** * 事件回調(diào) * @param event:回調(diào)事件,參見如下事件列表。 * @param task_id:請求的任務ID,每次調(diào)用一個新ID。 * @param session_id:請求的會話ID。 * @param ret_code:參見錯誤碼,出現(xiàn)TTS_EVENT_ERROR事件時有效,可查閱http://m.bestwisewords.com/document_detail/459864.html。。 * @param error_msg:當產(chǎn)生錯誤碼時,返回錯誤信息。 * @param timestamp:時間戳信息。 * @param all_response:返回的完整json格式信息。 */ void onStreamInputTtsEventCallback(StreamInputTtsEvent event, String task_id, String session_id, int ret_code, String error_msg, String timestamp, String all_response);
/** * 事件回調(diào) * @param event:回調(diào)事件,參見如下事件列表。 * @param task_id:請求的任務ID,每次調(diào)用一個新ID。 * @param session_id:請求的會話ID。 * @param ret_code:參見錯誤碼,出現(xiàn)TTS_EVENT_ERROR事件時有效, * 可查閱http://m.bestwisewords.com/document_detail/459864.html。。 * @param error_msg:當產(chǎn)生錯誤碼時,返回錯誤信息。 * @param timestamp:時間戳信息。 * @param all_response:返回的完整json格式信息。 */ - (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;
/** * 服務端檢測到了一句話的開始 * @param response */ abstract public void onSentenceBegin( StreamInputSpeechSynthesizerResponse response); /** * 服務端檢測到了一句話的結(jié)束,并返回這句話的起止位置與所有時間戳 * @param response */ abstract public void onSentenceEnd( StreamInputSpeechSynthesizerResponse response); /** * 合成結(jié)束 * @param response */ abstract public void onSynthesisComplete( StreamInputSpeechSynthesizerResponse response); /** * 失敗處理 * @param response */ abstract public void onFail(StreamInputSpeechSynthesizerResponse response); /** * 增量在response=>payload中返回時間戳 * @param response */ abstract public void onSentenceSynthesis( StreamInputSpeechSynthesizerResponse response);
//本接口實際是鴻蒙系統(tǒng)的ArkTS語言 /** * 事件回調(diào) * @param event:回調(diào)事件,參見如下事件列表。 * @param task_id:請求的任務ID,每次調(diào)用一個新ID。 * @param session_id:請求的會話ID。 * @param ret_code:參見錯誤碼,出現(xiàn)TTS_EVENT_ERROR事件時有效,可查閱http://m.bestwisewords.com/document_detail/459864.html。。 * @param error_msg:當產(chǎn)生錯誤碼時,返回錯誤信息。 * @param timestamp:時間戳信息。 * @param all_response:返回的完整json格式信息。 */ onStreamInputTtsEventCallback(event:StreamInputTtsEvent, task_id:string, session_id:string, ret_code:number, error_msg:string, timestamp:string, all_response:string):void;
數(shù)據(jù)回調(diào)函數(shù):用于語音合成數(shù)據(jù)返回
/** * 語音合成流式數(shù)據(jù)返回 * @param data:合成的音頻數(shù)據(jù),寫入播放器。 */ void onStreamInputTtsDataCallback(byte[] data);
/** * 當開始識別時,此回調(diào)被連續(xù)調(diào)用,App需要在回調(diào)中進行語音數(shù)據(jù)填充,語音數(shù)據(jù)來自App的錄音 * @param data: 合成的語音數(shù)據(jù),寫入播放器 * @param len: 合成的語音長度 */ - (void)onStreamInputTtsDataCallback:(char*)data len:(int)len;
/** * 接收到語音合成音頻數(shù)據(jù)流 * @param message 二進制音頻數(shù)據(jù) */ abstract public void onAudioData(ByteBuffer message);
//本接口實際是鴻蒙系統(tǒng)的ArkTS語言 /** * 語音合成流式數(shù)據(jù)返回 * @param data:合成的音頻數(shù)據(jù),寫入播放器。 */ onStreamInputTtsDataCallback(data:ArrayBuffer|null):void;
移動端SDK回調(diào)事件說明
名稱 | 說明 |
TTS_EVENT_SYNTHESIS_STARTED | 建連成功,語音合成準備開始,準備播放。對應startStreamInputTts。 |
TTS_EVENT_SENTENCE_BEGIN | 服務端檢測到了一句話的開始。 |
TTS_EVENT_SENTENCE_SYNTHESIS | 有新的合成結(jié)果返回。 |
TTS_EVENT_SENTENCE_END | 服務端檢測到了一句話的結(jié)束,返回該句的全量時間戳。 |
TTS_EVENT_SYNTHESIS_COMPLETE | 語音合成結(jié)束,合成數(shù)據(jù)已全部下發(fā)。本輪交互終止。 |
TTS_EVENT_TASK_FAILED | 語音合成發(fā)生錯誤 |
Python回調(diào)函數(shù)在創(chuàng)建對象時作為參數(shù)配置,說明見下表:
參數(shù) | 參數(shù)說明 |
on_data | 當存在合成數(shù)據(jù)后的回調(diào)參數(shù)。回調(diào)參數(shù)包含以下兩個:
其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。 |
on_sentence_begin | 收到SentenceBegin事件時回調(diào)。回調(diào)參數(shù)包含以下兩個
其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。 |
on_sentence_synthesis | 收到SentenceSynthesis事件時回調(diào)。回調(diào)參數(shù)包含以下兩個
其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。 |
on_sentence_end | 收到SentenceEnd事件時回調(diào)。回調(diào)參數(shù)包含以下兩個
其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。 |
on_complete | 收到SynthesisCompleted事件時回調(diào)。回調(diào)參數(shù)包含以下兩個
其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。 |
on_error | 當SDK或云端出現(xiàn)錯誤時的回調(diào)參數(shù)。回調(diào)參數(shù)包含以下兩個:
其中,用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。 |
on_close | 當和云端連接斷開時的回調(diào)參數(shù)。回調(diào)參數(shù)為用戶自定義參數(shù),即用戶自定義參數(shù)為下方callback_args字段中返回的參數(shù)內(nèi)容。 |
常見SDK錯誤碼
更多錯誤碼詳情參見錯誤碼查詢。
狀態(tài)碼 | 狀態(tài)消息 | 原因 | 解決方案 |
144500 | TTS_STREAM_INPUT_INTERNAL_WRONG_STATE | 內(nèi)部狀態(tài)錯誤,調(diào)用內(nèi)部指令和狀態(tài)不匹配 | 請檢查是否存在下述錯誤:
|
144501 | TTS_STREAM_INPUT_SEND_REQUEST_FAIL | 發(fā)送websockt數(shù)據(jù)失敗 | 請檢查Websocket連接是否正常。 |
144502 | TTS_STREAM_INPUT_START_TIMEOUT | 流式TTS調(diào)用start后10秒未收到started指令超時 | 請檢查是否存在下述錯誤:
|
144503 | TTS_STREAM_INPUT_STOP_TIMEOUT | 流式TTS調(diào)用stop后等待complete指令超時 | TTS服務卡死或連接中斷,聯(lián)系技術人員排查。 |
144504 | TTS_STREAM_INPUT_INITIALIZED_JSON_INVALID | C++ SDK初始化參數(shù)解析失敗 | 請檢查輸入字符串JSON格式。 |
144505 | TTS_STREAM_INPUT_NOT_CONNECTED | 流式TTS未成功建連就調(diào)用其他API接口 | 請在調(diào)用connect接口并成功建連后再調(diào)用其他接口。 |
144506 | TTS_STREAM_INPUT_MISS_VOICE | 沒有設定說話人 | 說話人為必需配置參數(shù)。 |
144507 | TTS_STREAM_INPUT_REQUEST_IS_NULL | request為空,初始化失敗 | 請重新嘗試用connect建聯(lián)。 |