use crate::metrics::signal_power;
#[derive(Debug, Clone)]
pub struct DoubleTalkDetector {
pub far_min_power: f32,
pub near_end_ratio: f32,
}
impl Default for DoubleTalkDetector {
fn default() -> Self {
Self {
far_min_power: 1e-6,
near_end_ratio: 8.0,
}
}
}
impl DoubleTalkDetector {
pub fn pause_adaptation(
&self,
mic_power: f32,
far_power: f32,
echo_estimate_power: f32,
) -> bool {
if far_power < self.far_min_power {
return true;
}
if echo_estimate_power < far_power * 0.01 {
return false;
}
mic_power > self.near_end_ratio * echo_estimate_power.max(1e-8)
}
pub fn frame_power(samples: &[f32]) -> f32 {
signal_power(samples)
}
}