use crate::label::LabelState;
use crate::predict::PredictState;
use crate::{LabelIterator, PredictIterator, Sample, VoiceActivityDetector};
pub trait IteratorExt: Iterator {
fn predict(self, vad: &mut VoiceActivityDetector) -> PredictIterator<'_, Self::Item, Self>
where
Self::Item: Sample,
Self: Sized,
{
PredictIterator {
iter: self,
state: PredictState::new(vad),
}
}
fn label(
self,
vad: &mut VoiceActivityDetector,
threshold: f32,
padding_chunks: usize,
) -> LabelIterator<'_, Self::Item, Self>
where
Self::Item: Sample,
Self: Sized,
{
let state = LabelState::new(threshold, padding_chunks);
LabelIterator {
state,
iter: self.predict(vad),
}
}
}
impl<I: Iterator> IteratorExt for I {}