我正在寻找一些用于VAD(语音活动检测)的C/C ++代码。
基本上,我的应用程序正在从设备读取PCM帧。我想知道用户何时在说话。我不是在寻找任何语音识别算法,而只是想要声音检测。
我想知道用户何时在说话以及何时结束:
bool isVAD(short* pcm,size_t count);
谷歌开源的WebRTC代码中包含一个用C语言编写的VAD模块。它使用了高斯混合模型(GMM),在动态背景噪声水平和类型情况下通常比简单的能量门限检测器效果更好。根据我的经验,它也比Gilad在他们的评论中提到的Moattar-Homayounpour VAD更有效。
VAD代码是WebRTC存储库中非常庞大的一部分,但很容易将其拆分并单独编译。例如,webrtcvad Python封装程序仅包括VAD C源代码。
WebRTC VAD API非常易于使用。首先,音频必须是8 KHz、16 KHz或32 KHz采样率下的单声道16位PCM。您发送给VAD的每个音频帧必须为10毫秒、20毫秒或30毫秒长。
以下是一个示例概要,假设audio_frame
是16000 Hz下10毫秒(320字节)的音频数据:
#include "webrtc/common_audio/vad/include/webrtc_vad.h"
// ...
VadInst *vad;
WebRtcVad_Create(&vad);
WebRtcVad_Init(vad);
int is_voiced = WebRtcVad_Process(vad, 16000, audio_frame, 160);
kAudioFormatLinearPCM
,并且mFormatFlags &= ~kLinearPCMFormatFlagIsBigEndian
,然后像平常一样设置标志mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked
。最后,使用小端音频格式。WAVE非常适合。 - user3857868