jdk21使用Vosk实现语音文字转换,免费的语音识别

1.下载vosk的model

vosk官网:https://alphacephei.com/vosk/models

我这里使用较小的vosk-model-small-cn-0.22

2.添加相关pom文件

java 复制代码
 <!-- 获取音频信息 -->
        <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.16.0</version>
        </dependency>
        <dependency>
            <groupId>com.alphacephei</groupId>
            <artifactId>vosk</artifactId>
            <version>0.3.45</version>
        </dependency>

3.代码

添加model和使用的音频,我这里用的wav格式的,不同格式的参数会不一样

java 复制代码
import org.vosk.LibVosk;
import org.vosk.LogLevel;
import org.vosk.Model;
import org.vosk.Recognizer;

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.io.*; 

public class testVosk {
    public static void main(String[] argv) throws IOException, UnsupportedAudioFileException {
        LibVosk.setLogLevel(LogLevel.DEBUG);

        try (Model model = new Model("E:\\srk\\bigData\\vosk-model-small-cn-0.22");
             InputStream fis = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream("C:\\Users\\Administrator\\Downloads\\mdhs1-5ob2k.wav")));
             Recognizer recognizer = new Recognizer(model, 16000)) {
            int bytes;
            byte[] b = new byte[4096];
            while ((bytes = fis.read(b)) >= 0) {
                if (recognizer.acceptWaveForm(b, bytes)) {
                    System.out.println(recognizer.getResult());
                } else {
                    System.out.println(recognizer.getPartialResult());
                }
            }
            String result = recognizer.getFinalResult();
            System.out.println(result);
        }

    }
}

4.可能遇到的问题

1.乱码,我搞了半天(捂脸)

因为jdk17以后编号的模式改了,所以在网上找了各种设置编码的格式都没有生效。

比如jvm设置 -Dfile.encoding=UTF-8都没生效。

-Dfile.encoding=UTF-8

jdk17以前的还是正常的。

解决方法:

  1. win系统控制面板找到"区域与语言设置"

  2. 在弹出框中选择更改系统区域设置

  3. 勾选beta使用utf-8

5.相关资料

  1. gitcode相关api
相关推荐
我滴老baby3 分钟前
多智能体协作系统设计当AI学会团队合作效率翻十倍
android·开发语言·人工智能
梵得儿SHI5 分钟前
(第三篇)Spring AI 架构设计与优化:容器化与云原生部署,基于 K8s 的 AI 应用全生命周期管理
java·ci/cd·docker·云原生·kubernetes·容器化·spring ai
华万通信king5 分钟前
2026 年 GitHub AI 趋势周报:Skills 生态崛起,Agent 框架去中心化
人工智能·去中心化·github
普修罗双战士6 分钟前
项目设计-文章系统发布文章完整前后端设计
java·数据库·vue.js·spring boot·git·intellij-idea
一切皆是因缘际会9 分钟前
大模型幻觉深度解析:成因、落地危害与工程级解决方案
大数据·人工智能·深度学习·安全·ai·架构
秋912 分钟前
Air780E介绍和使用详解
人工智能
好赞科技12 分钟前
深度盘点2026年八大高口碑美容小程序:解锁智能护肤新体验
大数据·人工智能
guo_xiao_xiao_14 分钟前
YOLOv11女士包包目标检测数据集-162张-bag-1_6
人工智能·yolo·目标检测
树獭非懒17 分钟前
Harness Engineering:驾驭大模型的工程新范式
人工智能·程序员·llm
程序员老邢20 分钟前
《人生底稿・番外篇12》37 岁程序员的工位双生 —— 旧主机的 “开发 + 摸鱼” 效率分区
java·程序员日常·人生底稿番外·中年码农·工作效率分区