1:讯飞开放平台提供了很多服务,有语音相关的:离线,在线语音合成及识别;人机交互;有模式识别相关的:人脸识别,声纹识别;还要云存储等等,如有兴趣,自行百度。

wKiom1cYyYqjXGZ8AABn2pqkZs8729.jpg

2:看了下官方SDK,试着体验下。导入两个jar包到lib目录,以及两个dll和so文件放到工程根目录。

本次先体验下语音合成模块。

  • 语音合成主要涉及一个类,如下,完成语音的合成

import com.iflytek.cloud.speech.SpeechConstant;
import com.iflytek.cloud.speech.SpeechError;
import com.iflytek.cloud.speech.SpeechSynthesizer;
import com.iflytek.cloud.speech.SynthesizerListener;

public class ttsSpeech {
	//定义两个成员变量,一个是需要合成的内容;一个是语音文件输出路径,但是科大讯飞生成的语音文件无法播放,可能有其他原因吧。
	public String content;
	public String audioOutPath;
	
	//构造函数
	public ttsSpeech(String content, String audioOutPath) {
		super();
		this.content = content;
		this.audioOutPath = audioOutPath;
		}

	/**
	 * 语音合成函数
	 */
	public void Synthesize() {
		
		SpeechSynthesizer speechSynthesizer = SpeechSynthesizer
				.createSynthesizer();
		// 设置发音人
		speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");
		// 设置语速,范围0~100
		speechSynthesizer.setParameter(SpeechConstant.SPEED, "50");
		// 设置语调,范围0~100
		speechSynthesizer.setParameter(SpeechConstant.PITCH, "50");
		// 设置音量,范围0~100
		speechSynthesizer.setParameter(SpeechConstant.VOLUME, "80");
		// 设置合成音频保存位置(可自定义保存位置),默认保存在“./iflytek.pcm”
		speechSynthesizer.setParameter(SpeechConstant.TTS_AUDIO_PATH, this.audioOutPath);
		speechSynthesizer.startSpeaking(this.content, mySynListener);
	}

	/**
	 * 合成监听器
	 */
	private static SynthesizerListener mySynListener = new SynthesizerListener() {

		@Override
		public void onBufferProgress(int arg0, int arg1, int arg2,
				String arg3) {
			// TODO Auto-generated method stub
			 //System.out.println("语音合成进度"+arg0+"-"+arg1+"-"+arg2+"\n");
		}

		@Override
		public void onCompleted(SpeechError arg0) {
			// TODO Auto-generated method stub
			 System.out.println("语音转换完成"+"\n");
			 
		}

		@Override
		public void onSpeakBegin() {
			// TODO Auto-generated method stub
			 System.out.println("开始语音转换"+"\n");
		}

		@Override
		public void onSpeakPaused() {
			// TODO Auto-generated method stub
			
		}

		@Override
		public void onSpeakProgress(int arg0, int arg1, int arg2) {
			// TODO Auto-generated method stub
			//System.out.println("语音播放进度"+arg0+"-"+arg1+"-"+arg2+"\n");
			
		}

		@Override
		public void onSpeakResumed() {
			// TODO Auto-generated method stub
			
		}


	};
	
}
  • 下面就是如何调用该类对象完成特定内容的语音合成

String content="20多年前我处在了人生的一个十字路口。随着我们用5年时间为出版社(他们希望新兴的互联网空间)打造的Deltagraph的终结";
		String path="D:/test/test.wav";
		SpeechUtility.createUtility(SpeechConstant.APPID+"=5712115d");
		System.out.println("content:"+content+":"+content.length());
		ttsSpeech tts=new ttsSpeech(content,path);
		tts.Synthesize();

执行程序后,很快就能够听到上述文本内容的语音播放,还不错。