diff --git a/src/cue.rs b/src/cue.rs index 9a84076..74b1aec 100644 --- a/src/cue.rs +++ b/src/cue.rs @@ -281,7 +281,16 @@ pub struct Cue { pub label : Option, /// The text "note"/comment of this marker if provided - pub note : Option + pub note : Option, + + /// The offser of this marker + /// + /// **Note:** Applications use the `frame` and `offset` fields + /// in different ways. iZotope RX Audio Editor writes the + /// marker position to *both* fields, while a Sound Devices + /// recorder writes the marker position to *only* the `offset` + /// field. + pub offset : u32 } @@ -306,7 +315,7 @@ impl Cue { chunk_id: DATA_SIG, chunk_start: 0, block_start: 0, - frame_offset: cue.frame + frame_offset: cue.offset }; let raw_label = cue.label.as_ref().map(|val| { @@ -380,10 +389,11 @@ impl Cue { //.filter_map(|x| str::from_utf8(&x.text).ok()) .map(|s| convert_to_cue_string(&s.text)) .next() - } + }, + offset: i.frame_offset } }).collect() ) } -} \ No newline at end of file +} diff --git a/tests/integration_test.rs b/tests/integration_test.rs index 2560fca..17b954e 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -158,7 +158,7 @@ fn test_channels_stereo_no_fmt_extended() { assert_eq!(channels[1].speaker,ChannelMask::FrontRight); } -//See issue 6 and 7 +///See issue 6 and 7 #[test] fn test_frame_reader_consumes_reader() { // Issue #6 @@ -175,4 +175,48 @@ fn test_frame_reader_consumes_reader() { } let _result = from_wav_filename("tests/media/pt_24bit_stereo.wav").unwrap(); +} + +///See to PR#10 +#[test] +fn test_cue_read_sounddevices() { + let mut f = WaveReader::open("tests/media/sounddevices_6_cue_points.wav").unwrap(); + let cue_points = f.cue_points().unwrap(); + assert_eq!(cue_points.len(), 6); + + assert_eq!(cue_points[0].frame, 0); + assert_eq!(cue_points[0].length, None); + assert_eq!(cue_points[0].label, None); + assert_eq!(cue_points[0].note, None); + assert_eq!(cue_points[0].offset, 90112); + + assert_eq!(cue_points[1].frame, 0); + assert_eq!(cue_points[1].length, None); + assert_eq!(cue_points[1].label, None); + assert_eq!(cue_points[1].note, None); + assert_eq!(cue_points[1].offset, 176128); + + assert_eq!(cue_points[2].frame, 0); + assert_eq!(cue_points[2].length, None); + assert_eq!(cue_points[2].label, None); + assert_eq!(cue_points[2].note, None); + assert_eq!(cue_points[2].offset, 237568); + + assert_eq!(cue_points[3].frame, 0); + assert_eq!(cue_points[3].length, None); + assert_eq!(cue_points[3].label, None); + assert_eq!(cue_points[3].note, None); + assert_eq!(cue_points[3].offset, 294912); + + assert_eq!(cue_points[4].frame, 0); + assert_eq!(cue_points[4].length, None); + assert_eq!(cue_points[4].label, None); + assert_eq!(cue_points[4].note, None); + assert_eq!(cue_points[4].offset, 380928); + + assert_eq!(cue_points[5].frame, 0); + assert_eq!(cue_points[5].length, None); + assert_eq!(cue_points[5].label, None); + assert_eq!(cue_points[5].note, None); + assert_eq!(cue_points[5].offset, 385024); } \ No newline at end of file diff --git a/tests/test_media.tgz b/tests/test_media.tgz index 3bfecca..4ab0005 100644 Binary files a/tests/test_media.tgz and b/tests/test_media.tgz differ