运行此代码需要Microsoft Speech SDK 5.1和jacob-1.14.3 1、MSTTSSpeech.java package com.longtop.core.speech; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; import com.longtop.core.util.sound.SoundUtil; /** * 调用MSTTS将字符串转换成语音信息 * * @author liqiang4j */ public class MSTTSSpeech{ private int volume = 100;// 声音:1到100 private int rate = 0;// 频率:-10到10 private int voice = 0;// 语音库序号 private int audio = 0;// 输出设备序号 private ActiveXComponent ax = null; private Dispatch spVoice = null;// 声音对象 private Dispatch spFileStream = null;// 音频文件输出流对象,在读取或保存音频文件时使用 private Dispatch spAudioFormat = null;// 音频格式对象 private Dispatch spMMAudioOut = null;// 音频输出对象 private int formatType = 22;// 音频的输出格式,默认为:SAFT22kHz16BitMono public MSTTSSpeech() { ComThread.InitSTA(); if(ax == null){ ax = new ActiveXComponent("Sapi.SpVoice"); spVoice = ax.getObject(); } } /** * 改变语音库 * * @param voice * 语音库序号 */ public void changeVoice(int voice){ if(this.voice != voice){ this.voice = voice; } try{ Dispatch voiceItems = Dispatch.call(spVoice, "GetVoices").toDispatch(); int count = Integer.valueOf(Dispatch.call(voiceItems, "Count").toString()); if(count > 0){ Dispatch voiceItem = Dispatch.call(voiceItems, "Item", new Variant(this.voice)).toDispatch(); Dispatch.put(spVoice, "Voice", voiceItem); } } catch (Exception e){ e.printStackTrace(); } } /** * 改变音频输出设备 * * @param audio * 音频设备序号 */ public void changeAudioOutput(int audio){ if(this.audio != audio){ this.audio = audio; } try{ Dispatch audioOutputs = Dispatch.call(spVoice, "GetAudioOutputs").toDispatch(); int count = Integer.valueOf(Dispatch.call(audioOutputs, "Count").toString()); if(count > 0){ Dispatch audioOutput = Dispatch.call(audioOutputs, "Item", new Variant(this.audio)).toDispatch(); Dispatch.put(spVoice, "AudioOutput", audioOutput); } } catch (Exception e){ e.printStackTrace(); } } /** * 播放语音 * * @param text * 要转换成语音的文本 */ public void speak(String text){ this.speak(text, 0); } /** * 停止播放语音 */ public void stop(){ // this.speak("", 1); Dispatch.call(spVoice, "Pause"); } /** * 播放语音 * * @param text * 要转换成语音的文本 * @param type * 类型0:播放,1:停止 */ pri