• 黑豹程序员 - java实现朗读文字


    需求

    写出一个语音播报方法的工具类,
    需要window系统支持,外部导入jacob这个jar包以及dll文件的位置设置,主要是通过java工具类来实现;(但是这种导入Jacob包的方法只适合在window的开发环境使用,因为里面的dll文件只支持在Windows环境下的com组件运行,而Linux系统不适用)

    jacob实现

    Jacob 是 JAVA-COM Bridge的缩写,是一个中间件,能够提供自动化访问MS系统下COM组件和Win32 libraries的功能。

    核心类:

    JacobObject:用于Java程序MS下的COM进行通信,创建标准的API框架
    ComThread:初始化COM组件线程,释放线程,对线程进行管理
    Dispatch:调度处理类,封装了操作来从而操作Office,并表示不同MS级别调度对象
    ActiveXComponent : 创建COM组件
    Variant : 与COM通讯的参数或者返回值
    ROT :Running Object Table (ROT),运行对象表将每个线程映射到所有jacobobjects,在线程创建

    核心方法:

    Dispatch : 可调用该自动化对象的属性或方法,具体的属性和方法要看参考文档VBA API
    Dispatch.get(dispatch, String name);获取对象属性
    Dispatch.put(dispatch, String name, Object value);设置对象属性
    Dispatch.call(dispatch, String name, Object… args);调用对象方法

    实现步骤:

    第一步:下载jar包

    D:\workspace\env\jars\jacob-1.17-M2

    在这里插入图片描述

    第二步:复制动态链接库dll

    复制动态链接库 jacob-1.17-M2-x64.dll 到window系统和jdk目录中:
    C:\Windows\System32
    C:\Program Files\Java\jdk1.8.0_45\bin

    第三步:配置idea

    引入jar包支持
    在这里插入图片描述

    第四步:测试类

    import com.jacob.activeX.ActiveXComponent;
    import com.jacob.com.Dispatch;
    import com.jacob.com.Variant;
    import org.junit.jupiter.api.Test;
    
    /**
     * @version v1.0 创建时间:15:03
     * @author: 作者:陈子枢
     * @web CSDN:https://blog.csdn.net/nutony
     * @description 描述:
     */
    public class TestVoice {
        public void strat(String content, int type) {
            ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice");
            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);
            strat("写个for循环", 0);
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
  • 相关阅读:
    React技巧之打开文件输入框
    一个useState学会React的主要思想
    postgresql(openGauss)模糊匹配参数
    etcd实现大规模服务治理应用实战
    互联网热门词汇-媒体经常说的热门词
    【面经&八股】搜广推方向:面试记录(八)
    2023年java代做题目参考整理
    Java集合探秘:Map和Set的魔法世界
    面向对象及工程环境构建,220729,
    ACL 2022 RE两篇
  • 原文地址:https://blog.csdn.net/nutony/article/details/133811445