1.实现效果如下:

输入文字(支持中英文),点击转换生成***.wav文件,点击下载到本地就可。

生成后的音频文件播放,时长1分8秒

2.实现代码:

这次采用jacob实现,相比百度AI需要联网,本项目定位内网环境实现。所以最终采jacob。

1.环境配置:

本次采用版本jacob-1.19,我们需要下载jacob.jar和dll

下载地址:jacob语音生成文件,jacobx64.dll和jacob.jar为1.9-Java文档类资源-CSDN下载

官网地址:JACOB - Java COM Bridge download | SourceForge.net

下载后得到两个文件:

jacob.dll:配置到jdk环境中

jacob.jar:放入到项目中并配置下pox和Idea 的dependencies下

第一步

jacob.dll放入:C:\Program Files\Java\jdk1.8.0_121\jre\bin

第二步:

1.首先有一个spring boot项目,没有就搭建一个

2.把jacob放到项目resources>lib目录下

3.在pom.xml文件添加依赖:

 <!--添加本地的jacob.jar包--><dependency><groupId>com.jacob</groupId><artifactId>jacob</artifactId><version>1.19</version><!--system使用本地jar包--><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/jacob.jar</systemPath></dependency>

4.在idea下的项目中添加依赖包,

5.这样环境就搭建完成。

2.编码:

核心代码,这样就可以输入文字,生成音频文件保存到本地目录中,然后下载音频文件就只需要读取文件就可以。

 //输入文本内容,生成文件地址 text为输入的文本信息public void audioFile(String text){try {//jacob.dll没成功安装,执行这一步会出错//构建音频格式 调用注册表应用Dispatch spAudioFormat = new ActiveXComponent("Sapi.SpAudioFormat").getObject();//音频文件输出流Dispatch spFileStream = new ActiveXComponent("Sapi.SpFileStream").getObject();//构建音频对象Dispatch spVoice =  new ActiveXComponent("Sapi.SpVoice").getObject();//设置spAudioFormat音频流格式类型22Dispatch.put(spAudioFormat, "Type", new Variant(22));//设置spFileStream文件输出流的音频格式Dispatch.putRef(spFileStream, "Format", spAudioFormat);//设置spFileStream文件输出流参数地址等 Dispatch.call(spFileStream, "Open", new Variant("D:\speech\48641486.wav"), new Variant(3), new Variant(true));//设置spVoice声音对象的音频输出流为输出文件对象Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);//设置spVoice声音对象的音量大小100Dispatch.put(spVoice, "Volume", new Variant(100));//设置spVoice声音对象的速度 0为正常速度,范围【..-2 -1 0 1 2..】Dispatch.put(spVoice, "Rate", new Variant(0));//设置spVoice声音对象中的文本内容Dispatch.call(spVoice, "Speak", new Variant(text));//关闭spFileStream输出文件Dispatch.call(spFileStream, "Close");//释放资源spVoice.safeRelease();spAudioFormat.safeRelease();spFileStream.safeRelease();}catch (Exception e){System.out.println(e.getMessage());}}

3.其他业务代码:非核心

下面就贴上完整的项目代码和配置文件

1.项目结构:

主要就几个文件:HomeController、TextToSpeechFileService、index.html、pom.xml

2.pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>text_speech</artifactId><version>0.0.1-SNAPSHOT</version><name>text_speech</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.5.0</spring-boot.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.5.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--添加本地的jacob.jar包--><dependency><groupId>com.jacob</groupId><artifactId>jacob</artifactId><version>1.19</version><!--system使用本地jar包--><scope>system</scope><systemPath>${basedir}/src/main/resources/lib/jacob.jar</systemPath></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.0</version><configuration><mainClass>com.example.text_speech.TextSpeechApplication</mainClass></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>

3.index.xml

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head><meta charset="UTF-8"><title>文字转语音</title><link rel="shortcut icon" href="https://pic.onlinewebfonts.com/svg/img_196224.png"><link th:href="@{/plugins/layui/src/css/layui.css}" type="text/css" rel="stylesheet"/><script th:inline="javascript">let ctx = /*[[@{/}]]*/ '';</script>
</head>
<body><fieldset class="layui-elem-field layui-field-title" style="margin-top: 80px;"><legend>文字转音频文件</legend></fieldset><div class="layui-bg-gray" style="padding: 30px;"><div class="layui-row layui-col-space15"><div class="layui-col-md6"><!--一行内容块--><div class="layui-form-item layui-form-text layui-panel"  ><textarea placeholder="请输入内容,支持中英文字。" id="textContent" class="layui-textarea" style="height: 400px"></textarea></div></div><div class="layui-col-md6 "><div class="layui-form-item "style="width: 100px"><button  style="margin-top: 100px;" class="layui-btn" onclick="getAudioFile()" >生成音频文件</button></div><div class="layui-panel" style="width: 400px;margin-left: 200px;top: -50px;height: 200px" ><div id="noFile" style="margin: 20px">等待生成文件。</div><div id="existFile" hidden><h3 style="text-align: center">音频文件已经生成</h3><div style="margin: 20px" ><div>文件名称:<span id="fileName"></span></div><div>文件格式:<span id="fileFormat"></span></div><div>创建时间:<span id="fileDate"></span></div></div><button  style="margin: 20px;margin-left: 35%" class="layui-btn" onclick="downFile()">下载文件</button></div></div></div></div></div></div>
</body>
<script th:src="@{/plugins/jquery/jquery-1.12.0.min.js}" type="text/javascript"></script>
<script th:src="@{/plugins/layui/src/layui.js}" type="text/javascript"></script>
<script type="text/javascript">/*文字转换*/function getAudioFile(){let loading = layer.load('Loading...', {shade: [0]});let text = $("#textContent").val();$.post("./tts",{"textContent":text},function (data) {layer.close(loading);if (data.code==="1"){$("#existFile").show();$("#noFile").hide();$("#fileName").html(data.name);$("#fileFormat").html(data.format);$("#fileDate").html(data.date);}else {$("#existFile").hide();$("#noFile").show();$("#noFile").html("文件生成发生错误。请检查输入内容。保证只有标准的标点符号和文字。");}})}/*下载文件*/function downFile(){window.open("./downFile?fileName="+$("#fileName").html(), "_blank");}</script>
</html>

