当前位置: 首页 > news >正文

【JAVA】使用vosk实现windows实时语音转文字,解放双手

使用到的三方包
jna-5.11.0.jar jna-platform-5.11.0.jar vosk-0.3.45.jar
具体代码实现

package sample;import org.vosk.Model;
import org.vosk.Recognizer;import javax.sound.sampled.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;/*** https://alphacephei.com/vosk/models* vosk.alphacephei.com* https://repo1.maven.org/maven2/com/alphacephei/vosk/0.3.45/*/
public class VoskJavaExample {// 音频格式参数配置private static final AudioFormat.Encoding ENCODING = AudioFormat.Encoding.PCM_SIGNED;private static final float RATE = 44100.0f;     // 采样率private static final int SAMPLE_SIZE = 16;      // 采样位数private static final int CHANNELS = 1;          // 声道数(1-单声道,2-立体声)private static final boolean BIG_ENDIAN = true; // 字节顺序public static void main(String[] args) {writeOutResult(getVoiceDoc());}public static void writeOutResult(String wavPath){try {// 1. 加载模型(替换为你的模型路径,如"vosk-model-cn-0.22")Model model = new Model("D:\\download\\vosk-model-small-cn-0.22\\vosk-model-small-cn-0.22");// 2. 初始化识别器(采样率必须与音频文件一致,此处为16000Hz)org.vosk.Recognizer recognizer = new org.vosk.Recognizer(model, 44100.0f);// 3. 读取音频文件(需为符合要求的WAV文件)try (FileInputStream fis = new FileInputStream(wavPath)) {byte[] buffer = new byte[4096]; // 缓冲区大小int bytesRead;// 4. 逐段处理音频流while ((bytesRead = fis.read(buffer)) != -1) {// 调用acceptWaveform,传入字节数组和实际读取的长度if (recognizer.acceptWaveForm(buffer, bytesRead)) {// 输出实时识别结果System.out.println("实时结果:" + recognizer.getResult());}}// 5. 处理剩余音频,输出最终结果System.out.println("最终结果:" + recognizer.getFinalResult());}// 释放资源model.close();recognizer.close();} catch (IOException e) {e.printStackTrace();}}public static String getVoiceDoc(){try {// 1. 设置音频格式AudioFormat format = new AudioFormat(ENCODING, RATE, SAMPLE_SIZE, CHANNELS,(SAMPLE_SIZE/8)*CHANNELS, RATE, BIG_ENDIAN);// 2. 获取音频输入设备(麦克风)DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);if (!AudioSystem.isLineSupported(info)) {System.err.println("不支持指定的音频格式");return null;}// 3. 打开并启动录音线路TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);line.open(format);line.start();System.out.println("开始录音...(按回车键停止)");// 4. 创建音频输入流AudioInputStream audioInputStream = new AudioInputStream(line);// 5. 创建输出文件File audioFile = new File("D:\\download\\savedVoice\\recording.wav");// 6. 启动独立线程处理录音停止new Thread(() -> {try {// 等待用户输入停止System.in.read();line.stop();line.close();System.out.println("录音已停止");} catch (IOException e) {e.printStackTrace();}}).start();// 7. 将音频流写入文件AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, audioFile);System.out.println("录音已保存到:" + audioFile.getAbsolutePath());} catch (LineUnavailableException | IOException e) {e.printStackTrace();}return "D:\\download\\savedVoice\\recording.wav";}
}
http://www.dtcms.com/a/296836.html

相关文章:

  • vs2019 创建MFC ActiveX的详细步骤
  • JS事件基础
  • ESP-NOW无线通信协议:物联网设备间的高效对话方式
  • 前端基础知识Vue系列 - 24(axios的原理)
  • Linux(centos7)安装 docker + ollama+ deepseek-r1:7b + Open WebUI(内含一键安装脚本)
  • Windows下使用UIAutomation技术遍历桌面窗口和指定窗口内容的AutomationWalker.exe的C#源代码
  • QT元对象系统-(1)静态属性和动态属性
  • Jenkins配置与应用指南
  • 外贸公司经营步骤
  • AI赋能软件工程让测试左移更加可实施
  • 《C++》面向对象编程--类(下)
  • IPv6网络优化
  • ANSYS Fluent 管内流动仿真
  • 如何恢复mysql,避免被研发删库跑路
  • Python(09)正则表达式
  • 无人机云台跟踪目标实现
  • springboot项目建立sse接口
  • tokenID和位置嵌入有关系吗,qwen 模型使用时候仅仅有tokenid 映射为向量,位置编码在哪里
  • C++的虚基类?
  • 黑马头条项目详解
  • cmake应用:集成gtest进行单元测试
  • MUX同步器
  • 人工智能概念:常用的模型压缩技术(剪枝、量化、知识蒸馏)
  • 一篇文章了解HashMap和ConcurrentHashMap的扩容机制
  • ESP32入门实战:PC远程控制LED灯完整指南
  • pandas库的数据导入导出,缺失值,重复值处理和数据筛选,matplotlib库 简单图绘制
  • AD一张原理图分成多张原理图
  • iview Select的Option边框显示不全(DatePicker也会出现此类问题)
  • rust-参考与借用
  • 爬虫逆向--Day12--DrissionPage案例分析【小某书评价数据某东评价数据】