先解释:
Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用;
所以只要有调用方法正确,你几乎可以使用java语言操作windows的大部分功能,
语言播报就是其中之一,可以调语速,语音大小;像操作打印机,操作office都可以。。。
各种文档转换为HTML或者网页易显示格式也可以,当然还有很多其他方法,这里只是想说jacob很强大,
需要做的工作:
1、下载jacob-1.17-M2.rar
2、解压jacob-1.17-M2.rar
3、向工程里导入jacob.jar
4、将jacob-1.17-M2-x86.dll拷贝到jdk的bin目录和windows/system32目录
5、源代码如下:
package test;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class YuYin {
public static void main(String[] args) {
// TODO Auto-generated method stub
ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice");
try {
// 音量 0-100
sap.setProperty("Volume", new Variant(100));
// 语音朗读速度 -10 到 +10
sap.setProperty("Rate", new Variant(-2));
// 获取执行对象
Dispatch sapo = sap.getObject();
// 执行朗读
Dispatch.call(sapo, "Speak", new Variant("你好:阿斯达所多。"));
// 关闭执行对象
sapo.safeRelease();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭应用程序连接
sap.safeRelease();
}
strat("你在干什么,我真的很喜欢你,我爱你",0);
}
public static void strat(String content, int type) {
// ?? 这个Sapi.SpVoice是需要安装什么东西吗,感觉平白无故就来了
ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice");
// Dispatch是做什么的?
Dispatch sapo = sap.getObject();
if (type == 0) {
try {
// 音量 0-100
sap.setProperty("Volume", new Variant(100));
// 语音朗读速度 -10 到 +10
sap.setProperty("Rate", new Variant(1.3));
Variant defalutVoice = sap.getProperty("Voice");
Dispatch dispdefaultVoice = defalutVoice.toDispatch();
Variant allVoices = Dispatch.call(sapo, "GetVoices");
Dispatch dispVoices = allVoices.toDispatch();
Dispatch setvoice = Dispatch.call(dispVoices, "Item",
new Variant(1)).toDispatch();
ActiveXComponent voiceActivex = new ActiveXComponent(
dispdefaultVoice);
ActiveXComponent setvoiceActivex = new ActiveXComponent(
setvoice);
Variant item = Dispatch.call(setvoiceActivex, "GetDescription");
// 执行朗读
Dispatch.call(sapo, "Speak", new Variant(content));
} catch (Exception e) {
e.printStackTrace();
} finally {
sapo.safeRelease();
sap.safeRelease();
}
} else {
// 停止
try {
Dispatch.call(sapo, "Speak", new Variant(content), new Variant(
2));
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
}