Skip to main content

read_track/
read_track.rs

1use cd_da_reader::CdReader;
2
3fn main() -> Result<(), Box<dyn std::error::Error>> {
4    let drive_path = default_drive_path();
5    read_cd(drive_path)
6}
7
8#[cfg(target_os = "windows")]
9fn default_drive_path() -> &'static str {
10    r"\\.\E:"
11}
12
13#[cfg(target_os = "macos")]
14fn default_drive_path() -> &'static str {
15    "disk14"
16}
17
18#[cfg(target_os = "linux")]
19fn default_drive_path() -> &'static str {
20    "/dev/sr0"
21}
22
23fn read_cd(path: &str) -> Result<(), Box<dyn std::error::Error>> {
24    let reader = CdReader::open(path)?;
25    let toc = reader.read_toc()?;
26    println!("{toc:#?}");
27
28    let last_audio_track = toc
29        .tracks
30        .iter()
31        .rev()
32        .find(|track| track.is_audio)
33        .ok_or_else(|| std::io::Error::other("no audio tracks in TOC"))?;
34
35    println!("Reading track {}", last_audio_track.number);
36    let data = reader.read_track(&toc, last_audio_track.number)?;
37    let wav_track = CdReader::create_wav(data);
38    std::fs::write("myfile.wav", wav_track)?;
39
40    Ok(())
41}