文本和语音互转

目录

1. 下载依赖ddl

2. 引入Pom依赖 

3. java代码

二. 语音转文本

1. 下载中文语音转文本的模型

2. 引入pom依赖

3. java代码

4. 运行效果


1. 下载依赖ddl

文字转语音文件需要使用jacob的dll文件放在jdk安装目录下的bin文件夹下 点击官网下载录或者通过csdn下载

2. 引入Pom依赖 

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

3. java代码


import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;/*** 文件转语音的工具类*/
public class JacobUtil {public static void main(String[] args) {String text = "很喜欢朗诵。上大学时,他是校广播站的播音员。母亲说你可以去市广播电台试试。他说可以吗?母亲说为什么不可以," +"只要心是明亮的,天空就是明亮的,你的世界,就是明亮的。再听到这句话时,感觉完全不一样了。" +"虽然他仍然消沉,可是偶尔当母亲说到什么有趣的事时,他也会开心得哈哈大笑。他听从母亲的建议," +"真的在某一天,去市电台应聘。本来他只想应付一下母亲,可出乎意料的是,他竟被破格录取为电台的兼职主持人," +"主持晚间的一档节目。";String filePath = "C:\\Users\\admin\\Downloads\\call.mp3";textToSpeech(text, filePath);}/*** 将文本转化为语音** @param text     文本内容* @param filePath 语音文件*/public static void textToSpeech(String text, String filePath) {ActiveXComponent activeXComponent = new ActiveXComponent("Sapi.SpVoice");Dispatch dispatch = activeXComponent.getObject();//运行时输出语音内容//文件名称activeXComponent = new ActiveXComponent("Sapi.SpFileStream");//生成语音文件Dispatch fileStreamDispatch = activeXComponent.getObject();activeXComponent = new ActiveXComponent("Sapi.SpAudioFormat");//音频Dispatch audioDispatch = activeXComponent.getObject();Dispatch.putRef(fileStreamDispatch, "Format", audioDispatch);//设置文件流格式Dispatch.put(audioDispatch, "Type", new Variant(22));//设置音频流格式//调用输出文件流打开方法,创建一个.wav .mp3 .mp4   .wma文件Dispatch.call(fileStreamDispatch, "Open", new Variant(filePath), new Variant(3), new Variant(true));Dispatch.putRef(dispatch, "AudioOutputStream", fileStreamDispatch);//设置声音对象的音频流输出流为输出文件对象Dispatch.put(dispatch, "Volume", new Variant(100));//设置音量0-100Dispatch.put(dispatch, "Rate", new Variant(0));//设置朗读速度Dispatch.call(dispatch, "Speak", new Variant(text));//开始朗读Dispatch.call(fileStreamDispatch, "Close"); //关闭输出文件流Dispatch.putRef(dispatch, "AudioOutputStream", null);audioDispatch.safeRelease();fileStreamDispatch.safeRelease();dispatch.safeRelease();activeXComponent.safeRelease();}
}

二. 语音转文本

1. 下载中文语音转文本的模型

点击下载 模型1(小)  模型2(大)  这两个模型都是中文, 如果有其他语种的识别,可以去官网下载对应语种的模型 注意 需要解压

2. 引入pom依赖

