Liedtext-Editor mit Zeitmarken
Liedtext
Leere Zeilen werden verworfen. Eine Zeile, die bereits mit [mm:ss.xx] beginnt, behält diese Zeit.
Audiodatei ablegen, Liedtext einfügen, dann Wiedergabe drücken und bei jeder Zeile die Stempel-Taste tippen. Nichts verlässt diesen Tab.
Jede getaktete Zeile verschieben
Exportierte .lrc
Eine Zeile erscheint hier, sobald sie eine Zeit hat.
Zeilen ohne Zeit bleiben in beiden Exporten weg: Eine Zeile braucht einen Stempel, bevor sie einen Platz auf der Zeitachse hat.
Tastatur
- K oder Leertaste — Wiedergabe / Pause
- Pfeil links / rechts — 5 Sekunden zurück / vor
- R — diese Zeile stempeln und zur nächsten wechseln
- T — eine Zeile danach einfügen
- Entf — die Zeit dieser Zeile löschen
- Pfeil hoch / runter — zur vorherigen / nächsten Zeile
Diese Seite macht aus einem Lied und einer Zeilenliste eine getaktete .lrc-Datei. Audiodatei laden, Liedtext einfügen – als reinen Text, eine Zeile pro Zeile, oder als vorhandene .lrc, deren Zeitstempel angepasst werden sollen –, Wiedergabe starten und bei jeder Zeile im Moment ihres Beginns eine Taste drücken. Der Stempel kommt aus der aktuellen Zeit des Audio-Elements und folgt damit der Datei, die gerade läuft, nicht einer Uhr in der Seite. Ist die letzte Zeile gestempelt, lässt sich das Ergebnis als .lrc exportieren oder als .srt, wenn der Ziel-Editor eines braucht.
Die Zeilenliste ist das ganze Modell. Eine Zeile hat Text und eine optionale Startzeit; eine Zeile ohne Startzeit ist eine, die noch nicht erreicht wurde. Ungestempelte Zeilen bleiben im Editor, damit sie später nachgeholt werden können, erscheinen aber nicht im Export: Eine Zeile ohne Startzeit hat keine Position auf der Zeitachse, und eine zu erfinden würde sie in einem Moment zeigen, den niemand gewählt hat. Deshalb ist eine mitten im Lied exportierte Datei kürzer als die Liste davor – nicht falsch.
Vier Operationen decken ab, was beim Takten von Liedtexten tatsächlich schiefgeht. Stempeln setzt eine Zeile auf die aktuelle Wiedergabezeit, und der Editor rückt auf die nächste Zeile vor, sodass eine Folge von Zeilen einen Tastendruck pro Zeile kostet. Löschen entfernt einen Stempel, der einen Schlag zu früh saß. Einfügen ergänzt eine vergessene Zeile. Verschieben bewegt jede gestempelte Zeile um dieselbe Anzahl Millisekunden, was nach der Feststellung nötig ist, dass die ganze Datei eine Sekunde hinter dem Gesang liegt – die relativen Abstände bleiben erhalten, und eine negative Verschiebung stoppt bei null, statt einen Timecode zu schreiben, den Player nicht lesen können.
Das Timing-Modell ist das von LRC selbst. Eine Zeile dauert bis zum Beginn der nächsten; die letzte Zeile hat keine nächste und bekommt deshalb zwei Sekunden, dieselbe Breite, die diese Seite immer verwendet, wenn ein Format keine eigene Endzeit hat. Beim .srt-Export entstehen daraus die Endzeiten – dieselbe Ableitung, die eine Umwandlung aus einer .lrc-Datei auf den Konvertierungsseiten vornimmt, sodass beide Wege dieselbe Zeitachse ergeben. Zentisekunden sind die Genauigkeit, die .lrc aufzeichnen kann; ein Stempel bei 12,346 Sekunden wird als 12,34 geschrieben, weshalb eine exportierte und wieder eingelesene Datei um einige Millisekunden vom Editor abweichen kann.
Die Audiodatei wird vom eingebauten Audio-Element des Browsers geöffnet und von dieser Seite nie gelesen, geparst oder hochgeladen. Es gibt keine Anfrage, die sie irgendwohin trägt; der einzige Netzwerkverkehr ist die Seite selbst. Ein Entwurf der Zeilenliste liegt im lokalen Speicher dieses Browsers, damit ein versehentliches Neuladen nicht eine Sitzung Arbeit kostet, und das Löschen der Seitendaten entfernt ihn. Weder Lied noch Liedtext existieren nach dem Schließen des Tabs auf einem Server.
Beispiele
Reiner Liedtext, in einem Durchgang gestempelt
Liedtext
First line of the song
Second line of the song
Third line of the songExportierte .lrc
[00:12.00]First line of the song
[00:15.30]Second line of the song
[00:18.75]Third line of the songJede gestempelte Zeile ist ein Block. Der .lrc-Export schreibt Zentisekunden, 18,75 Sekunden ist also genau das, was der Tastendruck festhielt; ein Stempel bei 18,754 würde als 18,75 geschrieben.
Eine vorhandene .lrc neu takten
Liedtext
[00:12.00]First line of the song
[00:14.00]Second line of the song
Third line of the songExportierte .lrc
[00:12.00]First line of the song
[00:14.00]Second line of the song
[00:17.75]Third line of the songBeim Einfügen einer .lrc bleiben die bereits vorhandenen Zeitstempel erhalten. Die dritte Zeile kam ohne Zeitstempel an, blieb ungestempelt, bis sie gespielt wurde, und wurde bei 17,75 Sekunden gestempelt.
Häufige Fragen
Gehören noch nicht gestempelte Zeilen in die exportierte .lrc-Datei?
Nein. Eine ungestempelte Zeile hat keine Startzeit, und .lrc positioniert eine Zeile nur über ihren Zeitstempel, es gibt also nichts zu schreiben. Die Zeile bleibt in der Editorliste ohne Zeit daneben, und sobald die Wiedergabe über sie läuft und die Stempeltaste gedrückt wird, gehört sie zum Export. Das ist Absicht und keine Einschränkung: Die Alternative wäre eine erfundene Zeit, die die Zeile in einem nie gewählten Moment zeigt – genau die Art stiller Erfindung, die diese Seite anderswo vermeidet.
Wie lange bleibt die letzte Liedzeile im .srt-Export sichtbar?
Zwei Sekunden über ihre Startzeit hinaus. .lrc hat überhaupt keine Endzeiten – eine Zeile dauert bis zum Beginn der nächsten –, die letzte Zeile hat also nichts, wovon sie ein Ende erben könnte. Zwei Sekunden ist dieselbe Breite, die diese Seite für jedes Format ohne Endzeiten verwendet, deshalb ergeben der .srt-Export dieses Editors und die Umwandlung von .lrc nach SRT auf der Konvertierungsseite dieselbe Zeitachse für dieselben Stempel. Hält das Lied die letzte Zeile wirklich acht Sekunden, sind Verschieben oder Bearbeiten der Dauer ehrlich; eine im Exporter versteckte Vermutung nicht.
Was passiert, wenn ich die LRC-Zeitachse vor die erste Zeile zurückverschiebe?
Diese Zeilen stoppen bei null, und der Editor nennt, wie viele begrenzt wurden. Einen negativen Timecode gibt es in .lrc und .srt nicht – ein Player lehnt die Datei entweder ab oder behandelt die Zeile als am absoluten Anfang beginnend. Verschieben soll einen Versatz reparieren, etwa die Feststellung, dass die ganze Datei eine Sekunde zu spät liegt; würde die angeforderte Verschiebung die erste Zeile vor den Anfang der Spur schieben, ist das sinnvolle Ergebnis null, und die übrigen Zeilen behalten ihren Abstand zueinander, sofern sie nicht ebenfalls begrenzt wurden.
Lässt sich eine vorhandene .lrc einfügen und nur die falschen Zeilen korrigieren?
Ja – deshalb liest der Editor beim Einfügen LRC-Zeitstempel. Zeilen, die bereits einen [mm:ss.xx]-Tag tragen, behalten ihre Zeit; der Text nach dem Tag ist das, was bearbeitet wird; eine Zeile ohne Tag beginnt ungestempelt. Metadatenzeilen wie [ti:], [ar:] und [offset:] werden beim Import ignoriert und nicht als Liedtext behandelt, weil sie niemand singt. Eine Zeile mit mehreren Tags übernimmt den ersten, denn das Modell des Editors ist eine Startzeit pro Zeile.
Wird die Audiodatei hochgeladen, damit die Seite Dauer oder Wellenform liest?
Nein – und es gibt auch keine Wellenform. Das Audio wird vom eingebauten Audio-Element des Browsers aus einer lokalen Dateihandles abgespielt; diese Seite liest seine Bytes nie, dekodiert es nie und sendet keine Anfrage damit. Die Zeitstempel stammen aus der aktuellen Wiedergabeposition des Audio-Elements beim Tastendruck, dieselbe Zahl, die eine Wellenform liefern würde. Eine ganze Albumspur für eine Wellenform zu dekodieren kostete Speicher und Zeit, ohne den Stempel zu verbessern.
Warum weicht die exportierte .lrc um einige Millisekunden vom Editor ab?
Weil .lrc Zentisekunden aufzeichnet und der Editor ganzzahlige Millisekunden hält. Ein Stempel bei 12,346 Sekunden wird als [00:12.34] geschrieben – auf das nächste Hundertstel gerundet, nicht abgeschnitten. Beim Wiedereinlesen ergibt das 12,340 Sekunden, der Unterschied liegt also bei höchstens fünf Millisekunden pro Zeile, weit unter dem, was ein Player anzeigen kann. Wird der exakte Stempel gebraucht, stattdessen .srt exportieren: Es trägt Millisekunden, und dasselbe Blockmodell erzeugt beide Dateien.