use crate::monitoring::VADStats;
use crate::time::AudioDuration;
pub trait VadMetricsCollector: Send + Sync {
fn record_vad_metrics(&self, snapshot: &VadMetricsSnapshot);
}
#[derive(Debug, Clone)]
pub struct VadMetricsSnapshot {
pub stats: VADStats,
pub latency: AudioDuration,
pub adaptive: AdaptiveThresholdSnapshot,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct AdaptiveThresholdSnapshot {
pub energy_baseline: f32,
pub flux_baseline: f32,
pub dynamic_threshold: f32,
}
impl VadMetricsSnapshot {
#[must_use]
pub fn new(
stats: VADStats,
latency: AudioDuration,
adaptive: AdaptiveThresholdSnapshot,
) -> Self {
Self {
stats,
latency,
adaptive,
}
}
#[must_use]
pub fn speech_ratio(&self) -> f64 {
self.stats.speech_ratio()
}
}
#[derive(Debug, Default, Clone, Copy)]
pub struct NoopVadMetricsCollector;
impl VadMetricsCollector for NoopVadMetricsCollector {
fn record_vad_metrics(&self, _snapshot: &VadMetricsSnapshot) {}
}