Are there any intentionally weird CD TOCs out there?

Ok, so last night I was skimming RFC 9639 - Free Lossless Audio Codec (FLAC) to try to figure out if there’s any good way to represent CD indexes in audio files. Anyway, this part of the doc caught my eye:

It is recommended to start with track 1 and increase sequentially.

Note that “recommended” has no special meaning in RFCs, unlike “RECOMMENDED” or “REQUIRED”.

So now for my question to all you music metadata folks, do you know of any CDs that intentionally do really weird stuff with their TOC, like have gaps in the track numbers, out-of-order track numbers, or whatever else? I know there are plenty of CDs with hidden audio before track 1 or at the end after a bunch of silence, but that quote in the FLAC spec makes me think there could be much more.

And if there isn’t anything like that, I might have found my next hit album to release. If I put audio files and a .toc file on a website somewhere, is that digital media or CD? Can digital media have a TOC in MBz?

1 Like

Your fix seems to mention CD.
And you talk about TRACK and INDEX.

TRACK and INDEX are two different things, in CDDA (Red Book Compact Disc Digital Audio).

TRACK starts at TRACK 01 and there is maximum TRACK 99, and they are in sequence.

INDEX is inside a TRACK.
INDEX 00 is the real start of a TRACK.
INDEX 01 is where you start playing when skipping tracks (previous/next buttons or direct track number input).
If I remember correctly.

CD players nowadays don’t show INDEX, and they don’t handle skipping to INDEX above 01.

Sorry, I probably should have left out the background. I was reading the doc because of indexes, but that quote is about tracks. And it’s the FLAC spec not the Red Book, but it does seem to indicate that CDs don’t have to be laid out in the obvious manner. If I do try to make a perverse TOC, I’ll probably try to read the actual Red Book if it’s available somewhere.

The full citation is:

A track number of 0 is not allowed because the CD-DA specification reserves this for the lead-in. For CD-DA, the number MUST be 1-99 or 170 for the lead-out; for non-CD-DA, the track number MUST be 255 for the lead-out. It is recommended to start with track 1 and increase sequentially. Track numbers MUST be unique within a cuesheet.

I don’t know what they mean by non-CD-DA.
I don’t think non-CD-DA is important.

The CD TOC of our music CD are necessarily CDDA and well formed. :wink:

I think non-CD-DA is a FLAC-specific thing. Agreed that it’s not relevant to CDs. Though I guess I could make a release with perverse FLAC stuff, I’m just less interested in that.

But doesn’t the sentence I originally quoted apply to both CD-DA and non-CD-DA in that paragraph? The two alternatives are separated by a semicolon, and the sentence about ordering is after a period. The errata don’t say anything about it either, so I’d assume the sentence I quoted is about both CD-DA and non-CD-DA.

1 Like

When you rip a CD to FLAC it is just really down to the ripping software to number the files following that CD TOC. Just the same as you supply names for those files. I am pretty certain the CD TOC never misses a number. Even when it does a full run of 1 to 99 when playing with a hidden track.

I’ve seen artists have all kinds of fun creating CDs, but never missed a number.

Here is an example of CD that needs to keep having to be rewound to find extra bits of music between tracks. See Annotation for details: https://musicbrainz.org/release/c4f9ba9c-6943-4c4c-ac04-9e099f2d3851

I know I had to fiddle with EAC in some way to get that fully ripped. Can’t remember the settings. Note that I got 17 FLAC files from ripping this 11 track CD.

Rip Log with extra indexes

Exact Audio Copy V1.6 from 23. October 2020

EAC extraction logfile from 28. May 2021, 20:20

Skunk Anansie / Stoosh

Used drive : PIONEER BD-RW BDR-207D Adapter: 1 ID: 0

Read mode : Burst

Read offset correction : 667
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

Used output format : User Defined Encoder
Selected bitrate : 768 kBit/s
Quality : High
Add ID3 tag : No
Command line compressor : c:\Program Files (x86)\Exact Audio Copy\FLAC\FLAC.EXE
Additional command line options : -6 -V -T “ARTIST=%artist%” -T “TITLE=%title%” -T “ALBUM=%albumtitle%” -T “DATE=%year%” -T “TRACKNUMBER=%tracknr%” -T “GENRE=%genre%” -T “COMMENT=%comment%” -T “BAND=%albuminterpret%” -T “ALBUMARTIST=%albuminterpret%” %haslyrics%–tag-from-file=LYRICS=“%lyricsfile%”%haslyrics% -T “DISCNUMBER=%cdnumber%” -T “TOTALDISCS=%totalcds%” -T “TOTALTRACKS=%numtracks%” %hascover%–picture=“%coverfile%”%hascover% %source% -o %dest%

