基于语音测试需要,需要将文字数据转换成语音数据,文章未经原作者允许转载,只用于记录。
1.Jar包
版本号:1.18
maven地址:https://mvnrepository.com/artifact/com.hynnet/jacob
2.环境设置
JDK版本:1.8(原来采用1.7设置与1.8一致,一直报错,还不知道是不是版本的原因,原作者使用1.7没问题)
具体设置:解压后,将x86或x64的dll文件放入c:\windows\system32或syswow64目录下;同时也放入jdk和jre的bin、lib目录里;
3.MSTTSSpeech代码
package com.thinkgem.jeesite.common.utils;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
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)
{
System.out.println(e.getMessage());
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)
{
System.out.println(e.getMessage());
e.printStackTrace();
}
}
/**
* 播放语音
* @param text 要转换成语音的文本
*/
public void speak(String text)
{
this.speak(text,0);
}
/**
* 停止播放语音
*/
public void stop()
{