voice_audio_multi/docs/models/pulsevad.md
Fabio c36510c21e
Some checks failed
Linux Build / Linux cpu (push) Has been cancelled
Linux Build / Linux cpu-clang (push) Has been cancelled
Linux Build / Linux vulkan (push) Has been cancelled
mac-build / macOS CPU (push) Has been cancelled
Nix Build / Nix (cpu) (push) Has been cancelled
Nix Build / Nix (vulkan) (push) Has been cancelled
windows-build / Windows CPU (push) Has been cancelled
Initial import: audio.cpp with Orange Pi documentation
2026-11-04 19:05:22 +01:00

3.1 KiB

PulseVAD

PulseVAD detects speech regions in 16 kHz mono audio.

Quick Start

audiocpp_cli \
  --task vad \
  --family pulsevad \
  --model models/PulseVAD-GGUF/pulsevad-2.1k-f32.gguf \
  --backend cpu \
  --audio speech_16k_mono.wav \
  --segments-out segments.json \
  --log

Model

Field Value
Family pulsevad
Task vad
Mode offline
Model directory models/PulseVAD-GGUF
Student weights pulsevad-2.1k-f32.gguf (F32, default)
Teacher weights pulsevad-81k-f32.gguf (F32)
Input 16 kHz mono WAV through --audio
Output Speech segments through --segments-out

To use the larger teacher, replace the filename with pulsevad-81k-f32.gguf. Both variants use the same family and options. When both are installed, pass the concrete GGUF file to select the variant.

Download packages: pulsevad_2_1k_f32 and pulsevad_81k_f32, from audio-cpp/audio.cpp-gguf.

For local safetensors checkpoints, use a separate directory per variant with the filename pulsevad-f32.safetensors. Pass that directory or file to --model.

Convert input to 16 kHz mono before running. PulseVAD uses 200 ms windows; shorter recordings are zero-padded, and partial trailing windows are omitted.

Common Options (use directly)

Option Values Default Meaning
--audio 16 kHz mono WAV path required Audio to analyze.
--segments-out JSON path not set Save detected speech segments.

Request Options (use with --request-option)

Option Values Default Meaning
threshold float in [0, 1] 0.5 Speech probability threshold.
hop_size_samples integer > 0 1600 Window step in samples; the default is 100 ms.
min_speech_duration_ms integer >= 0 100 Minimum speech segment duration in milliseconds. Not applied to the short-input path (<3200 samples), which classifies the whole clip by threshold.
min_silence_duration_ms integer >= 0 100 Minimum silence before closing a speech segment.

Session Options (use with --session-option)

Option Values Default Meaning
pulsevad.weight_type native, f32, f16, bf16 native Weight storage override at session creation.

Older pulsevad.-prefixed request option names remain accepted. Prefer the unprefixed request names above; session options retain the family prefix.

Convert Weights

From the repository root, prepare both checkpoints from a PulseVAD upstream checkout, then package each variant with the standard GGUF tool:

python tests/pulsevad/convert_pulsevad.py \
  --upstream /path/to/PulseVAD \
  --output /path/to/PulseVAD-safetensors \
  --log pulsevad-conversion.log

audiocpp_gguf --family pulsevad --type orig \
  --input weights=/path/to/PulseVAD-safetensors/2.1k/pulsevad-f32.safetensors \
  --output models/PulseVAD-GGUF/pulsevad-2.1k-f32.gguf \
  --model-spec model_specs/pulsevad.json --no-sidecars

Repeat the GGUF command with 81k instead of 2.1k for the teacher.