我正在为VAD(语音活动检测)寻找一些C / C ++代码。
基本上,我的应用程序是从设备读取PCM帧。我想知道用户何时说话。我不是在寻找任何语音识别算法,只是为了语音检测。
我想知道用户何时说话以及何时结束:
bool isVAD(短* pcm,size_t计数);
答案 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 ++)
答案 2 :(得分:4)