本文主要是关于实时语音包测试的小记:公司之前搞语音的同学推荐了三个包,如下:
Java:
vad4j、webrtcvad的俩包
Python:
webrtcvad的包
1. Java包目前测了下vad4j的包是无法使用的 ,vue通过传输websocket二进制的音频数据来检测
(目前还未测试解压缩后的数据,因为Java包目前还没找到相关Opus的解码器,一般是安卓的)
具体使用方式:
GitHub - orctom/vad4j: VAD for Java -- demo
<dependency>
<groupId>com.orctom</groupId>
<artifactId>vad4j</artifactId>
<version>1.0</version>
</dependency>
// use built-in threshold
try (VAD vad = new VAD()) {
boolean isSpeech = vad.isSpeech(pcm);
LOGGER.info("is speech: {}", isSpeech);
}
// or use threshold of your choise
try (VAD vad = new VAD()) {
float score = vad.speechProbability(pcm);
boolean isSpeech = score >= VAD.THRESHOLD;
LOGGER.info("is speech: {}", isSpeech);
}
而webrtcvad的语音识别包是没有相关依赖~
https://github.com/jitsi/jitsi-webrtc-vad-wrapper
2. python的webrtcvad语音检测包是可以用的 ,而且相关的解码库也是正常可以解码的
前端使用的是MediaRecorder API ,此插件可以通过麦克风录制音频,并发送给websocket消息
mimeType(音频格式)为audio/webm;codecs=opus
表示的音频数据是WebM格式的音频流,使用Opus编码器进行压缩。
ps:这里传输的音频流数据,websocket接收后必须用Opus解码器进行解码音频流,且设置的相关参数如,采样率48000HZ,位深度16,单声道1这些前后端同学都要统一,其中采样率48000HZ是浏览器默认的采样率,如果自行设置了也会被覆盖,望周知~
3. websocket接收音频流的时候有个默认大小限制8000多,如果超过了这个限制是无法接收到音频流数据的,可以设置为300000 30M试试传输。
有问题及时留言,如果Java其他语音包能识别用,希望亲滴我