use futures::Stream;
use crate::label::LabelState;
use crate::predict::PredictState;
use crate::{LabelStream, PredictStream, Sample, VoiceActivityDetector};
pub trait StreamExt: Stream {
fn predict(self, vad: &mut VoiceActivityDetector) -> PredictStream<'_, Self::Item, Self>
where
Self::Item: Sample,
Self: Sized,
{
PredictStream {
stream: self,
state: PredictState::new(vad),
}
}
fn label(
self,
vad: &mut VoiceActivityDetector,
threshold: f32,
padding_chunks: usize,
) -> LabelStream<'_, Self::Item, Self>
where
Self::Item: Sample,
Self: Sized,
{
let state = LabelState::new(threshold, padding_chunks);
LabelStream {
state,
stream: self.predict(vad),
}
}
}
impl<I: Stream> StreamExt for I {}