use audio_samples::AudioSamples;
use crate::error::StreamingResult;
use crate::traits::{AudioSink, AudioStream};
pub fn run<S, K>(
source: &mut S,
sink: &mut K,
buffer: &mut AudioSamples<'static, S::Sample>,
) -> StreamingResult<usize>
where
S: AudioStream,
K: AudioSink<Sample = S::Sample>,
S::Error: Into<crate::error::StreamingError>,
K::Error: Into<crate::error::StreamingError>,
{
let mut total_frames = 0;
loop {
match source.fill_chunk(buffer).map_err(Into::into)? {
None => break,
Some(n) => {
total_frames += n;
sink.write_chunk(buffer).map_err(Into::into)?;
}
}
}
sink.flush().map_err(Into::into)?;
Ok(total_frames)
}