开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
语音技术

    简介

    概述

    本文档是百度语音开放平台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.dat
    miduo 离线度米朵 bd_etts_common_speech_miduo_mand_eng_high_am-sp_v3.6.0_20190612.dat
    wyg 离线度博文 bd_etts_common_speech_wyg_mand_eng_high_am-sp_v3.6.0_20190612.dat
    c4 离线度小童 bd_etts_common_speech_c4_mand_eng_high_am-sp_v3.6.0_20190722.dat
    f8 离线度小萌 bd_etts_common_speech_f8_mand_eng_high_am-sp_v3.6.0_20190722.dat
    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

    在线时支持11种发音

    普通音库:普通女声 普通男声 情感男声<度逍遥> 情感儿童声<度丫丫>

    精品音库: 度逍遥-磁性男声 度博文-情感男声 度小童-活泼男童 度小鹿-甜美女声 度小娇-情感女声 度米朵-可爱女童 度小萌-可爱女童

    具体效果可以在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)报集团。
    上一篇
    在线语音合成
    下一篇
    集成指南