/ Модель

Характеристики

Лицензия
Apache 2.0
Базовая модель
wespeaker-voxceleb-ecapa-tdnn512
Опубликована
11 окт 2026

voxlock

Обработка аудиоАудио → аудио

VoxLock выделяет голос звонящего и подавляет другие голоса в аудио звонков перед распознаванием речи.

0скачиваний за 30 дней0лайковвеса обновлены12 окт 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

VoxLock — открытая модель выделения целевого голоса, разработанная для очистки телефонных звонков и аудио для голосовых агентов. Она сохраняет голос звонящего и подавляет остальные голоса в комнате, чтобы улучшить последующее распознавание речи. Для выбора целевого говорящего использует трёхсекундный образец голоса; в автоматическом режиме берёт самый громкий трёхсекундный фрагмент из первых 15 секунд звонка.

Модель основана на причинной band-split RNN с 27 млн параметров и дообучена от REAL-TSE challenge baseline. Доступны варианты ONNX, включая квантованный int8, а также веса PyTorch в Safetensors. Потоковая обработка работает с аудио в реальном времени с алгоритмической задержкой около 24 мс; модель принимает моно или стерео и поддерживает разные частоты дискретизации. В README приведены результаты на записях телефонных звонков и встреч AMI.

Модель предназначена для выделения голоса перед VAD и распознаванием речи. Описанные в карточке тесты указывают на высокое качество подавления фоновых голосов, однако скорость зависит от процессора, числа потоков и размера аудиоблоков. Лицензия — Apache-2.0.

Сценарии применения

  • подавление голосов окружающих в телефонном звонке
  • очистка аудио для голосового агента перед распознаванием речи
  • выделение голоса выбранного собеседника из записи встречи
  • потоковая очистка аудио звонка на CPU
  • подготовка телефонного аудио для VAD и транскрибации

Ограничения

Для автоматического выбора голоса модель ожидает около трёх секунд речи; до этого потоковый режим пропускает аудио без изменений. Производительность в реальном времени зависит от процессора, числа потоков и размера блоков.

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

VoxLock

The best performing voice isolator there is. VoxLock is an open-source voice isolation model: it keeps the caller's voice and removes the other voices in the room before speech-to-text hears them. Made for voice agents and phone calls: one input, the call audio, and it picks out the caller by itself. It streams on a CPU with 24 ms of algorithmic latency.

Write-up · Code · pip · Try it in your browser

Results

ModelAccessWord error rate %Background words leaked / min
VoxLockopen4.950.11
Krisp VI 2.5 Defaultpaid5.301.52
Krisp VI 2.5 Balancedpaid5.322.02
Krisp VI 2.5 HDpaid5.792.74
Krisp VI 2.5 Litepaid6.214.52
ai-coustics Voice Focus 2.2 Lpaid6.840.66
ai-coustics Voice Focus 2.2 Spaid6.911.00
Sanas Voice Isolation SE 1.0paid9.3813.76
REAL-TSE causal (VoxLock's starting checkpoint)open9.8113.73
Hushopen12.0919.58
DeepFilterNet3open13.3022.77
TIGERopen14.7237.24
No processing23.2166.48
SAM-Audio small (Meta)open33.7721.15
ElevenLabs Voice Isolator**paid43.79**144.6**

265 real recordings from the Krisp Voice Isolation Benchmark, transcribed with Parakeet TDT 0.6B v2 and scored with the benchmark's published method. Background words leaked counts words transcribed while only the background was talking, per minute of that audio.

** ElevenLabs Voice Isolator, run on the 7 of these recordings with the most background speech, not all 265. On the same 7, no processing scores 45.82% and 154.3 leaked words per minute, and VoxLock 2.98% and 0.0.

On real AMI meetings not used in training, with the headset wearer as the caller:

ModelAccessWord error rate %Background words leaked / min
VoxLockopen10.122.12
ai-coustics Voice Focus 2.2 Spaid11.851.06
ai-coustics Voice Focus 2.2 Lpaid12.131.72
Sanas Voice Isolation SE 1.0paid13.305.30
TIGERopen22.8436.85
DeepFilterNet3open26.7838.84
Hushopen33.0068.93
No processing33.0378.34

Caller words missed, deletions, insertions and 95% intervals: bench/results.

Use

pip install voxlock
voxlock call.wav -o caller.wav

Any sample rate, mono or stereo. The model downloads from Hugging Face on first use: 75 MB, the 8-bit version (see Quantized models).

import voxlock

vl = voxlock.VoxLock()                     # precision="fp32" for the benchmarked model
call = voxlock.load_audio("call.wav")      # 16 kHz mono float32
caller = vl.isolate(call)                  # same length as the input

VoxLock keeps the voice in a 3-second sample of the caller. isolate takes the loudest 3 seconds in the first 15 seconds of the call, which is how it was benchmarked. Pass sample= to choose it yourself.

Streaming

Push the call in as it arrives, as 16 kHz float32 chunks of any size. Each push returns the isolated audio that is ready, about 24 ms behind the input.

vl = voxlock.VoxLock(threads=4)
stream = vl.live()                         # finds the caller by itself
for chunk in call_audio:                   # e.g. 40 ms = 640 samples
    send(stream.push(chunk))
send(stream.flush())                       # at the end of the call

live() passes the audio through unchanged until it has heard 3 seconds of speech, takes that speech as the voice sample and isolates from then on. On our test calls it switched over a median of 3.6 seconds in.

If you already have a sample, from earlier in the call or from a previous call, isolation starts with the first chunk:

stream = vl.stream(sample)                 # about 3 s of the caller, 16 kHz mono

Streaming gives the same output as isolate with the same sample. To keep up with a live call, push chunks of 40 ms or more: 40 ms chunks on 4 threads run at 0.69x real time on an Apple M2 Pro and 0.89x on an 8-vCPU Xeon server, and 80 ms chunks on 2 threads at 0.67x on the Xeon. Larger chunks use less CPU and add their length to the delay.

Pipecat

pip install "voxlock[pipecat]"
from pipecat.transports.base_transport import TransportParams
from voxlock.pipecat import VoxLockFilter

params = TransportParams(audio_in_enabled=True, audio_in_filter=VoxLockFilter())

The filter cleans the caller's audio before VAD and speech-to-text, at any transport sample rate (Twilio's 8 kHz included). Like live(), it passes audio through until it has heard 3 seconds of the caller; pass voice_sample= to isolate from the start. It runs the int8 model in 80 ms chunks on 2 threads by default (chunk_ms=, threads=, precision=). With a single vCPU, such as Pipecat Cloud's agent-2x, use VoxLockFilter(chunk_ms=160, threads=1): 0.73x real time on the Xeon server. Half a vCPU (agent-1x) is too little. A full voice agent: examples/pipecat_bot.py. Tested with Pipecat 1.12.0.

