https://ai.baidu.com/docs#/TTS-Online-Java-SDK/top
Hi,您好,歡迎使用百度語音合成服務(wù)。
本文檔主要針對(duì)Java開發(fā)者,描述百度語音合成接口服務(wù)的相關(guān)技術(shù)內(nèi)容。如果您對(duì)文檔內(nèi)容有任何疑問,可以通過以下幾種方式聯(lián)系我們:
在百度云控制臺(tái)內(nèi)提交工單,咨詢問題類型請(qǐng)選擇人工智能服務(wù);
QQ群快速溝通: AI開放平臺(tái)官網(wǎng)首頁底部“QQ支持群”中,查找“百度語音”。
接口名稱 | 接口能力簡要描述 |
---|---|
語音合成 | 將計(jì)算機(jī)自己產(chǎn)生的、或外部輸入的文字信息轉(zhuǎn)變?yōu)榭梢月牭枚?、流利的口語輸出的技術(shù)。 |
目前本SDK的功能同REST API,需要聯(lián)網(wǎng)調(diào)用http接口 。REST API 僅支持最多512字(1024 字節(jié))的音頻合成,合成的文件格式為mp3。沒有其他額外功能。 如果需要使用離線合成等其它功能,請(qǐng)使用Android或者iOS 合成 SDK
請(qǐng)嚴(yán)格按照文檔里描述的參數(shù)進(jìn)行開發(fā)。請(qǐng)注意以下幾個(gè)問題:
合成文本長度必須小于1024字節(jié),如果本文長度較長,可以采用多次請(qǐng)求的方式。切忌文本長度超過限制。
語音合成 rest api不限制調(diào)用量,但是初始的QPS為100,如果默認(rèn)配額不能滿足您的業(yè)務(wù)需求,請(qǐng)從控制臺(tái)中申請(qǐng)?zhí)岣吲漕~,我們會(huì)在兩個(gè)工作日內(nèi)完成審批
必填字段中,嚴(yán)格按照文檔描述中內(nèi)容填寫。
上線日期 | 版本號(hào) | 更新內(nèi)容 |
---|---|---|
2018.1.26 | 4.1.1 | 語音合成修復(fù)服務(wù)端不返回Content-Type的情況;新增日志記錄 |
2017.12.12 | 3.4.1 | 語音合成問題修復(fù) |
2017.11.10 | 3.3.1 | 語音合成返回?zé)osn問題修復(fù) |
2017.10.18 | 3.2.1 | 使用proxy問題修復(fù) |
2017.8.25 | 3.0.0 | 更新sdk打包方式:所有AI服務(wù)集成一個(gè)SDK |
2017.7.14 | 1.0.1 | 更新sdk打包方式 |
2017.6.30 | 1.0.0 | 新增語音合成服務(wù)接口 |
Speech Java SDK目錄結(jié)構(gòu)
com.baidu.aip ├── auth //簽名相關(guān)類 ├── http //Http通信相關(guān)類 ├── client //公用類 ├── exception //exception類 ├── speech │ └── AipSpeech //AipSpeech類 └── util //工具類
支持 JAVA版本:1.7+
查看源碼
Java SDK代碼現(xiàn)已公開,您可以查看代碼、或者在License范圍內(nèi)修改和編譯SDK以適配您的環(huán)境。 github鏈接:https://github.com/Baidu-AIP/java-sdk
使用maven依賴:
添加以下依賴即可。其中版本號(hào)可在maven官網(wǎng)查詢
<dependency> <groupId>com.baidu.aip</groupId> <artifactId>java-sdk</artifactId> <version>${version}</version></dependency>
直接使用JAR包步驟如下:
1.在官方網(wǎng)站下載Java SDK壓縮工具包。
2.將下載的aip-java-sdk-version.zip
解壓后,復(fù)制到工程文件夾中。
3.在Eclipse右鍵“工程 -> Properties -> Java Build Path -> Add JARs”。
4.添加SDK工具包aip-java-sdk-version.jar
和第三方依賴工具包json-20160810.jar
log4j-1.2.17.jar
。
其中,version
為版本號(hào),添加完成后,用戶就可以在工程中使用Speech Java SDK。
AipSpeech是語音識(shí)別的Java客戶端,為使用語音識(shí)別的開發(fā)人員提供了一系列的交互方法。
用戶可以參考如下代碼新建一個(gè)AipSpeech,初始化完成后建議單例使用,避免重復(fù)獲取access_token:
public class Sample { //設(shè)置APPID/AK/SK public static final String APP_ID = "你的 App ID"; public static final String API_KEY = "你的 Api Key"; public static final String SECRET_KEY = "你的 Secret Key"; public static void main(String[] args) { // 初始化一個(gè)AipSpeech AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY); // 可選:設(shè)置網(wǎng)絡(luò)連接參數(shù) client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000); // 可選:設(shè)置代理服務(wù)器地址, http和socket二選一,或者均不設(shè)置 client.setHttpProxy("proxy_host", proxy_port); // 設(shè)置http代理 client.setSocketProxy("proxy_host", proxy_port); // 設(shè)置socket代理 // 可選:設(shè)置log4j日志輸出格式,若不設(shè)置,則使用默認(rèn)配置 // 也可以直接通過jvm啟動(dòng)參數(shù)設(shè)置此環(huán)境變量 System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties"); // 調(diào)用接口 TtsResponse res = client.synthesis("你好百度", "zh", 1, null); byte[] data = res.getData(); JSONObject res1 = res.getResult(); if (data != null) { try { Util.writeBytesToFileSystem(data, "output.mp3"); } catch (IOException e) { e.printStackTrace(); } } if (res1 != null) { System.out.println(res1.toString(2)); } } }
其中示例的log4j.properties文件內(nèi)容如下:
#可以設(shè)置級(jí)別:debug>info>error#debug:顯示debug、info、error#info:顯示info、error#error:只errorlog4j.rootLogger=debug,appender1#log4j.rootLogger=info,appender1#log4j.rootLogger=error,appender1#輸出到控制臺(tái)log4j.appender.appender1=org.apache.log4j.ConsoleAppender#樣式為TTCCLayoutlog4j.appender.appender1.layout=org.apache.log4j.PatternLayout#自定義樣式# %r 時(shí)間 0# %t 方法名 main# %p 優(yōu)先級(jí) DEBUG/INFO/ERROR# %c 所屬類的全名(包括包名)# %l 發(fā)生的位置,在某個(gè)類的某行# %m 輸出代碼中指定的訊息,如log(message)中的message# %n 輸出一個(gè)換行l(wèi)og4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%t][%p] -%l %m%n
在上面代碼中,常量APP_ID
在百度云控制臺(tái)中創(chuàng)建,常量API_KEY
與SECRET_KEY
是在創(chuàng)建完畢應(yīng)用后,系統(tǒng)分配給用戶的,均為字符串,用于標(biāo)識(shí)用戶,為訪問做簽名驗(yàn)證,可在AI服務(wù)控制臺(tái)中的應(yīng)用列表中查看。
如果用戶需要配置AipSpeech的一些細(xì)節(jié)參數(shù),可以在構(gòu)造AipSpeech之后調(diào)用接口設(shè)置參數(shù),目前只支持以下參數(shù):
接口 | 說明 |
---|---|
setConnectionTimeoutInMillis | 建立連接的超時(shí)時(shí)間(單位:毫秒) |
setSocketTimeoutInMillis | 通過打開的連接傳輸數(shù)據(jù)的超時(shí)時(shí)間(單位:毫秒) |
setHttpProxy | 設(shè)置http代理服務(wù)器 |
setSocketProxy | 設(shè)置socket代理服務(wù)器 (http和socket類型代理服務(wù)器只能二選一) |
基于該接口,開發(fā)者可以輕松的獲取語音合成能力
合成文本長度必須小于1024字節(jié),如果本文長度較長,可以采用多次請(qǐng)求的方式。文本長度不可超過限制
舉例,要把一段文字合成為語音文件:
public void synthesis(AipSpeech client) { TtsResponse res = client.synthesis("你好百度", "zh", 1, null); System.out.println(res.getErrorCode()); // 設(shè)置可選參數(shù) HashMap<String, Object> options = new HashMap<String, Object>(); options.put("spd", "5"); options.put("pit", "5"); options.put("per", "4"); TtsResponse res = client.synthesis("你好百度", "zh", 1, options); System.out.println(res.getErrorCode()); JSONObject result = res.getResult(); //服務(wù)器返回的內(nèi)容,合成成功時(shí)為null,失敗時(shí)包含error_no等信息 byte[] data = res.getData(); //生成的音頻數(shù)據(jù)}
參數(shù) | 類型 | 描述 | 是否必須 |
---|---|---|---|
tex | String | 合成的文本,使用UTF-8編碼, 請(qǐng)注意文本長度必須小于1024字節(jié) | 是 |
cuid | String | 用戶唯一標(biāo)識(shí),用來區(qū)分用戶, 填寫機(jī)器 MAC 地址或 IMEI 碼,長度為60以內(nèi) | 否 |
spd | String | 語速,取值0-9,默認(rèn)為5中語速 | 否 |
pit | String | 音調(diào),取值0-9,默認(rèn)為5中語調(diào) | 否 |
vol | String | 音量,取值0-15,默認(rèn)為5中音量 | 否 |
per | String | 發(fā)音人選擇, 0為女聲,1為男聲, 3為情感合成-度逍遙,4為情感合成-度丫丫,默認(rèn)為普通女 | 否 |
返回樣例:
返回TtsResponse類。 如果合成成功,下行數(shù)據(jù)為二進(jìn)制語音文件,包含在data中。 如果合成出現(xiàn)錯(cuò)誤,則會(huì)填充返回值到result中。
返回失?。?/p>
// 失敗返回{ "err_no":500, "err_msg":"notsupport.", "sn":"abcdefgh", "idx":1}
若請(qǐng)求錯(cuò)誤,服務(wù)器將返回的JSON文本包含以下參數(shù):
error_code:錯(cuò)誤碼。
error_msg:錯(cuò)誤描述信息,幫助理解和解決發(fā)生的錯(cuò)誤。
SDK本地檢測參數(shù)返回的錯(cuò)誤碼:
error_code | error_msg | 備注 |
---|---|---|
SDK108 | connection or read data time out | 連接超時(shí)或讀取數(shù)據(jù)超時(shí) |
服務(wù)端返回的錯(cuò)誤碼
錯(cuò)誤碼 | 含義 |
---|---|
500 | 不支持的輸入 |
501 | 輸入?yún)?shù)不正確 |
502 | token驗(yàn)證失敗 |
503 | 合成后端錯(cuò)誤 |