package com.study.springbootdemo.Controller;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;import java.io.File;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;/*** 文字转语音测试 jdk bin文件中需要导入jacob-1.18-M2-x64.dll** @author zk* @date: 2019年6月25日 上午10:05:21*/
public class Test {public static void main(String[] args) {String file = "E:\\新建文件夹";// String str=“请A001号到3号窗口”;// String str=“华为 new bee”;
//    String str = "3号机柜报警,3号机柜报警,3号机柜报警";String str = "当月亮和太阳处于地球两侧,并且月亮和太阳的黄经相差180度时,从地球上看,此时的月亮最圆,称之为“满月”,亦称为“望”。农历每月的十四、十五、十六甚至十七,都是满月可能出现的时段。而“超级月亮”指的就是月亮在满月的时候,刚好位于近地点附近。由于靠近地球,所以看上去,此时的月亮比平时更大。“超级月亮”每年都会发生,有时还不止一次。";//文字转语音,返回语音保存的地址Map<String, Object> map = textToSpeech(str, file);//地址不为空时,转换采样率和文件格式if (map != null && map.size() > 0) {Map<String, Object> map1 = samplingRateTest.testCompressMp3Samll(map.get("filePath").toString(), file, 16000, "mp3");System.out.println("filePath==" + map1.get("filePath"));System.out.println("fileName==" + map1.get("fileName"));}}public static Map<String, Object> textToSpeech(String text, String files) {File file = new File(files);//如果文件夹不存在则创建if (!file.exists() && !file.isDirectory()) {System.out.println("//不存在");file.mkdir();} else {System.out.println("//目录存在");}ActiveXComponent ax = null;try {ax = new ActiveXComponent("Sapi.SpVoice");//运行时输出语音内容Dispatch spVoice = ax.getObject();//只朗读不保存// 音量 0-100/*ax.setProperty("Volume", new Variant(100));// 语音朗读速度 -10 到 +10ax.setProperty("Rate", new Variant(0));// 执行朗读Dispatch.call(spVoice, "Speak", new Variant(text));*///下面是构建文件流把生成语音文件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文件String fileName = new Date().getTime() + ".wav";String filePath = files + "\\" + fileName;Dispatch.call(spFileStream, "Open", new Variant(filePath), new Variant(3), new Variant(true));//设置声音对象的音频输出流为输出文件对象Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);//设置音量 0到100Dispatch.put(spVoice, "Volume", new Variant(100));//设置朗读速度Dispatch.put(spVoice, "Rate", new Variant(-1));//开始朗读Dispatch.call(spVoice, "Speak", new Variant(text));//关闭输出文件Dispatch.call(spFileStream, "Close");Dispatch.putRef(spVoice, "AudioOutputStream", null);spAudioFormat.safeRelease();spFileStream.safeRelease();spVoice.safeRelease();ax.safeRelease();Map<String, Object> map = new HashMap<>();map.put("filePath", filePath);map.put("fileName", fileName);return map;} catch (Exception e) {e.printStackTrace();}return null;}}

注意:此只适用于windows

使用的是微软自带的TTS,若电脑未安装或因安装的系统是精简版被阉割,可使用以下工具修复(注:因情况不同 不保证每个都可被修复)

Win7系统TTS修复-采用原生Win7提取绿色修复_2018-02-06.zip - 蓝奏云

java使用jacob.jar实现文字转语音相关推荐

  1. 文字转语音(jacob)

    近期项目中出现在离线情况下文字转语音的需求 经过尝试发现jacob还不错 注:只适用于windows系统环境 以下为开发记录: 1.pom.xml中引入jacob.jar <dependency ...

  2. springboot文字转语音(jacob)

    近期项目中出现在离线情况下文字转语音的需求 进过尝试返现jacob还不错 一下为开发记录: 1.pom.xml中引入jacob.jar <dependency><groupId> ...

  3. java 文字转换成语音 代码_java文字转语音播报功能的实现方法

    前言 本文主要给大家分享了关于java文字转语音播报的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 方法如下 一.pom.xml引入jar包依赖 com.hynnet ja ...

  4. java实现文字转语音功能(仅Windows)

    一.pom.xml引入jar包依赖 <!-- https://mvnrepository.com/artifact/com.jacob/jacob 文字转语音 --> <depend ...

  5. java应用之文字转语音

    最近做的语音播报功能,文字转语音的实现. 一.pom.xml引入jar包依赖 <dependency><groupId>com.hynnet</groupId>&l ...

  6. java文字转语音播报并输出文件

    一.pom.xml引入jar包依赖 <!-- https://mvnrepository.com/artifact/com.jacob/jacob 文字转语音 --> <depend ...

  7. java word转pdf jacob_java使用jacob.jar将word转pdf

    这篇文章主要为大家详细介绍了java利用jacob.jar将word转pdf,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了java利用jacob.jar将word转pdf的具 ...

  8. java使用jacob.jar_java使用jacob.jar将word转pdf

    本文实例为大家分享了java利用jacob.jar将word转pdf的具体代码,供大家参考,具体内容如下 1.jacob.jar配置说明 JACOB 就是 JAVA-COM Bridge的缩写,提供自 ...

  9. Java程序朗读文字的实现,jacob.jar

    目的 使用Java程序实现朗读文字. 依赖 jacob.jar(我的是\jacob-1.18)这个可以用Maven去下载(下载后再到本地的库拿到jar),在dependencies节点下增加如下内容: ...

最新文章

  1. Struts2中action接收参数的三种方法及ModelDriven跟Preparable接口结合JAVA反射机制的灵活用法...
  2. tensorflow:Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
  3. 用Artifactory管理内部Maven仓库
  4. java编程double相乘_浅谈Java double 相乘的结果偏差小问题
  5. centos7安装oracle12c 二
  6. http:(1):http简介
  7. js计算排名_今天,我们讲一下,快速排名与黑帽SEO
  8. Mac局域网本地库server, CornerStone使用
  9. 谷歌浏览器js报错:Uncaught (in promise) DOMException
  10. python把中文转英文_python自动化测试——中文转拼音,转英文
  11. CSAPP作业:Fork函数的学习感悟
  12. Android图片压缩、加水印
  13. Altium Designer布局布线技巧分享
  14. 二代身份证号码最后一位校验位的计算方法
  15. 《SysML精粹》学习记录--第五章
  16. 获取 ProgramData 文件夹路径
  17. Linux命令--top
  18. [转帖]AMD第三代锐龙处理器首发评测:i9已无力招架
  19. 再谈用VS+VC绿色版编译多版本
  20. GIS学习二:地形分析

热门文章

  1. android字体样式
  2. android 自定义表情包,快速打造 Android 自定义表情库
  3. 苹果库克赢得最佳CEO声誉的10个理由
  4. 16_MySQL中的存储过程和触发器
  5. python中的replaceall_java基础 — String中replace和replaceAll方法
  6. kettle 连接数据库报错 (错误连接数据库 [mysql] : org.pentaho.di.core.exception.KettleDatabaseException: Error occ)
  7. kingedit 上传php_kindeditor=4.1.5上传漏洞复现
  8. 基于TCP/IP网络的管理结构和标记
  9. Git/GitHub 中文术语表
  10. DNS欺骗及防御技术