目前流行的语音文件转文字,方式有两种,一种在线方式。一种离线方式。
在线方式:表示将语音文件上传到服务器,服务器转换成文字,在发送会请求端,目前有百度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条评论
点击登录参与评论