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

需求

写出一个语音播报方法的工具类,
需要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);
    }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值