Was sind Indexmarken?
Ein wenig genutztes und quasi in Vergessenheit geratenes Feature der ganz normalen Audio-CD nach Red-Book-Standard ist, dass sich die einzelnen Tracks noch mal mit bis zu 99 Index Points pro Track unterteilen lassen. So können z.B. Teile eines größeren Stücks markiert werden wie z.B. die einzelnen Sätze einer Sinfonie oder Sonate. In der Praxis hat sich das so allerdings nicht durchgesetzt und bei nahezu allen mir bekannten Klassik-Alben sind meistens die Sätze jeweils in eigenen Tracks. Es gibt allerdings Ausnahmen.
Eine Beispiel für eine CD, die für meinen Geschmack viel zu viel Gebrauch von Index Points macht, ist „Twenty Pieces From The Notebook Of Anna Magdalena Bach / Twelve Little Preludes / Six Little Preludes / Italian Concerto In F Major“ von João Carlos Martins. Die hat nämlich tatsächlich nur 4 Tracks, wobei der erste mit 20 Indexmarken unterteilt ist, der zweite mit 12 usw. Wenn man ein Stück gezielt anwählen will, ist das recht unpraktisch, da sich selbst bei Playern, die Indexmarken zumindest unterstützen, diese nicht zwingend auch direkt anspringen lassen.
Eine der am weitesten verbreiteten CD mit Indexmarken dürfte die Misplaced Childhood von Marillion sein. Die einzelnen Teile von Bitter Suite, Heart of Lothian und Wild Curve sind mit Indexmarken gekennzeichnet. Jedenfalls ist das so im Remaster von 1998, aber nicht mehr in der Ausgabe von 2017, da hat man sie weggelassen. Zu diesem Zeitpunkt gab es sowieso schon kaum noch Player, die sie angezeigt hätten.
Ein weiteres Beispiel für CDs, die mit Indexmarken geradezu gepflastert sind, sind die Ausgaben der Alben von Wendy Carlos, die bei dem inzwischen nicht mehr existierenden Label East Side Digital erschienen sind.
Wie abspielen?
Es handelt sich bei den CDs mit Indexmarken um ganz normale CDs nach dem Red-Book-Standard, die sich in jedem CD-Player, modernen Blu-ray- bzw. Multi-Format-Player oder Computer mit optischem Laufwerk abspielen lassen. Sofern der Player bzw. die Software keine Index Points unterstützen, wird man davon einfach nichts sehen.
CD-Player, die Indexmarken unterstützen, zeigen die normalerweise zusätzlich zum Track an, manchmal in kleineren Ziffern. Player, die so ungefähr ab dem Jahr 2000 erschienen sind, oder auch moderne Multi-Player, zeigen meistens keine Indexmarken mehr an. Ein Philips CD 713 aus dem Jahr 1998, der hier bei mir noch steht, hat das Feature schon nicht mehr; mein erster vernünftiger Player von damals™, ein Technics SL-PG 200 A von 1991, hatte es noch. Wer mag, kann sich ja mal das Foto auf der verlinkten Webseite ansehen. Die kleine hochgestellte „1“ auf dem Display ist der Index.
Wie migrieren?
Auch hier gilt, dass man eigentlich nichts weiter beachten muss, und die Index Points beim Rippen einfach ignoriert werden. Aber gerade beim Rippen einer CD wie dem oben erwähnten Martins/Bach-Album wäre es natürlich sehr hilfreich, hinterher nicht nur jeden Track in einem File zu haben, sondern vielmehr jeden Abschnitt zwischen zwei Indexmarken. Und da wird es etwas komplizierter.
Mir ist keine Software bekannt, die sich von vornherein so einstellen ließe, dass die CD nach Indexmarken aufgetrennt wird. Allerdings unterstützen viele Programme Cue-Sheets. Das sind Textdateien, die das Inhaltsverzeichnis (TOC, Table of Contents) der CD abbilden. Diese werden üblicherweise zusammen mit einer einzigen, großen Audiodatei, die die ganze CD enthält, verwendet. Cue-Sheets können Indexmarken enthalten, die aber wiederum nicht von jeder Software verarbeitet werden können. Software, die Cue-Sheets verarbeiten kann, ist verbreitet (z.B. die bekannten Player VLC und foobar2000), aber mir ist keine Player-Software bekannt, die auch mit Indexmarkern in Cue-Sheets etwas anfangen kann.
Auch von den Rippern, die Cue-Sheets erstellen können, verarbeiten längst nicht alle auch Indexmarken. Eine CD-Ripping-Software, die die Indexmarken von CDs korrekt extrahiert und in Cue-Sheets schreibt, ist Exact Audio Copy (EAC) für Windows (im Gegensatz zum sonst von mir bevorzugten XLD für Mac, was zwar Cue-Sheets kann, aber keine Indexmarken).
Kurzer Einschub: Zu Rip-Methoden und warum EAC und XLD ganz gut sind, kommt in Teil 3 noch was.
Zur anschließenden Weiterverarbeitung kann man jetzt aber einfach das Cue-Sheet (das ja zunächst mal nur eine ganz normale Textdatei ist) so umschreiben, dass aus Indexmarkern Tracks werden.
Wenn man ein wenig fit an der Kommandozeile ist, so erledigt folgendes kleine Python-Skript diese Aufgabe (klicken zum Aufklappen):
# Take a cue sheet from standard input and convert it so that every index marker greater than one
# becomes its own track. The output is written to standard output.
import sys
import re
current_track = None
current_title = None
current_performer = None
current_index = None
track_pattern = re.compile(r"\s*TRACK (\d{2}) AUDIO")
title_pattern = re.compile(r"\s*TITLE\s+\"(.*?)\"$")
performer_pattern = re.compile(r"\s*PERFORMER\s+\"(.*?)\"$")
index_pattern = re.compile(r"\s*INDEX\s+(\d{2})\s+(\d{2}):(\d{2}):(\d{2})")
for line in sys.stdin:
track_match = track_pattern.match(line.strip())
title_match = title_pattern.match(line.strip())
performer_match = performer_pattern.match(line.strip())
index_match = index_pattern.match(line.strip())
if track_match:
if current_track is None:
current_track = int(track_match.group(1))
else:
current_track += 1
print(f" TRACK {current_track:02d} AUDIO")
elif title_match:
current_title = title_match.group(1)
print(f" TITLE \"{current_title}\"")
elif performer_match:
current_performer = performer_match.group(1)
print(f" PERFORMER \"{current_performer}\"")
elif index_match:
index = int(index_match.group(1))
if index > 1:
mins = index_match.group(2)
sec = index_match.group(3)
frame = index_match.group(4)
current_track += 1
print(f" TRACK {current_track:02d} AUDIO")
print(f" TITLE \"{current_title} {index:02d}\"")
print(f" PERFORMER \"{current_performer}\"")
print(f" INDEX 01 {mins}:{sec}:{frame}")
else:
print(line, end="")
else:
print(line, end="")
Tools, die eine große Audio-Datei mit einem Cue-Sheet in einzelne Tracks aufteilt, gibt es viele. Das ist jetzt also kein Problem mehr. Speziell für den Audio-Editor Audacity, der auch zum Auftrennen benutzt werden kann und ein eigenes Textformat für Labels benutzt, habe ich noch folgendes Skript (klicken zum Aufklappen):
# Take a cue sheet from standard input and convert it to Audacity format that can be imported as a label track.
# Labels are placed at every index marker greater than zero.
import sys
import re
current_track = None
current_title = None
current_performer = None
current_index = None
track_pattern = re.compile(r"\s*TRACK (\d{2}) AUDIO")
title_pattern = re.compile(r"\s*TITLE\s+\"(.*?)\"$")
performer_pattern = re.compile(r"\s*PERFORMER\s+\"(.*?)\"$")
index_pattern = re.compile(r"\s*INDEX\s+(\d{2})\s+(\d{2}):(\d{2}):(\d{2})")
for line in sys.stdin:
track_match = track_pattern.match(line.strip())
title_match = title_pattern.match(line.strip())
performer_match = performer_pattern.match(line.strip())
index_match = index_pattern.match(line.strip())
if track_match:
if current_track is None:
current_track = int(track_match.group(1))
else:
current_track += 1
elif title_match:
current_title = title_match.group(1)
elif performer_match:
current_performer = performer_match.group(1)
elif index_match:
index = int(index_match.group(1))
if index > 0:
mins = int(index_match.group(2))
sec = int(index_match.group(3))
frame = int(index_match.group(4))
timestamp = mins * 60.0 + sec + frame / 75.0
print(f"{timestamp:.6f}\t{timestamp:.6f}\t{current_title}")
current_track += 1