目前流行的语音文件转文字,方式有两种,一种在线方式。一种离线方式。
在线方式:表示将语音文件上传到服务器,服务器转换成文字,在发送会请求端,目前有百度AI,科大讯飞,Goole等。
离线方式 : 下载语音模型到本地,在本地实现语音转文字,例如vosk
本文采用vosk提供的语音模型,实现本地语音转换文字。
1 在vosk官网下载语音模型
https://alphacephei.com/vosk/models
找到中文语音模型,简体中文有两个,一个标准版,一个精简版:

下载语音模型,并解压,我下载的精简版
2 Java编程
package com.wanmait.soundToText;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.wav.WavFileReader;
import org.vosk.LibVosk;
import org.vosk.LogLevel;
import org.vosk.Model;
import org.vosk.Recognizer;
import javax.sound.sampled.AudioSystem;
import java.io.*;
public class MainTest {
/**
* 获取采样率,采样率为音频采样率的声道倍数
*/
private static Float getSampleRate(File file) throws Exception {
WavFileReader fileReader = new WavFileReader();
AudioFile audioFile = fileReader.read(file);
String sampleRate = audioFile.getAudioHeader().getSampleRate();
String channel = audioFile.getAudioHeader().getChannels();
System.out.println("语音的声道:" + channel );
System.out.println("语音的采样率:" + sampleRate);
return Float.parseFloat(sampleRate) * Integer.parseInt(channel);
}
public static void main(String[] args) {
LibVosk.setLogLevel(LogLevel.DEBUG);
File file = new File("C:\\userTest\\temp\\1.wav");//语音文件仅支持wav
try (Model model = new Model("C:\\userTest\\temp\\vosk-model-small-cn-0.22");//模型地址
InputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(file)));
Recognizer recognizer = new Recognizer(model, getSampleRate(file))) {
int bytes;
byte[] b = new byte[4096];//缓存大小:4k
while ((bytes = ais.read(b)) >= 0) {
recognizer.acceptWaveForm(b, bytes);
}
System.out.println(recognizer.getFinalResult() );
} catch (Exception e) {
e.printStackTrace();
}
}
}
注意:只能读取wav格式的音频文件

0条评论
点击登录参与评论