From ab30ad9f9d256e2d24f8fb24b15fb280b017a62c Mon Sep 17 00:00:00 2001 From: dengwenjie <775747758@qq.com> Date: Wed, 27 Aug 2025 16:11:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AE=9E=E6=97=B6=E8=AF=AD?= =?UTF-8?q?=E9=9F=B3=E8=AF=86=E5=88=AB=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../speech/asr/SpeechRecognizeDemo.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/examples/speech-examples/src/main/java/smartai/examples/speech/asr/SpeechRecognizeDemo.java b/examples/speech-examples/src/main/java/smartai/examples/speech/asr/SpeechRecognizeDemo.java index b2dbfb2..cd6d4b6 100644 --- a/examples/speech-examples/src/main/java/smartai/examples/speech/asr/SpeechRecognizeDemo.java +++ b/examples/speech-examples/src/main/java/smartai/examples/speech/asr/SpeechRecognizeDemo.java @@ -22,7 +22,10 @@ import org.apache.commons.io.FileUtils; import org.junit.Test; import org.vosk.Recognizer; +import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.DataLine; +import javax.sound.sampled.TargetDataLine; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; @@ -194,7 +197,7 @@ public class SpeechRecognizeDemo { * macos m系列芯片需要手动下载依赖库,并指定位置,其他平台不需要 * 下载地址:https://pan.baidu.com/s/1LZ_EX1XdTTp_f5ruud82MA?pwd=1234 提取码: 1234 */ -// config.setLibPath(Paths.get("/Users/xxx/Downloads/vosk-arrch64-dylib-main/libvosk.dylib")); +// config.setLibPath(Paths.get("/Users/wenjie/Downloads/vosk-arrch64-dylib-main/libvosk.dylib")); return SpeechRecognizerFactory.getInstance().getModel(config); } @@ -307,5 +310,42 @@ public class SpeechRecognizeDemo { } } + /** + * 实时语音识别(VOSK) + */ + @Test + public void testVoskRealTime() { + try { + VoskRecognizer recognizer = (VoskRecognizer)geVoskRecognizer(); + //使用vosk内部接口,需要指定识别音频的采样率 + Recognizer voskRecognizer = recognizer.createAdvancedRecognizer(16000); + voskRecognizer.setWords(true); + voskRecognizer.setPartialWords(true); + // 设置音频格式: 16kHz, 16bit, 单声道, PCM + AudioFormat format = new AudioFormat(16000, 16, 1, true, false); + // 获取可用的 TargetDataLine + DataLine.Info info = new DataLine.Info(TargetDataLine.class, format); + if (!AudioSystem.isLineSupported(info)) { + System.out.println("麦克风不支持该格式"); + System.exit(0); + } + TargetDataLine microphone = (TargetDataLine) AudioSystem.getLine(info); + microphone.open(format); + microphone.start(); + int nbytes; + byte[] b = new byte[4096]; + while ((nbytes = microphone.read(b,0,b.length)) >= 0) { + if (voskRecognizer.acceptWaveForm(b, nbytes)) { + log.info(voskRecognizer.getResult()); + } else { + log.info(voskRecognizer.getPartialResult()); + } + } + log.info(voskRecognizer.getFinalResult()); + } catch (Exception e) { + e.printStackTrace(); + } + } + }