diff --git a/doc/cd-text.texi b/doc/cd-text.texi new file mode 100644 index 00000000..9803b77d --- /dev/null +++ b/doc/cd-text.texi @@ -0,0 +1,809 @@ +\input texinfo @c -*-texinfo-*- + +@c @tex +@c \globaldefs=1 +@c \def\baselinefactor{1.5} +@c \setleading{\textleading} +@c @end tex + +@setfilename libcdio.info +@settitle CD TEXT Description + +@copying +@quotation +Permission is granted to copy, modify, and distribute it, as long as the +references to the original information sources are maintained. +There is NO WARRANTY, to the extent permitted by law. + +Copyright @copyright{} 2011-2012 Thomas Schmitt @email{scdbackup@@gmx.net}. +@end quotation +@end copying + +@paragraphindent 0 +@exampleindent 0 + +@titlepage +@title CD Text Description +@author Thomas Schmitt for libburnia-project.org +@vskip 2in plus 1filll +@insertcopying +@end titlepage + +@contents + +@ifnottex +@node Top +@top CD-Text Description + +@insertcopying + +@menu +* CD-TEXT from the User Viewpoint:: +* Content Specification:: +* CD-TEXT Packet Format:: +* Sony Text File Format (Input Sheet Version 0.7T):: +* CDRWIN Cue Sheet with CD Text:: +* References:: +@end menu +@end ifnottex + +@node CD-TEXT from the User Viewpoint +@chapter CD-TEXT from the User Viewpoint + +CD-TEXT records attributes of disc and tracks on audio CD. + +The attributes are grouped into blocks which represent particular languages. +Up to 8 blocks are possible. + +There are 13 defined attribute categories, which are called Pack Types and are +identified by a single-byte code: +@table @kbd +@item 0x80 +Title + +@item 0x81 +Performers +@item 0x82 +Songwriters +@item 0x83 +Composers +@item 0x84 +Arrangers +@item 0x85 +Message Area +@item 0x86 +Disc Identification (text-and-binary) +@item 0x87 +Genre Identification (text-and-binary) +@item 0x88 +Table of Contents (binary) +@item 0x89 +Second Table of Content information (binary; 0x8a to 0x8c are reserved.) +@item 0x8d +Closed Information +@item 0x8e +UPC/EAN code of the album and ISRC code of each track +@item 0x8f +binary: Size Information of the Block +@end table + +Categories @kbd{0x86}, @kbd{0x87}, @kbd{0x88}, @kbd{0x89}, @kbd{0x8d} +apply to the whole disc. + +Categories @kbd{0x80}, @kbd{0x81}, @kbd{0x82}, @kbd{0x83}, @kbd{0x84}, +@kbd{0x85}, and @kbd{0x8e} have to also be attributed to each +track if they are present for the whole disc. + +Category @kbd{0x8f} describes the overall content of a block and in part of all +other blocks. + +The total size of a block's attribute set is restricted by the fact that +it has to be stored in at most 253 records with 12 bytes of +payload. These records are called Text Packs. A shortcut for repeated +identical track texts is provided, so that a text that is identical to +the one of the previous track occupies only 2 or 4 bytes. + +@node Content Specification +@chapter Content Specificiation + +Pack types @kbd{0x80} to @kbd{0x85} and @kbd{0x8e} contain 0-terminated +cleartext. If double-byte characters are used, then two 0-bytes +terminate the cleartext. The meaning of @kbd{0x80} to @kbd{0x85} should +be clear by above list. They are encoded according to the Character Code +of their block. Either as ISO-8859-1 single byte characters, or as 7-bit +ASCII single byte characters, or as MS-JIS double byte characters. More +info on @kbd{0x8e} is given below. + +Pack type @kbd{0x86} (Disc Identification) is documented by Sony as +"Catalog Number: (use ASCII Code) Catalog Number of the album". So it is +not really binary but might be non-printable, and should contain only +bytes with bit7 = 0. + +Pack type 0x87 contains 2 binary bytes, followed by 0-terminated cleartext. +The two binary bytes form a big-endian index to the following list. + + +@table @kbd +@item 0x0000 +Not Used --- Sony prescribes to use this if no genre applies. +@item 0x0001 +Not Defined +@item 0x0002 +Adult Contemporary +@item 0x0003 +Alternative Rock +@item 0x0004 +Childrens Music +@item 0x0005 +Classical +@item 0x0006 +Contemporary Christian +@item 0x0007 +Country +@item 0x0008 +Dance +@item 0x0009 +Easy Listening +@item 0x000a +Erotic +@item 0x000b +Folk +@item 0x000c +Gospel +@item 0x000d +Hip Hop +@item 0x000e +Jazz +@item 0x000f +Latin +@item 0x0010 +Musical +@item 0x0011 +New Age +@item 0x0012 +Opera +@item 0x0013 +Operetta +@item 0x0014 +Pop Music +@item 0x0015 +Rap +@item 0x0016 +Reggae +@item 0x0017 +Rock Music +@item 0x0018 +Rhythm & Blues +@item 0x0019 +Sound Effects +@item 0x001a +Spoken Word +@item 0x001b +World Music +@end table + +Sony documents the cleartext part as "Genre information that would supplement +the Genre Code, such as ``USA Rock music in the 60s\'''. Always ASCII encoded. + +Pack type @kbd{0x88} records information from the CD's Table of Content, as of +READ PMA/TOC/ATIP Format 0010b (mmc5r03c.pdf, table 490 TOC Track Descriptor +Format, Q Sub-channel). +See below, Format of CD-TEXT packs, for more details about the content of +pack type @kbd{0x88}. + +Pack type @kbd{0x89} is yet quite unclear. It might be a representation +of Playback Skip Interval, Mode-5 Q sub-channel, POINT 01 to 40 +(mmc5r03.pdf 4.2.3.7.4). If so, then this seems not to apply to write +type SAO, because the CUE SHEET format offers no way to express Mode-5 +Q. See below, Format of CD-TEXT packs, for an example of this pack +type. + +Pack type @kbd{0x8d} is documented by Sony as "Closed Information: (use +8859-1 Code) Any information can be recorded on disc as +memorandum. Information in this field will not be read by CD TEXT +players available to the public." Always ISO-8859-1 encoded. + +Pack type 0x8e is documented by Sony as ``UPC/EAN Code'' (POS Code) of +the album. This field typically consists of 13 characters." Always +ASCII encoded. It applies to tracks as "ISRC code [which] typically +consists of 12 characters" and is always ISO-8859-1 encoded. MMC calls +these information entities Media Catalog Number and ISRC. The catalog +number consists of 13 decimal digits. ISRC consists of 12 characters: 2 +country code [0-9A-Z], 3 owner code [0-9A-Z], 2 year digits (00 to 99), +5 serial number digits (00000 to 99999). + +Pack type 0x8f summarizes the whole list of text packs of a block. +See the next section for details. + +@node CD-TEXT Packet Format +@chapter CD-TEXT Packet Format + +The attributes are represented on CD as Text Packs in the sub-channel of +the Lead-in of the disc. The file @file{doc/cookbook.txt} of the +libburnia distribution ddescribe write the readily formatted CD-TEXT +pack array to CD, and how to read CD-TEXT packs from CD. + +The format is explained in part in MMC-3 (mmc3r10g.pdf, Annex J)[2] and in +part by the documentation in Sony's cdtext.zip[3]. + +Each pack consists of a 4-byte header, 12 bytes of payload, and 2 bytes +of CRC. + +The first byte of each pack tells the pack type. See above for a list of +types. + +The second byte tells the track number to which the first text piece in +a pack is associated. Number 0 means the whole album. Higher numbers are +valid for types 0x80 to 0x85, and 0x8e. With these types, there should +be one text for the disc and one for each track. With types 0x88 and +0x89, the second byte bears a track number, too. With type 0x8f, the +second byte counts the record parts from 0 to 2. + +The third byte is a sequential counter. + +The fourth byte is the Block Number and Character Position Indicator. +It consists of three bit fields: + +@table @var +@item bits 0-3 +Character position. Either the number of characters which the current +text inherited from the previous pack, or 15 if the current +text started before the previous pack. +@item bits 4-6 +Block Number (groups text packs in language blocks) +@item bit 7 +Double Bytes Character Code (0= single byte characters) +@end table + +The 12 payload bytes contain pieces of 0-terminated texts or binary data. +A text may span over several packs. Unused characters in a pack are used for +the next text of the same pack type. If no text of the same type follows, +then the remaining text bytes are set to 0. + +The CRC algorithm uses divisor @kbd{0x11021}. The resulting 16-bit +residue of the polynomial division is zero extended in the upper bits +(xor-ed with @kbd{0xffff}) and written as big-endian number in bytes 16 +and 17 of the pack. + +The text packs are grouped in up to 8 blocks of at most 256 packs. Each block +is in charge for one language. Sequence numbers of each block are counted +separately. All packs of block 0 come before the packs of block 1. + +The limitation of block number and sequence numbers imply that there are at +most 2048 text packs possible. (READ TOC/PMS/ATIP could retrieve 3640 packs, +as it is limited to 64 kB - 2.) + +If a text of a track (pack types @kbd{0x80} to @kbd{0x85} and +@kbd{0x8e}) repeats identically for the next track, then it may be +represented by a TAB character (ASCII 9) for single byte texts, +resp. two TAB characters for double byte texts. (This should be used +because 256 * 12 bytes is few space for 99 tracks.) + +The two binary bytes of pack type @kbd{0x87} are written to the first +@kbd{0x87} pack of a block. They may or may not be repeated at the start +of the follow-up packs of type @kbd{0x87}. + +The first pack of type @kbd{0x88} in a block records in its payload bytes +as follows: +@table @var +@item 0 +PMIN of POINT A1 = First Track Number +@item 1 +PMIN of POINT A2 = Last Track Number +@item 2 +unknown, 0 in Sony example +@item 3 +PMIN of POINT A2 = Start position of Lead-Out +@item 4 +PSEC of POINT A2 = Start position of Lead-Out +@item 5 +PFRAME of POINT A2 = Start position of Lead-Out +@item 6 to 11 +unknown, 0 in Sony example +@end table + +The following packs record PMIN, PSEC, PFRAME of the POINTs between the +lowest track number (min 01h) and the highest track number (max 63h). +The payload of the last pack is padded by 0s. + +The Sony .TOC example: +@smallexample + A0 01 + A1 14 + A2 63:02:18 + 01 00:02:00 + 02 04:11:25 + 03 08:02:50 + 04 11:47:62 + ... + 13 53:24:25 + 14 57:03:25 +@end smallexample +yields: +@smallexample + 88 00 23 00 01 0e 00 3f 02 12 00 00 00 00 00 00 12 00 + 88 01 24 00 00 02 00 04 0b 19 08 02 32 0b 2f 3e 67 2d + ... + 88 0d 27 00 35 18 19 39 03 19 00 00 00 00 00 00 ea af +@end smallexample + +Pack type @kbd{0x89} is yet quite unclear. Especially what the information shall +mean to the user of the CD. The time points in the Sony example are in the +time range of the tracks numbers that are given before the time points: + +@smallexample + 01 02:41:48 01 02:52:58 + 06 23:14:25 06 23:29:60 + 07 28:30:39 07 28:42:30 + 13 55:13:26 13 55:31:50 +@end smallexample +nyields: +@smallexample + 89 01 28 00 01 04 00 00 00 00 02 29 30 02 34 3a f3 0c + 89 06 29 00 02 04 00 00 00 00 17 0e 19 17 1d 3c 73 92 + 89 07 2a 00 03 04 00 00 00 00 1c 1e 27 1c 2a 1e 72 20 + 89 0d 2b 00 04 04 00 00 00 00 37 0d 1a 37 1f 32 0b 62 +@end smallexample + +The track numbers are stored in the track number byte of the packs. The +two time points are stored in byte 6 to 11 of the payload. Byte 0 of the +payload seems to be a sequential counter. Byte 1 always 4? Byte 2 to 5 +always 0? + +Pack type @kbd{0x8f} summarizes the whole list of text packs of a block. +So there is one group of three 0x8f packs per block. +Nevertheless each 0x8f group tells the highest sequence number and the +language code of all blocks. + +The payload bytes of three @kbd{0x8f} packs form a 36-byte record. +The track number bytes of the three packs have the values 0, 1, 2. + +@smallexample + Byte : + 0 : Character code for pack types 0x80 to 0x85: + 0x00 = ISO-8859-1 + 0x01 = 7 bit ASCII + 0x80 = MS-JIS (japanese Kanji, double byte characters) + 1 : Number of first track + 2 : Number of last track + 3 : libcdio source states: "cd-text information copyright byte" + Probably 3 means "copyrighted", 0 means "not copyrighted". + 4 - 19 : Pack count of the various types 0x80 to 0x8f. + Byte number N tells the count of packs of type 0x80 + (N - 4). + I.e. the first byte in this field of 16 counts packs of type 0x80. + 20 - 27 : Highest sequence byte number of blocks 0 to 7. + 28 - 36 : Language code for blocks 0 to 7 (tech3264.pdf appendix 3) +@end smallexample + +@table @kbd +@item 0x00 +Unknown +@item 0x01 +Albanian +@item 0x02 +Breton +@item 0x03 +Catalan +@item 0x04 +Croatian +@item 0x05 +Welsh +@item 0x06 +Czech +@item 0x07 +Danish +@item 0x08 +German +@item 0x09 +English +@item 0x0a +Spanish +@item 0x0b +Esperanto +@item 0x0c +Estonian +@item 0x0d +Basque +@item 0x0e +Faroese +@item 0x0f +French +@item 0x10 +Frisian +@item 0x11 +Irish +@item 0x12 +Gaelic +@item 0x13 +Galician +@item 0x14 +Icelandic +@item 0x15 +Italian +@item 0x16 +Lappish +@item 0x17 +Latin +@item 0x18 +Latvian +@item 0x19 +Luxembourgian +@item 0x1a +Lithuanian +@item 0x1b +Hungarian +@item 0x1c +Maltese +@item 0x1d +Dutch +@item 0x1e +Norwegian +@item 0x1f +Occitan +@item 0x20 +Polish +@item 0x21 +Portuguese +@item 0x22 +Romanian +@item 0x23 +Romansh +@item 0x24 +Serbian +@item 0x25 +Slovak +@item 0x26 +Slovenian +@item 0x27 +Finnish +@item 0x28 +Swedish +@item 0x29 +Turkish +@item 0x2a +Flemish +@item 0x2b +Wallon +@item 0x45 +Zulu +@item 0x46 +Vietnamese +@item 0x47 +Uzbek +@item 0x48 +Urdu +@item 0x49 +Ukrainian +@item 0x4a +Thai +@item 0x4b +Telugu +@item 0x4c +Tatar +@item 0x4d +Tamil +@item 0x4e +Tadzhik +@item 0x4f +Swahili +@item 0x50 +Sranan Tongo +@item 0x51 +Somali +@item 0x52 +Sinhalese +@item 0x53 +Shona +@item 0x54 +Serbo-croat +@item 0x55 +Ruthenian +@item 0x56 +Russian +@item 0x57 +Quechua +@item 0x58 +Pushtu +@item 0x59 +Punjabi +@item 0x5a +Persian +@item 0x5b +Papamiento +@item 0x5c +Oriya +@item 0x5d +Nepali +@item 0x5e +Ndebele +@item 0x5f +Marathi +@item 0x60 +Moldavian +@item 0x61 +Malaysian +@item 0x62 +Malagasay +@item 0x63 +Macedonian +@item 0x64 +Laotian +@item 0x65 +Korean +@item 0x66 +Khmer +@item 0x67 +Kazakh +@item 0x68 +Kannada +@item 0x69 +Japanese +@item 0x6a +Indonesian +@item 0x6b +Hindi +@item 0x6c +Hebrew +@item 0x6d +Hausa +@item 0x6e +Gurani +@item 0x6f +Gujurati +@item 0x70 +Greek +@item 0x71 +Georgian +@item 0x72 +Fulani +@item 0x73 +Dari +@item 0x74 +Churash +@item 0x75 +Chinese +@item 0x76 +Burmese +@item 0x77 +Bulgarian +@item 0x78 +Bengali +@item 0x79 +Bielorussian +@item 0x7a +Bambora +@item 0x7b +Azerbaijani +@item 0x7c +Assamese +@item 0x7d +Armenian +@item 0x7e +Arabic +@item 0x7f +Amharic +@end table +Note: Not all of thes above codes have ever been seen with CD-TEXT. + +For example these three packs +@smallexample + 42 : 8f 00 2a 00 01 01 03 00 06 05 04 05 07 06 01 02 48 65 + 43 : 8f 01 2b 00 00 00 00 00 00 00 06 03 2c 00 00 00 c0 20 + 44 : 8f 02 2c 00 00 00 00 00 09 00 00 00 00 00 00 00 11 45 +@end smallexample + +decode to: + +@smallexample +Byte :Value Meaning + 0 : 01 = ASCII 7-bit + 1 : 01 = first track is 1 + 2 : 03 = last track is 3 + 3 : 00 = copyright (0 = public domain, 3 = copyrighted ?) + 4 : 06 = 6 packs of type 0x80 + 5 : 05 = 5 packs of type 0x81 + 6 : 04 = 4 packs of type 0x82 + 7 : 05 = 5 packs of type 0x83 + 8 : 07 = 7 packs of type 0x84 + 9 : 06 = 6 packs of type 0x85 + 10 : 01 = 1 pack of type 0x86 + 11 : 02 = 2 packs of type 0x87 + 12 : 00 = 0 packs of type 0x88 + 13 : 00 = 0 packs of type 0x89 + 14 : 00 00 00 00 = 0 packs of types 0x8a to 0x8d + 18 : 06 = 6 packs of type 0x8e + 19 : 03 = 3 packs of type 0x8f + 20 : 2c = last sequence for block 0 + This matches the sequence number of the last text pack (0x2c = 44) + 21 : 00 00 00 00 00 00 00 = last sequence numbers for block 1..7 (none) + 28 : 09 = language code for block 0: English + 29 : 00 00 00 00 00 00 00 = language codes for block 1..7 (none) +@end smallexample + +@node Sony Text File Format (Input Sheet Version 0.7T) +@chapter Sony Text File Format (Input Sheet Version 0.7T) + +This text file format provides comprehensive means to define the text +attributes of session and tracks for a single block. More than one +such file has to be read to form an attribute set with multiple blocks. + +The information is given by text lines of the following form: + purpose specifier [whitespace] = [whitespace] content text +[whitespace] is zero or more ASCII 32 (space) or ASCII 9 (tab) characters. +The purpose specifier tells the meaning of the content text. +Empty content text does not cause a CD-TEXT attribute to be attached. + +The following purpose specifiers apply to the session as a whole: + +@smallexample + Specifier = Meaning + + Text Code = Character code for pack type 0x8f + "ASCII", "8859" + Language Code = One of the language names for pack type 0x8f + Album Title = Content of pack type 0x80 + Artist Name = Content of pack type 0x81 + Songwriter = Content of pack type 0x82 + Composer = Content of pack type 0x83 + Arranger = Content of pack type 0x84 + Album Message = Content of pack type 0x85 + Catalog Number = Content of pack type 0x86 + Genre Code = One of the genre names for pack type 0x87 + Genre Information = Cleartext part of pack type 0x87 + Closed Information = Content of pack type 0x8d + UPC / EAN = Content of pack type 0x8e + Text Data Copy Protection = Copyright value for pack type 0x8f + "ON" = 0x03, "OFF" = 0x00 + First Track Number = The lowest track number used in the file + Last Track Number = The highest track number used in the file +@end smallexample + +The following purpose specifiers apply to particular tracks: +@smallexample + Track NN Title = Content of pack type 0x80 + Track NN Artist = Content of pack type 0x81 + Track NN Songwriter = Content of pack type 0x82 + Track NN Composer = Content of pack type 0x83 + Track NN Arranger = Content of pack type 0x84 + Track NN Message = Content of pack type 0x85 + ISRC NN = Content of pack type 0x8e +@end smallexample + +The following purpose specifiers have no effect on CD-TEXT: +@smallexample + Remarks = Comments with no influence on CD-TEXT + Disc Information NN = Supplementary information for use by record companies. + ISO-8859-1 encoded. NN ranges from 01 to 04. + Input Sheet Version = "0.7T" +@end smallexample + + +The following purpose specifiers accept byte values of the form 0xXY. + Text Code , Language Code , Genre Code , Text Data Copy Protection +E.g. to indicate MS-JIS character code (of which the exact name is unknown): + Text Code = 0x80 +Genre Code is settable by 0xXY or 0xXYZT or 0xXY 0xZT. + Genre Code = 0x001b + +Purpose specifiers which have the meaning "Content of pack type 0xXY" +may be replaced by the pack type codes. E.g.: + 0x80 = Session content of pack type 0x80 + Track 02 0x80 = Track content of pack type 0x80 for track 2. +Applicable are pack types 0x80 to 0x86, 0x8d, 0x8e. + +Text Code may be specified only once. It gets speficied to "ISO-8850-1" +automatically as soon as content is defined which depends on the text +encoding of the block. I.e with pack types 0x80 to 0x85. + +If a track attribute is set, but the corresponding session attribute is not +defined or defined with empty text, then the session attribute gets attached +as empty test. (Normally empty content is ignored.) + +Example cdrskin run with three tracks: + +@smallexample + $ cdrskin dev=/dev/sr0 -v input_sheet_v07t=NIGHTCATS.TXT \ + -audio track_source_1 track_source_2 track_source_3 +@end smallexample + +The contexts of file @file{NIGHTCATS.TXT} used above is: +@smallexample +Input Sheet Version = 0.7T +Text Code = 8859 +Language Code = English +Album Title = Joyful Nights +Artist Name = United Cat Orchestra +Songwriter = Various Songwriters +Composer = Various Composers +Arranger = Tom Cat +Album Message = For all our fans +Catalog Number = 1234567890 +Genre Code = Classical +Genre Information = Feline classic music +Closed Information = This is not to be shown by CD players +UPC / EAN = 1234567890123 +Text Data Copy Protection = OFF +First Track Number = 1 +Last Track Number = 3 +Track 01 Title = Song of Joy +Track 01 Artist = Felix and The Purrs +Track 01 Songwriter = Friedrich Schiller +Track 01 Composer = Ludwig van Beethoven +Track 01 Arranger = Tom Cat +Track 01 Message = Fritz and Louie once were punks +ISRC 01 = XYBLG1101234 +Track 02 Title = Humpty Dumpty +Track 02 Artist = Catwalk Beauties +Track 02 Songwriter = Mother Goose +Track 02 Composer = unknown +Track 02 Arranger = Tom Cat +Track 02 Message = Pluck the goose +ISRC 02 = XYBLG1100005 +Track 03 Title = Mee Owwww +Track 03 Artist = Mia Kitten +Track 03 Songwriter = Mia Kitten +Track 03 Composer = Mia Kitten +Track 03 Arranger = Mia Kitten +Track 03 Message = +ISRC 03 = XYBLG1100006 +@end smallexample + +@node CDRWIN Cue Sheet with CD Text +@chapter CDRWIN Cue Sheet with CD Text + +A CDRWIN cue sheet file defines the track data source (@kbd{FILE}), +various text attributes (@kbd{CATALOG}, @kbd{TITLE}, @kbd{PERFORMER}, +@kbd{SONGWRITER}, @kbd{ISRC}), track block types (@kbd{TRACK}), track +start addresses (@kbd{INDEX}). The rules for CDRWIN cue sheet files are +described at @url{http://digitalx.org/cue-sheet/syntax/} [4]. + +There are three more text attributes mentioned in the cdrecord manual +page for defining the corresponding CD-TEXT attributes: @kbd{ARRANGER}, +@kbd{COMPOSER}, @kbd{MESSAGE}. + +An Example of a CDRWIN cue sheet file: +@smallexample +CATALOG 1234567890123 +FILE "cdtext.bin" BINARY +TITLE "Joyful Nights" + TRACK 01 AUDIO + FLAGS DCP + TITLE "Song of Joy" + PERFORMER "Felix and The Purrs" + SONGWRITER "Friedrich Schiller" + ISRC XYBLG1101234 + INDEX 01 00:00:00 + TRACK 02 AUDIO + FLAGS DCP + TITLE "Humpty Dumpty" + PERFORMER "Catwalk Beauties" + SONGWRITER "Mother Goose" + ISRC XYBLG1100005 + INDEX 01 08:20:12 + TRACK 03 AUDIO + FLAGS DCP + TITLE "Mee Owwww" + PERFORMER "Mia Kitten" + SONGWRITER "Mia Kitten" + ISRC XYBLG1100006 + INDEX 01 13:20:33 +@end smallexample + +@node References +@chapter References + +@enumerate +@item Correspondence with Leon Merten L\"ohse +in @email{libcdio-devel@@gnu.org} circa 2011 +@item @url{http://www.t10.org/cgi-bin/ac.pl?t=f&f=mmc3r10g.pdf} +@item @url{http://www.sonydadc.com/file/} +by docs and results of cdtext.zip from +@item http://digitalx.org/cue-sheet/syntax +@item source code for libcdio @url{http://www.gnu.org/s/libcdio} +@item source code fro cdrecord @url{ftp://ftp.berlios.de/pub/cdrecord/alpha} +@item cdrecord manual page.1 @url{http://cdrecord.berlios.de/private/man/cdrecord/cdrecord.1.html} +@item @url{http://tech.ebu.ch/docs/tech/tech3264.pdf} CD Text Language codes +@item @url{http://helpdesk.audiofile-engineering.com/index.php?pg=kb.page&id=123} Genre codes +@end enumerate + +@bye