java jacob语音合成_Java使用Jacob调用SAPI合成语音

本文介绍了如何在Java中使用Jacob库调用SAPI进行语音合成功能,包括Jar包引用、环境设置、代码实现以及可能出现的错误及解决办法。详细展示了MSTTSSpeech类的代码,用于文本转语音播放和保存为WAV文件。
摘要由CSDN通过智能技术生成

基于语音测试需要,需要将文字数据转换成语音数据,文章未经原作者允许转载,只用于记录。

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()

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值