Skip to main content

stream_last_track/
stream_last_track.rs

1/// Reads the last audio track using the streaming API and saves it as a WAV file.
2use 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}