use cuet::{extract_labeled_text_from_list, parse_cue_points, ChunkReader};
use std::env::args;
use std::fs::File;
use std::io;
fn main() {
let mut arguments = args();
let wav_path = if let Some(path) = arguments.nth(1) {
path
} else {
panic!("No argument for path");
};
let file = File::open(wav_path).unwrap();
let reader = io::BufReader::new(file);
let mut wave_cursor = ChunkReader::new(reader).unwrap();
let sample_byte_ct = wave_cursor
.read_next_chunk(Some(*b"data"))
.unwrap()
.unwrap()
.1
.len();
println!("Found {sample_byte_ct} bytes of samples");
wave_cursor.reset().unwrap();
let cue_body = wave_cursor.read_next_chunk(Some(*b"cue ")).unwrap();
let list_body = wave_cursor.read_next_chunk(Some(*b"LIST")).unwrap();
if let Some((_, payload)) = cue_body {
let cue_points = parse_cue_points(&payload[..]);
println!("{} cue points found", cue_points.len());
for cue in cue_points {
println!(
"\t\"{}\" cue {} at sample {}",
String::from_iter(cue.data_tag.iter().map(|ch| *ch as char)),
cue.id,
cue.sample_offset
);
}
} else {
println!("Cue chunk NOT found");
}
let list = list_body.and_then(|(_, payload)| {
let ltxts = extract_labeled_text_from_list(&payload);
if ltxts.is_empty() {
None
} else {
Some(ltxts)
}
});
if let Some(ltxts) = list {
println!("{} labeled text cue desc. sub-chunks found", ltxts.len());
for ltxt in ltxts {
println!("\tcue {} has length {}", ltxt.cue_id, ltxt.sample_length);
}
} else {
println!("Labeled text sub-chunk NOT found");
}
}