【问题标题】:Any simple VAD implementation?任何简单的 VAD 实现?
【发布时间】:2011-07-19 00:59:59
【问题描述】:

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

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

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

bool isVAD(short* pcm,size_t count);

【问题讨论】:

    标签: iphone c++ c audio voice


    【解决方案1】:

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

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

    PocketSphinx

    Freeswitch

    【讨论】:

    • 感谢您的链接,Freeswitch 对我来说似乎是更好的方法 (C),但它似乎仍然与更复杂的框架相关联。我找到了一个似乎更简单的 python 实现 (github.com/shriphani/Listener/blob/master/VAD.py),但由于我的 python 技能低于平均水平,我仍在寻找 C/C++ 实现。
    【解决方案2】:

    LibVAD 怎么样? www.libvad.com

    看起来和你描述的完全一样。

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

    【讨论】:

    • Charles,我已经尝试与您取得联系,但到目前为止没有成功。
    • @Charles www.libvad.com 网站长期宕机?
    【解决方案3】:

    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);
    

    【讨论】:

    • 我将它移植到iOS,但我不知道为什么我放了任何东西(不同的音频,有很多背景和声音),它会返回1。
    • 我的问题解决了,原来这段代码只适用于little-endian LPCM,改成这样就可以了!谢谢。
    • @Tinyfool 你有没有把你的 iOS 移植到任何地方?
    • WebRTC VAD 旨在检测真实声音,但有时需要时间/示例来适应。试着先和它说话,然后放下一本书,看看它是否将掉落的噪音归类为声音。
    • 嗨,John,我正在从以下位置添加 webRTC VAD 模块:- github.com/wiseman/py-webrtcvad。现在,我在现有应用程序中遇到了编译问题。我在 Objective-c 中使用 iOS 12+ 我的应用程序。请提出您是否为 iOS 编写的任何示例代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2015-06-05
    • 1970-01-01
    相关资源
    最近更新 更多