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

    # 在线语音合成 Java SDK 文档

    # 1、简介

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

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

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

    # 2、SDK集成指南

    # 2.1 Demo运行步骤

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

    2.配置JDK环境 编者采用的版本是jdk1.8,读者可以从 Sun官网 下载所需的版本;

    3.安装Eclipse Java IDE 编者采用的版本是Ecilpse Java IDE,读者可以到eclipse官网下载所需的版本;

    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 合成播放

    public void actionPerformed(ActionEvent e) {
    		
    		DebugLog.Log( "actionPerformed enter" );
    		
    		if (e.getSource() == jbtnPlay) {
    			setting();
    			// 合成文本为TEXT_CONTENT的句子,设置监听器为mSynListener
    			mText = resultArea.getText().trim();
    			mTts.startSpeaking( mText, mSynListener );
    		} else if (e.getSource() == jbtnCancel) {
    			mTts.stopSpeaking();
    		} else if (e.getSource() == jbtnPause) {
    			DebugLog.Log( "click pause." );
    			mTts.pauseSpeaking();
    		} else if (e.getSource() == jbtnResume) {
    			mTts.resumeSpeaking();
    		} else if (e.getSource() == jbtnHome) {
    			if (null != mTts) {
    				mTts.stopSpeaking();
    				mTts.destroy();
    			}
    
    			JFrame frame = MainView.getFrame();
    			frame.getContentPane().remove(this);
    			JPanel panel = ((MainView) frame).getMainJpanel();
    			frame.getContentPane().add(panel);
    			frame.getContentPane().validate();
    			frame.getContentPane().repaint();
    		}else if( jbtnSet.equals(e.getSource()) ){
    			DebugLog.Log( "actionPerformed setting" );
    			mSettingMenu.show( this, this.jbtnSet.getX(), this.jbtnSet.getY()+50 );
    		}
    		
    		DebugLog.Log( "actionPerformed leave" );
    	}
    
    	private SynthesizerListener mSynListener = new SynthesizerListener() {
    
    		@Override
    		public void onSpeakBegin() {
    		}
    
    		@Override
    		public void onBufferProgress(int progress, int beginPos, int endPos,
    				String info) {
    			DebugLog.Log("--onBufferProgress--progress:" + progress
    					+ ",beginPos:" + beginPos + ",endPos:" + endPos);
    		}
    
    		@Override
    		public void onSpeakPaused() {
    
    		}
    
    		@Override
    		public void onSpeakResumed() {
    
    		}
    
    		@Override
    		public void onSpeakProgress(int progress, int beginPos, int endPos) {
    			DebugLog.Log("onSpeakProgress enter progress:" + progress
    					+ ",beginPos:" + beginPos + ",endPos:" + endPos);
    
    			updateText( mText.substring( beginPos, endPos+1 ) );
    			
    			DebugLog.Log( "onSpeakProgress leave" );
    		}
    
    		@Override
    		public void onCompleted(SpeechError error) {
    			DebugLog.Log( "onCompleted enter" );
    			
    			String text = mText;
    			if (null != error){
    				DebugLog.Log("onCompleted Code:" + error.getErrorCode());
    				text = error.getErrorDescription(true);
    			}
    			
    			updateText( text );
    			
    			DebugLog.Log( "onCompleted leave" );
    		}
    
    

    # 2.3.2 合成到文件

    		//保存音频文件
    		{
    			Map<String, String> saveMap = new LinkedHashMap<String ,String>();
    			saveMap.put( "1", "开" );
    			saveMap.put( "0", "关" );
    			
    			this.addRadioMenu( "保存音频", SpeechConstant.TTS_AUDIO_PATH, saveMap, DefaultValue.SAVE, this.mRadioItemListener );
    		}
    		
    	}
    

    # 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 常见问题解答