最近比较无聊,随便翻着博客,无意中看到了有的人用VBS读文本内容,也就是读几句中文,emmm,挺有趣的,实现也很简单,都不需要安装什么环境,直接新建txt文件,输入一些简单的vbs读文本的代码,然后将新建的文件后缀改为.vbs,然后双击一下就可以有效果了。。。。
于是我就想啊,java行不行呢?查了一些资料,还真的行,我就将我试验的过程说一下,就当作娱乐娱乐!
1.依赖
随便新建一个maven项目,导入依赖
<dependency> <groupId>com.hynnet</groupId> <artifactId>jacob</artifactId> <version>1.18</version> </dependency>
只导入依赖还不行,还要导入一个.dll文件,百度云链接:链接:https://pan.baidu.com/s/1YYYPIoPxrtuyKebJzabhlw 提取码:s62o ,可以看到有两个dll文件,由于我的电脑是64位的,于是我将上面那个dll文件复制一份到当前使用jdk的bin目录下
2.java代码实现
一个很简单的java代码实现,运行之后就会读出来了;
package com.wyq.day66; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class Speak02 { //用电脑自带的语音读字符串str public static void main(String[] args) { String str = "你好,我是java小新人!请叫我最帅的帅锅"; ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice"); Dispatch sapo = sap.getObject(); try { // 音量 0-100 sap.setProperty("Volume", new Variant(100)); // 语音朗读速度 -10 到 +10 sap.setProperty("Rate", new Variant(0)); // 执行朗读 Dispatch.call(sapo, "Speak", new Variant(str)); } catch (Exception e) { e.printStackTrace(); } finally { sapo.safeRelease(); sap.safeRelease(); } } }
3.输出音频文件
按理说到上面已经实现了功能,但是我还想着能不能把读的音频文件该输出一下呢?查了查资料,居然还真行,代码如下:
package com.wyq.day66; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class JavaSpeak { public static void main(String[] args) { //指定文件音频输出文件位置 String output = "E:\\test.wav"; ActiveXComponent ax = null; String str="我是java小新人,我要将这段话的音频输出一下"; try { ax = new ActiveXComponent("Sapi.SpVoice"); //运行时输出语音内容 Dispatch spVoice = ax.getObject(); // 音量 0-100 ax.setProperty("Volume", new Variant(100)); // 语音朗读速度 -10 到 +10 ax.setProperty("Rate", new Variant(-3)); // 进行朗读 Dispatch.call(spVoice, "Speak", new Variant(str)); //下面是构建文件流把生成语音文件 ax = new ActiveXComponent("Sapi.SpFileStream"); Dispatch spFileStream = ax.getObject(); ax = new ActiveXComponent("Sapi.SpAudioFormat"); Dispatch spAudioFormat = ax.getObject(); //设置音频流格式 Dispatch.put(spAudioFormat, "Type", new Variant(22)); //设置文件输出流格式 Dispatch.putRef(spFileStream, "Format", spAudioFormat); //调用输出 文件流打开方法,在指定位置输出一个.wav文件 Dispatch.call(spFileStream, "Open", new Variant(output), new Variant(3), new Variant(true)); //设置声音对象的音频输出流为输出文件对象 Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream); //设置音量 0到100 Dispatch.put(spVoice, "Volume", new Variant(100)); //设置朗读速度 Dispatch.put(spVoice, "Rate", new Variant(-2)); //开始朗读 Dispatch.call(spVoice, "Speak", new Variant(str)); //关闭输出文件 Dispatch.call(spFileStream, "Close"); Dispatch.putRef(spVoice, "AudioOutputStream", null); spAudioFormat.safeRelease(); spFileStream.safeRelease(); spVoice.safeRelease(); ax.safeRelease(); } catch (Exception e) { e.p