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

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

依赖

使用 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思源笔记

    1083 引用 • 3461 回帖 • 286 关注
  • Java

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

    3168 引用 • 8207 回帖
  • 技术

    到底什么才是技术呢?

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

    好记性不如烂笔头。

    303 引用 • 777 回帖

相关帖子

欢迎来到这里!

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

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