TOC of the extracted CD

 Track |   Start  |  Length  | Start sector | End sector 
---------------------------------------------------------
    1  |  2:40.07 |  3:51.50 |     12007    |    29381   
    2  |  6:31.57 |  3:51.48 |     29382    |    46754   
    3  | 10:23.30 |  5:04.12 |     46755    |    69566   
    4  | 15:27.42 |  5:59.60 |     69567    |    96551   
    5  | 21:27.27 |  3:27.28 |     96552    |   112104   
    6  | 24:54.55 |  4:13.32 |    112105    |   131111   
    7  | 29:08.12 |  5:11.13 |    131112    |   154449   
    8  | 34:19.25 |  4:31.62 |    154450    |   174836   
    9  | 38:51.12 |  3:14.50 |    174837    |   189436   
   10  | 42:05.62 |  3:50.28 |    189437    |   206714   
   11  | 45:56.15 |  4:18.00 |    206715    |   226064   

Track 1, Index 0

 Timing problem 0:00:28

 Peak level 49.0 %
 Extraction speed 9.1 X
 Copy finished

Track 1, Index 1

 Peak level 99.9 %
 Extraction speed 19.4 X
 Copy OK

Track 2, Index 1

 Peak level 99.9 %
 Extraction speed 21.3 X
 Copy OK

Track 3, Index 1

 Peak level 99.9 %
 Extraction speed 22.8 X
 Copy OK

Track 4, Index 0

 Peak level 54.8 %
 Extraction speed 23.9 X
 Copy OK

Track 4, Index 1

 Peak level 99.9 %
 Extraction speed 25.4 X
 Copy OK

Track 5, Index 1

 Peak level 99.9 %
 Extraction speed 26.5 X
 Copy OK

Track 6, Index 0

 Peak level 0.0 %
 Extraction speed 10.0 X
 Copy OK

Track 6, Index 1

 Peak level 99.9 %
 Extraction speed 28.2 X
 Copy OK

Track 7, Index 1

 Peak level 100.0 %
 Extraction speed 29.4 X
 Copy OK

Track 8, Index 0

 Peak level 17.1 %
 Extraction speed 30.0 X
 Copy OK

Track 8, Index 1

 Peak level 99.9 %
 Extraction speed 31.4 X
 Copy OK

Track 9, Index 0

 Peak level 0.0 %
 Extraction speed 8.5 X
 Copy OK

Track 9, Index 1

 Peak level 50.4 %
 Extraction speed 31.7 X
 Copy OK

Track 10, Index 0

 Peak level 90.9 %
 Extraction speed 31.0 X
 Copy OK

Track 10, Index 1

 Peak level 99.9 %
 Extraction speed 33.0 X
 Copy OK

Track 11, Index 1

 Peak level 99.9 %
 Extraction speed 34.1 X
 Copy OK

AccurateRip summary

Track 1 accurately ripped (confidence 159) [AADA9738] (AR v2)
Track 2 accurately ripped (confidence 161) [491D8F1C] (AR v2)
Track 3 accurately ripped (confidence 162) [0D9A3CF8] (AR v2)
Track 4 accurately ripped (confidence 161) [C54370FF] (AR v2)
Track 5 accurately ripped (confidence 162) [10BC357D] (AR v2)
Track 6 accurately ripped (confidence 162) [2B199A1F] (AR v2)
Track 7 accurately ripped (confidence 163) [05D57BBF] (AR v2)
Track 8 accurately ripped (confidence 160) [C79BE3C1] (AR v2)
Track 9 accurately ripped (confidence 160) [8FD538DE] (AR v2)
Track 10 accurately ripped (confidence 161) [A736D9AC] (AR v2)
Track 11 accurately ripped (confidence 155) [442446D1] (AR v2)

All tracks accurately ripped

No errors occurred

End of status report

---- AcoustID Plugin V1.2.0

Total fingerprints: 0

---- CUETools DB Plugin V2.1.6

