Skip to content

Releases: arbazsiddiqui/voxlock

1.1.2

Choose a tag to compare

@arbazsiddiqui arbazsiddiqui released this 23 Oct 17:05
  • A voice sample of any length from 3 seconds up works: a longer sample gives its loudest 3 seconds in the first 30. stream(), isolate(sample=) and the Pipecat filter's voice_sample= used to fail on anything but exactly 3 seconds.
  • isolate() returns a call shorter than 3 seconds unchanged, with a warning, instead of failing. A sample under 3 seconds, or live(sec=) under 3, is refused with a clear error.

1.1.1: live() locks on continuous speech

Choose a tag to compare

@arbazsiddiqui arbazsiddiqui released this 15 Oct 15:00
  • live() and the Pipecat filter no longer stall when the caller talks without pausing.
  • Digital silence at the start of a call no longer puts line noise into the voice sample.

VoxLock models for sherpa-onnx

Choose a tag to compare

@arbazsiddiqui arbazsiddiqui released this 23 Oct 07:54

VoxLock 1.1.1 ONNX models with meta data for sherpa-onnx's speech denoisers.

These are the ONNX files from huggingface.co/arbazsiddiqui/voxlock (revision a50f4e1d), with meta data added by scripts/voxlock/add_meta_data.py. The graphs and weights are unchanged: each model's graph is byte-identical to the original and its outputs are bit-identical.

enroll runs once on exactly 3 seconds of the caller's voice (the chunk model accepts only the enroll outputs of a 3-second sample). chunk runs on each chunk of the call and carries the LSTM state.

File Role Precision Size sha256
voxlock_enroll.onnx enroll fp32 (used with fp32, int8 and int8-full) 12.5 MB 5d06048c156bb8cd422d29848e6d38fb26a7b39f6f7fd92eccf2a6ed1ce003c6
voxlock_chunk_int8.onnx chunk int8, LSTMs in 8-bit (default) 66.6 MB df61a9d0062b0adbcf1182302b1eb8b815f15ac47ea4923e8e164c1aff64121d
voxlock_chunk.onnx chunk fp32 87.4 MB f02a548fcbdc921b8ff22760bc2e69a86eb098e70016e0d77a49f99defc25571
voxlock_chunk_int8_full.onnx chunk int8-full, LSTMs and matrix multiplies in 8-bit 57.7 MB 28648542825b778123f33fef91e76d27ec31f744651e6413d2297d47db53bc9e
voxlock_enroll_fp16.onnx enroll fp16 weights 6.3 MB 89a9949df98cb7ef7f133a19de828077dafbec4ab072d1f1d5f20134b904a79b
voxlock_chunk_fp16.onnx chunk fp16 weights 44.3 MB ccbac121e74e2c4a52fdbff67e1af4b4594e1dd94ee1608ecfa3d0eb8e59c723
voxlock_test_call.wav test input 16 kHz, 16-bit, 14 s 448 KB 16342ff0b5cefb64cc012a3185c641f8762a78803fa0d9f4966b288669b132b4
voxlock_test_voice_sample.wav voice sample of the caller in the test input 16 kHz, 16-bit, 3 s 96 KB a3cd4eba63f33ae1001a73144286e877802c141f8189c84ea1461b332817255f

Pairs: int8 = voxlock_enroll.onnx + voxlock_chunk_int8.onnx; int8-full = voxlock_enroll.onnx + voxlock_chunk_int8_full.onnx; fp16 = voxlock_enroll_fp16.onnx + voxlock_chunk_fp16.onnx; fp32 = voxlock_enroll.onnx + voxlock_chunk.onnx.

Meta data in both files: model_type=voxlock, model_role (enroll or chunk), version=1, model_version=1.1.1, precision, sample_rate=16000, n_fft=512, hop_length=128, window_length=512, window_type=hann, num_freq_bins=257, context_dim=512, voice_sample_seconds=3, model_url, hf_revision, code_url, license=Apache-2.0, comment. Chunk only: state_shape=6,32,256 (LSTM states h and c), frames_per_chunk=100, output_gain=-0.5.

VoxLock's weights are released under Apache-2.0.

The test call is a simulated room mixture of two LibriSpeech test-clean speakers (CC BY 4.0), from the VoxLock demo. The voice sample is the loudest 3 seconds of VoxLock's fp32 output on it.

1.1.0: 8-bit models, live(), Pipecat filter

Choose a tag to compare

@arbazsiddiqui arbazsiddiqui released this 12 Oct 14:16
  • 8-bit models: VoxLock(precision=...) with int8 (the new default), int8-full, fp16 and fp32; voxlock --precision.
    int8 scores 5.11% word error rate on the Krisp benchmark against 4.95% for fp32, and streams in real time on fewer CPU threads.
  • VoxLock.live(): a stream that takes the first 3 seconds of speech as the voice sample, passing the audio through until then.
  • Pipecat audio filter, pip install "voxlock[pipecat]": voxlock.pipecat.VoxLockFilter. Tested with Pipecat 1.12.0.
  • Output is at the input's level. 1.0.0 returned the caller at twice the level, so the command line could clip loud words.

VoxLock 1.0.0

Choose a tag to compare

@arbazsiddiqui arbazsiddiqui released this 12 Oct 08:26

The best performing voice isolator there is: 4.95% word error rate and 0.11 background words leaked per minute on the Krisp Voice Isolation Benchmark.

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

Model: https://huggingface.co/arbazsiddiqui/voxlock · Demo: https://arbazsiddiqui.me/voxlock