# 离线语音合成 Android SDK 文档

# 1、简介

与语音听写相反,语音合成是将一段文字转换为成语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。

语音合成详细的接口介绍及说明请参考: MSC Android API 文档, 在集成过程中如有疑问,可登录语音云开发者论坛,查找答案或与其他开发者交流。

# 2、SDK集成指南

# 1、导入SDK

将在官网下载的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下。如下图所示:

注:

  1. arm版本已经逐步淘汰了,arm架构的推荐使用armeabi-v7a。
  2. 如果您需要将应用push到设备使用,请将设备cpu对应指令集的libmsc.so push到/system/lib中。

# 2、添加用户权限

在工程 AndroidManifest.xml 文件中添加如下权限

<!--连接网络权限,用于执行云端语音能力 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取当前wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!--读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--读取联系人权限,上传联系人需要用到此权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!--外存储写权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--外存储读权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--配置权限,用来记录应用配置信息 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务-->
<!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 -->
<uses-permission android:name="android.permission.CAMERA" />

注意:如需在打包或者生成APK的时候进行混淆,请在proguard.cfg中添加如下代码:

-keep class com.iflytek.**{*;}
-keepattributes Signature

# 3、初始化

初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下:

// 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn
// 请勿在“=”与appid之间添加任何空字符或者转义符
SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");

createUtility方法的第二个参数为传入的初始化参数列表,可配置的参数如下:

参数 说明 必填
appid 8位16进制数字字符串,应用的唯一标识,与下载的SDK一一对应。
usr 开发者在云平台上注册的账号。
pwd 账号对应的密码,与账号同时存在。
engine_mode 引擎模式,可选值为:msc:只使用MSC的能力;plus:只使用语记能力;auto:云端使用MSC,本地使用语记;默认取值为auto。注:使用MSC本地功能的请设置为msc。
force_login 在createUtility时会对进程名称进行检查,如果名称与应用包名不一致则不进行login操作,返回null,用以规避在子进程反复进行调用的问题。此参数设置是否强制login。默认值:false (进行检查,不强制login)。
lib_name 在createUtility时会加载动态库,此时可以传入动态库名称。例如:libmsc_xxx_1072.so(xxx为您的公司名,1072为科大讯飞sdk版本号), 默认值:msc。注:如您是预装软件,为了避免动态库冲突建议修改名称。

注意:参数需要以键值对的形式存储在字符串中传入createUtility方法,以逗号隔开,如“appid=12345678,usr=iflytekcloud,pwd=123456”。

# 3、引擎类型

MSC SDK 有几种引擎类型(ENGINE_TYPE),此文章中我们主要关注并介绍以下两种:

  • 在线引擎(TYPE_CLOUD),又称为云端模式,需要使用网络,速度稍慢,并产生一定流量,但有更好的识别和合成的效果,如更高的识别匹配度,更多的发音人等。
  • 离线引擎(TYPE_LOCAL),又称为本地模式,不需要使用网络,且识别和合成的速度更快,但同时要求购买并使用对应的离线资源(下载对应离线功能的SDK包)。

需要说明的是,在线引擎下,结果返回速度基本决定于用户网络的带宽限制。

如果使用的是离线合成,MSC 模式下还必须设置合成资源的路径,需下载使用对应的离线合成SDK。

合成默认使用在线方式,如果使用离线服务,需要进行设置:

mTts.setParameter( SpeechConstant.ENGINE_TYPE, engineType ); 
mTts.setParameter( SpeechConstant.ENGINE_MODE, engineMode );

if( SpeechConstant.TYPE_LOCAL.equals(engineType)
	&&SpeechConstant.MODE_MSC.equals(engineMode) ){
    // 需下载使用对应的离线合成SDK
    mTts.setParameter( ResourceUtil.TTS_RES_PATH, ttsResPath );
}

mTts.setParameter( SpeechConstant.VOICE_NAME, voiceName );

final String strTextToSpeech = "科大讯飞,让世界聆听我们的声音";
mTts.startSpeaking( strTextToSpeech, mSynListener );

# 4、参数说明

语音合成中,主要参数包括:

  • 语言(LANGUAGE,中文、英文等)
  • 方言(ACCENT,中文的普通话,广东话等)
  • 发音人特征(性别,年龄,语气)
  • 语速(SPEED)
  • 音量(VOLUME)
  • 语调(PITCH)
  • 音频采样率(SAMPLE_RATE)

# 5、在线发音人列表

在 MSC SDK 参数中的前三者(语言、方言和特征)基本由发音人决定——即不同的发音人,支持不一样的语言、方言和特征,合成发音人列表请到控制台-我的应用-语音合成-在线语音合成(流式版)-发音人授权管理处查看,部分发音人支持添加试用,添加后即可查看发音人参数值:

  1. 语言为中英文的发音人可以支持中英文的混合朗读。
  2. 英文发音人只能朗读英文,中文无法朗读。
  3. 汉语发音人只能朗读中文,遇到英文会以单个字母的方式进行朗读。
  4. 支持新引擎参数的发音人,使用新引擎参数可以获得更好的合成效果。

# 6、离线发音人列表

  1. 普通的离线语音合成的common.jet资源大概是4.10 MB+发音人.jet资源配合使用
