Java 调用 windows 组件实现语音播报

本贴最后更新于 2339 天前,其中的信息可能已经沧海桑田

依赖

使用 jacob-1.19.zip 实现对 windows 组件的调用,亲测支持 win10 和 win7

代码

public static void main(String[] args) { 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("你好!")); }catch (Exception e) { e.printStackTrace(); }finally { sapo.safeRelease(); sap.safeRelease(); } }

注意

需要将 jacob-1.19-x**.dll 放到 jdk 和 jre 的 bin 目录中,并且必须安装 vc++ 2005

其他方式

PowerShell 脚本可以直接调用 windows 的组件实现文本的朗读,那么我们也可以使用 Java 调用 PowerShell 脚本,从而实现语音播报。
Java 调用 PowerShell 在 github 上个有个项目 jPowerShell,使用它可以很轻松的完成对 PowerShell 的调用,但是这种方式速度超级慢,具体为什么这么慢我没有深究,不推荐采用。

# PowerShell代码 # 添加 System.speech.dll 引用 Add-Type -AssemblyName System.speech # 创建 SpeechSynthesizer 对象 $syn=New-Object System.Speech.Synthesis.SpeechSynthesizer $syn.Speak("你好!") #设置朗读的语速 $syn.Rate=-5 $syn.Speak("你好!") #设置朗读的音量 $syn.Volume=80 $syn.Speak("你好!") #将文本转换成音频 $syn.SetOutputToWaveFile("d:a.wav") $syn.Speak("你好!")
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 161 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3198 引用 • 8215 回帖
  • 技术

    到底什么才是技术呢?

    88 引用 • 179 回帖 • 4 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...