离线语音合成 Android SDK 文档

1、简介

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

离线语音合成详细的接口介绍及说明请参考: MSC Android API 文档

在集成过程中出现错误,请优先查询SDK&API 错误码查询。如有疑问,请提交工单进行咨询,也可登录讯飞开放平台论坛与广大开发者共同学习和交流。

离线语音合成新版XTTS高品质版已经上线~ 合成效果更好,欢迎体验~普通版即旧版离线语音合成。新上线的高品质版合成效果比普通版更好,但资源占用略高,可根据业务需求合理选择,高品质版离线合成目前支持Android、iOS、Linux 平台。

2、SDK集成指南

2.1、Demo运行步骤

根据官网控制台普通版高品质版提示,直接下载SDK,SDK中包含简易可运行的Demo。如下图所示:

下载完SDK后,解压至相应的路径。

注:使用demo测试时,需将res中除layout外资源拷贝到demo中assets相应的路径下

以Android Studio集成开发工具为例,测试时请直接用真机进行测试。

方法一(导入project方式):

打开Android Studio,在菜单栏File--->new--->import project当前解压sdk路径,使用在线服务能力选择导入mscV5PlusDemo,如下图所示:

导入成功之后sync编译下,编译无误可连接手机,开启手机USB开发调试模式,直接在Android Studio运行导入的mscV5PlusDemo,最后生成的apk可直接安装在对应的手机上,如下图所示:

如果编译时出现“ERROR: Plugin with id 'com.android.application' not found.”错误,请在build.gradle文件中添加以下代码。

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
         //版本号请根据自己的gradle插件版本号自行更改
        classpath 'com.android.tools.build:gradle:3.4.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

如在导入项目中还出现其他问题,可参考帖子:安卓demo常见错误排查

方法二(导入module方式):

打开Android Studio,在菜单栏File--->new--->import module当前解压sdk路径,使用在线服务能力选择导入mscV5PlusDemo,导入成功之后sync编译下,编译无误可连接手机,开启手机USB开发调试模式,直接在Android Studio运行导入的mscV5PlusDemo,最后生成的apk可直接安装在对应的手机上。

2.2、项目集成步骤

2.2.1、SDK包说明

《Android SDK目录结构一览》

  • manifests:
    • android配置应用权限文件
  • sample:
    • 相关离线能力demo(离线语音听写IatDemo)
  • assets:
    • SDK相关资源配置文件
  • Libs:
    • 动态库和jar包
  • res:
    • UI文件和相关布局文件xml
  • readme说明(必看)
  • release 版本说明

2.2.2、导入SDK

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

注:

  1. arm版本已经逐步淘汰了,arm架构的推荐使用armeabi-v7a。
  2. 如果您需要将应用push到设备使用,请将设备cpu对应指令集的libmsc.so push到/system/lib中。
  3. 集成到项目,需要将sdk中Demo/src/main/下文件拷贝到项目main中,以AS为例,且需要在项目main文件夹下新建Jnilibs并拷贝libmsc.so
  4. msc.jar需要拷贝至项目libs下,并且右键jar添加Add As Library。
  5. sdk下文件夹main/assets/,自带UI页面(iflytek文件夹)和相关其他服务资源文件(语法文件、音频示例、词表),使用自带UI接口时,可以将assets/iflytek文件拷贝到项目中;

2.2.3、添加用户权限

在工程 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

2.2.4、接入

为保证用户个人隐私,防止APP不当收集用户信息,我们强烈建议您遵守以下流程接入本SDK保证合规,防止因调用时机不当引发的后果,例如但不限于:APP被应用市场下架等。

(1)您需要确保贵APP有《隐私政策》,并且在用户首次启动App时就弹出《隐私政策》争得用户同意。

(2)您务必在App的《第三方共享清单及SDK目录》中告知用户MSC SDK收集的个人信息类型以及MSC SDK隐私政策。

(3)个人信息收集说明:MSC SDK需要收集唯一设备识别码(android ID)以提供能力授权服务。

(4)隐私政策请点击查看。

(5)您务必严格遵守如下调用步骤,确保用户同意《隐私政策》之后,且在用户主动使用本SDK提供的各项功能时再进行相关函数调用。

确保App启动后,在用户阅读并同意《隐私政策》并取得用户授权之后,在用户使用SDK功能时,方可调函数SpeechUtility.createUtility(SpeechApp.this,xxxx)以使用MSC SDK。反之,如果用户不同意《隐私政策》授权,则不允许调用SpeechUtility.createUtility(SpeechApp.this,xxxx)初函数。
参考示例:SDK demo源码中获取到《隐私政策》的用户授权,后续的SDK demo函数SpeechUtility.createUtility(SpeechApp.this, xxxx)建议在用户使用SDK功能时进行使用。

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

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

3、参数说明

3.1、基础参数说明

参数名称 名称 说明
ENGINE_TYPE 引擎类型 通过此参数设置离线模式,普通版设置为TYPE_LOCAL,高品质版设置为TYPE_XTTS
voice_name 发音人 通过此参数设置不同的发音人,达到不同的语言和方言、性别等效果,默认发音人:xiaoyan
speed 合成语速 通过此参数,设置合成返回音频的语速,值范围:[0,100],默认:50
volume 合成音量 通过此参数,设置合成返回音频的音量,值范围:[0,100],默认:50
pitch 合成语调 通过此参数,设置合成返回音频的语调,值范围:[0,100],默认:50
sample_rate 采样率 通过此参数设置音频的采样率,可选值:16000,8000(离线高品质合成暂不支持),默认:16000
tts_audio_path 合成录音保存路径 通过此参数,可以在合成完成后在本地保存一个音频文件,值范围:有效的文件相对或绝对路径(含文件名),默认值:null
audio_format 音频格式 通过此参数设置合成音频文件格式,可选:pcm、wav,默认值:pcm