3.HomeController

package com.example.text_speech.controller;import com.example.text_speech.service.TextSpeechService;
import com.example.text_speech.service.TextToSpeechFileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;@Controller
public class HomeController {@Autowiredprivate TextToSpeechFileService textToSpeechFileService;/**** @Author: LiaoJJ* @Description:主页*/@RequestMapping({"/index","/",""})public ModelAndView index(){return new ModelAndView("index");}/**** @Author: admin* @Description: 文本转语音*/@RequestMapping("/tts")@ResponseBodypublic HashMap<String,String> textTransformAudio(String textContent){return textToSpeechFileService.audioFile(textContent);}/**** @Author: admin* @Description: 下载文件*/@RequestMapping("/downFile")@ResponseBodypublic void down(String fileName, HttpServletResponse response){textToSpeechFileService.down(fileName,response);}}

4.TextToSpeechFileService

package com.example.text_speech.service;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.UUID;/**** @Author: LiaoJJ* @Date: 2022/10/12* @Description:文字转语音文件*/
@Service
@ComponentScan
public class TextToSpeechFileService {//语音文件生成的临时文件@Value("${filePath}")private String path;//输入文本内容,生成文件地址public HashMap<String,String> audioFile(String text){HashMap<String , String> map = new HashMap<>();try {//构建音频格式 调用注册表应用Dispatch spAudioFormat = new ActiveXComponent("Sapi.SpAudioFormat").getObject();//音频文件输出流Dispatch spFileStream = new ActiveXComponent("Sapi.SpFileStream").getObject();//构建音频对象Dispatch spVoice =  new ActiveXComponent("Sapi.SpVoice").getObject();//设置spAudioFormat音频流格式类型22Dispatch.put(spAudioFormat, "Type", new Variant(22));//设置spFileStream文件输出流的音频格式Dispatch.putRef(spFileStream, "Format", spAudioFormat);//随机uuidString uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");String filePath = path + uuid + ".wav";//设置spFileStream文件输出流参数地址等Dispatch.call(spFileStream, "Open", new Variant(filePath), new Variant(3), new Variant(true));//设置spVoice声音对象的音频输出流为输出文件对象Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);//设置spVoice声音对象的音量大小100Dispatch.put(spVoice, "Volume", new Variant(100));//设置spVoice声音对象的速度 0为正常速度,范围【..-2 -1 0 1 2..】Dispatch.put(spVoice, "Rate", new Variant(0));//设置spVoice声音对象中的文本内容Dispatch.call(spVoice, "Speak", new Variant(text));//关闭spFileStream输出文件Dispatch.call(spFileStream, "Close");//释放资源spVoice.safeRelease();spAudioFormat.safeRelease();spFileStream.safeRelease();map.put("code","1");map.put("name",uuid + ".wav");map.put("format","wav");SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");map.put("date",sdf.format(new Date()));}catch (Exception e){System.out.println(e.getMessage());map.put("code","0");}return map;}/**** @Author: LiaoJJ* @Description: 下载文件*/public void down(String fileName, HttpServletResponse response) {try {response.reset();response.setCharacterEncoding("UTF-8");response.setContentType("application/octet-stream");//3.设置content-disposition响应头控制浏览器以下载的形式打开文件response.addHeader("Content-Disposition","attachment;filename=" + new String(fileName.getBytes(),"utf-8"));//获取文件输入流InputStream in = new FileInputStream(path+fileName);int len = 0;byte[] buffer = new byte[1024];OutputStream out = response.getOutputStream();while ((len = in.read(buffer)) > 0) {//将缓冲区的数据输出到客户端浏览器out.write(buffer,0,len);}in.close();}catch (Exception e){e.getMessage();System.out.println("文件下载失败");}}}

5.application.yml

# 应用名称
spring:application:name: text_speechdevtools:restart:enabled: trueadditional-paths: resources/**,static/**,templates/**thymeleaf:prefix: classpath:/templates/suffix: .htmlcache: false  # 开启模板缓存encoding: UTF-8servlet:content-type: text/htmljackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8resources:add-mappings: true#静态资源访问路径static-locations: classpath:/static,classpath:/templates/,file:${config.file.root}# 应用服务 WEB 访问端口
server:port: 8080#配置本地临时文件夹
filePath: D:\speech\

通过上面的几个文件代码,就可以实现文章前面web页面的效果了。

本文章只是一个demo演示。应用到具体业务中还需要做一些修改。

如果其中存在什么问题回复到评论区,及时修改。感谢阅览。

【离线文本转语音文件】java spring boot jacob实现文字转语音文件,离线文本转化语音,中英文生成语音,文字朗读,中文生成声音,文字生成声音文件,文字转语音文件,文字变声音。相关推荐

  1. Spring Boot概述与入门特点配置方式注入方式yim配置文件与多文件配置Spring Boot自动配置原理lombok应用

    1. Spring Boot概述 Spring Boot是Spring项目中的一个子工程,与我们所熟知的Spring-framework 同属于spring的产品: 首页Spring Boot简介可以 ...

  2. Java Spring Boot VS .NetCore (七) 配置文件

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  3. Java Spring Boot 2.0 实战之制作Docker镜像并推送到Docker Hub和阿里云仓库

    内容摘要:大规模集群快速部署Java应用,需要制作Docker镜像,本次课程详细介绍如何制作Java程序的Docker镜像文件,深入解析DockerFile核心参数,以及实践演练把我们制作的Docke ...

  4. Java Spring Boot 2.0实战Docker容器与架构原理,视频与课件,基于Linux环境...

    Java Spring Boot 2.0实战Docker容器Linux与架构原理 内容摘要:Docker是最流行的开源容器引擎,Go语言开发,在互联网大规模集群.云计算.微服务等架构中广泛使用.本次课 ...

  5. JAVA Spring Boot与海康威视摄像头的故事

    <菜鸟学JAVA第一篇> 前言:JAVA Spring Boot与海康威视摄像头的故事 关于本贴 干货部分 进入官网,选择sdk下载: 下载所需要的开发包(以下教程以windows为例): ...

  6. Java+Spring Boot 二手书交易系统

    目录 1 系统简介 2 系统相关技术 2.1 Java EE 2.2 Springboot框架 2.3 Maven技术 2.4 Tomcat服务器 2.5 MySQL 3 需求分析 3.1 需求概述 ...

  7. 【直播回顾】云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第19讲):Java Spring Cloud微服务架构模式与开发实战...

    主讲人:徐雷(云栖社区特邀Java专家) 徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Ja ...

  8. 云栖社区特邀专家徐雷——Java Spring Boot开发实战系列课程【往期直播回顾】...

    徐雷,花名:徐雷frank:资深架构师,MongoDB中文社区联席主席,吉林大学计算机学士,上海交通大学硕士.从事了 10年+开发工作,专注于分布式架构,Java Spring Boot.Spring ...

  9. 毕设项目——智慧小区系统(Java Spring Boot+Vue ElementUI)

    毕设项目--智慧小区系统(Java Spring Boot+Vue ElementUI) 项目初衷(最真实版) 系统技术分析 前端界面 后端及数据库 系统功能介绍 小区业主端 物业人员端 系统界面展示 ...

最新文章

  1. python免费试听-线上儿童编程免费试听-品质保障
  2. 一文说说这十多年来计算机玩摄影的历史
  3. telnet客户端模拟浏览器发送请求
  4. 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据
  5. NYOJ 8 一种排序
  6. [Python人工智能] 二十三.基于机器学习和TFIDF的情感分类(含详细的NLP数据清洗)
  7. QLineEdit学习
  8. 数学家田野:感谢坐冷板凳的那六年
  9. 深入理解JVM-类加载器深入解析(3)
  10. CentOS 7.x下部署和配置zabbix 3.2.x监控工具
  11. fragment--总结
  12. python在字典中插入新的数据_Python数据类型之字典dict
  13. SolidWorks自定义装配体模板的方法
  14. python课程设计实验报告-python课程设计
  15. lsa五类_LSA 的五种类型
  16. 301代码php代码在哪里加,php 301转向实现代码
  17. 雷神五代笔记本U盘重装系统图文教程
  18. 最佳实战 | 如何使用腾讯云微搭从0到1开发企业门户应用
  19. 写作的意义,从一枚勋章开始
  20. 北京某公司前端笔试题及其答案

热门文章

  1. 连锁不平衡LD以及相关式子的推导
  2. 如何分辨主力洗盘还是在出货(股票入门知识)
  3. javaScript中递归和arguments.callee
  4. Linux系统编程37:多线程之什么是临界区和临界资源以及如何使用mutex互斥锁
  5. 调研1600个物联网项目,我们发现了2018可能大火的物联网应用!
  6. ivew input 去除边框 和 点击时不出现边框
  7. 2022年考研结果已出,你上岸了吗?
  8. 强化学习基础1.1 | 智能体与环境交互过程
  9. 树莓派与双色Led模块的那些事儿
  10. Tim Cook向员工发邮件,祝贺大家实现创纪录的季度