Rework the deinter example, create writers before reading through the input file

This commit is contained in:
Ian Hobson
2023-05-12 16:52:06 +02:00
parent 0074e13bff
commit 7290d5ec81

View File

@@ -71,8 +71,10 @@ fn process_file(infile: &str, delim: &str, numeric_channel_names: bool) -> Resul
let ouptut_format = let ouptut_format =
WaveFmt::new_pcm_mono(input_format.sample_rate, input_format.bits_per_sample); WaveFmt::new_pcm_mono(input_format.sample_rate, input_format.bits_per_sample);
let mut input_wave_reader = input_file.audio_frame_reader()?; let mut input_wave_reader = input_file.audio_frame_reader()?;
let mut output_wave_writers = channel_desc
for (n, channel) in channel_desc.iter().enumerate() { .iter()
.enumerate()
.map(|(n, channel)| {
let suffix = name_suffix(numeric_channel_names, delim, n + 1, channel); let suffix = name_suffix(numeric_channel_names, delim, n + 1, channel);
let outfile_name = output_dir let outfile_name = output_dir
.join(format!("{}{}.wav", basename, suffix)) .join(format!("{}{}.wav", basename, suffix))
@@ -80,20 +82,21 @@ fn process_file(infile: &str, delim: &str, numeric_channel_names: bool) -> Resul
.into_string() .into_string()
.unwrap(); .unwrap();
println!("Will create file {}", outfile_name); WaveWriter::create(&outfile_name, ouptut_format)
.expect("Failed to create new file")
.audio_frame_writer()
})
.collect::<Result<Vec<_>, _>>()?;
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(1); let mut buffer = input_format.create_frame_buffer(1);
while input_wave_reader.read_integer_frame(&mut buffer)? > 0 { while input_wave_reader.read_integer_frame(&mut buffer)? > 0 {
output_wave_writer.write_integer_frames(&buffer[n..=n])?; for (n, writer) in output_wave_writers.iter_mut().enumerate() {
writer.write_integer_frames(&buffer[n..=n])?;
}
} }
output_wave_writer.end()?; for writer in output_wave_writers.drain(..) {
input_wave_reader.locate(0)?; writer.end()?;
} }
Ok(()) Ok(())