# 在线语音合成 Java SDK 文档

# 1、简介

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

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

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

# 2、SDK集成指南

# 2.1 Demo运行步骤

1.在控制台下载对应sdk(如何下载见下方常见问题)。

2.配置JDK环境 编者采用的版本是jdk1.8,读者可以从Sun官网 http://java.sun.com/javase/downloads/index.jsp 下载所需的版本;

3.安装Eclipse Java IDE 编者采用的版本是Ecilpse Java IDE,读者可以从官网 http://www.eclipse.org/downloads/packages/release/ganymede/sr2 下载所需的版本

4.直接打开File-->import Projects--->选择已下载java sdk内的sample/MscDemo。

5.直接运行Mainview即可,其中TtsSpeechView为在线语音合成能力代码示例。

# 2.1.1 创建账号&应用

进入讯飞开放平台主页http://www.xfyun.cn/或者对应的产品页,点击右上角登陆或者注册按钮,完成登陆操作。

进入控制台“我的应用”列表页,点击左上角“创建新应用”,并填写相关应用信息,未认证用户只允许创建1个应用;个人实名认证用户可创建5个应用,企业实名认证用户可创建20个应用,若创建更多应用用户可选择企业实名认证。

# 2.1.2 开通&购买服务

创建完应用之后,在当前应用选择“在线语音合成”,然后在控制台点击购买服务量,跳转至官网产品价格页可领取免费交互量或者购买套餐交互量,发音人可在下方授权管理一栏点击购买和试用。

# 2.1.3 获取APPid和secret_key以及SDK下载

购买完成后,在“控制台”的对应的应用上,进入在线语音合成一栏,选择Java sdk下载。若为WEBAPI,可以直接点开技术文档查看接口文档,另外在服务的产品页“在线语音合成”服务管理中,可以查看密钥,请牢记WEBAPI唯一标识appid和合成服务访问秘钥secret_key和apikey!

# 2.1.4 demo运行方式

对于Java版SDK,通过如下配置,可以将SDK中的内容导入至工程。下载开发包组件完成后,将开发包组件中的jar文件放置于“<工程路径>/lib”中。进入Eclipse,在选项栏中进入Project -> Properties,在左边选择“Java Build Path”,右边的tab中选择“Libraries”,可见如下界面:移除报错的旧版jar包,点击右边的“Add JARs”,并将刚刚添加到工程里的开发包组件添加,点击“OK”,即完成了开发包组件的添加,之后需配置好config.properties文件,项目无报错即可运行转写服务demo。

# 2.2 项目集成步骤

# 2.2.1 SDK包说明

《SDK目录结构一览》

  • bin:

    • 相关类文件
  • lib:

    • msc相关jar包
  • msc:

    • 日志存放文件夹
  • res:

    • UI图片存放文件夹
  • src:

    • TtsSpeechView.java(语音听写示例代码)
  • libmsc32库文件

  • libmsc64库文件

  • msc32.dll

  • msc64.dll

# 2.2.2 SDK导入

  1. 在Eclipse中建立你的Java工程。

  2. 将开发工具包中lib目录下的Msc.jar复制到新建工程的lib目录中(如下图所示)。

  3. 在Eclipse中选中工程,通过工具栏Project->Properties->Java Build Path->Libraries->Add JARS或ADD External JARS引入Msc.jar(如下图所示)。

  1. 将SDK.\lib目录下库文件拷贝到工程根目录(如下图所示)。

  1. 在你需要使用MSC服务的文件中导入相应的类,如。

    import com.iflytek.cloud.speech.SpeechSynthesizer;;
    
    

# 2.2.3 初始化

创建用户语音配置对象后才可以使用语音服务,建议在程序入口处调用。

关于初始化时指定库名,或报加载库失败的解决办法,请参考《MSC Reference Manual》中,关于SpeechUtility类,以及SpeechConstant类的说明。

// 将“XXXXXXXX”替换成您申请的APPID
SpeechUtility.createUtility( SpeechConstant.APPID +"=XXXXXXXX ");

# 2.3 参数与说明

# 2.3.1 合成播放

