mirror of
https://github.com/geekwenjie/SmartJavaAI.git
synced 2026-09-13 21:28:52 +00:00
新增实时语音识别案例
This commit is contained in:
@@ -22,7 +22,10 @@ import org.apache.commons.io.FileUtils;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.vosk.Recognizer;
|
import org.vosk.Recognizer;
|
||||||
|
|
||||||
|
import javax.sound.sampled.AudioFormat;
|
||||||
import javax.sound.sampled.AudioSystem;
|
import javax.sound.sampled.AudioSystem;
|
||||||
|
import javax.sound.sampled.DataLine;
|
||||||
|
import javax.sound.sampled.TargetDataLine;
|
||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
@@ -194,7 +197,7 @@ public class SpeechRecognizeDemo {
|
|||||||
* macos m系列芯片需要手动下载依赖库,并指定位置,其他平台不需要
|
* macos m系列芯片需要手动下载依赖库,并指定位置,其他平台不需要
|
||||||
* 下载地址:https://pan.baidu.com/s/1LZ_EX1XdTTp_f5ruud82MA?pwd=1234 提取码: 1234
|
* 下载地址: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);
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user