Struct LocalVadDetector

Source
pub struct LocalVadDetector { /* private fields */ }
Expand description

Local voice activity detector.

Provides voice activity detection using local processing without external API calls. Uses the voice_activity_detector crate for speech detection and analysis.

Implementations§

Source§

impl LocalVadDetector

Source

pub fn new(config: VadConfig) -> Result<Self>

Create a new local VAD detector.

§Arguments
  • config - VAD configuration parameters
§Returns

A new LocalVadDetector instance

§Errors

Returns an error if the audio processor cannot be initialized

Source

pub async fn detect_speech(&self, audio_path: &Path) -> Result<VadResult>

Detect speech activity in an audio file.

Processes the entire audio file to identify speech segments with timestamps and confidence scores.

§Arguments
  • audio_path - Path to the audio file to analyze
§Returns

VAD analysis results including speech segments and metadata

§Errors

Returns an error if:

  • Audio file cannot be loaded
  • VAD processing fails
  • Audio format is unsupported
Source

pub fn calculate_chunk_size(&self, sample_rate: u32) -> usize

Dynamically calculates the optimal VAD chunk size for a given audio sample rate.

This function selects a chunk size (in samples) that is compatible with the VAD model’s requirements and recommended for common sample rates. For 8000 Hz and 16000 Hz, it uses 512 samples by default, which is within the recommended range (512, 768, or 1024). For other sample rates, it uses a 30 ms window as the baseline, with a minimum of 1024 samples. The function also ensures that the chunk size always satisfies the model’s constraint: sample_rate <= 31.25 * chunk_size.

§Arguments
  • sample_rate: The audio sample rate in Hz (e.g., 16000 for 16kHz audio)
§Returns

The chunk size in number of samples, selected for optimal model compatibility.

§Examples

Basic usage:

use subx_cli::services::vad::LocalVadDetector;
let detector = LocalVadDetector::new(Default::default()).unwrap();
let chunk_size = detector.calculate_chunk_size(16000);
assert_eq!(chunk_size, 512);
§Model Constraint

The returned chunk size always satisfies: sample_rate <= 31.25 * chunk_size.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,