【发布时间】:2011-07-19 00:59:59
【问题描述】:
我正在寻找一些用于 VAD(语音活动检测)的 C/C++ 代码。
基本上,我的应用程序正在从设备中读取 PCM 帧。我想知道用户何时说话。我不是在寻找任何语音识别算法,而只是用于语音检测。
我想知道用户何时说话以及何时结束:
bool isVAD(short* pcm,size_t count);
【问题讨论】:
我正在寻找一些用于 VAD(语音活动检测)的 C/C++ 代码。
基本上,我的应用程序正在从设备中读取 PCM 帧。我想知道用户何时说话。我不是在寻找任何语音识别算法,而只是用于语音检测。
我想知道用户何时说话以及何时结束:
bool isVAD(short* pcm,size_t count);
【问题讨论】:
Sphinx 和 Freeswitch 项目中有开源实现。我认为它们都是基于能量的探测器,不需要任何类型的模型。
Sphinx 4(Java 但应该很容易移植到 C/C++)
【讨论】:
【讨论】:
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 是 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);
【讨论】: