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}