setting alipay wechat success appmanage dollor user cart order workorder logout left1 left2 app unfree free chart coupon note copy pencil price-tag database cog bin list link plus minus codepen 审核 cross table search user-tie eye github cancel-circle checkmark icon-upload icon-smartphon icon-auth-user icon-arroba-symbol icon-check-pass icon-red-cross icon-pwd-key icon-used icon-expired android appleinc tux windows8 java webAPI mail vip

    # 在线语音合成 Android SDK 文档

    # 1、简介

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

    语音合成详细的接口介绍及说明请参考: MSC Android API (opens new window) 文档。

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

    小语种及少数民族方言:暂不支持,敬请期待!

    # 2、SDK集成指南

    # 2.1、Demo运行步骤

    根据官网控制台 (opens new window)提示,直接下载SDK,SDK中包含简易可运行的Demo。如下图所示:

    备注:Android sdk目前支持android4.4及以上系统,同时请使用真机调试。

    下载完SDK后,解压至相应的路径,以Android Studio集成开发工具为例,测试时请直接用真机进行测试。

    # 方法一(导入project):

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

    导入成功之后sync编译下,编译无误可连接手机,开启手机USB开发调试模式,直接在Android Studio运行导入的Speechdemo,最后生成的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常见错误排查 (opens new window)

    # 方法二(导入module):

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

    # 2.2、项目运行步骤

    # 2.2.1、SDK包说明

    《Android SDK目录结构一览》

    • manifests:
      • android配置应用权限文件
    • sample:
      • 相关在线能力demo(语音合成TtsDemo)
    • 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、初始化

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

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

    # 3、参数说明

    # 3.1、基础参数说明

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

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

    # 3.2、在线发音人列表

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

    注:

    1. 语言为中英文的发音人可以支持中英文的混合朗读。
    2. 英文发音人只能朗读英文,中文无法朗读。
    3. 汉语发音人只能朗读中文,遇到英文会以单个字母的方式进行朗读。

    # 4、视频教程

    概念原理 (opens new window)

    技术简介 (opens new window)

    发展历史 (opens new window)

    典型应用 (opens new window)

    # 5、代理服务器设置方法

    在createUtility接口的params参数中添加:

    net_type=custom, proxy_ip=<host>, proxy_port=<port>
    其中,<host>,<port>替换为实际的代理服务器地址和端口。
    

    例如:SpeechUtility.createUtility(context, SpeechConstant.APPID + “=12345678” + “,” + “net_type=custom, proxy_ip=192.168.1.2, proxy_port=8080”); 注意:各参数间,以英文逗号分隔。

    接口原型: public static SpeechUtility createUtility(Context context, java.lang.String params)

    注意: 若在设置代理参数后,使用语音服务过程中,报错10204/10205/10212等网络异常错误时,请查阅以下内容,做出相关操作:

    • 讯飞语音SDK的通信协议使用的是标准HTTP1.1协议,其代理协议使用的是标准HTTP代理协议。
    • 代理服务器需要支持全双工多问多答方式,即 pipeline 模式。
    • 代理服务器不能对80端口做限制,不能对如下域名做拦截: hdns.openspeech.cn scs.openspeech.cn open.xf-yun.com dev.voicecloud.cn
    • 需要确保代理服务器只负责转发数据包,不能改变数据包的完整性和时序性。
    • 代理服务器在转发数据包时,不能在HTTP协议头部添加 IE6 标识头。

    # 6、常见问题

    # 目前安卓平台具体支持安卓版本

    答:Android版本SDK目前支持4.4以上版本,React-Native ,QT 等跨平台方案,目前暂不支持

    # 集成语音合成功能时,程序启动后没反应

    答:请检查是否忘记使用SpeechUtility初始化。也可以在监听器的onError函数中打印错误信息,根据信息提示,查找错误源。

    # 合成没有声音?

    答:是否使用了无播报synthesizeToUri的方式合成。

    # 开发调试没有问题,为什么打包后运行崩溃??

    答:这种情况大多是由于打包进行代码混淆时误将讯飞SDK中的包进行了混淆而造成的,可按照文档添加混淆的代码。

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

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

    # 在线语音合成的字节有什么限制要求?

    答:SDK接口一次限制8192字节,WEBAPI接口一次限制8000字节,超长文本按照自然段切分,分多次合成请求进行。

    # 错误码21001, 21002, 20021, 创建单例返回 null

    答:参考以下帖子:http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=9688

    # 如何设置语音云服务URL?

    答:在createUtility接口中添加:server_url = http://YourDomainName/msp.do (YourDomainName是指语音云服务域名,请开发者自行替换) 例如:SpeechUtility.createUtility(context, SpeechConstant.APPID + "=12345678" + "," + "server_url = http://sdk.openspeech.cn/msp.do");
    注意:各参数间,以英文逗号分隔。 接口原型: public static SpeechUtility createUtility(Context context, java.lang.String params)