任何简单的VAD实现?

时间:2011-03-20 07:07:25

标签: iphone c++ c audio voice

我正在为VAD(语音活动检测)寻找一些C / C ++代码。

基本上,我的应用程序是从设备读取PCM帧。我想知道用户何时说话。我不是在寻找任何语音识别算法,只是为了语音检测。

我想知道用户何时说话以及何时结束:

bool isVAD(短* pcm,size_t计数);

3 个答案:

答案 0 :(得分:15)

Google的开源WebRTC代码有一个用C语言编写的VAD模块。它使用高斯混合模型(GMM),它通常比简单的能量阈值检测器更有效,特别是在某种情况下动态水平和背景噪音类型。根据我的经验,它比Gilad在their comment中提到的Moattar-Homayounpour VAD更有效。

VAD代码是更大,更大的WebRTC存储库的一部分,但它很容易将其拉出并自行编译。例如。 webrtcvad Python wrapper includes just the VAD C source

WebRTC VAD API非常易于使用。首先,音频必须是单声道16位PCM,具有8 KHz,16 KHz或32 KHz的采样率。发送到VAD的每个音频帧长度必须为10,20或30毫秒。

以下是假设audio_frame为16毫秒的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);

答案 1 :(得分:7)

Sphinx和Freeswitch项目中有开源实现。我认为它们都是基于能量的探测器,不需要任何模型。

Sphinx 4(Java但很容易移植到C / C ++)

PocketSphinx

Freeswitch

答案 2 :(得分:4)

LibVAD怎么样? www.libvad.com

看起来就像你所描述的那样。

披露:我是LibVAD背后的开发者