任何简单的VAD实现?
我正在为VAD(语音活动检测)寻找一些C / C ++代码。
基本上,我的应用程序是从设备读取PCM帧。 我想知道用户何时说话。 我不是在寻找任何语音识别算法,而只是用于语音检测。
我想知道用户何时说话以及何时完成:
bool isVAD(short * pcm,size_t count);
Sphinx和Freeswitch项目中有开源实现。 我认为它们都是基于能量的探测器,不需要任何类型的模型。
Sphinx 4 (Java但它应该很容易移植到C / C ++)
PocketSphinx
FreeSWITCH的
谷歌的开源WebRTC代码有一个用C语言编写的VAD模块。它使用高斯混合模型(GMM),它通常比简单的能量阈值检测器更有效,特别是在具有动态水平和背景噪声类型的情况下。 根据我的经验,它比Gilad在评论中提到的Moattar-Homayounpour VAD更有效。
VAD代码是更大,更大的WebRTC存储库的一部分,但它很容易将其拉出并自行编译。 例如, webrtcvad Python包装器仅包含VAD C源 。
WebRTC VAD API非常易于使用。 首先,音频必须是单声道16位PCM,具有8 KHz,16 KHz或32 KHz的采样率。 发送到VAD的每个音频帧长度必须为10,20或30毫秒。
以下是假设audio_frame
为16000 Hz的10 ms(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);