JAVA 实现语音播报
准备工作:
下载jar包,链接:https://pan.baidu.com/s/1qXPgCzy 密码:xigv
解压jar包,将jacob.jar复制到工程目录,右键该文件→Build Path→Add to...
将jacob-1.17-M2-x86.dll添加到JDK的bin目录和Windows的system32目录(64位系统添加jacob-1.17-M2-x64.dll)
代码实现如下:
import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class Test04 { public static void main(String[] args) { 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(); } } }
我们可以朗读文件内容,代码实现如下:
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class Test05 { public static void main(String[] args) throws IOException { ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice"); //输入文件 File srcFile = new File("E:/tmp/testvoice.txt"); //使用包装字符流读取文件 BufferedReader br = new BufferedReader(new FileReader(srcFile)); String content = br.readLine(); try { // 音量 0-100 sap.setProperty("Volume", new Variant(100)); // 语音朗读速度 -10 到 +10 sap.setProperty("Rate", new Variant(-2)); // 获取执行对象 Dispatch sapo = sap.getObject(); // 执行朗读 while (content != null) { Dispatch.call(sapo, "Speak", new Variant(content)); content = br.readLine(); } // 关闭执行对象 sapo.safeRelease(); } catch (Exception e) { e.printStackTrace(); } finally { br.close(); // 关闭应用程序连接 sap.safeRelease(); } } }
出现的问题:
关于java使用jacob.jar调用word的配置问题
最近用到了jacob.jar来转换word文件,出现一些问题都是关于配置的,先将一些配置说明一下,以供大家参考。
文件下载地址,
https://pan.baidu.com/s/1Fd5d3dvJ8IGeqxuU-vcN3Q
jacob-1.17-M2-x64.dll放到C:\Windows\System32下面(64位)
jacob-1.17-M2-x86.dll 放到C:\Windows\SysWOW64下面(32位)
将jacob.dll拷贝至%JAVA_HOME%\jre\bin目录。
再把jacob.jar拷入lib下
重启完成
https://blog.csdn.net/qq_40864915/article/details/86573079
https://blog.csdn.net/qq_34137397/article/details/77814851
1.下载jacob.ja
2.32位操作系统下载:jacob-1.17-M2-x32.dll,64位操作系统下载:jacob-1.17-M2-x64.dll
3.将jacob.jar考到项目中进行构建路径。
4.将jacob-1.17-M2-x32.dll或者jacob-1.17-M2-x64.dll,考到系统盘:\Windows\System32\下面。
5.将jacob-1.17-M2-x32.dll或者jacob-1.17-M2-x64.dll,考到JDK安装目录的bin下面。
然后写个test方法测试一下即可,测试代码如下:
/** * @Title: Voice.java * @Package org.util * @Description: TODO该方法的主要作用: * @author A18ccms A18ccms_gmail_com * @date 2017-7-3 下午9:03:45 * @version V1.0 */ package cn.bdqn.bdqn.utils; import org.junit.Test; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; /** * * 项目名称:avoice * 类名称:Voice * 类描述: 语音播报工具类 * 创建人:Mu Xiongxiong * 创建时间:2017-7-3 下午9:03:45 * 修改人:Mu Xiongxiong * 修改时间:2017-7-3 下午9:03:45 * 修改备注: * @version * */ public class Voice { /** * * @Title: strat * @Description: 该方法的主要作用:朗读 * @param @param content * @param @param type 设定文件 0:开始,1停止 * @return 返回类型:void * @throws */ public 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(); } } } /** * * @Title: test * @Description: 该方法的主要作用:执行朗读内容 * @param 设定文件 * @return 返回类型:void * @throws */ @Test public void test() { strat("语音朗读的内容", 0); } }