        <!-- 获取音频信息 --><dependency><groupId>org</groupId><artifactId>jaudiotagger</artifactId><version>2.0.3</version></dependency><!-- 语音识别 --><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.7.0</version></dependency><dependency><groupId>com.alphacephei</groupId><artifactId>vosk</artifactId><version>0.3.32</version></dependency>

3. java代码

package org.example.deepseek;import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.InputStream;
import javax.sound.sampled.AudioSystem;
import org.vosk.LogLevel;
import org.vosk.Recognizer;
import org.vosk.LibVosk;
import org.vosk.Model;public class VoiceUtil {public static void main(String[] argv) throws Exception {String filePath = "D:\\ai\\voice\\call.mp3";String modelPath = "D:\\ai\\voice\\vosk-model-cn-0.22";//注意模型需要解压后引入模型的根目录String content = speechToText(filePath, modelPath);System.out.println(content);}public static String speechToText(String filePath, String modelPath) throws Exception {LibVosk.setLogLevel(LogLevel.INFO);Model model = new Model(modelPath);FileInputStream fileInputStream = null;BufferedInputStream bufferedInputStream = null;InputStream inputStream = null;Recognizer recognizer = null;try {fileInputStream = new FileInputStream(filePath);bufferedInputStream = new BufferedInputStream(fileInputStream);inputStream = AudioSystem.getAudioInputStream(bufferedInputStream);recognizer = new Recognizer(model, 16000);int bytes;byte[] b = new byte[4096];while ((bytes = inputStream.read(b)) >= 0) {recognizer.acceptWaveForm(b, bytes);}return recognizer.getFinalResult();//System.lineSeparator()} finally {close(recognizer);close(inputStream);close(bufferedInputStream);close(fileInputStream);}}public static void close(AutoCloseable obj) {if (obj != null) {try {obj.close();} catch (Exception e) {e.printStackTrace();}}}
}

4. 运行效果

 

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

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

相关文章

DeepSeek破局启示录:一场算法优化对算力霸权的降维打击

导言 2024年,中国AI大模型赛道杀出一匹黑马——深度求索(DeepSeek)。从数学推理能力超越GPT-4,到API价格仅为Claude 3.5的1/53,再到开源生态的快速扩张,DeepSeek的崛起不仅打破了“算力霸权”的固有认知,更揭示了AI行业底层逻辑的深刻变革。这场技术革命背后,隐藏着技术…

Python大数据可视化:基于python大数据的电脑硬件推荐系统_flask+Hadoop+spider

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 管理员登录 管理员功能界面 价格区间界面 用户信息界面 品牌管理 笔记本管理 电脑主机…

阿里云虚机的远程桌面登录提示帐户被锁定了

提示由于安全原因&#xff0c;帐户被锁定。 阿里云虚机ECS的远程桌面登录提示帐户被锁定了&#xff0c;只能登录阿里云处理 阿里云-计算&#xff0c;为了无法计算的价值 需选择通过VNC连接 然后计算机管理&#xff0c;解除帐户锁定即可。

Grok 使用指南

文章来源&#xff1a;Grok 漫游指南 | xAI Docs 欢迎&#xff01;在本指南中&#xff0c;我们将引导您了解使用 xAI API 的基础知识。 #第 1 步&#xff1a;创建 xAI 帐户 您需要一个 xAI 帐户才能访问 xAI API。在此处注册帐户。 创建账户后&#xff0c;您需要为其加载积分…

Node.js高频面试题精选及参考答案

目录 什么是 Node.js?它的主要特点有哪些? Node.js 的事件驱动和非阻塞 I/O 模型是如何工作的? 为什么 Node.js 适合处理高并发场景? Node.js 与传统后端语言(如 Java、Python)相比,有哪些优势和劣势? 简述 Node.js 的运行原理,包括 V8 引擎的作用。 什么是 Nod…

Servlet概述(Ⅰ)

目录 一、Servlet概述 演示 创建JavaWeb项目&#xff08;2017版本为例&#xff09; 1. 打开 IntelliJ IDEA 2. 选择项目类型 3. 配置框架 二、Servlet初识(熟练) 1.servlet说明 2.Servlet 接口方法 3.创建Servlet 4.JavaWeb请求响应流程 ​编辑 ​编辑 5.servlet…

Windows 小记 18 —— 子窗口继承父窗口的样式

子窗口会继承父窗口或者所有者窗口的一些样式。 当我们使用 CreateWindowExW 创建窗口后&#xff0c;指定其 HwndParent 参数时&#xff0c;或者通过 SetWindowLongPtr(vd->Hwnd, GWLP_HWNDPARENT, (LONG_PTR)vd->HwndParent); 指定所有者窗口时&#xff0c;子窗口将从父…

19、《Springboot+MongoDB整合:玩转文档型数据库》

SpringbootMongoDB整合&#xff1a;玩转文档型数据库 摘要&#xff1a;本文全面讲解Spring Boot与MongoDB的整合实践&#xff0c;涵盖环境搭建、CRUD操作、聚合查询、事务管理、性能优化等核心内容。通过15个典型代码示例&#xff0c;演示如何高效操作文档数据库&#xff0c;深…

跳跃游戏II(力扣45)

这道题在跳跃游戏(力扣55)-CSDN博客 的基础上需要找到最小的跳跃次数。那么我们需要用一个变量来统计跳跃次数&#xff0c;而难点就在于何时让该变量的值增加。这一点我写在注释中&#xff0c;大家结合我的代码会更好理解。其他部分跟跳跃游戏(力扣55)-CSDN博客 几乎相同&#…

Linux基础开发工具的使用(apt、vim、gcc、g++、gdb、make、makefile)

Linux软件包管理器–apt Linux安装软件的方式 在Linux下安装软件的方法有以下三种&#xff1a; 下载到程序的源代码&#xff0c;自己编译出可执行程序获取deb安装包、然后使用dpkg命令安装。&#xff08;不解决依赖关系&#xff09;通过apt进行安装软件。 小知识点&#xf…

C/C++ | 每日一练 (2)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (2)题目参考答案封装继承多态虚函数底…

【前端框架】vue2和vue3的区别详细介绍

Vue 3 作为 Vue 2 的迭代版本&#xff0c;在性能、语法、架构设计等多个维度均有显著的变革与优化。以下详细剖析二者的区别&#xff1a; 响应式系统 Vue 2 实现原理&#xff1a;基于 Object.defineProperty() 方法实现响应式。当一个 Vue 实例创建时&#xff0c;Vue 会遍历…

基于Spring Boot的农事管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

【RISCV 常见汇编指令学习 1.2 -- CSRW | CSRR | XORI | ANDI | DRET | J | JR】

文章目录 Overview1. CSRW 与 CSRR2. SW 与 lw3. XORI 与 ANDI4. J 与 JR5. ret 与 dret6. 总结&#x1f310; Sources Overview 在 RISCV 汇编中&#xff0c;不同类型的指令用于完成控制寄存器操作、内存存取、位操作、跳转以及返回等功能。下面将逐对详细介绍这些指令&#…

MySQL六大日志的功能介绍。

前言 首先&#xff0c;MySQL的日志应该包括二进制日志&#xff08;Binary Log&#xff09;、错误日志&#xff08;Error Log&#xff09;、查询日志&#xff08;General Query Log&#xff09;、慢查询日志&#xff08;Slow Query Log&#xff09;、重做日志&#xff08;Redo …

【AI】GitHub Copilot

GitHub Copilot 是一款由 GitHub 和 OpenAI 合作开发的 AI 编程助手&#xff0c;它可以在多种开发工具中使用。以下是 GitHub Copilot 支持的主要开发工具和平台&#xff1a; 1. Visual Studio Code (VS Code) 官方支持&#xff1a;GitHub Copilot 在 VS Code 中拥有最完整的集…

拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!

2025年2月19日 知名博主Dwarkesh Patel对话微软CEO萨蒂亚纳德拉 在最新访谈释放重磅信号&#xff1a;AI将掀起工业革命级增长&#xff0c;量子计算突破引爆材料科学革命&#xff0c;游戏引擎进化为世界模拟器。 整个视频梳理出几大核心观点&#xff0c;揭示科技巨头的未来十年…

4.2 学习UVM中的“connect_phase“,将其应用到具体案例分为几步?

文章目录 前言1. connect_phase 的作用与执行顺序2. TLM 连接的类型与示例2.1 生产者-消费者模型2.2 分析端口广播模型 3. 层次化连接示例4. 动态连接与条件化配置5. 关键注意事项6. 完整示例&#xff1a;SoC 验证环境连接6.1 Monitor 广播数据6.2 Scoreboard 和 Coverage6.3 E…

HBase Shell

目录 1. HBase常用命令1.1 create命令1.2 list命令1.3 describe命令1.4 put命令1.5 get命令1.6 scan命令1.7 count命令1.8 exists命令1.9 修改表结构1.10 delete命令1.11 deleteall命令1.12 truncate命令1.13 disable、drop命令1.14 status命令1.15 version命令 2. HBase Shell…

MATLAB基础学习相关知识

MATLAB安装参考&#xff1a;抖音-记录美好生活 MATLAB基础知识学习参考&#xff1a;【1小时Matlab速成教程-哔哩哔哩】 https://b23.tv/CnvHtO3 第1部分&#xff1a;变量定义和基本运算 生成矩阵&#xff1a; % 生成矩阵% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…