PyTorch

git clone https://github.com/arbazsiddiqui/voxlock && cd voxlock
pip install -r requirements.txt
huggingface-cli download arbazsiddiqui/voxlock model.safetensors config.yaml --local-dir ckpt
python isolate.py --ckpt ckpt --in call.wav --out caller.wav

Quantized models

The ONNX model comes in four precisions, all in onnx/. Choose with VoxLock(precision=...), voxlock --precision ... or VoxLockFilter(precision=...).

PrecisionQualityFilesDownloadWord error rate %Background words leaked / minReal-time factor, 40 ms chunks, 2 / 4 threads
int8 (default)99.8%enroll.onnx, chunk_int8.onnx75 MB5.110.120.89 / 0.69
int8-full99.1%enroll.onnx, chunk_int8_full.onnx67 MB5.850.040.67 / 0.54
fp16100%*enroll_fp16.onnx, chunk_fp16.onnx48 MB4.95*0.11*1.31 / 1.00
fp32100%enroll.onnx, chunk.onnx95 MB4.950.111.33 / 0.97

Quality: the share of fp32's correctly transcribed words each precision keeps, on the 265 Krisp recordings. Real-time factor: streaming on an Apple M2 Pro; below 1 keeps up with a live call.

* fp16 is the float32 model with its weights rounded to float16. Its output matches float32 to 45 dB, so it carries the float32 scores. The browser demo uses it.

enroll runs once on the voice sample, chunk runs on each chunk of the call and carries the LSTM state.

PyTorch: model.safetensors and config.yaml, 104 MB.

Training

A 27M causal band-split RNN target-speaker extractor, fine-tuned from the REAL-TSE challenge baseline on a single NVIDIA L4:

REAL-TSE tfmap_context_causal_100
  -> simulated calls        4,000 steps   LibriSpeech callers + background talkers in simulated rooms
  -> real AMI crosstalk     4,000 steps   headset recordings from 40 meetings
  -> long calls (30 s)        800 steps   callers who talk throughout
  -> rooms and distances     400 steps   callers near or far from the mic, background voices dry or in the room, room noise

Acknowledgements

Built on the REAL-TSE challenge baseline and WeSep by Shuai Wang, Ke Zhang and co-authors, with WeSpeaker's ECAPA model. Trained on LibriSpeech and the AMI Meeting Corpus.

License

Apache-2.0.

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Нельзя запустить

Обработка «аудио → аудио» пока не поддерживается.

Ревизия весов
894e788

0 моделей