简介
所有文档

          语音技术

          简介

          概述

          本文档是百度语音开放平台Andriod SDK的用户指南,描述了在线合成,离线合成等相关接口的使用说明。 合成的策略是边下载边播放。区别于Rest Api一次性下载整个录音文件。

          纯离线语音合成SDK可直接在设备终端进行语音合成,首次使用需要联网,其余时间均可以使用离线合成,为您提供稳定一致、流畅自然的合成体验。

          离线语音合成SDK需要申请SN。将SN填入SDK后,首次联网会自动下载授权文件。TtsMode.MIX 及TtsMode.OFFLINE的离线合成均需要授权文件没有过期。

          兼容性

          类别 兼容范围
          系统 支持Android 2.3 以上版本 API LEVEL 9
          机型 上市的android手机和平板。对其它android设备及订制系统不做官方支持
          硬件要求 要求设备上有麦克风
          网络 支持移动网络(包括2G等)、WIFI等网络环境
          开发环境 建议使用最新版本Android Studio 进行开发

          版本更新

          日期 jar文件版本 更新内容
          2021-03-24 com.baidu.tts_2.6.2.2.20200629_44818d4.jar 优化离线合成引擎
          2020-12-23 com.baidu.tts_2.6.2.2.20200629_44818d4.jar bug修复,提升稳定性
          2020-07-21 com.baidu.tts_2.6.2.2.20200629_44818d4.jar 增加2个精品音库,调整合成字节数
          2020-05-21 com.baidu.tts_2.6.1.109.20200424_be04a21.jar bug修复
          2019-12-25 com.baidu.tts_2.6.1.103.20191014_618cb8c.jar 更新离线引擎及离线发音资源
          2019-11-18 com.baidu.tts_2.5.1.103.20190806_a05bdd9.jar 修正32位机型授权时间
          2019-08-21 com.baidu.tts_2.5.1.103.20190215_69ab312.jar 新增 TtsMode.OFFLINE 模式

          NDK so库架构

          共计5个架构目录:armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,每个架构下均有以下5个so库文件。 如果为了节省安装包体积,可以只使用armeabi目录,性能损失微小。

          资源名称 资源大小
          libbd_etts.so 约1.6M
          libBDSpeechDecoder_V1.so 约400k
          libgnustl_shared.so 约700k

          如果仅需要在线功能,请使用纯在线合成sdk

          DEMO压缩包说明

          DEMO压缩包下载即可运行,其中DEMO内已经附带了SDK的库。

          • com.baidu.tts_x.x.x.xxxxx_xxxxx.jar 位于 app/libs 目录下。
          • armeabi,armeabi-v7a,arm64-v8a,x86,x86_64 5个架构目录位于app\src\main\jniLibs 目录下

          功能测试

          AppId AppKey SecretKey 包名 序列号SN 5个信息必须完全正确后,SDK会自动下载鉴权文件。否则会有-102或-109错误。

          可以在百度云网站上申请自己语音合成的应用后,会有appId、appKey、appSecret及android包名 4个鉴权信息, 修改app/src/main/assets/auth.properties 里的4个字段 , 并修改app/build.gradle里 defaultConfig.applicationId为包名:

          修改app/src/main/assets/auth.properties 里的全部字段:

          # 网页上应用的appId,申请纯离线SDK的必备信息
          appId:160xxx99
          # 网页上应用的appKey
          appKey:qCGpxxxxqnnCwyDxxxxxxxx
          # 网页上应用的secretKey
          secretKey:Axxxxxxxr1dR0cxxxxxx
          # 测试或正式购买的SN,随邮件一起提供
          sn:9b45e272-7b2c7603-0051-00af-xxxxx
          # 包名,这个值必须和app/build.gradle 里 defaultConfig.applicationId一致,即必须为context.getPackageName()
          applicationId:com.baidu.tts.sample

          包名需要填写在demo中的app/build.gradle文件中 。demo的包名填写在`applicationId "com.baidu.tts.sample"

          如果您依旧不清楚5个信息如何填写,请查看demo中doc_integration_DOCUMENT/sn_fill.docx 图文教程

          鉴权说明

          离线合成功能需要一个正式授权文件。正式授权由SDK内部管理,无对外接口。正式授权文件在第一次在线联网调用initTts方法时,SDK自动下载正式授权文件。正式授权文件有效期为具体购买的时长。

          AppId AppKey SecretKey 包名 序列号SN 5个信息必须完全正确后,SDK会自动下载鉴权文件。否则会有-102错误。

          1. 每个序列号激活时sdk自动下载鉴权信息,鉴权信息中含有过期时间。如果过期后这个sn对应的鉴权失败,离线合成不可使用。
          2. 如果授权文件没有过期,填入新的SN,授权文件会失效,SDK会自动更新授权文件。
          3. 同一台设备,如果app卸载后,授权信息会一并删除。这时重新安装输入之前的SN,新下载的授权文件过期时间不变,即同sn绑定。

          举例说明:

          SN1 是 2019年3月1号申请的,有效期截止日期在2020年3月1号。

          SN2 是 2019年3月1号申请的,有效期截止日期在2021年4月1号。

          • 有一个APP在2019年4月15号首次使用SN1填入SDK,如果激活成功,那么这个设备的授权文件在2020年3月1号过期(SN1的有效期截止日期)。
          • 如果App没有卸载过,在2020年2月1日填入SN2到SDK,则原授权文件失效,会使用SN2下载新的授权文件,新的授权文件过期时间为2021年4月1号(SN2的有效期截止日期)。
          • 如果在2019年3月17号这个app有卸载,APP再次安装时,SDK会根据SN1下载授权文件,过期时间依旧是2020年3月1号。
          • 如果卸载后重新安装的APP中填入的是SN2,SDK则会根据SN2下载授权文件,新的授权文件过期时间为2021年4月1号过期(SN2的有效期截止日期)。

          鉴权注意点

          添加SN参数, 必须定义在调用auth方法之前

           mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUTH_SN, "YOUR_SN");

          版本库信息

          SynthesizerTool.getEngineVersion();
           //30601
          SynthesizerTool.getEngineInfo(); 
          //{"version":"30600","domain":["navi","common","user_custom"],"language":["chn","eng"],"quality":["high","middle"],"etts_unique":["ETTS_UNIQUE:3.6.1_b539ebc"]}
          SynthesizerTool.getModelInfo("/path/to/bd_etts_common_text_txt_all_mand_eng_middle_big_v3.4.2_20190710.dat");
          //{"data_type":"text","version":"30402","domain":"common","date":"20190710","language":"mand_eng","quality":"middle"}
          SynthesizerTool.getModelInfo("/path/to/bd_etts_common_speech_f7_mand_eng_high_am-mgc_v3.6.0_20190117.dat") //离线女声
          //{"data_type":"speech","version":"30600","domain":"common","date":"20190117","language":"mand_eng","speaker":"f7","gender":"female","quality":"high"}
          SynthesizerTool.getModelInfo("/path/to/bd_etts_common_speech_m15_mand_eng_high_am-mgc_v3.6.0_20190117.dat.dat") //离线男声
          //{"data_type":"speech","version":"30600","domain":"common","date":"20190117","language":"mand_eng","speaker":"m15","gender":"male","quality":"high"}
          SynthesizerTool.getModelInfo("/path/to/bd_etts_common_speech_yyjw_mand_eng_high_am-mgc_v3.6.0_20190117.dat") //离线度逍遥
          //{"data_type":"speech","version":"30600","domain":"common","date":"20190117","language":"mand_eng","speaker":"yyjw","gender":"male","quality":"high"}
          SynthesizerTool.getModelInfo("/path/to/bd_etts_common_speech_as_mand_eng_high_am-mgc_v3.6.0_20190117.dat") //离线度YY
          //{"data_type":"speech","version":"30600","domain":"common","date":"20190117","language":"mand_eng","speaker":"as","gender":"female","quality":"high"}

          语言

          目前只有中英文混合这一种语言,优先中文发音。 示例: ” I bought 3 books” 发音 “three”; “我们买了 3 books” 发音“三”

          标注发音

          该功能适用于多音字或特殊名词的发音设置,仅在线合成适用。 如: 重(chong2)报集团, “重”发音 chong第二声

          在线和离线判别(仅MIX模式,使用纯离线可忽略此部分)

          以6s超时的MIX_MODE_DEFAULT和MIX_MODE_HIGH_SPEED_NETWORK为例

          离在线混合模式: WIFI下强制尝试在线优先。其它网络情况可以设置是否为在线优先(如果连接失败,那么切换成离线合成)或者直接离线合成。

          • MIX_MODE_DEFAULT: WIFI下在线优先(连接百度服务器失败或者超时4s,那么切换成离线合成), 其它网络状况下离线合成。
          • MIX_MODE_HIGH_SPEED_SYNTHESIZE_WIFI: WIFI下在线优先(连接百度服务器失败或者超时1.2s,那么切换成离线合成), 其它网络状况下离线合成。
          • MIX_MODE_HIGH_SPEED_NETWORK: WIFI 4G 3G 2G下在线优先( 如果在线连接百度服务器失败或者超时4s,那么切换成离线合成), 其它网络状况()离线合成。
          • MIX_MODE_HIGH_SPEED_SYNTHESIZE: WIFI 4G 3G 2G下在线优先( 如果在线连接百度服务器失败或者超时1.2s,那么切换成离线合成), 其它网络状况离线合成。

          上文中的超时4s,也可以设置PARAM_MIX_MODE_TIMEOUT 为3s或者2s。

          建议使用场景: 在小说阅读、导航播报等场景中,若存在网络信号不稳定(频繁断网)的情况,您可以使用百度提供的纯离线模式。若您需要在移动网络下不想消耗流量,或是对响应速度有较强需求,请选择纯离线模式。我们推荐您使用 MIX_MODE_HIGH_SPEED_NETWORK模式;

          发音

          离线支持14种发音

          离线合成SDK默认自带4个普通音库资源文件,精品音库资源文件需单独下载。

          SDK默认自带离线资源文件

          资源文件 具体文件名
          m15 离线男声(度小宇) bd_etts_common_speech_m15_mand_eng_high_am-mgc_v3.6.0_20190117.dat
          f7 离线女声(度小美) bd_etts_common_speech_f7_mand_eng_high_am-mgc_v3.6.0_20190117.dat
          yyjw 离线度逍遥 bd_etts_common_speech_yyjw_mand_eng_high_am-mgc_v3.6.0_20190117.dat
          as 离线度丫丫 bd_etts_common_speech_as_mand_eng_high_am-mgc_v3.6.0_20190117.dat
          离线模型 bd_etts_common_text_txt_all_mand_eng_middle_big_v3.4.2_20210319.dat

          需要单独下载的精品音库资源文件

          资源文件 具体文件名
          cp 离线度小娇 bd_etts_common_speech_cp_mand_eng_high_am-sp_v3.6.0_20190612
          miduo 离线度米朵 bd_etts_common_speech_miduo_mand_eng_high_am-sp_v3.6.0_20190612
          wyg 离线度博文 bd_etts_common_speech_wyg_mand_eng_high_am-sp_v3.6.0_20190612
          c4 离线度小童 bd_etts_common_speech_c4_mand_eng_high_am-sp_v3.6.0_20190722
          f8 离线度小萌 bd_etts_common_speech_f8_mand_eng_high_am-sp_v3.6.0_20190722
          f12 度小乔 bd_etts_common_speech_f12_mand_eng_high_am-emph24k_v3.6.0_20191108.dat
          f17 度小鹿 bd_etts_common_speech_f17_mand_eng_high_am-emph24k_v3.6.0_20191108.dat
          fduxiaotai 度小台 bd_etts_common_speech_fduxiaotai_mand_eng_high_am-emph16k_v3.6.0_20191108.dat
          粤语离线模型 bd_etts_common_text_txt_all_cant_eng_middle_mix_v3.1.0_20170914.dat
          ctf-std 度小粤 bd_etts_common_speech_ctf-std_cant_eng_high_am-mgc_v3.6.0_20191108.dat
          英文离线模型 bd_etts_eng_common_text_all_v2.2.0_middle__20161116.dat
          fnat 度小译 bd_etts_common_speech_fnat_eng_high_am-emph24k_v3.6.0_20191105.dat

          在线时支持9种发音

          普通音库:普通女声 普通男声 特别男声 情感男声<度逍遥> 情感儿童声<度丫丫> 精品音库: 度小宇 度小美 度逍遥 度丫丫 除特别男声外,其它8种发声具体效果可以在http://ai.baidu.com/tech/speech/tts_online上测试

          注意

          1. 在线合成的声音和离线合成的声音会有略微不同。在线合成的效果好。
          2. 在极端网络的情况下,可能在线合成与离线合成频繁切换。

          合成效果 通过对PARAM_SPEAKER(发音人)、PARAM_PITCH(音调)、PARAM_VOLUME(音量)和PARAM_SPEED(语速)参数的调整,可以获得不同的发声效果,更好满足您业务场景中的播报需求。 如音调越高,声音听起来会显得越年轻。

          合成和播放

          synthesize 方法直接合成。不播放。 开发者可以通过onSynthesizeDataArrived 获取音频数据,自行处理。 speak 方法先合成为音频,之后立即播放。等同调用 synthesize方法,再调用系统播放器。

          在SDK内部中有队列,可以不断调用synthesize或者speak方法,将合成的文本添加到队列中。

          其它事项

          1. 每次合成的文本不超过120 GBK字节,即60个汉字或者字母数字。
          2. 合成的耗时同文本长度成正比。对合成速度敏感的话,请自行按照标点切分成短句。
          3. 多音字可以通过标注自行定义发音。格式如:重(chong2)报集团。
          上一篇
          在线语音合成
          下一篇
          集成指南