任何简单的VAD实现?

Gil*_*vik 14 c c++ iphone audio voice

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

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

我想知道用户何时说话以及何时完成:

bool isVAD(short*pcm,size_t count);

Joh*_*man 15

谷歌的开源的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);
Run Code Online (Sandbox Code Playgroud)

  • 我的问题解决了,结果是这个代码只适用于little-endian LPCM,改为那个,一切都完成了!谢谢. (3认同)
  • WebRTC VAD旨在检测真实的声音,但有时需要时间/示例来适应。首先尝试与之交谈,然后放下一本书,看看它是否将落下的噪音归类为语音。 (2认同)

Pau*_*xon 8

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

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

PocketSphinx

FreeSWITCH的

  • 感谢这些链接,Freeswitch对我来说似乎是更好的方法(C),但它似乎仍然被绑在一个更复杂的框架中.我发现了一个python实现(https://github.com/shriphani/Listener/blob/master/VAD.py),这似乎更简单,但由于我的python技能低于平均水平,我仍然在寻找一个C/C++实现. (4认同)