Ответ 1
Существуют проекты с открытым исходным кодом в проектах Sphinx и Freeswitch. Я думаю, что они все детекторы, основанные на энергии, не нуждаются в какой-либо модели.
Sphinx 4 (Java, но его легко переносить на C/С++)
Я ищу код C/С++ для VAD (обнаружение активности голоса).
В основном, мое приложение считывает кадры PCM с устройства. Я хотел бы знать, когда пользователь говорит. Я не ищу алгоритм распознавания речи, но только для обнаружения голоса.
Я хотел бы знать, когда пользователь говорит, и когда он заканчивает:
bool isVAD (короткий * pcm, size_t count);
Существуют проекты с открытым исходным кодом в проектах Sphinx и Freeswitch. Я думаю, что они все детекторы, основанные на энергии, не нуждаются в какой-либо модели.
Sphinx 4 (Java, но его легко переносить на C/С++)
Google open-source WebRTC код имеет модуль VAD, написанный на C. Он использует модель Gaussian Mixxt Model (GMM), которая обычно намного эффективнее простого детектора с порогом энергии, особенно в ситуации с динамическими уровнями и типами фоновых шумов. По моему опыту он также намного эффективнее, чем MoATAR-Homayounpour VAD, о котором Гилад упоминает в их комментарии.
Код VAD является частью гораздо более крупного репозитория WebRTC, но его очень легко вытащить и скомпилировать самостоятельно. Например. webrtcvad Пакет Python включает только источник VAD C.
API VR API WebRTC очень прост в использовании. Во-первых, звук должен быть моно-16-битным PCM с частотой дискретизации 8 кГц, 16 кГц или 32 кГц. Каждый кадр аудио, который вы отправляете в VAD, должен быть длиной 10, 20 или 30 миллисекунд.
Здесь контур примера, который предполагает audio_frame
, составляет 10 мс (320 байт) аудио на частоте 16000 Гц:
#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);
Как насчет LibVAD? www.libvad.com
Похоже, это делает именно то, что вы описываете.
Раскрытие информации: я разработчик LibBAD