Home | Kontakt | Sitemap

Start

Über mich

Kontakt

Sitemap

Lizenz

Anleitungen

DVD, miniDVD

SVCD

Audio, Audio-CD (CD-DA)

AVI

Software

Von Freunden und Bekannten

Eigene Programme

Programmierung

Delphi

Lazarus

Delphi/Lazarus

Projekte

MPEG-1/2 Video

Optische Laufwerke

Audio-CD (CDDA)

Raspberry Pi Dashcam

Verschiedenes

MPEG 2 Schnitt

Project X

VCD Easy

Hardlinks

Windows

Links

Software

Projekte | Audio-CD - CD Text

CD Text

  • Beschreibung
  • Blöcke
  • Das CD-Text Pack Data Format
  • Der Header
  • Die Packtypen
  • Ein Beispiel
  • Demo
  • Änderungen
  • Beschreibung

    Auf einigen Audio-CDs ist im Subcode CD Text enthalten. Meist verrät er kaum mehr als die Interpreten und die Namen des Albums und der Tracks. Wie der CD-Text gelesen wird, wurde im Projekt Optische Laufwerke im Kapitel Medieninformationen beschreiben:

    Hier wird er beschrieben und aufbereitet.

    Blöcke

    Der CD Text ist in Blöcken gruppiert. Es sind acht Blöcke möglich. Jedem Block ist ein Sprachcode zugeordnet. Die Blöcke werden in 18 Byte langen Paketen gespeichert.

    Das CD-Text Pack Data Format

    Das Paket besteht aus dem Header, den Daten und den Fehlerkorrekturdaten.

    012345678 91011121314151617
    HeaderDaten (Text oder binär)CRC

    Jedes Paket enthält in den ersten vier Bytes einen Header.

    0123
    76543210
    PacktypTracknummerPacknummerDBCCBlocknummerZeichenposition

    Der Packtyp gibt die Art des Inhaltes an. Die Tracknummer bezeichnet den ersten Track auf welchen sich die Daten beziehen. Die Daten können sich auf mehrere Tracks beziehen. Die Packnummer ist der Zähler für das aktuelle Pack. Alle Packs sind unabhängig vom Packtype durchnummeriert. Jeder Block wird einzeln gezählt. DBCC ist das Flag für Doppelbytezeichen und gibt an, ob die in den Daten enthaltenen Zeichen aus einem oder zwei Byte bestehen (Ich habe bisher keinen CD-Text mit Doppelbytezeichen gehabt). Die Blocknummer bezeichnet den aktuellen Block. Die Zeichenposition gibt an, wieviele Zeichen bereits im vorigen Pack bzw. in den vorigen Packs enthalten waren. Wegen der vier Bit werden Positionen über 15 ebenfalls mit 15 angegeben.

    Die Packtypen

    Die Packtypen sind:

    WertBeschreibungInhalt
    $80Liste mit dem Titel des Albums (ID2 = $00) und den Titeln der Tracks (ID2 = %01...$63).Text
    $81Liste mit den Namen der Interpreten.Text
    $82Name des Texter (Songwriter)Text
    $83Name des Komponisten (Composer)Text
    $84Name des Arrangeurs (Arranger)Text
    $85Nachricht vom Inhalteanbieter und/oder KünstlerText
    $86DiscidentifikationinformationBinär
    $87Genreidentifkation und GenreinformationBinär, Text
    $88Table of Content Information (Erster und letzter Track sowie Startzeiten von Leadout und Tracks)Binär
    $89Zweite Table of Content Information (Skipzeiten)Binär
    $8AReserviert---
    $8BReserviert---
    $8CReserviert---
    $8DNur für den Inhalteanbieter reserviert.Text
    $8EListe mit UPC/EAN Code des Albums und eventuell den ISRC Codes aller Tracks.Text
    $8FGrößeninformation über die Blöcke.Binär

    Die Packtypen $80 bis $85 und $8E enthalten Text, die Packtypen $86, $87 und $8F Daten.

    Die Genreinformationen des Packtypes $87 enthalten eine der folgenden IDs sowie einen nullterminierten String.

    $0000Ungenutzt$0001Nicht definiert
    $0002Adult Contemporary$0003Alternative Rock
    $0004Childrens' Music$0005Classical
    $0006Contemporary Christian$0007Country
    $0008Dance$0009Easy Listening
    $000AErotic$000BFolk
    $000CGospel$000DHip Hop
    $000EJazz$000FLatin
    $0010Musical$0011New Age
    $0012Opera$0013Operetta
    $0014Pop Music$0015Rap
    $0016Reggae$0017Rock Music
    $0018Rhythm & Blues$0019Sound Effects
    $001ASpoken Word$001BWorld Music

    Der Packtyp $BF besteht aus drei Packs, welche mit den Tracknummern 0, 1 und 2 gekennzeichnet sind. Die Packs sind für alle Blöcke gleich und stellen eine Zusammenfassung dar:

    TNByteBeispielBedeutung
    $000$00Zeichencode für die Packtypen von $80 bis $85
    $00: ISO-8859-1
    $01: 7bit ASCII
    $80: MS-JIS (japanese Kanji, double byte characters)
    1$01Die Nummer des ersen Tracks.
    2$0BDie Nummer des letzten Tracks.
    3$03Copyright Flags
    0: Nicht geschützt. - 3: Geschützt.
    4$0CAnzahl der Packs vom Packtype $80 - Albumname.
    5$02Anzahl der Packs vom Packtype $81 - Performer.
    6$00Anzahl der Packs vom Packtype $82.
    7$00Anzahl der Packs vom Packtype $83.
    8$00Anzahl der Packs vom Packtype $84.
    9$00Anzahl der Packs vom Packtype $85.
    10$01Anzahl der Packs vom Packtype $86.
    11$00Anzahl der Packs vom Packtype $87.
    $0112$00Anzahl der Packs vom Packtype $88.
    13$00Anzahl der Packs vom Packtype $89.
    14$00Anzahl der Packs vom Packtype $8A.
    15$00Anzahl der Packs vom Packtype $8B.
    16$00Anzahl der Packs vom Packtype $8C.
    17$00Anzahl der Packs vom Packtype $8D.
    18$00Anzahl der Packs vom Packtype $8E.
    19$03Anzahl der Packs vom Packtype $8F - Size Packs.
    20$11Letzte Packnummer im Block für die Blöcke 0 bis 7.
    21$00
    22$00
    23$00
    $0224$00
    25$00
    26$00
    27$00
    28$00Sprachcode für die Blöcke 0 bis 7.
    $00 UNKNOWN$01 ALBANIAN$02 BRETON$03 CATALAN
    $04 CROATIAN$05 WELSH$06 CZECH$07 DANISH
    $08 GERMAN$09 ENGLISH$0A SPANISH$0B ESPERANTO
    $0F FRENCH$0C ESTONIAN$0D BASQUE$0E FAROESE
    $10 FRISIAN$11 IRISH$12 GAELIC$13 GALICIAN
    $14 ICELANDIC$15 ITALIAN$16 LAPPISH$17 LATIN
    $18 LATVIAN$19 LUXEMBOURGIAN$1A LITHUANIAN$1B HUNGARIAN
    $1C MALTESE$1D DUTCH$1E NORWEGIAN$1F OCCITAN
    $20 POLISH$21 PORTUGUESE$22 ROMANIAN$23 ROMANSH
    $24 SERBIAN$25 SLOVAK$26 SLOVENIAN$27 FINNISH
    $28 SWEDISH$29 TURKISH$2A FLEMISH$2B WALLON
    $45 ZULU$46 VIETNAMESE$47 UZBEK$48 URDU
    $49 UKRAINIAN$4A THAI$4B TELUGU$4C TATAR
    $4D TAMIL$4E TADZHIK$4F SWAHILI$50 SRANANTONGO
    $51 SOMALI$52 SINHALESE$53 SHONA$54 SERBO_CROAT
    $55 RUTHENIAN$56 RUSSIAN$57 QUECHUA$58 PUSHTU
    $59 PUNJABI$5A PERSIAN$5B PAPAMIENTO$5C ORIYA
    $5D NEPALI$5E NDEBELE$5F MARATHI$60 MOLDAVIAN
    $61 MALAYSIAN$62 MALAGASAY$63 MACEDONIAN$64 LAOTIAN
    $65 KOREAN$66 KHMER$67 KAZAKH$68 KANNADA
    $69 JAPANESE$6A INDONESIAN$6B HINDI$6C HEBREW
    $6D HAUSA$6E GURANI$6F GUJURATI$70 GREEK
    $71 GEORGIAN$72 FULANI$73 DARI$74 CHURASH
    $75 CHINESE$76 BURMESE$77 BULGARIAN$78 BENGALI
    $79 BIELORUSSIAN$7A BAMBORA$7B AZERBAIJANI$7C ASSAMESE
    $7D ARMENIAN$7E ARABIC$7F AMHARIC
    29$00Unbenutzt.
    30$00
    31$00
    32$00
    33$00
    34$00
    35$00

    Das Beispiel

    Hier der CD-Text der verwendeten BeispielCD:

    01234567891011121314151617
    $80$00$00$00Mia.   Willk$DE$23
    $80$00$01$0Commen im Clu$EA$0F
    $80$00$02$0Fb#0Kapitän#0Me$8A$7A
    $80$02$03$02 in Freund#0Ma$26$C4
    $80$03$04$02usen#0Du#0100 $8C$3C
    $80$05$05$04Prozent#0Magi$7A$A7
    $80$06$06$04sch#0Deinetwe$87$15
    $80$07$07$08gen#0Verfolge$0C$B3
    $80$08$08$08r#0Glücksster$BE$52
    $80$09$09$0Ar#0Halt Still$9E$D3
    $80$0A$0A$0A#0D>ie Aussich$71$ED
    $80$0B$0B$0Bt#0#0#0#0#0#0#0#0#0#0#0$18$BD
    $81$00$0C$00Mia.#0#0#0#0#0#0#0#0$E5$9C
    $81$08$0D$00#0#0#0#0#0#0#0#0#0#0#0#0$15$40
    $86$00$0E$00383836393733323132333200$C1$69
    $8F$00$0F$0000010B030C02000000000100$59$15
    $8F$01$10$00000000000000000311000000$65$5E
    $8F$02$11$00000000000000000000000000$7E$DB

    Da der CD-Text vermutlich in der Regel nur aus einem Block besteht, könnte man sofort mit der Auswertung von Titeln (Packtyp $80) und Interpreten (Packtyp $81) beginnen.

    Der Packtyp $80 belegt im Beispiel die Packs $00 bis $0B. Die Tracknummer 0 steht dabei für das Album. Das vierte Byte in Pack $01 gibt an das bereits 12 Zeichen des Albumnamens in den vorigen Packs enthalten sind. In Pack $02 ist der Wert 15 ($0F). Der Albumname ist zwar bereits länger jedoch lassen sich mit vier Bit keine größeren Zahlen darstellen. Die Namen sind mit dem Zeichen #0 voneinander getrennt. In Pack $02 sind zwei Trennzeichen enthalten. Dies bedeutet, dass in dem Pack der Albumname endet, der vollständige Name des ersten Tracks und der Anfang des Namens des zweiten Tracks enthalten sind. Deshalb ist in Pack $03 die Tracknummer bereits mit $02 angegeben und das vom Name bereits zwei Zeichen gelesen wurden.

    Der Packtyp $81 belegt die Packs $0C und $0D. Hier müssen ebenso viele Tracks angegeben werden, wie bei den Titeln zuvor. Der erste Pack bezieht sich wieder auf den Track 0 und somit auf das Album. Da alle Titel vom selben Interpreten stammen, sind für die folgenden Tracks nur leere Eintragungen vorhanden. Es ist auch möglich, dass der Name wiederholt wird oder Tabulatorzeichen enthalten sind.

    Mia.   Willkommen im Club#0
    Kapitän#0
    Mein Freund#0
    Mausen#0
    Du#0
    100 Prozent#0
    Magisch#0
    Deinetwegen#0
    Verfolger#0
    Glücksstern#0
    Halt Still#0
    Die Aussicht#0
    #0
    
    Mia.#0
    #0
    #0
    #0
    #0
    #0
    #0
    #0
    #0
    #0
    #0
    #0
    #0
    

     

    Demo

    Hier eine Demo, welche den CD-Text auswertet:

    CD Text (pcddaCDText.7z - 239 kb) MD5 (1 kb).
    Compiler: Delphi 7
    Stand: 4. August 2018

    Änderungen an der Demo

    04.08.2018Änderung: Klasse entschlackt.
    Hinzu: Link zum Kapitel.
    21.07.2018Änderung: Neue Demo.
    26.07.2015Hinzu: Splash Screen.
    Änderung: Optische Details.
    Änderung: Etwas Überhang entfernt.

    Aufbau > CD Text > CDDB