Ich suche nach C/C++-Code für VAD (Voice Activity Detection).
Grundsätzlich liest meine Anwendung PCM-Frames vom Gerät. Ich möchte wissen, wann der Benutzer spricht. Ich suche keinen Spracherkennungsalgorithmus, sondern nur die Spracherkennung.
Ich möchte wissen, wann der Benutzer spricht und wann er fertig ist:
bool isVAD(short* pcm,size_t count);
Open Source von Google WebRTC Code verfügt über ein in C geschriebenes VAD-Modul. Es verwendet ein Gaußsches Mischungsmodell (GMM), das typischerweise viel effektiver ist als ein einfacher Energieschwellenwertdetektor, insbesondere in einer Situation mit dynamischen Pegeln und Arten von Hintergrundgeräuschen. Meiner Erfahrung nach ist es auch viel effektiver als das Moattar-Homayounpour VAD, das Gilad in seinem Kommentar erwähnt.
Der VAD-Code ist Teil des viel, viel größeren WebRTC-Repositorys, aber es ist sehr einfach, ihn herauszuziehen und selbst zu kompilieren. Bsp die webrtcvad Python-Wrapper enthält nur die VAD-C-Quelle.
Die WebRTC VAD API ist sehr einfach zu bedienen. Erstens muss das Audio 16-Bit-PCM-Mono sein, mit einer Abtastrate von entweder 8 KHz, 16 KHz oder 32 KHz. Jeder Audioframe, den Sie an den VAD senden, muss 10, 20 oder 30 Millisekunden lang sein.
Hier ist ein Überblick über ein Beispiel, das davon ausgeht audio_frame
ist 10 ms (320 Byte) Audio bei 16000 Hz:
#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);
Es gibt Open-Source-Implementierungen in den Projekten Sphinx und Freeswitch. Ich denke, sie sind alle energiebasierte Detektoren, die kein Modell benötigen.
Sphinx 4 (Java, aber es sollte einfach auf C/C++ zu portieren sein)
PocketSphinx
Freeswitch
Wie wäre es mit LibVAD? www.libvad.com
Scheint genau das zu tun, was du beschreibst.
Offenlegung: Ich bin der Entwickler hinter LibVAD