语音合成 Android SDK
1. 文档说明
| 文档名称 | 语音离线合成集成文档 |
|---|---|
| 所属平台 | Android |
| 提交日期 | 2025-11-11 |
| 概述 | 本文档是百度语音开放平台Andriod SDK的用户指南,描述了在线合成,离线合成等相关接口的使用说明。 合成的策略是边下载边播放,区别于Rest Api一次性下载整个录音文件。离线语音合成SDK包含基础音库,在线语音合成SDK无需音库资源即可调用,请您前往语音合成SDK资源按需下载;新版SDK自带音库已更新至4.9版本,若音库无法使用,请点击下载基础音库v4.6版。离线语音合成SDK需要申请SN,将SN填入SDK后,首次联网会自动下载授权文件。TtsMode.MIX 及TtsMode.OFFLINE的离线合成均需要授权文件没有过期。 |
2. 版本说明
| 名称 | 版本号 |
|---|---|
| 语音合成 | 6.2.7 |
| 系统支持 | android 5.1+ |
| 架构支持 | armeabi-v7a,arm64-v8a,x86,x86_64 |
2.1 版本升级改动点说明:
- 提升SDK稳定性
- 离线发音人听感调优
- 支持更多授权方式
3. SDK说明
| 文件名称 | 版本号 | 说明 |
|---|---|---|
| com.baidu.aipd.tts_6.2.7.53b015e_20250704180845.aar | 6.2.7.53b015e | 离线合成SDK约8.3M |
4. Demo运行
从百度云控制台下载Demo,下载完成后解压demo,并用android stdio打开该项目
4.1 配置包名和签名
从百度云控制台下载Demo之后,需要在build.gradle中配置好包名,且包名和控制台应用包名一致。
4.2 修改鉴权
4.2.1 离线SDK鉴权
若AppId、包名、序列号SN 3个信息完全正确,SDK将自动下载鉴权文件,否则会有-102或-109错误。
在百度云网站上申请自己的语音合成的应用后,能够获取AppId、AppKey、AppSecret及Android包名 4个鉴权信息 , 序列号SN申请的具体流程参考语音技术 (baidu.com)。 申请成功后在 MainActivity 中的 setOfflineParam 方法处填写 AppId 和 SN:
4.2.2 在线SDK鉴权
在线sdk分为4种激活方式,实际使用种选择其中一种方式进行激活,4种激活方法详细描述如下:
| 激活方式 | 说明 |
|---|---|
| Appkey SecretKey激活 | 在百度云网站申请自己的语音合成应用后,会有appKey、appSecret鉴权信息,使用该方法进行在线鉴权,每次启动app需激活一次,不退出app永久有效 |
| 永久iamKey激活 | 需在官网申请的永久iamKey,使用该方法进行在线鉴权,每次启动app需激活一次,不退出app永久有效 |
| accessToken激活 | 需在使用appkey和secretKey获取的access_token,使用access_token进行授权,该token存在时限,时间到期后需要从新获取新的token从新授权 |
| 临时iamKey激活 | 与accessToken类似,需获取临时iamKey,该key存在时限,时间到期后需要从新获取新的key从新授权 |
1. AppKey SecretKey激活方式:
百度云网站上申请自己语音合成的应用后,会有appId、appKey、appSecret及android包名 4个鉴权信息,申请地址为百度云应用列表
申请成功后在MainActivity中setOnlineParam方法中填写apiKey和 secretKey进行授权:
- 设置ak和sk
- ak sk 设置到sdk中
2. 永久iamKey激活方式:
“永久iamKey激活”和“appKey secretKey激活”类似。
- 将官网申请的永久iamKey放到项目中
- 将iamKey传入接口,此步骤需要使用AipeSpeechSynthesizer类,不能使用SpeechSynthesizer进行设置
3. 临时accessToken和临时iam key激活方式:
accessToken和临时iamKey为相同接口,接口会随时间失效,客户需要在callback中创建http请求获取到对应token返回给sdk,sdk会在过期前3分钟通过callback重新向客户端获取最新token。
accessToken获取地址:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
iamKey获取地址:https://cloud.baidu.com/doc/AI_REFERENCE/s/Hm5us339w
- 将accessToken或iamKey 还有过期时间返回给sdk
- 将callback传递到sdk中
5. SDK集成
TTS SDK在线版本为com.baidu.aipd.tts_6.2.7.53b015e_20250704180845.aar 库,离线版本为com.baidu.tts_6.2.7.53b015e_20250704180845.aar。
将app/libs/com.baidu.aipd.tts_6.2.7.fb21735_20250613180318.aar复制到您的项目的同名目录中,确认在build.gradle文件中引入。
build.gradle 文件及包名确认
- 根目录下build.gradle确认下gradle的版本。
- app/build.gradle 确认下 applicationId 包名是否与官网申请应用时相一致(离线功能需要)。 demo的包名是"com.baidu.tts.sample"。
DEMO压缩包说明
DEMO压缩包下载即可运行,其中DEMO内已经附带了SDK的库。
com.baidu.aipd.tts_6.2.7.53b015e_20250704180845.aar 位于 app/libs 目录下。
6. 授权文件、离线资源文件
请选择激活方式(离线、ak\sk、iamKey、accessToken),并将百度云控制台创建应用时获取的语音(APPID) SN、APPKEY/SECRET KEY 、accessToken或iamKey填写到项目 并填写包名。
离线资源文件--发音人(支持16个不同发音人)
离线合成SDK默认自带4个普通音库资源文件,精品音库资源文件需单独下载。2.6.2及之前版本SDK暂不支持兼容当前版本资源文件,需配合旧版本资源文件使用。
SDK默认自带离线资源文件
| 资源文件 | 具体文件名 |
|---|---|
| m15 离线男声(度小宇) | bd_etts_common_speech_duxiaoyu_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| f7 离线女声(度小美) | bd_etts_common_speech_duxiaomei_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| yy 离线度逍遥 | bd_etts_common_speech_duxiaoyao_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
| c1 离线度丫丫 | bd_etts_common_speech_duyaya_mand_eng_high_am-tac-csubgan16k_v4.9.0_20220419_20251031153737.dat |
| 中文离线文本模型 | bd_etts_common_text_txt_all_mand_eng_middle_big_v6.0.0_20240731.dat |
需要单独下载的精品音库资源文件
| 资源文件 | 具体文件名 |
|---|---|
| f4 离线度小娇 | bd_etts_common_speech_duxiaojiao_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| c3 离线度米朵 | bd_etts_common_speech_dumiduo_mand_eng_high_am-tac-csubgan16k_v4.9.0_20220419_20251031153737.dat |
| wyg 离线度博文 | bd_etts_common_speech_dubowen_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| c4 离线度小童 | bd_etts_common_speech_duxiaotong_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
| f8 离线度小萌 | bd_etts_common_speech_duxiaomeng_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| f12dt 度小乔 | bd_etts_common_speech_duxiaoqiao_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| f17 度小鹿 | bd_etts_common_speech_duxiaolu_mand_eng_high_am-tac-csubgan16k_v4.9.0_20240918_20251031153737.dat |
| f10tw 度小台 | bd_etts_common_speech_duxiaotai_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
| m8 度小贤 | bd_etts_common_speech_duxiaoxian_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
| gezi 度小雯 | bd_etts_common_speech_duxiaowen_mand_eng_high_am-tac-csubgan16k_v4.9.0_20230927_20251031153737.dat |
| 粤语离线文本模型 | bd_etts_common_text_txt_all_cant_eng_middle_big_v6.0.0_20220916.dat |
| f13can 度小粤 | bd_etts_common_speech_duxiaoyue_cant_eng_high_am-tac-csubgan16k_v4.9.0_20220419_20251031153737.dat |
| 英文离线文本模型 | bd_etts_common_text_txt_all_mand_eng_middle_big_v6.0.0_20240731.dat(同中文) |
| fnat 度小译 | bd_etts_common_speech_duxiaoyi_mand_eng_high_am-tac-csubgan16k_v4.9.0_20251028_20251031153737.dat |
在线时支持11种发音
普通音库:普通女声 普通男声 情感男声<度逍遥> 情感儿童声<度丫丫>
精品音库: 度逍遥-磁性男声 度博文-情感男声 度小童-活泼男童 度小鹿-甜美女声 度小娇-情感女声 度米朵-可爱女童 度小萌-可爱女童
具体效果可以在在线合成体验窗口上测试。
7. 语音合成相关接口
7.1 初始化初接口
| 获取 AipeSpeechSynthesizer实例 |
|---|
| AipeSpeechSynthesizer mSpeechSynthesizer = new AipeSpeechSynthesizer(context) |
设置合成结果的回调
如合成成功后,SDK会调用用户设置的SpeechSynthesizerListener 里的回调方法
1mSpeechSynthesizer.setSpeechSynthesizerListener(listener); //listener是SpeechSynthesizerListener 的实现类,需要实现您自己的业务逻辑。SDK合成后会对这个类的方法进行回调。
设置 激活参数
在语音官网或者百度云网站上申请语音合成的应用后,会有appId、appKey、appSecret及android包名 4个鉴权信息,可选择离线激活、在线激活、正式iamKey激活和临时tocken激活4种激活方式
1 /* 离线激活方式 */
2 // 设置离线需要的app_id,在开放平台注册app时获取
3 speechSynthesizer.setParam(SpeechSynthesizer.PARAM_APP_ID, "填入您的appid");
4 // 设置离线需要的认证参数,产品SN
5 speechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUTH_SN, "输入您的sn");
1 /* aksk激活方式*/
2 // 设置在线需要的正式apiKey
3 speechSynthesizer.setParam(SpeechSynthesizer.PARAM_API_KEY, "填入您的apiKey");
4 // 设置在线需要的正式secretKey
5 speechSynthesizer.setParam(SpeechSynthesizer.PARAM_SECRET_KEY, "输入您的secretKey");
6
1 /* 永久iam key激活方式 */
2 // 设置在线需要的正式iam key
3 speechSynthesizer.setParam(SpeechSynthesizer.PARAM_ACCESS_TOKEN, "输入您的永久iam key");
4
1 /* 临时token激活方法 */
2 // 设置在线需要的临时token callback
3 speechSynthesizer.setParam(new TokenCallback() {
4 @Override
5 public TemporaryToken getToken() {
6 .../*通过网络请求获取临时accessTocken或临时iamKey*/
7 return "临时accessTocken或临时iamKey";
8 }
9 });
10
如果需要使用离线合成功能的话,请在申请的语音合成的应用填写您自己的包名,若使用demo的包名是“com.baidu.tts.sample", 定义在build.gradle中。
合成参数
在SpeechSynthesizer类中setParam 方法中使用的参数及值。 填入的值如果不在范围内,相当于没有填写使用默认值。
| 参数名 | 类型,值 | 在线/离线生效 | 常用程度 | 解释 |
|---|---|---|---|---|
| PARAM_SPEAKER(基础发音人) | 选项 | 在线 | 常用 | 仅在线生效,在线的发音 |
| ~ | "0"(默认) | ~ | ~ | 度小美(普通女声) |
| ~ | "1" | ~ | ~ | 度小宇(成熟男声) |
| ~ | "3" | ~ | ~ | 度逍遥(磁性男声) |
| ~ | "4" | ~ | ~ | 度丫丫(可爱女童) |
| PARAM_SPEAKER (精品发音人) | "106" | ~ | ~ | 度博文(情感男声) |
| ~ | "110" | ~ | ~ | 度小童(情感儿童声) |
| ~ | "111" | ~ | ~ | 度小萌(情感女声) |
| ~ | "103" | ~ | ~ | 度米朵(情感儿童声) |
| ~ | "5" | ~ | ~ | 度小娇(情感女声) |
| ~ | "5003" | ~ | ~ | 精品度逍遥(磁性男声) |
| ~ | "5118" | ~ | ~ | 度小鹿(甜美女声) |
| PARAM_VOLUME | String, 默认"5" | 全部 | 常用 | 在线及离线合成的音量 。范围["0" - "15"], 不支持小数。 "0" 最轻,"15" 最响(取值为0时为音量最小值,并非为无声) |
| PARAM_SPEED | String, 默认"5" | 全部 | 常用 | 在线及离线合成的语速 。范围["0" - "15"], 不支持小数。 "0" 最慢,"15" 最快(如需更高语速可提交需求工单或联系商务同学申请) |
| PARAM_PITCH | String, 默认"5" | 全部 | 常用 | 在线及离线合成的语调 。范围["0" - "15"], 不支持小数。 "0" 最低沉, "15" 最尖 |
| PARAM_MIX_MODE | 选项 | 全部 | 常用 | 控制何种网络状况切换到离线。设置initTts(SpeechSynthesizer.PARAM_MIX_MODE)后,该参数生效。 |
| ~ | MIX_MODE_DEFAULT(默认) | ~ | ~ | WIFI 使用在线合成,非WIFI使用离线合成 |
| ~ | MIX_MODE_HIGH_SPEED_NETWORK | ~ | ~ | WIFI,5G,4G 使用在线合成,其他使用离线合成 |
| ~ | MIX_MODE_HIGH_SPEED_SYNTHESIZE | ~ | ~ | 同MIX_MODE_HIGH_SPEED_NETWORK。但是连接百度服务器超时1.2s后,自动切换离线合成引擎 |
| ~ | MIX_MODE_HIGH_SPEED_SYNTHESIZE_WIFI | ~ | ~ | 同 MIX_MODE_DEFAULT。 但是连接百度服务器超时1.2s后,自动切换离线合成引擎 |
| PARAM_MIX_MODE_TIMEOUT(MIX模式下生效) | 选项 | 离在线混合模式 | 不常用 | 离在线模式,强制在线优先。在线请求后超时xx秒后,转为离线合成。 |
| PARAM_TTS_TEXT_MODEL_FILE | String , 文件路径 | 离线 | 常用 | 文本模型文件路径,即bd_etts_text.dat所在的路径。 |
| PARAM_TTS_SPEECH_MODEL_FILE | String , 文件路径 | 离线 | 常用 | 声学模型文件路径。即"bd_etts_speech_female.dat“所在的路径。需要男声,请使用bd_etts_speech_male.dat。 |
| PARAM_AUDIO_ENCODE | 选项 | 在线 | 基本不用 | 不使用改参数即可。SDK与服务器音频传输格式,与 PARAMAUDIO_RATE参数一起使用。可选值为SpeechSynthesizer.AUDIO_ENCODE*, 其中SpeechSynthesizer.AUDIO_ENCODE_PCM为不压缩 |
| PARAM_AUDIO_RATE | 选项 | 在线 | 基本不用 | 不使用改参数即可。SDK与服务器音频传输格式,与 PARAMAUDIO_ENCODE参数一起使用。可选值为SpeechSynthesizer.AUDIO_BITRATE*, 其中SpeechSynthesizer.AUDIO_BITRATE_PCM 为不压缩传输 |
| PARAM_TTS_LICENCE_FILE | String , 文件路径 | 离线 | 基本不用 | 临时授权文件。目前SDK会自动下载正式授权文件。 |
初始化合成引擎
设置合成的参数后,需要调用此方法初始化。
- 在线激活初始化方法如下
1// 初始化在线tts服务,服务会读取相应资源进行加载,此过程是耗时操作
2 ITtsError ttsError = speechSynthesizer.loadOnlineTts();
- 离线激活初始化方法如下
1 // 初始化离线tts服务,服务会读取相应离线资源进行加载,此过程是耗时操作
2 ITtsError ttsError = speechSynthesizer.loadOfflineTts();
控制接口
合成及播放接口
如果需要合成后立即播放的请调用speak方法,如果只需要合成请调用synthesize方法。
该接口线程安全,可以快速多次调用。内部采用排队策略,调用后将自动加入队列,SDK会按照队列的顺序进行合成及播放。 注意需要合成的每个文本text不超过120的GBK字节,即60个汉字或英文字母数字。超过请自行按照句号问号等标点切分,调用多次合成接口。
返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节
speak方法示例:
1 ITtsError speak(TtsEntity ttsEntity)// utteranceId在SpeechSynthesizerListener 相关事件方法中回调
2
3 TtsEntity ttsEntity = new TtsEntity(text, TtsMode.MIX);
4 ITtsError ttsError = speechSynthesizer.speak(ttsEntity);
synthesize方法示例:
1 ITtsError synthesize(TtsEntity ttsEntity) // utteranceId在SpeechSynthesizerListener 相关事件方法中回调
2
3 ITtsError ttsError = speechSynthesizer.synthesize(new TtsEntity(text, TtsMode.MIX));
调用这两个方法后,SDK会回调SpeechSynthesizerListener中的onSynthesizeResponse方法。 音频数据在SynthesizerResponse参数的getAudioData方法中格式为byte[],采样率16K 16bits编码 单声道。连续将audioData写入一个文件,即可作为一个可以播放的pcm文件(采样率16K 16bits编码 单声道)。
批量合成并播放接口
推荐连续调用speak方法,sdk内部有队列缓冲。 可以循环Speak方法传入多个文本并进行排队合成并播放。 注意需要合成的每个文本text不超过120的GBK字节,即60个汉字或英文字母数字。(默认限制队列最多支持合成5条,如需增加可通过PARAM_MAX_QUEUE_SIZE修改,) 以下为批量调用示例:
1String[] a = {
2 "123456",
3 "你好",
4 "使用百度语音合成SDK",
5 "hello",
6 "hello",
7 "这是一个demo工程"};
8for (int i = 0 ; i < a.length ;i++) {
9 TtsEntity ttsEntity = new TtsEntity(a[i], TtsMode.MIX);
10 ITtsError ttsError = mSpeechSynthesizer.speak(ttsEntity);
11 LoggerProxy.d(TAG, "sn = " + ttsEntity.getSn() + " , synthesize = " + ttsError.getDetailCode());
12}
ITtsError.getDetailCode()返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节。
批量合成切换发音人
sdk批量合成支持每个文本使用不同发音人播报的功能,将每个文本的发音人信息放到map中传递给TTSEntity进行播报,以下为调用示例:
1String[] a = {
2 "123456",
3 "你好",
4};
5for (int i = 0 ; i < a.length ;i++) {
6 HashMap<String, String> ttsParams = new HashMap<>();
7 JSONObject jsonObject = new JSONObject();
8 try {
9 jsonObject.put(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE,"文本资源路径");
10 jsonObject.put(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE,"发音人路径");
11 ttsParams.put(SpeechSynthesizer.PARAM_OFFLINE_MODEL, jsonObject.toString());
12 TtsEntity ttsEntity = new TtsEntity(a[i], TtsMode.MIX , ttsParams);
13 ITtsError ttsError = mSpeechSynthesizer.speak(ttsEntity);
14 } catch (JSONException e) {
15 throw new RuntimeException(e);
16 }
17}
播放过程中的暂停及继续
仅speak方法调用后有效。可以使用pause暂停当前的播放。pause暂停后,可使用resume进行播放。
1int result = mSpeechSynthesizer.pause();
2int result = mSpeechSynthesizer.resume();
返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节
停止合成并停止播放
取消当前的合成。并停止播放。
1int result = mSpeechSynthesizer.stop();
返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节
其它接口
打开调试日志(重要)
1 LoggerProxy.printable(true); // 日志打印在logcat中
2 LoggerProxy.saveNativeLogFile("PRINTF:0"); // 设置日志级别 0:debug级别 ;1:trace级别;2:fatal级别。
开启成功后会看见bdtts-开头的tag日志,建议上线后完全没问题再由服务端控制关闭。
日志输出截图:
判断模型文件是否有效(重要)
1SynthesizerTool.verifyModelFile(“/path/to/bd_etts_eng_common_text_all_xxxx.dat”) ;//判断文本资源
2SynthesizerTool.verifyModelFile(“/path/to/bd_etts_common_speech_xxxx.dat”) ;//判断音库资源
释放资源
不再使用后,请释放资源,并将mSpeechSynthesizer设为null。如果需要再次使用,可以通过SpeechSynthesizer.getInstance() 获取,并重复上述流程。
1int result = mSpeechSynthesizer.release();
返回结果不为0,表示出错。错误码请参见“错误码及解决方法”一节
切换离线发音
切换离线发音人接口。 SDK默认只有4种离线,用这个方法可以切换离线发音人。 离线合成时的参数,填入两个资源文件的路径。如果切换的话,也是使用这两个文件路径。
注意:必须在引擎空闲的时候调用这个方法,否则有不为0的错误码返回。空闲是指最后一个合成回调onSynthesizeFinish 之后。
1try {
2 JSONObject jsonObject = new JSONObject();
3 jsonObject.put(SpeechSynthesizer.PARAM_TTS_TEXT_MODEL_FILE,"文本资源路径");
4 jsonObject.put(SpeechSynthesizer.PARAM_TTS_SPEECH_MODEL_FILE,"音库资源路径");
5 speechSynthesizer.setParam(SpeechSynthesizer.PARAM_OFFLINE_MODEL, jsonObject.toString());
6 } catch (JSONException e) {
7 e.printStackTrace();
8 }
SpeechSynthesizerListener回调方法
1public void onSynthesizeResponse(SynthesizerResponse synthesizerResponse)
SynthesizerResponse 输出参数
合成回调事件统一由 public void onSynthesizeResponse(SynthesizerResponse synthesizerResponse) 该方法回调。其中SynthesizerResponse对象包含合成进度 、音频数据、合成状态等,方法以及说明如下:
| 方法名 | 类型 | 值 | 描述 |
|---|---|---|---|
| getSynthesizeType | enum | SYNTHESIZE_START | 合成开始时的回调接口 |
| SYNTHESIZE_DATA_ARRIVED | 合成过程中的回调接口 | ||
| SYNTHESIZE_FINISH | 合成正常结束时的回调接口 | ||
| SYNTHESIZE_ERROR | 合成出错时的回调接口 | ||
| PLAY_START | 合成播报开始时的回调接口 | ||
| PLAY_PROGRESS | 合成播报过程中的回调接口 | ||
| PLAY_FINISH | 合成播报正常结束时的回调接口 | ||
| ON_NEXT | 篇章合成播报填充数据的回调接口 | ||
| getUtteranceId | String | 获取合成标识 id | |
| getInstanceId | String | 获取当前实例 id | |
| getAudioProgress | int | 获取合成进度,在合成过程中会返回该结果 | |
| getEngineType | int | 0 在线,1 离线 | 获取合成类型。0 在线,1 离线 |
| getAudioSampleRate | int | 当前音频采样率 | |
| getAudioData | byte[] | 当前音频数据 | |
| getSynthesizerError | String | 获取相关的错误信息 |
8. 错误码及解决方法
生成错误码共2处位置:
- 调用接口的方法时的返回,如initTTs方法的返回
- onError(String utteranceId,SpeechError error); SpeechError 中的code
| 错误码值 | 错误码描述 |
|---|---|
| -1 | 在线引擎授权失败 |
| -4 | 在线授权中断异常 |
| -5 | 在线授权执行时异常 |
| -6 | 在线授权时间超时 |
| -7 | 在线合成返回错误信息 |
| -10 | 在线引擎合成时异常 |
| -11 | 当前 mode 不支持的操作 |
| -12 | 在线合成请求解析出错 |
| -15 | 在线合成获取合成结果超时 |
| -16 | 在线授权被取消 |
| -18 | 在线合成无效的主机名 |
| -19 | 在线合成读数据失败 |
| -20 | 在线合成连接失败 |
| -21 | 在线合成 socket 异常 |
| -24 | 在线合成请求主机名为空 |
| -25 | 在线合成发送数据失败 |
| -29 | 在线合成接收前缀数据长度错误 |
| -30 | 在线合成接收数据长度错误 |
| -31 | 在线合成合成数据包速度过快 |
| -32 | 在线合成网络未知类型错误 |
| -39 | 在线服务临时错误 |
| -100 | 离线引擎授权失败 |
| -102 | 离线授权下载License失败 |
| -105 | 离线授权中断异常 |
| -106 | 离线授权执行时异常 |
| -107 | 离线授权执行时间超时 |
| -108 | 离线合成引擎初始化失败 |
| -110 | 离线合成时异常 |
| -111 | 离线合成返回值非0 |
| -118 | 鉴权被取消 |
| -122 | 离线 tts_offline_resource 文件异常 |
| -123 | 离线发音人参数异常 |
| -124 | 下载 license 失败,sn 参数异常 |
| -125 | 离线合成文本为空 |
| -200 | 混合引擎离线在线都授权失败 |
| -204 | 混合引擎初始化 tts 时,离线初始化失败 |
| -206 | 混合引擎初始化 tts 时,在线初始化失败 |
| -300 | 合成文本为空 |
| -301 | 合成文本长度过长(不要超过 GBK1024 个字节) |
| -302 | 合成文本无法获取GBK字节 |
| -401 | TTS模式无效 |
| -402 | TTS合成队列已满(最大限度为1000) |
| -406 | TTS被调用方法参数无效 |
| -500 | Context被释放或为空 |
| -700 | 播报的短音频文件不存在 |
| -701 | 当前接口不支持播报短音频 |
| -800 | 当前实例已经被释放,禁止调用该实例的任何API |
| -1001 | 模型管理请求出错 |
| -1002 | 模型管理服务器端错误 |
| -1003 | 模型管理数据库模型信息无效 |
| -1004 | 模型管理数据库模型文件信息无效 |
| -1005 | 模型数据已经存在( 或已下载) |
| -1006 | 无法获取到模型信息 |
| -1007 | 无法获取到模型文件信息 |
| -1008 | 模型检查过程异常 |
| -1009 | 模型文件下载时异常 |
| -9999 | 未知错误 |
常见错误码及解决方案
| 错误码 | 含义 | 可能原因 | 自查指南 | 解决办法 |
|---|---|---|---|---|
| -102 | 离线授权下载license失败 | 1.网络不佳 2.授权码额度耗尽3.SN已经绑定其他设备导致下载license失败 | 1. 检查离线联网授权时的网络环境;2.确认SN序列号是否还有额度3.确认SN之前是否绑定过其他设备(刷机等更改设备信息的操作都是导致下载license失败) | 1. 更换稳定的网络环境;2. 补充SN序列号额度(产品线授权方式)3. 如绑定过其他设备更换新的授权SN(设备数授权方式) |
| -108 | 离线合成引擎初始化失败 | loadmodel的资源文件 离线音库文件 没加载 | 1.确认音库文件是否下载;2.是否在指定位置加载;3. 判断模型文件是否有效 点击 | 1.如加载位置没有对应的文本和音库文件,手动复制文件到指定位置;2.可以尝试删除应用,重新安装测试 |
| 同上 | loadmodel时合成引擎不空闲 | sdk只支持同一语种的不同发音人使用loadModel方法切换,例如,度小美切换度丫丫。如果是中文切英文或者粤语,需要反初始化后再初始化 | 如需要切换不同的文本资源,请先调用release方法,再次执行新的文本资源初始化 | |
| 同上 | 其他 | 初始化添加LoggerProxy.printable(true);保存启动app到报错的完整日志 | 提供日志,百度侧进一步判断 | |
| -119 | SN序列号不合法 | SN序列号不在有效期内 | 核对绑定的SN序列号 | 更换合法SN序列号 |
| 同上 | SN序列号已被绑定 | 需要确认SN序列号是否已经绑定其他设备,或者设备刷机等导致cuid变更操作 | 反馈给百度侧,进一步判断 | |
| 鉴权未通过 | 鉴权信息错误 |
需要确认SN序列号外的其他鉴权信息 |
填写正确的鉴权信息,注意空格 |
|
| -204 | 离线合成初始化失败 | 设备的系统时间超出license时效 | 确认设备的系统时间是否正常 | 校验系统时间 |
| 同上 | license 超出有效期 | 确认SN序列号在有效期内 | 更换有效期内授权SN |
9. 代码混淆
1 -keep class com.baidu.tts.**{*;}
2 -keep class com.baidu.speechsynthesizer.**{*;}
10. 权限
| 名称 | 说明 | 必选 |
|---|---|---|
| 必要的权限 | ||
| android.permission.INTERNET | 允许访问网络 | 是 |
| android.permission.ACCESS_NETWORK_STATE | 获取网络状态权限 | 是 |
| android.permission.MODIFY_AUDIO_SETTINGS | 允许程序修改全局音频设置 | 是 |
| android.permission.WRITE_EXTERNAL_STORAGE | 外置卡读写权限 | 是 |
| android.permission.ACCESS_WIFI_STATE | 获取网络状态权限 | 是 |
| 非必要权限 | ||
| android.permission.CHANGE_WIFI_STATE | 允许程序改变Wi-Fi连接状态 | 否 |
11. 不使用离线合成,只使用在线合成
删除离线音库文件,并且设置合成模式为online在线模式 ,speechSynthesizer.speak(new TtsEntity(text, TtsMode.ONLINE));
