在实现这个功能前,得先做几步准备
1。去官网下载jar包和dll文件
2。把下载的dll文件放入到jdk的bin目录下
3。把下载下的jar包打到maven仓库中
4。pom引入打好的依赖
jacob官网下载链接
https://sourceforge.net/projects/jacob-project/
下载下的jar包
jar包及dll文件下载
https://download.csdn.net/download/dayonglove2018/14032442
打压命令博客
https://blog.csdn.net/dayonglove2018/article/details/106419549
之前写过一篇把jar包打压到maven中
当然也可以不打压到maven中,那就是直接把这个jar导入到项目中使用也可以
<dependency>
<groupId>com.hynnetgroupId>
<artifactId>jacobartifactId>
<version>1.2.0version>
dependency>
package com.zjy.knife4j.controller;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.zjy.knife4j.model.ResultBO;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
@RequestMapping("/voice")
@RestController
public class VoiceController {
/**日志对象*/
private static final Logger logger = LoggerFactory.getLogger(VoiceController.class);
@ApiOperation(value = "文字转语音", notes = "文字转语音")
@GetMapping("/conversion")
public ResultBO conversion(@RequestParam(value = "msg",required = true) String msg) throws Exception {
logger.info("要转换的消息内容为: {}", msg);
ResultBO results = new ResultBO();
ActiveXComponent ax = new ActiveXComponent("Sapi.SpVoice");
//运行时输出语音内容
Dispatch spVoice = ax.getObject();
// 音量 0-100
ax.setProperty("Volume", new Variant(100));
// 语音朗读速度 -10 到 +10
ax.setProperty("Rate", new Variant(-2));
// 执行朗读
Dispatch.call(spVoice, "Speak", new Variant(msg));
//下面是构建文件流把生成语音文件
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 .mp3 这两个是我尝试的,都支持,和一些个听书读的差不多
Dispatch.call(spFileStream, "Open", new Variant("D:\\xm\\knife4j\\voice\\ " + getTime() + ".mp3"), new Variant(3), new Variant(true));
//设置声音对象的音频输出流为输出文件对象
Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);
//设置音量 0到100
Dispatch.put(spVoice, "Volume", new Variant(100));
//设置朗读速度
Dispatch.put(spVoice, "Rate", new Variant(0));
//开始朗读
Dispatch.call(spVoice, "Speak", new Variant(msg));
//关闭输出文件
Dispatch.call(spFileStream, "Close");
Dispatch.putRef(spVoice, "AudioOutputStream", null);
spAudioFormat.safeRelease();
spFileStream.safeRelease();
spVoice.safeRelease();
ax.safeRelease();
results.setCode(200);
results.setMsg("调用测试接口成功!");
results.setSucceed(true);
logger.info("调用测试接口成功");
return results;
}
/**
* 时间转换
* @return
*/
public String getTime(){
SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMddHHmmss");
String time = dateformat.format(new Date());
return time;
}
}
测试OK!
最开始访问会报错:
java.lang.UnsatisfiedLinkError: no jacob in java.library.path
这个引起的原因是:
1种情况:最开始没有下载dll文件,直接把jar包放入到项目中使用
2种情况:直接导入依赖是1.18的依赖,然后也将 jacob-1.20-x64.dll 文件放入到项目中
欢迎大佬们留言评论,共同学习!!!感谢!!!
===========================
原创文章,转载注明出处!