类型 发音人中文名称 音色 发音人资源文件名 发音人资源大小
播报 讯飞小燕 青年女声 xiaoyan.jet 3.91 MB
播报 讯飞小峰 青年男声 xiaofeng.jet 1.27 MB
播报 讯飞小梦 青年女声 xiaomeng.jet 10.6 MB
播报 讯飞小媛 中英文青年女声 xiaoyuan.jet 1.89 MB
播报 iFlytek John 英文男声 john.jet 1.60 MB
播报 讯飞凯瑟琳 青年女声-美式英语 catherine.jet 25.5 MB
播报 讯飞小溪 青年男声 xiaoxi.jet 4.95 MB
播报 讯飞小雪 青年女声 xiaoxue.jet 3.41 MB
播报 讯飞许久 青年男声 jiuxu.jet 3.91 MB
听书 讯飞晓倩 青年女声-东北话 xiaoqian.jet 848 KB
听书 讯飞小蓉 青年女声-四川话 xiaorong.jet 571 KB
听书 讯飞小坤 青年男声-河南话 xiaokun.jet 672 KB
听书 讯飞小强 青年男声-湖南话 xiaoqiang.jet 691 KB
听书 讯飞小英 青年女声-陕西话 xiaoying.jet 850 KB
听书 讯飞小梅 青年女声-广东话 xiaomei.jet 1.66 MB
听书 讯飞嘉嘉 青年女声 jiajia.jet 1.79 MB
听书 讯飞小侯 中年男声 xiaohou.jet 5.95 MB
听书 讯飞一峰 中年男声 yifeng.jet 6.59 MB
听书 讯飞晓琳 青年女声-台普 xiaolin.jet 1.81 MB
交互 讯飞楠楠 女童声 nannan.jet 1.41 MB
交互 讯飞马宝 女童声 mabao.jet 1.79 MB
交互 讯飞小芳 女童声 xiaofang.jet 3.38 MB
交互 讯飞小丸子 卡通声音 xiaowanzi.jet 13.0 MB
  1. 高品质离线语音合成发音人的需要单独定制common.jet(约20.4M)和库文件(具体大小需要申请后和商务人员对接)+发音人.jet资源配合使用
类型 发音人中文名称 音色 发音人资源文件名 发音人资源大小
通用 讯飞小楠 可爱童声 pureXtts_nannan.jet 5.9MB
通用 讯飞峰峰 青年男声 pureXtts_yifeng.jet 5.9MB
通用 讯飞小关 青年男声 pureXtts_xiaoguan.jet 5.9MB
通用 讯飞小诗 青年女声 pureXtts_xiaoshi.jet 5.9MB
通用 讯飞雪儿 青年女声 pureXtts_xiaoxue.jet 5.9MB
通用 讯飞小缘 中英文青年女声 pureXtts_xioayuan.jet 5.9MB
  1. 离线语音合成购买的发音人使用方法

平台上购买离线语音合成后下载的sdk包,默认只提供小燕和小峰的资源(.jet),也就是说只有这两个发音人可以使用,如果购买(购买方式1:离线语音合成主页—离线发音人库—立即购买—选择绑定的应用—付款;购买方式2:控制台—应用—离线语音合成—服务管理—购买离线发音人音库—付款。付款后重新下载离线语音合成sdk,在sdk中的中会自动多一个购买的发音人资源。)了其他的发音人的话,您就会拿到其他发音人的资源(.jet),以小芳的发音人为例,购买后您会拿到小芳的资源(xiaofang.jet)。那如何使用呢?请看下面示例:

  1. 需将res中tts文件夹(包含合成的资源)资源拷贝到demo中assets相应的路径下,将xiaofang.jet资源放到demo中assets/tts路径下。注意:无论使用那个发音人,common.jet资源都是必须要放进去的。
  1. 将代码中的voice_name参数修改为小芳,同时资源发音人资源也要修改为xiaofang.jet这样才能正确的加载到正确的资源。

注意:

使用购买的新的发音人要注意加载的资源名称,voice_name,资源路径中的资源名称三者的统一,否者会无法正常使用。

# 7、视频教程

概念原理

技术简介

发展历史

典型应用

# 8、常见问题

# 在线语音合成与离线语音合成的区别是什么?

答:在线合成针对有网环境,离线是无网环境;另外在线升级与公有云同步升级,离线响应速度快,在线效果更好,可选择的发音人也更多。

# 离线语音合成的主要功能是什么?

答:将文字信息转化为声音信息,让应用具备离线语音合成的能力。即让机器像人一样开口说话,给开发者的应用配上“嘴巴”。

# 离线语音合成支持哪些应用平台?

答:目前离线语音合成支持:IOS/Android/Windows/Linux应用平台。

# 离线语音合成的字节有什么要求?

答:目前离线语音合成SDK接口一次最多可支持8192个字节。

# 离线语音合成支持哪些语言?

答:目前离线语音合成目前支持的语种/方言:中文、英文、粤语、东北话、四川话、河南话、湖南话、陕西话、台湾普通话。

# 离线语音合成怎么收费的?

答:默认的中文普通话男女生讯飞小峰和讯飞小燕是免费使用的;离线发音人库2000元/人;高品质离线发音人库的价格需要邮件咨询商务合作。

# 离线发音人库的发音人如何购买?

答:登录讯飞开放平台,点击到离线语音合成页面后,可查看到离线发音人的价格。点击多选发音人的“立即购买”即可支付购买。

# 离线语音合成如何购买?

答: 登录讯飞开放平台,点击到离线语音合成页面后,可查看到价格表。点击对应套餐的“立即购买”即可支付购买。