[CTDB TOCID: hbwi6_pvJTb7geGOSwNILB_Em28-] found
Submit result: already submitted
Track | CTDB Status
1 | (483/489) Accurately ripped
2 | (484/489) Accurately ripped, or (1/489) differs in 2349 samples @02:40:04-02:40:06
3 | (480/489) Accurately ripped, or (1/489) differs in 1958 samples @02:40:04-02:40:06
4 | (477/489) Accurately ripped, or (1/489) differs in 2285 samples @02:40:04-02:40:06
5 | (485/489) Accurately ripped, or (1/489) differs in 2352 samples @02:40:04-02:40:06
6 | (482/489) Accurately ripped
7 | (482/489) Accurately ripped, or (1/489) differs in 2212 samples @02:40:04-02:40:06
8 | (480/489) Accurately ripped, or (1/489) differs in 2344 samples @02:40:04-02:40:06
9 | (480/489) Accurately ripped
10 | (478/489) Accurately ripped, or (1/489) differs in 2352 samples @02:40:04-02:40:06
11 | (471/489) Accurately ripped, or (1/489) differs in 2352 samples @02:40:04-02:40:06

Standard Rip Log for comparison

xact Audio Copy V1.3 from 2. September 2016

EAC extraction logfile from 30. November 2017, 18:59

Skunk Anansie / Stoosh

Used drive : PIONEER DVD-RW DVR-215D Adapter: 1 ID: 0

Read mode : Secure
Utilize accurate stream : Yes
Defeat audio cache : Yes
Make use of C2 pointers : Yes

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 : Not detected, thus appended to previous track

Used output format : User Defined Encoder
Selected bitrate : 768 kBit/s
Quality : High
Add ID3 tag : No
Command line compressor : d:\Program Files (x86)\Exact Audio Copy\FLAC\FLAC.EXE
Additional command line options : -6 -V -T “ARTIST=%artist%” -T “TITLE=%title%” -T “ALBUM=%albumtitle%” -T “DATE=%year%” -T “TRACKNUMBER=%tracknr%” -T “GENRE=%genre%” -T “COMMENT=%comment%” -T “BAND=%albuminterpret%” -T “ALBUMARTIST=%albuminterpret%” %haslyrics%–tag-from-file=LYRICS=“%lyricsfile%”%haslyrics% -T “DISCNUMBER=%cdnumber%” -T “TOTALDISCS=%totalcds%” -T “TOTALTRACKS=%numtracks%” %hascover%–picture=“%coverfile%”%hascover% %source% -o %dest%

TOC of the extracted CD

 Track |   Start  |  Length  | Start sector | End sector 
---------------------------------------------------------
    1  |  2:40.07 |  3:51.50 |     12007    |    29381   
    2  |  6:31.57 |  3:51.48 |     29382    |    46754   
    3  | 10:23.30 |  5:04.12 |     46755    |    69566   
    4  | 15:27.42 |  5:59.60 |     69567    |    96551   
    5  | 21:27.27 |  3:27.28 |     96552    |   112104   
    6  | 24:54.55 |  4:13.32 |    112105    |   131111   
    7  | 29:08.12 |  5:11.13 |    131112    |   154449   
    8  | 34:19.25 |  4:31.62 |    154450    |   174836   
    9  | 38:51.12 |  3:14.50 |    174837    |   189436   
   10  | 42:05.62 |  3:50.28 |    189437    |   206714   
   11  | 45:56.15 |  4:18.00 |    206715    |   226064   

Track 1

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-01 - Skunk Anansie - Yes It’s Fucking Political.wav

 Peak level 99.9 %
 Extraction speed 4.6 X
 Track quality 99.9 %
 Copy CRC 7B6272C2
 Accurately ripped (confidence 129)  [AADA9738]  (AR v2)
 Copy OK

Track 2

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-02 - Skunk Anansie - All I Want.wav

 Peak level 99.9 %
 Extraction speed 5.9 X
 Track quality 99.9 %
 Copy CRC 322D194F
 Accurately ripped (confidence 130)  [491D8F1C]  (AR v2)
 Copy OK

Track 3

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-03 - Skunk Anansie - She’s My Heroine , [unknown].wav

 Peak level 99.9 %
 Extraction speed 7.9 X
 Track quality 100.0 %
 Copy CRC 3BF1B1A7
 Accurately ripped (confidence 130)  [0D9A3CF8]  (AR v2)
 Copy OK

Track 4

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-04 - Skunk Anansie - Infidelity (Only You).wav

 Peak level 99.9 %
 Extraction speed 8.6 X
 Track quality 100.0 %
 Copy CRC 970E3145
 Accurately ripped (confidence 129)  [C54370FF]  (AR v2)
 Copy OK

Track 5

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-05 - Skunk Anansie - Hedonism (Just Because You Feel Good).wav

 Peak level 99.9 %
 Extraction speed 8.3 X
 Track quality 100.0 %
 Copy CRC B03ED9DB
 Accurately ripped (confidence 130)  [10BC357D]  (AR v2)
 Copy OK

