decode_to_file/
decode_to_file.rs1use std::fs::File;
7use std::io::{BufReader, Write};
8
9fn main() {
10 let args: Vec<String> = std::env::args().collect();
11
12 let (raw_mode, input, output) = if args.len() == 4 && args[1] == "--raw" {
13 (true, &args[2], &args[3])
14 } else if args.len() == 3 {
15 (false, &args[1], &args[2])
16 } else {
17 eprintln!("Usage: decode_to_file [--raw] <input.ape> <output>");
18 std::process::exit(1);
19 };
20
21 let file = File::open(input).expect("failed to open input file");
22 let mut decoder =
23 ape_decoder::ApeDecoder::new(BufReader::new(file)).expect("failed to parse APE");
24
25 {
26 let info = decoder.info();
27 eprintln!(
28 "{}Hz, {} ch, {}-bit, {} samples ({} ms)",
29 info.sample_rate, info.channels, info.bits_per_sample, info.total_samples, info.duration_ms,
30 );
31 }
32
33 let pcm = decoder.decode_all().expect("failed to decode");
34 eprintln!("Decoded {} bytes of PCM", pcm.len());
35
36 let mut out = File::create(output).expect("failed to create output file");
37
38 if !raw_mode {
39 let header = decoder
41 .wav_header_data()
42 .map(|h| h.to_vec())
43 .unwrap_or_else(|| decoder.info().generate_wav_header());
44 out.write_all(&header).expect("failed to write WAV header");
45 }
46
47 out.write_all(&pcm).expect("failed to write PCM data");
48 eprintln!("Wrote {}", output);
49}