From 6776820e16b62cd49d59a85942a6b7e6b53fad50 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 4 Jan 2021 19:12:03 -0800 Subject: [PATCH 1/2] Working, but very slow --- examples/wave-deinter.rs | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/examples/wave-deinter.rs b/examples/wave-deinter.rs index 767dff1..48350df 100644 --- a/examples/wave-deinter.rs +++ b/examples/wave-deinter.rs @@ -8,7 +8,7 @@ use std::io; use std::path::Path; extern crate bwavfile; -use bwavfile::{Error,WaveReader, ChannelDescriptor, ChannelMask}; +use bwavfile::{Error,WaveReader, WaveWriter, ChannelDescriptor, ChannelMask, WaveFmt, AudioFrameWriter}; #[macro_use] extern crate clap; @@ -44,9 +44,10 @@ fn name_suffix(force_numeric : bool, delim : &str, index: usize, channel_descrip } fn process_file(infile: &str, delim : &str, numeric_channel_names : bool) -> Result<(), Error> { - let mut read_wave = WaveReader::open(infile)?; - let channel_desc = read_wave.channels()?; - + let mut input_file = WaveReader::open(infile)?; + let channel_desc = input_file.channels()?; + let input_format = input_file.format()?; + if channel_desc.len() == 1 { println!("Input file in monoaural, exiting."); return Ok(()); @@ -56,10 +57,27 @@ fn process_file(infile: &str, delim : &str, numeric_channel_names : bool) -> Res let basename = infile_path.file_stem().expect("Unable to extract file basename").to_str().unwrap(); let output_dir = infile_path.parent().expect("Unable to derive parent directory"); + let ouptut_format = WaveFmt::new_pcm_mono(input_format.sample_rate, input_format.bits_per_sample); + let mut input_wave_reader = input_file.audio_frame_reader()?; + for (n, channel) in channel_desc.iter().enumerate() { let suffix = name_suffix(numeric_channel_names, delim, n + 1, channel); - let outfile_name = output_dir.join(format!("{}{}.wav", basename, suffix)).into_os_string().into_string().unwrap(); + let outfile_name = output_dir.join(format!("{}{}.wav", basename, suffix)) + .into_os_string().into_string().unwrap(); + println!("Will create file {}", outfile_name); + + let output_file = WaveWriter::create(&outfile_name, ouptut_format).expect("Failed to create new file"); + + let mut output_wave_writer = output_file.audio_frame_writer()?; + let mut buffer = input_format.create_frame_buffer(); + + while input_wave_reader.read_integer_frame(&mut buffer)? > 0 { + output_wave_writer.write_integer_frames(&buffer[n..=n])?; + } + + output_wave_writer.end()?; + input_wave_reader.locate(0)?; } Ok(()) From 53fcecfc451f9d38e2b541a728ea444162d04125 Mon Sep 17 00:00:00 2001 From: Jamie Hardt Date: Mon, 4 Jan 2021 19:13:47 -0800 Subject: [PATCH 2/2] Nudge version --- Cargo.lock | 2 +- Cargo.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bcfe990..b954fcc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -28,7 +28,7 @@ checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" [[package]] name = "bwavfile" -version = "0.9.2" +version = "0.9.3" dependencies = [ "byteorder", "clap", diff --git a/Cargo.toml b/Cargo.toml index 5c8e107..835e089 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bwavfile" -version = "0.9.2" +version = "0.9.3" authors = ["Jamie Hardt "] edition = "2018" license = "MIT"