Track 6

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-06 - Skunk Anansie - Twisted (Everyday Hurts).wav

 Peak level 99.9 %
 Extraction speed 9.1 X
 Track quality 100.0 %
 Copy CRC A328463F
 Accurately ripped (confidence 131)  [2B199A1F]  (AR v2)
 Copy OK

Track 7

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-07 - Skunk Anansie - We Love Your Apathy , [unknown].wav

 Peak level 100.0 %
 Extraction speed 9.7 X
 Track quality 100.0 %
 Copy CRC E808F843
 Accurately ripped (confidence 133)  [05D57BBF]  (AR v2)
 Copy OK

Track 8

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-08 - Skunk Anansie - Brazen (Weep).wav

 Peak level 99.9 %
 Extraction speed 8.5 X
 Track quality 99.9 %
 Copy CRC F76E3BA9
 Accurately ripped (confidence 130)  [C79BE3C1]  (AR v2)
 Copy OK

Track 9

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-09 - Skunk Anansie - Pickin’ on Me , [unknown].wav

 Peak level 90.9 %
 Extraction speed 9.5 X
 Track quality 100.0 %
 Copy CRC 0C6F7277
 Accurately ripped (confidence 130)  [8FD538DE]  (AR v2)
 Copy OK

Track 10

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-10 - Skunk Anansie - Milk Is My Sugar.wav

 Peak level 99.9 %
 Extraction speed 8.6 X
 Track quality 99.9 %
 Copy CRC CAF0DAF1
 Accurately ripped (confidence 130)  [A736D9AC]  (AR v2)
 Copy OK

Track 11

 Filename I:\!!RippityRip\Skunk Anansie\[1996] Stoosh\1-11 - Skunk Anansie - Glorious Pop Song.wav

 Peak level 99.9 %
 Extraction speed 10.6 X
 Track quality 100.0 %
 Copy CRC 23858C7C
 Accurately ripped (confidence 125)  [442446D1]  (AR v2)
 Copy OK

All tracks accurately ripped

No errors occurred

End of status report

---- AcoustID Plugin V1.2.0

Total fingerprints: 11

---- CUETools DB Plugin V2.1.6

[CTDB TOCID: hbwi6_pvJTb7geGOSwNILB_Em28-] found
Submit result: hbwi6_pvJTb7geGOSwNILB_Em28- has been confirmed
Track | CTDB Status
1 | (196/198) Accurately ripped
2 | (197/198) Accurately ripped
3 | (195/198) Accurately ripped
4 | (192/198) Accurately ripped
5 | (197/198) Accurately ripped
6 | (194/198) Accurately ripped
7 | (197/198) Accurately ripped
8 | (195/198) Accurately ripped
9 | (195/198) Accurately ripped
10 | (196/198) Accurately ripped
11 | (194/198) Accurately ripped

I have something with 99 tracks, but can’t remember where it is at the moment.

Burn a heap of CD-Rs and give them away to your mates and people down the local pub \ supermarket \ random people in the street. Physically handing out the CD will be “distributed”. But I would be surprised if you can write a CD with an out of order Index as you’ll need custom tools. I’d then be just as surprised if something will read it back \ rip it correctly.

1 Like

No, disc IDs are only calculated from CD TOCs

And I don’t think, the tracks can be out of sequence, because what’s stored on a CD is only a series of numbers (including start sectors) and the tracks will be ordered sequentially by the CD player/software player/ripping tool.

The weirdest CD I know is this one: https://musicbrainz.org/release/bed896f2-f474-34a9-ab97-bd39cb6558ac CD2, but it has end of session 1 before end of track 1 and you can’t read that from the TOC.

1 Like

7:56 (disc ID) - 5:24 (real duration) = 2:32

This looks exactly like the old FreeDB and libdiscid 2:32 bug.

Try with current Picard to see if you get a correct disc ID, now.

1 Like

I own this CD.

Session 1 ends at 5:24. Track 2 (a data track) starts at 7:56 in session 2. Track 3 is again an audio track, also in session 2.
(Most) CD players stop at 5:24 and a file ripped from track 1 has a length of 5:24.

I think https://bitcrush.io/laserwiki/images/b/b8/IEC_60908-1999.pdf section 26.2.3.4 (page 107) is the TOC structure in the Red Book. From these two paragraphs, it looks like tracks do have to be in order without gaps in track numbers:

The pointers are expressed in the order of minutes, seconds and frames, in the same way as
encoded in the subcode Q channel.

The PACK element number shall represent the track number of the track pointed to by the
pointer in Text1, Text2 and Text3. As such it shall be encoded in ascending order, incremented
by 4 with every next table of contents PACK.

Oh well.

2 Likes