tunein-cli 0.5.0

Browse and listen to thousands of radio stations across the globe right from your terminal 🌎 📻 🎵✨
pub type Matrix<T> = Vec<Vec<T>>;

/// separate a stream of alternating channels into a matrix of channel streams:
///   L R L R L R L R L R
/// becomes
///   L L L L L
///   R R R R R
pub fn stream_to_matrix<I, O>(
    stream: impl Iterator<Item = I>,
    channels: usize,
    norm: O,
) -> Matrix<O>
where
    I: Copy + Into<O>,
    O: Copy + std::ops::Div<Output = O>,
{
    let mut out = vec![vec![]; channels];
    let mut channel = 0;
    for sample in stream {
        out[channel].push(sample.into() / norm);
        channel = (channel + 1) % channels;
    }
    out
}