diff --git a/CUETools.CDImage/CDImage.cs b/CUETools.CDImage/CDImage.cs index ff4d220..aad062b 100644 --- a/CUETools.CDImage/CDImage.cs +++ b/CUETools.CDImage/CDImage.cs @@ -157,6 +157,10 @@ namespace CUETools.CDImage { return _number; } + internal set + { + _number = value; + } } public uint Pregap @@ -193,6 +197,10 @@ namespace CUETools.CDImage { return _isAudio; } + set + { + _isAudio = value; + } } public bool PreEmphasis @@ -321,6 +329,11 @@ namespace CUETools.CDImage { return (uint) _audioTracks; } + + set + { + _audioTracks = (int) value; + } } public int FirstAudio @@ -329,6 +342,10 @@ namespace CUETools.CDImage { return _firstAudio + 1; } + set + { + _firstAudio = value - 1; + } } public uint Leadout @@ -441,6 +458,8 @@ namespace CUETools.CDImage public void InsertTrack(CDTrack track) { _tracks.Insert((int)track.Number - 1, track); + for (int i = (int)track.Number; i < _tracks.Count; i++) + _tracks[i].Number++; if (track.IsAudio) _audioTracks++; if (!track.IsAudio && track.Number <= FirstAudio) diff --git a/CUETools.Processor/Processor.cs b/CUETools.Processor/Processor.cs index c281c60..3051212 100644 --- a/CUETools.Processor/Processor.cs +++ b/CUETools.Processor/Processor.cs @@ -3131,16 +3131,39 @@ string status = processor.Go(); } // use data track length from log - if (tocFromLog != null && tocFromLog.AudioTracks == _toc.AudioTracks) + if (tocFromLog != null) { - if (tocFromLog.TrackCount == tocFromLog.AudioTracks + 1 && !tocFromLog[tocFromLog.TrackCount].IsAudio) + if (tocFromLog.AudioTracks == _toc.AudioTracks + && tocFromLog.TrackCount == tocFromLog.AudioTracks + 1 + && !tocFromLog[tocFromLog.TrackCount].IsAudio) { DataTrackLength = tocFromLog[tocFromLog.TrackCount].Length; _toc[_toc.TrackCount].Start = tocFromLog[_toc.TrackCount].Start; _toc[_toc.TrackCount][0].Start = tocFromLog[_toc.TrackCount].Start; _toc[_toc.TrackCount][1].Start = tocFromLog[_toc.TrackCount].Start; } - else if (tocFromLog.TrackCount == _toc.TrackCount + if (_toc.TrackCount == _toc.AudioTracks + && tocFromLog.TrackCount == tocFromLog.AudioTracks + && tocFromLog.TrackCount > _toc.TrackCount) + { + int dtracks = tocFromLog.TrackCount - _toc.TrackCount; + bool matches = true; + for (int iTrack = 1; iTrack <= _toc.TrackCount; iTrack++) + if (tocFromLog[iTrack + dtracks].Length != _toc[iTrack].Length) + matches = false; + if (matches) + { + for (int iTrack = 1; iTrack <= dtracks; iTrack++) + { + _toc.InsertTrack(new CDTrack((uint)iTrack, 0, 0, false, false)); + tocFromLog[iTrack].IsAudio = false; + } + tocFromLog.FirstAudio += dtracks; + tocFromLog.AudioTracks -= (uint) dtracks; + } + } + if (tocFromLog.AudioTracks == _toc.AudioTracks + && tocFromLog.TrackCount == _toc.TrackCount && tocFromLog.FirstAudio == _toc.FirstAudio && tocFromLog.TrackCount == tocFromLog.FirstAudio + tocFromLog.AudioTracks - 1) { @@ -3160,23 +3183,6 @@ string status = processor.Go(); } } - // use data track length from log - if (tocFromLog != null - && _toc.TrackCount == _toc.AudioTracks - && tocFromLog.TrackCount == tocFromLog.AudioTracks - && tocFromLog.TrackCount == _toc.TrackCount + 1) - { - bool matches = true; - for (int iTrack = 1; iTrack <= _toc.TrackCount; iTrack++) - if (tocFromLog[iTrack + 1].Length != _toc[iTrack].Length) - matches = false; - if (matches) - { - _toc.InsertTrack(new CDTrack(1, 0, 0, false, false)); - DataTrackLength = tocFromLog[1].Length; - } - } - // use data track length range from cddbId if (DataTrackLength == 0 && _cddbDiscIdTag != null) { diff --git a/CUETools/CUETools.TestProcessor/ProcessorTest.cs b/CUETools/CUETools.TestProcessor/ProcessorTest.cs index d7e5173..997c0a2 100644 --- a/CUETools/CUETools.TestProcessor/ProcessorTest.cs +++ b/CUETools/CUETools.TestProcessor/ProcessorTest.cs @@ -99,6 +99,10 @@ namespace CUETools.TestProcessor target.Open("Les Mysterieuses Cites d'Or\\Les Mysterieuses Cites d'Or.cue"); Assert.AreEqual("-0:-31952:127883:137816:149173:160223:171479:180777:186738:196134:205613:214526:221674:227031:232824:239376:249495:259604:266115:267080:275100:281599:284452:291422:295511:297642:302114:309263:312269:320051:326235:333841", target.TOC.ToString(), "Wrong TOC"); + // test playstation-type CD-Extra with two data tracks and no info in cuesheet + target = new CUESheet(new CUEConfig()); + target.Open("Les Mysterieuses Cites d'Or\\2.cue"); + Assert.AreEqual("-0:-31952:127883:137816:149173:160223:171479:180777:186738:196134:205613:214526:221674:227031:232824:239376:249495:259604:266115:267080:275100:281599:284452:291422:295511:297642:302114:309263:312269:320051:326235:333841", target.TOC.ToString(), "Wrong TOC"); } /// diff --git a/CUETools/CUETools.TestProcessor/Test Images/Les Mysterieuses Cites d'Or/2.cue b/CUETools/CUETools.TestProcessor/Test Images/Les Mysterieuses Cites d'Or/2.cue new file mode 100644 index 0000000..f6fcedc --- /dev/null +++ b/CUETools/CUETools.TestProcessor/Test Images/Les Mysterieuses Cites d'Or/2.cue @@ -0,0 +1,91 @@ +REM GENRE Anime +REM DISCID F211631F +REM COMMENT "ExactAudioCopy v0.99pb5" +FILE "03.dummy" WAVE + TRACK 01 AUDIO + PREGAP 00:00:03 + INDEX 01 00:00:00 +FILE "04.dummy" WAVE + TRACK 02 AUDIO + INDEX 01 00:00:00 +FILE "05.dummy" WAVE + TRACK 03 AUDIO + INDEX 01 00:00:00 +FILE "06.dummy" WAVE + TRACK 04 AUDIO + INDEX 01 00:00:00 +FILE "07.dummy" WAVE + TRACK 05 AUDIO + INDEX 01 00:00:00 +FILE "08.dummy" WAVE + TRACK 06 AUDIO + INDEX 01 00:00:00 +FILE "09.dummy" WAVE + TRACK 07 AUDIO + INDEX 01 00:00:00 +FILE "10.dummy" WAVE + TRACK 08 AUDIO + INDEX 01 00:00:00 +FILE "11.dummy" WAVE + TRACK 09 AUDIO + INDEX 01 00:00:00 +FILE "12.dummy" WAVE + TRACK 10 AUDIO + INDEX 01 00:00:00 +FILE "13.dummy" WAVE + TRACK 11 AUDIO + INDEX 01 00:00:00 +FILE "14.dummy" WAVE + TRACK 12 AUDIO + INDEX 01 00:00:00 +FILE "15.dummy" WAVE + TRACK 13 AUDIO + INDEX 01 00:00:00 +FILE "16.dummy" WAVE + TRACK 14 AUDIO + INDEX 01 00:00:00 +FILE "17.dummy" WAVE + TRACK 15 AUDIO + INDEX 01 00:00:00 +FILE "18.dummy" WAVE + TRACK 16 AUDIO + INDEX 01 00:00:00 +FILE "19.dummy" WAVE + TRACK 17 AUDIO + INDEX 01 00:00:00 +FILE "20.dummy" WAVE + TRACK 18 AUDIO + INDEX 01 00:00:00 +FILE "21.dummy" WAVE + TRACK 19 AUDIO + INDEX 01 00:00:00 +FILE "22.dummy" WAVE + TRACK 20 AUDIO + INDEX 01 00:00:00 +FILE "23.dummy" WAVE + TRACK 21 AUDIO + INDEX 01 00:00:00 +FILE "24.dummy" WAVE + TRACK 22 AUDIO + INDEX 01 00:00:00 +FILE "25.dummy" WAVE + TRACK 23 AUDIO + INDEX 01 00:00:00 +FILE "26.dummy" WAVE + TRACK 24 AUDIO + INDEX 01 00:00:00 +FILE "27.dummy" WAVE + TRACK 25 AUDIO + INDEX 01 00:00:00 +FILE "28.dummy" WAVE + TRACK 26 AUDIO + INDEX 01 00:00:00 +FILE "29.dummy" WAVE + TRACK 27 AUDIO + INDEX 01 00:00:00 +FILE "30.dummy" WAVE + TRACK 28 AUDIO + INDEX 01 00:00:00 +FILE "31.dummy" WAVE + TRACK 29 AUDIO + INDEX 01 00:00:00 diff --git a/CUETools/CUETools.TestProcessor/Test Images/Les Mysterieuses Cites d'Or/2.log b/CUETools/CUETools.TestProcessor/Test Images/Les Mysterieuses Cites d'Or/2.log new file mode 100644 index 0000000..96063e7 --- /dev/null +++ b/CUETools/CUETools.TestProcessor/Test Images/Les Mysterieuses Cites d'Or/2.log @@ -0,0 +1,155 @@ +Exact Audio Copy V0.99 prebeta 5 from 4. May 2009 + +EAC extraction logfile from 12. October 2010, 19:17 + +Haim Saban & Shuki Levy / Les Mystérieuses Cités d'Or + +Used drive : ATAPI iHAS324 Y Adapter: 6 ID: 0 + +Read mode : Secure +Utilize accurate stream : Yes +Defeat audio cache : Yes +Make use of C2 pointers : No + +Read offset correction : 48 +Overread into Lead-In and Lead-Out : No +Fill up missing offset samples with silence : Yes +Delete leading and trailing silent blocks : No +Null samples used in CRC calculations : Yes +Used interface : Native Win32 interface for Win NT & 2000 +Gap handling : Appended to previous track + +Used output format : User Defined Encoder +Selected bitrate : 128 kBit/s +Quality : High +Add ID3 tag : No +Command line compressor : C:\Program Files (x86)\FLAC\flac.exe +Additional command line options : -V -8 -T "artist=%a" -T "title=%t" -T "album=%g" -T "date=%y" -T "tracknumber=%n" -T "genre=%m" %s + + +TOC of the extracted CD + + Track | Start | Length | Start sector | End sector + --------------------------------------------------------- + 1 | 0:00.00 | 7:06.02 | 0 | 31951 + 2 | 7:06.02 | 21:19.06 | 31952 | 127882 + 3 | 28:25.08 | 2:12.33 | 127883 | 137815 + 4 | 30:37.41 | 2:31.32 | 137816 | 149172 + 5 | 33:08.73 | 2:27.25 | 149173 | 160222 + 6 | 35:36.23 | 2:30.06 | 160223 | 171478 + 7 | 38:06.29 | 2:03.73 | 171479 | 180776 + 8 | 40:10.27 | 1:19.36 | 180777 | 186737 + 9 | 41:29.63 | 2:05.21 | 186738 | 196133 + 10 | 43:35.09 | 2:06.29 | 196134 | 205612 + 11 | 45:41.38 | 1:58.63 | 205613 | 214525 + 12 | 47:40.26 | 1:35.23 | 214526 | 221673 + 13 | 49:15.49 | 1:11.32 | 221674 | 227030 + 14 | 50:27.06 | 1:17.18 | 227031 | 232823 + 15 | 51:44.24 | 1:27.27 | 232824 | 239375 + 16 | 53:11.51 | 2:14.69 | 239376 | 249494 + 17 | 55:26.45 | 2:14.59 | 249495 | 259603 + 18 | 57:41.29 | 1:26.61 | 259604 | 266114 + 19 | 59:08.15 | 0:12.65 | 266115 | 267079 + 20 | 59:21.05 | 1:46.70 | 267080 | 275099 + 21 | 61:08.00 | 1:26.49 | 275100 | 281598 + 22 | 62:34.49 | 0:38.03 | 281599 | 284451 + 23 | 63:12.52 | 1:32.70 | 284452 | 291421 + 24 | 64:45.47 | 0:54.39 | 291422 | 295510 + 25 | 65:40.11 | 0:28.31 | 295511 | 297641 + 26 | 66:08.42 | 0:59.47 | 297642 | 302113 + 27 | 67:08.14 | 1:35.24 | 302114 | 309262 + 28 | 68:43.38 | 0:40.06 | 309263 | 312268 + 29 | 69:23.44 | 1:43.57 | 312269 | 320050 + 30 | 71:07.26 | 1:22.34 | 320051 | 326234 + 31 | 72:29.60 | 1:41.31 | 326235 | 333840 + + +Track 3 + + Filename D:\Music Madness\Soundtracks\1998 - Les Mystérieuses Cités d'Or [FLAC]\03 - Les Cités d'Or (Générique).wav + + Pre-gap length 0:00:03.00 + + Peak level 100.0 % + Track quality 100.0 % + Test CRC 5B513BDC + Copy CRC 5B513BDC + Accurately ripped (confidence 2) [813C9D32] + Copy OK + +Track 4 + + Filename D:\Music Madness\Soundtracks\1998 - Les Mystérieuses Cités d'Or [FLAC]\04 - Le thème de Zia.wav + + Pre-gap length 0:00:02.00 + + Peak level 100.0 % + Track quality 99.9 % + Test CRC 76674B12 + Copy CRC 76674B12 + Accurately ripped (confidence 2) [1AC98E42] + Copy OK + +<<>> + +Track 28 + + Filename D:\Music Madness\Soundtracks\1998 - Les Mystérieuses Cités d'Or [FLAC]\28 - L'aventure continue.wav + + Pre-gap length 0:00:02.00 + + Peak level 92.6 % + Track quality 100.0 % + Test CRC E471A040 + Copy CRC E471A040 + Accurately ripped (confidence 2) [9C394487] + Copy OK + +Track 29 + + Filename D:\Music Madness\Soundtracks\1998 - Les Mystérieuses Cités d'Or [FLAC]\29 - Les Olmèques.wav + + Pre-gap length 0:00:02.00 + + Peak level 92.6 % + Track quality 100.0 % + Test CRC 99FBCE76 + Copy CRC 99FBCE76 + Accurately ripped (confidence 2) [FE9F299F] + Copy OK + +Track 30 + + Filename D:\Music Madness\Soundtracks\1998 - Les Mystérieuses Cités d'Or [FLAC]\30 - La fille du peuple Inca.wav + + Pre-gap length 0:00:02.00 + + Peak level 100.0 % + Track quality 100.0 % + Test CRC 4F2F0F85 + Copy CRC 4F2F0F85 + Track not present in AccurateRip database + Copy OK + +Track 31 + + Filename D:\Music Madness\Soundtracks\1998 - Les Mystérieuses Cités d'Or [FLAC]\31 - Tao l'inventeur.wav + + Pre-gap length 0:00:02.00 + + Peak level 92.6 % + Track quality 100.0 % + Test CRC DB2EFF8C + Copy CRC DB2EFF8C + Track not present in AccurateRip database + Copy OK + + +27 track(s) accurately ripped +2 track(s) not present in the AccurateRip database + +Some tracks could not be verified as accurate + +No errors occurred + +End of status report \ No newline at end of file diff --git a/CUETools/CUETools1.vsmdi b/CUETools/CUETools1.vsmdi index 659d726..1029969 100644 --- a/CUETools/CUETools1.vsmdi +++ b/CUETools/CUETools1.vsmdi @@ -5,7 +5,7 @@ - + \ No newline at end of file