//1.创建SpeechSynthesizer对象
SpeechSynthesizer mTts= SpeechSynthesizer.createSynthesizer( );
//2.合成参数设置,详见《MSC Reference Manual》SpeechSynthesizer 类
mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置发音人
mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速
mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围0~100
//设置合成音频保存位置(可自定义保存位置),保存在“./tts_test.pcm”
//如果不需要保存合成音频,注释该行代码
mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./tts_test.pcm");
//3.开始合成
mTts.startSpeaking("语音合成测试程序", mSynListener);

//合成监听器
private SynthesizerListener mSynListener = new SynthesizerListener(){
	//会话结束回调接口,没有错误时,error为null
	public void onCompleted(SpeechError error) {}
	//缓冲进度回调
	//percent为缓冲进度0~100,beginPos为缓冲音频在文本中开始位置,endPos表示缓冲音频在文本中结束位置,info为附加信息。
	public void onBufferProgress(int percent, int beginPos, int endPos, String info) {}
	//开始播放
	public void onSpeakBegin() {}
	//暂停播放
	public void onSpeakPaused() {}
	//播放进度回调
	//percent为播放进度0~100,beginPos为播放音频在文本中开始位置,endPos表示播放音频在文本中结束位置.
	public void onSpeakProgress(int percent, int beginPos, int endPos) {}
	//恢复播放回调接口
	public void onSpeakResumed() {}
};

# 2.3.2 合成到文件

//1.创建SpeechSynthesizer对象
SpeechSynthesizer mTts= SpeechSynthesizer.createSynthesizer( );
//2.合成参数设置,详见《MSC Reference Manual》SpeechSynthesizer 类
mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置发音人
mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速,范围0~100
mTts.setParameter(SpeechConstant.PITCH, "50");//设置语调,范围0~100
mTts.setParameter(SpeechConstant.VOLUME, "50");//设置音量,范围0~100
//3.开始合成
//设置合成音频保存位置(可自定义保存位置),默认保存在“./tts_test.pcm”
mTts.synthesizeToUri("语音合成测试程序", "./tts_test.pcm",synthesizeToUriListener);

//合成监听器
SynthesizeToUriListener synthesizeToUriListener = new SynthesizeToUriListener() {
	//progress为合成进度0~100 
	public void onBufferProgress(int progress) {}
    //会话合成完成回调接口
	//uri为合成保存地址,error为错误信息,为null时表示合成会话成功
	public void onSynthesizeCompleted(String uri, SpeechError error) {}
};

# 2.3.3 代理服务器设置方法

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

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

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

接口原型: public static SpeechUtility createUtility(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 标识头。

# 2.3.4 常用参数说明

参数 名称 说明
voice_name 合成发音人 合成所需发音人,对应发音人参数可在控制台"发音人授权管理"查看。
speed 语速 通过此参数,设置合成返回音频的语速。默认值:50,取值范围:[0,100]。
volume 音量 通过此参数,设置合成返回音频的音量。默认值:50,取值范围:[0,100]。
pitch 语调 通过此参数,设置合成返回音频的语调。默认值:50,取值范围:[0,100]。
sample_rate 采样率 音频的采样率是音频属性的其中一个,一般来说,采样率越高音频的质量越好,识别的匹配率越高,但上传带宽消耗也越大。 默认:16KHZ,取值{8KHZ,16KHZ}。
tts_audio_path 合成录音保存路径 通过此参数,可以在合成完成后在本地保存一个音频文件 。
engine_type 引擎类型 设置使用的引擎类型:在线、离线、混合。在线合成设置参数为:"cloud" 。

备注:以上均为SDK常用参数说明,更多详细参数请参考:MSC Java API 文档.

# 2.3.5 视频教程

概念原理

技术简介

发展历史

典型应用

# 3、常见问题

# SDK是否支持本地语音能力?

答:Java平台暂时不支持本地能力。

# java sdk能否直接使用音频文件进行听写或识别?

答:可以。Sdk进行听写或识别的音频输入方式有两种,一种为通过实时录音方式,另一种为音频文件流写入方式;
音频流文件写入方式使用sdk的writeAudio接口,具体使用方法的代码示例详见SDK中MscInvisibleDemo示例demo。

# java sdk合成功能否可以只生成合成的音频而不播放声音吗?

答:可以,java sdk 1014版本中新的API接口synthesizeToUri(无声合成)正为该功能而生的,具体使用方法的代码示例详见SDK中MscInvisibleDemo示例demo

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

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

# 更多问题,请见论坛帖子:

SDK常见问题:Java SDK 常见问题解答