java 实现文本转音频

文章目录

  • 一、前言
  • 二、实现流程
    • 2.1 下载jacob-1.18.zip
    • 2.2 拷贝jacob-1.18-x64.dll
    • 2.3 pom 添加依赖
    • 2.4 代码实现


一、前言

本文基于Windows自带的SAPI.SpVoice,通过java代码实现文本转语音的功能。

二、实现流程

2.1 下载jacob-1.18.zip

链接:https://pan.baidu.com/s/1-zYB9I4VF5cPuj3ok1WLyg
提取码:7t1g

2.2 拷贝jacob-1.18-x64.dll

将 jacob-1.18-x64.dll拷贝到jdk的bin目录或windows/SysWOW64目录中

2.3 pom 添加依赖

<dependency><groupId>com.hynnet</groupId><artifactId>jacob</artifactId><version>1.18</version>
</dependency>

2.4 代码实现

文章目录

  • 一、前言
  • 二、实现流程
    • 2.1 下载jacob-1.18.zip
    • 2.2 拷贝jacob-1.18-x64.dll
    • 2.3 pom 添加依赖
    • 2.4 代码实现

    ---# 一、前言本文基于Windows自带的SAPI.SpVoice,通过java代码实现文本转语音的功能。# 二、实现流程## 2.1下载jacob-1.18.zip链接:https://pan.baidu.com/s/1-zYB9I4VF5cPuj3ok1WLyg提取码:7t1g## 2.2拷贝jacob-1.18-x64.dll将 jacob-1.18-x64.dll拷贝到jdk的bin目录或windows/SysWOW64目录中## 2.3pom 添加依赖```yaml
