wav_io

This is a crate for reading and writing wav file.

Suported format:

Functions

Example

``` fn readwrite() { // read let filein = File::open("./tone.wav").unwrap(); let wav = reader::fromfile(filein).unwrap(); println!("header={:?}", wav.header); println!("samples.len={}", wav.samples.len());

// write
let mut file_out = File::create("./test-out.wav").unwrap();
writer::to_file(&mut file_out, &wav).unwrap();

}

fn writetone() { // write tone let header = WavHeader::newmono(); let mut samples = vec![]; for t in 0..header.samplerate { let v = ((t as f32 / header.samplerate as f32) * 440.0 * 2.0 * PI).sin() * 0.6; samples.push(v); } let mut fileout = File::create("./tone.wav").unwrap(); writer::tofile(&mut file_out, &WavData{header, samples}).unwrap();

// melody
let mut header = WavHeader::new_mono();
let mut samples = vec![];
let opt = tone::ToneOptions::new();
header.sample_rate = opt.sample_rate;
tone::write_mml(&mut samples, "l4 cege cege cege c1", &opt);
let mut file_out = File::create("./melody.wav").unwrap();
writer::to_file(&mut file_out, &WavData{header, samples}).unwrap();

}

fn resample() {
// resample let filein = File::open("./tone.wav").unwrap(); let wav = reader::fromfile(filein).unwrap(); let newsamplerate = 16000; let mut fileout = File::create("./tone-resample.wav").unwrap(); let samples2 = resample::linear(wav.samples, wav.header.channels, wav.header.samplerate, newsamplerate); let mut wav2 = header::WavData{header: wav.header, samples: samples2}; wav2.header.samplerate = newsamplerate; writer::tofile(&mut file_out, &wav2).unwrap(); println!("resample.writer={:?}", wav2.header); }

fn split() { // split let filein = File::open("./test.wav").unwrap(); let mut wav = reader::fromfile(filein).unwrap(); let mut samples = wav.samples; if wav.header.channels >= 2 { samples = utils::stereotomono(samples); wav.header.channels = 1; } let rangevec = splitter::splitsamples(&mut samples, wav.header.samplerate, &splitter::WavSplitOption::new()); for (i, range) in rangevec.iter().enumerate() { let fname = format!("sub-{}.wav", i); println!("splitsamples={}", fname); let mut fileout = File::create(fname).unwrap(); let sub = splitter::subsamples(&samples, *range); let wav = header::WavData{header: wav.header, samples: sub}; writer::tofile(&mut fileout, &wav).unwrap(); } } ```