设为首页 加入收藏

TOP

java简单实现用语音读txt文档(一)
2019-09-03 02:22:02 】 浏览:32
Tags:java 简单 实现 语音 txt 文档

  最近比较无聊,随便翻着博客,无意中看到了有的人用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
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Integer Cache(带你脱坑) 下一篇Java中new和Class.forName的区别

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目