Skip to content

pykeio/earshot

Repository files navigation

Earshot

Ridiculously fast & accurate streaming voice activity detection, written in pure Rust and also available for Python.

Earshot achieves an RTF of 0.0003 (3,600x real time): 40x faster than Silero VAD v6 & TEN VAD - and more accurate, too!

Earshot operates on 16 millisecond frames of mono audio sampled at 16000 Hz & supports streaming. Earshot detects voice in any language and is resilient to most kinds of environmental noise with an SNR ≥ 3dB.

If you find Earshot useful, please consider sponsoring pyke.io.

Earshot, in black, performs markedly better than Silero VAD v6 and TEN VAD in blue and red.

Usage

Rust

cargo add earshot

use earshot::Detector;

// Create a new VAD detector using the default NN.
let mut detector = Detector::default();

let mut frame_receiver = ...
while let Some(frame) = frame_receiver.recv() {
	// `frame` is Vec<i16> with length 256.
	// Each frame passed to the detector must be exactly 256 samples (16ms) @ 16 KHz sample rate.
	// f32 [-1, 1] frames are also supported with `predict_f32`.
	let score = detector.predict_i16(&frame);
	// Score is between 0-1; 0 = no voice, 1 = voice.
	if score >= 0.5 { // 0.5 is a good default threshold, but can be customized.
		println!("Voice detected!");
	}
}

Binary & memory size

Earshot is very embedded-friendly: each instance of Detector uses ~8 KiB of memory to store the audio buffer & neural network state. Binary footprint is ~95 KiB; the neural network is 40 KiB of that.

In contrast, Silero's model is 2 MiB, TEN's is 310 KiB, but both require ONNX Runtime, which adds an additional 8 MB to your binary (+ a whole lot more memory).

#![no_std]

Earshot supports #![no_std], but it does require the libm crate. The std feature is enabled by default, so add default-features = false and features = [ "libm" ] to enable #![no_std]:

[dependencies]
earshot = { version = "1", default-features = false, features = [ "libm" ] }

About

Ridiculously fast & accurate streaming voice activity detection

Topics

Resources

Stars

Watchers

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages