stream_last_track/
stream_last_track.rs1use cd_da_reader::{CdReader, TrackStreamConfig};
3
4fn main() -> Result<(), Box<dyn std::error::Error>> {
5 let reader = CdReader::open_default()?;
6 let toc = reader.read_toc()?;
7
8 let last_audio = toc
9 .tracks
10 .iter()
11 .rev()
12 .find(|t| t.is_audio)
13 .ok_or("no audio tracks found")?;
14
15 println!("Streaming track {}...", last_audio.number);
16 let mut stream =
17 reader.open_track_stream(&toc, last_audio.number, TrackStreamConfig::default())?;
18
19 let mut pcm = Vec::new();
20 while let Some(chunk) = stream.next_chunk()? {
21 pcm.extend_from_slice(&chunk);
22 }
23
24 let wav = CdReader::create_wav(pcm);
25 let filename = format!("track{:02}.wav", last_audio.number);
26 std::fs::write(&filename, wav)?;
27 println!("Saved {}", filename);
28
29 Ok(())
30}