rox

Cue-Sheets, und Rips, die sich wie Alben verhalten

Wenn du CDs gerippt hast, bevor das Aufteilen Standard war, liegt ein Teil deiner Sammlung als ein FLAC pro CD mit einer Textdatei daneben. Die meisten Player ignorieren das Sheet entweder oder behandeln, was darin beschrieben ist, als zweitklassig. Hier steht, was rox damit macht.

Was ein CUE-Rip eigentlich ist

Eine Audiodatei mit einer ganzen CD darin, und ein .cue-Sheet, das auflistet, wo jeder Titel anfängt. So bewahrt man eine CD originalgetreu, denn die Pausen zwischen den Titeln gehören zur CD, und beim Aufteilen fallen sie weg. Es ist auch das Format, das die Annahme bricht, auf der jede Musikbibliothek gebaut ist: dass eine Datei ein Titel ist.

Player lösen das auf eine von drei Arten. Das Sheet ignorieren und einen siebzigminütigen Titel zeigen. Die Titel des Sheets zeigen, sie aber von der eigentlichen Bibliothek getrennt halten, sodass Suche, Sortierung und Playlists sich bei ihnen anders verhalten. Oder den Bruch ernst nehmen und ihn ein einziges Mal verdauen.

Echte Zeilen, keine Fragmente

rox indiziert jeden Abschnitt des Sheets als ganz normale Zeile in der Bibliothek, identifiziert über seine Datei plus seine Titelnummer. Alles Weitere liest ihn als Titel, weil er für alles Weitere einer ist. Playlists halten ihn fest, Hörvorgänge hängen an ihm, die Suche findet ihn, die Sortierspalten sortieren ihn, und keines davon weiß, dass elf Zeilen auf dasselbe FLAC zeigen.

Die Alternative, für die sich die meisten Implementierungen entscheiden, ist ein künstlicher Pfad, album.flac#3, der die Datenbank ordentlich hält und das Problem auf jedes Stück Code verschiebt, das diesen Pfad später öffnet. Ein vergessenes Abschneiden dort ist ein stiller Fehler, der Tag-Bytes aus dem Nichts liest. Eine Sammlung ohne Cue-Sheets zahlt für nichts davon: die Abschnitte leben in einer Nebentabelle, und auf den heißen Pfaden liest sie niemand.

Einen Abschnitt wie eine Datei abspielen

Die Engine behandelt einen Abschnitt als die ganze Welt für diesen Titel: ein präziser Sprung an seinen Anfang, ein sampleexakter Schnitt an beiden Kanten, und eine Endgrenze, die denselben Weg nimmt wie ein echtes Dateiende. Lückenlos, Crossfade, Nach-aktuellem-Titel-stoppen und Wiederholen funktionieren alle, ohne zu wissen, dass es Abschnitte gibt.

Der Schnitt am Anfang ist das Detail, auf das es ankommt. Ein präziser Sprung landet auf einer Paketgrenze statt exakt auf dem Sample, ohne das Verwerfen der Frames zwischen der Landung und dem Abschnittsbeginn fängt also jeder Titel mit dem Ende des vorherigen an. Genau so klingt eine Cue-Umsetzung, die niemand zu Ende gebracht hat.

Aufeinanderfolgende Titel eines Rips teilen sich eine Albumgruppe, und genau das hält den Crossfade davon ab, über die eigenen lückenlosen Übergänge einer CD zu blenden. Ein Rip spielt wie die Platte, von der er stammt.

Einlesen, und wenn du es dir anders überlegst

Das Sheet beansprucht sein Abbild. Solange ein Cue eine Datei auflistet, bekommt diese Datei keine eigene Zeile, du landest also nicht bei elf Titeln plus einem siebzigminütigen Duplikat. Die Aktualität richtet sich danach, welches der beiden zuletzt geändert wurde, das Bearbeiten von Sheet oder Audio schneidet den Rip beim nächsten Einlesen also neu. Lösch das Sheet, und aus dem Abbild wird wieder eine einzelne schlichte Zeile.

Die Metadaten bevorzugen das Sheet und fallen auf die eigenen Tags des Abbilds zurück. Sheets, die vor der UTF-8-Disziplin geschrieben wurden, bekommen einen cp1252-Rückfall, denn alte Rips sind genau die Gruppe, für die es diese Funktion gibt.

Bewertungen, die nicht die ganze CD stempeln

rox schreibt Bewertungen normalerweise in die Dateien selbst, was richtig ist, solange eine Datei ein Titel ist. Bei einem CUE-Rip ist sie das nicht: das Abbild gehört allen elf Titeln, ein Schreibvorgang pro Titel würde also jedem einzelnen dieselben Sterne aufdrücken.

Der Schreibweg verweigert bei diesen Zeilen die Datei-Hälfte, und die Datenbank behält den Wert. Genauso bei Tag-Änderungen. Du bekommst Bewertungen pro Titel auf einem Rip, und dein Abbild kommt byteidentisch daraus hervor.

Die Teile, die dir erst später auffallen würden

  • Der m3u-Export schreibt Abschnitte als path#N, und der Import bevorzugt eine exakte Pfadübereinstimmung, eine Liste übersteht den Umweg über andere Software also, ohne auf das Abbild zusammenzufallen.
  • Scrobbling und Titelanzeige deduplizieren auf dem Paar, die elf Titel einer CD scrobbeln also als elf Titel und nicht als ein sehr langer.
  • Hörvorgänge hängen sich nach einem erneuten Einlesen wieder pro Abschnitt an, eine CD behält ihre Wiedergabehistorie also pro Titel, selbst wenn jeder Abschnitt identische Tags trägt.
  • Nur das Album-Paar der ReplayGain-Werte wird übernommen. Titelwerte, die gegen ein Abbild einer ganzen CD geschrieben wurden, beschreiben die CD, sie werden also ignoriert statt geglaubt.

Der Maßstab dafür ist nicht, ob ein Rip abspielt. Sondern ob sich einen Monat später noch irgendetwas in der Bibliothek anders verhält, weil es aus einem Abbild kam.

Zeig ihm das Regal, das du nie aufgeteilt hast

Der Scanner nimmt die Sheets im ersten Durchlauf mit, zusammen mit allem anderen. Mehr dazu, was bei großen Sammlungen kaputtgeht.