com.hynnet jacob 1.18 ``` ## 2.4代码实现

package gisshare.demo.audio;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Objects;
import java.util.UUID;/*** 离线 本地 TXT文件 语音朗读,生成mp3文件*/
public class VoiceReading {public static void main(String[] args) {//本地TXT文件位置String text = textToStr("D:\\myWork/1111.txt");textToSpeechIO(text);}/*** 字符串文本转 wav格式 语音文件** @param text 要读的文字字符串*/public static void textToSpeechIO(String text) {String path = "D:\\myWork\\test/";ActiveXComponent ax = null;Dispatch spFileStream = null;Dispatch spAudioFormat = null;Dispatch spVoice = null;try {ax = new ActiveXComponent("Sapi.SpFileStream");spFileStream = ax.getObject();ax = new ActiveXComponent("Sapi.SpAudioFormat");spAudioFormat = ax.getObject();spVoice = new ActiveXComponent("Sapi.SpVoice").getObject();// 设置音频流格式Dispatch.put(spAudioFormat, "Type", new Variant(22));// 设置文件输出流格式Dispatch.putRef(spFileStream, "Format", spAudioFormat);//随机uuidString uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");
//                String filePath = path + uuid + ".wav";String filePath = path + uuid + ".mp3";// 调用输出 文件流打开方法,创建一个.wav文件
//                Dispatch.call(spFileStream, "Open", new Variant("D:\\workspace3\\test/test.mp3"), new Variant(3), new Variant(true));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));// 设置朗读速度  -10 ~ +10Dispatch.put(spVoice, "Rate", new Variant(1));Dispatch.call(spVoice, "Speak", new Variant(text));System.out.println("输出语音文件成功!");} catch (Exception e) {e.printStackTrace();} finally {// 关闭输出文件Dispatch.call(Objects.requireNonNull(spFileStream), "Close");Dispatch.putRef(Objects.requireNonNull(spVoice), "AudioOutputStream", null);Objects.requireNonNull(spAudioFormat).safeRelease();spFileStream.safeRelease();spVoice.safeRelease();ax.safeRelease();}}/*** txt文件转字符串** @param fileName txt文件所在位置* @return txt文件中的字符串*/public static String textToStr(String fileName) {BufferedReader reader = null;try {reader = new BufferedReader(new FileReader(fileName));StringBuilder sb = new StringBuilder();String line;while ((line = reader.readLine()) != null) {sb.append(line);}return sb.toString();} catch (IOException e) {e.printStackTrace();return "";} finally {try {Objects.requireNonNull(reader).close();} catch (IOException e) {e.printStackTrace();}}}/*** 字符串文本阅读** @param str 要读的文字字符串*/public static void readStr(String str) {ActiveXComponent ax = new ActiveXComponent("Sapi.SpVoice");//运行时输出语音内容Dispatch spVoice = ax.getObject();//设置音量 0 ~ 100ax.setProperty("Volume", new Variant(100));//设置朗读速度 -10 ~ +10ax.setProperty("Rate", new Variant(1));//执行朗读Dispatch.call(spVoice, "Speak", new Variant(str));}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/414538.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

号称史上最强AI的Google Gemini,通过大语言模型的帮助如何实现智能交互?

导读&#xff1a; 本文旨在探索一条创新的路径&#xff0c;即通过利用Google的Gemini Flash而非广为人知的LangChain&#xff0c;来实现与CSV文件的智能交互。本文将构建一个简单的CSV解释器&#xff0c;利用大型语言模型&#xff08;LLM&#xff09;来生成代码并解析数据&…

2024年互联网公司时薪排行榜大曝光!看完我酸了,第一竟是他…

大家好呀&#xff0c;我是胡广&#xff0c;今天看到千峰教育公众号分享一个对于选择公司非常有用的参考&#xff1a;“互联网时薪”。特地分享给各位看看 很多小伙伴在选择一家公司的时候更关注总收入package (除了基本的月薪&#xff0c;加上其他的所有的收入&#xff0c;包括…

惊喜!万博智云亮相2024数博会和第三届828 B2B企业节

摘要 万博智云作为2024 828 B2B企业节铂金合作伙伴&#xff0c;在2024中国国际大数据产业博览会的828 B2B企业节开幕式上亮相&#xff0c;并参加了本次828企业节的一系列活动&#xff0c;包括在华为展台现场开展的“‘云上大咖团’直面数博会现场”的直播上发表了主题分享。 8…

华为OD机试 - 最大报酬 - 0/1 背包问题,动态规划(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

借老系统重构机会我写了个groovy规则引擎

公司老系统的重构计划早就有了&#xff0c;为了对Java硬编码的各种校验规则进行重构&#xff0c;特地参考了相关技术&#xff0c;最终选择了groovy进行了系统的学习&#xff0c;并编写了一个即插即用的轻量级规则引擎。 文章目录 项目背景技术选型groovy的性能groovy脚本执行线…

数据结构---双向链表---循环链表---栈

目录 一、双向链表 1.1.创建双向链表 1.2.头插法 1.3.尾插法 1.4.查询节点 1.5.修改节点 1.6.删除节点 1.7.打印节点 1.8.销毁链表 二、循环链表 2.1.单循环链表 2.2.双循环链表 三、栈 3.1.顺序栈 1.创建栈 2.判断栈是否满 3.判断栈是否为空 4.进栈 5.出栈…

安全升级:Docker部署Redis,启用密码验证

1.在自己选定的目录中创建文件夹 在redis文件夹里面创建&#xff1a;data文件夹和conf文件夹&#xff08;文件夹名称随意&#xff09; 2.在conf文件夹中创建redis.conf文件&#xff1a; vim redis.conf 2.1.redis.conf里面编写内容可以根据官网&#xff08;Index of /releases…

CNN中的注意力机制综合指南:从理论到Pytorch代码实现

注意力机制已经成为深度学习模型&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;中不可或缺的组成部分。通过使模型能够选择性地关注输入数据中最相关的部分&#xff0c;注意力机制显著提升了CNN在图像分类、目标检测和语义分割等复杂任务中的性能。本文将全面介绍…

uniapp video标签无法播放视频

当video标签路径含有中文以及特殊字符视频就会无法播放 解决方法使用encodeURIComponent对路径进行加密处理 videoSrc data.coursewareFile? ${appConfig.apiUrl encodeURIComponent(data.coursewareFile)}: "";最后效果

(go)线性表的顺序存储

闲来无事&#xff0c;更新一下&#xff0c;线性表的顺序存储&#xff0c;go语言版本&#xff0c;效果都已经测试过&#xff0c;下面给出各部分细节 文章目录 1、生成一个线性表2、查找3、插入4、求长度5、改值6、删除7、遍历8、测试程序9、完整代码总结 package mainimport &q…

HashMap相关面试题(哈希表、HashMap的实现原理、HashMap的put方法的具体流程、HashMap的扩容机制、HashMap的寻址算法)

文章目录 1. 散列表&#xff08;哈希表&#xff09;1.1 散列表的概念1.2 散列函数1.3 散列冲突1.4 散列冲突-链表法&#xff08;拉链法&#xff09;1.4.1 插入操作1.4.2 查找和删除操作 2. HashMap的实现原理3. HashMap 的 put 方法的具体流程4. HashMap 的扩容机制5. HashMap …

Prometheus监控Kubernetes ETCD

文章目录 一、kubeadm方式部署etcd1.修改etcd指标接口监听地址2.prometheus中添加etcd的服务发现配置3.创建etcd的service4.grafana添加etcd监控模版 二、二进制方式部署k8s etcd1.将etcd服务代理到k8s集群2.创建etcd证书的secrets3.prometheus挂载etcd证书的secrets4.promethe…

【c++】常量周边:常量概念及定义

目录 前言 1.常量是什么&#xff1f; 2.常量的的类型 本质区别&#xff1a; 1&#xff09;文字常量&#xff08;无法取地址&#xff09; &#x1f337;什么是字面值&#xff1f;&#xff1f; 字面值后缀 &#x1f337;文字&#xff08;字面&#xff09;常量的基本类型 …

双指针--优选算法

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;游戏、数据结构、c语言基础、c学习、OJ题 前言&#xff1a; 该篇文章我们主要来学习的是双指针算法&#xff0c;对于该类算法我们可以直接来做题&#xff0c;从题中去感知该算法的魅力&#xff0c;最后再从题中做总…

Elasticsearch Suggesters API详解与联想词自动补全应用

Elasticsearch Suggesters API详解与联想词自动补全应用 引言Elasticsearch Suggesters1. Term Suggester实现步骤示例 2. Phrase Suggester示例 3. Completion Suggester创建映射和插入数据查询示例 4. Context Suggester示例 Completion Suggester1. 工作原理2. 使用流程3. 使…

东软 在大健康路上“笨鸟先飞”

若不是东软医疗引入“国家队”通用技术集团作为其最重要的战略投资人&#xff0c;恐怕很多人并不会留意东软“蛰伏”在大健康的赛道上&#xff0c;已有30年。 1997年的一天&#xff0c;沈阳高新技术产业开发区的东大软件园里&#xff0c;创立东软不过6年时间的刘积仁思量着眼前…

并发性服务器

同一时刻能处理多个客户端 多进程&#xff1a; int init_tcp_ser(const char *ip,unsigned short port) {int sockfd socket(AF_INET,SOCK_STREAM,0);if(-1 sockfd){perror("fail socket");return -1;}struct sockaddr_in ser;ser.sin_family AF_INET;ser.sin_por…

tomcat在eclipse中起动成功,无法访问tomcat主页

最近通过geoserver的war包将&#xff0c;geoserver服务部署到了tomcat&#xff0c;发现在eclipse中启动服务后&#xff0c;无法访问localhost&#xff1a;8080主页&#xff0c;geoserver主页&#xff1a;localhost:8080/geoserver/web同样也无法访问。 只需要双击下面的server…

【生成模型系列(初级)】自编码器——深度学习的数据压缩与重构

【通俗理解】自编码器——深度学习的数据压缩与重构 第一节&#xff1a;自编码器的类比与核心概念 1.1 自编码器的类比 你可以把自编码器想象成一个“智能压缩机”&#xff0c;它能够把输入的数据&#xff08;比如图片&#xff09;压缩成一个更小的表示&#xff08;编码&#…

MacOS使用FileZilla通过ssh密钥文件连接远程服务器(已解决)

需求描述 mac电脑,使用filezilla通过FTP连接远程服务器,使用ssh密钥文件代替密码。 版本信息 MacOS:Sonoma 14.5 M3芯片 FileZilla:3.66.5 在这里插入图片描述 连接 1. 创建站点 打开filezilla工具,右上角选择“文件 -> 站点管理器”,打开站点管理器弹窗。 2.…