备注:以上均为SDK常用参数说明,均在setParam()方法里面设置,设置示例:mTts.setParameter(SpeechConstant.VOICE_NAME, voicer);更多详细参数请参考:MSC Android API文档.

3.2、离线发音人列表

3.2.1、离线语音合成(普通版)的common.jet(约4.10 MB)+发音人.jet资源配合使用,普通的离线语音合成中文和英文发音人均依赖common.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

3.2.2、离线语音合成(高品质版)的common.jet(约20.4M)+发音人.jet资源配合使用

注:高品质离线语音合成若使用到了英文发音人,需配合common_en.jet(约3MB)使用,如果未用到英文发音人,可在SDK中移除此资源以释放空间

类型 发音人中文名称 音色 发音人资源文件名 发音人资源大小
播报 讯飞小燕 青年女声 xiaoyan.jet 5.91MB
播报 讯飞小峰 青年男声 xiaofeng.jet 5.91MB
播报 讯飞小媛 青年女声 xiaoyuan.jet 5.91MB
播报 讯飞一峰 青年男声 yifeng.jet 5.91MB
交互 讯飞虫虫 青年女声 chongchong.jet 5.91MB
交互 讯飞小雪 青年女声 xiaoxue.jet 5.91MB
交互 讯飞楠楠 男童声 nannan.jet 5.91MB
听书 讯飞小彬 青年男声 xiaobin.jet 5.91MB
听书 讯飞芳芳 女童声 xiaofang.jet 5.91MB
方言 讯飞晓琳 青年女声-台湾普通话 xiaolin.jet 5.91MB
方言 讯飞晓倩 青年女声-东北话 xiaoqian.jet 5.91MB
方言 讯飞晓蓉 青年女声-四川话 xiaorong.jet 5.91MB
方言 讯飞小莹 青年女声-陕西话 xiaoying.jet 5.91MB
方言 讯飞小坤 青年男声-河南话 xiaokun.jet 5.91MB
英文 iFlytek John 青年男声-美式英语 John.jet 6.3MB
英文 讯飞凯瑟琳 青年女声-美式英语 catherine.jet 6.28MB

3.2.3、离线语音合成发音人购买

购买方式1:离线语音合成主页—离线发音人库—选择普通版或高品质版-立即购买—选择绑定的应用—付款;

购买方式2:控制台—应用—离线语音合成(普通版)或离线语音合成(高品质版)—服务管理—购买离线发音人音库—付款。

注:
1、离线语音合成(普通版)和离线语音合成(高品质版)发音人不能共用,在购买时,请慎重选择服务。

2、购买成功后重新下载离线语音合成sdk,在sdk中会自动多一个购买的发音人资源。

3.3、离线语音合成

平台上购买离线语音合成后下载的sdk包,默认只提供小燕和小峰的资源(.jet),也就是说只有这两个发音人可以使用,如果购买了其他的发音人的话,您就会拿到其他发音人的资源(.jet)。

3.3.1、离线语音合成(普通版)发音人包集成

以小芳的发音人为例,购买后您会拿到小芳的资源(xiaofang.jet)。请看下面示例:

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

3.3.2、离线语音合成(高品质版)发音人包集成

以小坤的发音人为例,购买后您会拿到小坤的资源(xiaokun.jet)。请看下面示例:

  1. 需将res中xtts文件夹(包含合成的资源)资源拷贝到demo中assets相应的路径下,将xiaokun.jet资源放到demo中assets/xtts路径下。注意:无论使用那个发音人,common.jet资源都是必须要放进去的。

  2. 将代码中的voice_name参数修改为小坤,同时资源发音人资源也要修改为xiaokun.jet这样才能正确的加载到正确的资源。

注意:

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

2、高品质离线发音人和普通离线发音人资源存放位置不能相互混淆。

4、视频教程

概念原理

技术简介

发展历史

典型应用

5、常见问题

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

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

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

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

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

答:目前离线语音合成支持:IOS/Android/Windows/Linux应用平台,但离线语音合成(高品质版)暂不支持Windows应用平台。

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

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

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

答:目前离线语音合成目前支持的语种/方言:中文、英文、粤语、东北话、四川话、河南话、湖南话、陕西话、台湾普通话,但离线语音合成(高品质版)暂不支持湖南话和粤语。

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

答:默认的中文普通话男女生讯飞小峰和讯飞小燕是免费使用的;离线发音人库2000元/人;高品质离线发音人库4000元/人。

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

答:登录讯飞开放平台,点击到离线语音合成页面后,选择普通版或高品质版,可查看到相应版本下离线发音人的价格。点击发音人的“立即购买”即可支付购买。

离线语音合成如何购买?

答: 登录讯飞开放平台,点击到离线语音合成页面后,选择普通版或高品质版,可查看到相对应版本价格表。点击对应套餐的“立即购买”即可支付购买。

离线语音合成(普通版)和高品质版的区别

答: 高品质版合成效果比普通版更好,但资源占用略高,可根据业务需求合理选择

已导入相关资源,但是合成还是无法使用

答: 首先确认导入资源是否正确引入,高品质版和普通版离线资源名字相同,但是不可通用,需要进行区分,不可混淆。