weresocool_vorbis 1.0.47

Vorbis for WereSoCool
Documentation
use std::io::prelude::*;
use weresocool_vorbis::encode_lr_channels_to_ogg_vorbis;

fn main() {
    println!("Hello, Vorbis");

    let (l, r) = wav_filename_to_lr_channels("test.wav");
    let encoded = encode_lr_channels_to_ogg_vorbis(l, r);

    let mut file = std::fs::File::create("result.ogg").unwrap();
    file.write_all(&encoded).unwrap();
    println!("Finished");
}

fn wav_filename_to_lr_channels(filename: &str) -> (Vec<f64>, Vec<f64>) {
    let file = std::fs::File::open(filename).unwrap();
    let mut reader = hound::WavReader::new(file).unwrap();
    let mut count = 0;

    let (l, r): (Vec<f64>, Vec<f64>) = reader
        .samples::<f32>()
        .map(|v| v.unwrap() as f64)
        .collect::<Vec<f64>>()
        .iter()
        .partition(|_v| {
            let result = count % 2 == 0;
            count += 1;
            result
        });

    (l, r)
}

#[cfg(test)]
mod test {
    use super::*;
    use hamcrest2::prelude::*;
    use weresocool_vorbis::*;

    #[test]
    fn test_interleaving() {
        let (l, r) = wav_filename_to_lr_channels("test.wav");
        let interleaved: Vec<f64> = interleave_channels(l, r);

        let test_file = std::fs::File::open("test.wav").unwrap();
        let mut test_reader = hound::WavReader::new(test_file).unwrap();
        assert_that!(
            &test_reader
                .samples::<f32>()
                .map(|v| v.unwrap() as f64)
                .collect::<Vec<f64>>(),
            contains(interleaved).exactly()
        );
    }
}