springboot整合jacob实现文字转语音

springboot整合jacob实现文字转语音

前期准备

在实现这个功能前,得先做几步准备
1。去官网下载jar包和dll文件
2。把下载的dll文件放入到jdk的bin目录下
3。把下载下的jar包打到maven仓库中
4。pom引入打好的依赖

1.下载jar包及dll文件

jacob官网下载链接
https://sourceforge.net/projects/jacob-project/
下载下的jar包

jar包及dll文件下载
https://download.csdn.net/download/dayonglove2018/14032442
springboot整合jacob实现文字转语音_第1张图片

下载下的dll文件
springboot整合jacob实现文字转语音_第2张图片

2.将 jacob-1.20-x64.dll 放入到jdk的bin目录中
3.将jar包打压到maven仓库中

打压命令博客
https://blog.csdn.net/dayonglove2018/article/details/106419549
之前写过一篇把jar包打压到maven中
当然也可以不打压到maven中,那就是直接把这个jar导入到项目中使用也可以

4.引入pom依赖

这是我自己打压的jar包
springboot整合jacob实现文字转语音_第3张图片


<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;
    }
}

开始测试
启动项目,访问swagger
springboot整合jacob实现文字转语音_第4张图片

控制台打印:
springboot整合jacob实现文字转语音_第5张图片

测试OK!


最开始访问会报错:
java.lang.UnsatisfiedLinkError: no jacob in java.library.path
这个引起的原因是:
1种情况:最开始没有下载dll文件,直接把jar包放入到项目中使用
2种情况:直接导入依赖是1.18的依赖,然后也将 jacob-1.20-x64.dll 文件放入到项目中

欢迎大佬们留言评论,共同学习!!!感谢!!!

===========================
原创文章,转载注明出处!

你可能感兴趣的:(技术,java,maven,语音识别,spring,boot,jar)