Lyrics Juke­box

Musik­wieder­gabe mit syn­chroner Text­anzeige für Windows, Linux und Mac


Gewußt wie

Auf dieser Seite verrate ich Ihnen, wie Sie zu synchronisierten Texten kommen, wie LRC-Dateien aufgebaut sind, wie Sie Playlisten mit Lyrics Jukebox benutzen können, auf welche Weise Ihre Musikdateien mit einheitlicher Lautstärke wiedergegeben werden können, und welche Formeln aus Ihren Physikschulbüchern beim Anzeigen von Liedtexten hilfreich sind.


Texte mit Zeitstempeln beschaffen und bearbeiten

unsynchronisiert

Sobald man sich damit beschäftigt, Musik mit Texten anzeigen zu lassen, stellt sich die Frage, wo solche Texte zu finden sein könnten. Die Internet-Suchmaschinen liefern hauptsächlich Links auf kommer­zielle Web­seiten, die unsyn­chronisierte Texte zwischen viel Werbung anbieten (und die oft erstaunlich viele Fehler enthalten). Und sie liefern Links auf Seiten, die nur so tun, als ob sie die Texte hätten und sich auch dann in den Such­ergeb­nissen hoch­mogeln, wenn sie nichts anzu­bieten haben.

Ist ein Text partout nicht aufzu­finden, hilft es gelegent­lich, eine Text­passage, die man sicher ver­standen hat, bei Google in Anführungs­zeichen zu setzen. Da erschei­nen manchmal Web­seiten, die eine simple Suche nach Inter­pret, Titel und text (oder je nach Sprache lyrics, testo, texte oder texto) nicht liefert.

Ein weiterer Weg bei englischen Texten, die sich nicht auffinden lassen, sind die Webseiten, die spezielle Varianten des maschinellen Lernens für Audioanalyse benutzen. Eine Texttranskription ist bei manchen Songs sogar mit einem Ergebnis machbar, das nur wenige Korrekturen braucht. Meistens jedoch ist es immer noch mühsam, den maschinell erzeugten Wortsalat in einen brauchbaren Liedtext zu verwandeln.
Brauchbare Ergebnisse hatte ich manchmal erreicht, indem ich den Gesang mit Vocal Remover extrahiert habe und davon eine Transkription mit AssemblyAI anfertigten ließ.
Inzwischen gibt es aber die Website Lyric Potato, die eine automatische Text-Transkription hat, Zeitstempel für Anfang und Ende einer Zeile liefern kann, und die auch für deutschsprachige Lieder funktioniert. Es braucht aber dennoch einige Nacharbeit, weil die automatisch erkannten Texte oft äußerst seltsame Fehler enthalten. Auch hat die Site momentan (Juli 2024) einige Fehler. Beispielsweise aktiviert sie, wenn sie von Deutschland aus aufgerufen wird, eine automatische Übersetzung des Seiteninhaltes, was sich ärgerlicherweise auch auf Teile eines erkannten englischsprachigen Liedtextes auswirkt. Und wenn man eine LRC-Datei herunterladen will, steht dort zweimal der Link auf das SRT-Format (für Untertitel), und man muß sich den LRC-Link selbst zusammenbasteln, indem man darin die Buchstaben "srt" durch "lrc" ersetzt. Aber es lohnt sich, die Site im Auge zu behalten.

Wenn man einen Text schließ­lich hat, legt man die Text­datei im Verzeich­nis der Musik­datei oder im separa­ten Texte-Verzeich­nis unter dem Namen der Musik­datei ab.
Bäckerchor - Das Wandern ist des Müllers Lust.mp3
Bäckerchor - Das Wandern ist des Müllers Lust.txt

Irgend­wann möchte man den Text aber wahrschein­lich doch mit Zeit­stempeln versehen. Dafür gibt es eini­ges an Soft­ware, ich emp­fehle, sich ein geeig­netes Werk­zeug auf der Wiki­pedia-Seite zum LRC-Datei­format aus den Weblinks herauszu­suchen.

Eine konkrete Empfehlung mag ich deshalb nicht geben, weil ich inzwischen meine Textsammlung ziemlich vollständig habe und mich an den Editor von MiniLyrics gewöhnt hatte, der zwar etwas unpraktisch zu bedienen ist (F7 zum Eingeben der Zeitstempel gefällt mir eigentlich nicht) aber immer zuverlässig funktioniert hat.
Die von mir getesteten Web-Editoren haben gelegentlich nach dem Korrigieren von Zeilen nicht mehr die genaue Position gehabt, was man erst hinterher bemerkt und dann eine unbrauchbare Liste von Zeiten bekommt. Das könnte auch browserabhängig sein, aber da habe ich nicht gründlich genug getestet, um es zu bewerten.
Und LRC-Lyricist unterstützt nur Textdateien im Verzeichnis der Musikdateien, aber ich hatte mit MiniLyrics anders angefangen und habe meine Texte alle separat.

synchronisiert

Schöner wäre es natürlich, wenn der Text gleich fertig synchro­nisiert vor­läge. Einen beträcht­lichen Teil meiner LRC-Sammlung habe ich der Downloadfunktion des foobar2000-Plugins Lyric Show Panel 3 (foo_uie_lyrics3) zu ver­danken, das aber nicht mehr weiter­gepflegt wird.
► Inzwischen gibt es stattdessen das Plugin OpenLyrics, das eine Textanzeige bietet, eine automatische oder manuelle Downloadfunktion aus verschiedenen Quellen und einen Editor.
► Sehr hilf­reich sind zweitens das Pro­gramm MiniLyrics von crintsoft (das ich eben­falls als foobar2000-Plugin be­nutze) und
► drittens die Web­site Lyricsify, die beide auch in den Weblinks des Wiki­pedia-Artikels zu finden sind.
► Eine weitere Website mit Texten im LRC-Format ist https://rclyricsband.com/.

MiniLyrics ist die umfang­reichste Lösung, die ich kenne (Text­anzeige, eine eigene Online-Daten­bank mit TXT- und LRC-Texten und ein LRC-Editor), aber es wird anschei­nend auch nicht mehr weiter­entwickelt, und seine Web­site war schon mehrfach für einige Wochen nicht auf­findbar – beeilen Sie sich also lieber mit der Text­beschaffung.
Wenn Sie foobar2000 verwenden und als Plugins MiniLyrics und OpenLyrics installieren, haben Sie schon eine Kombination, die viele Texte finden wird.

► Die fünfte Quelle für synchronisierte Texte ist das Programm LRCGET, das Sie auf Github finden, und das versucht, eine komplette Musiksammlung mit Texten aus einer eigenen Datenbank zu versorgen. Es enthält auch einen Editor, aber der ist noch etwas rudimentär, erhält aber regelmäßig Updates.
► Dann gibt es noch Musixmatch, aber das habe ich noch nicht direkt ausprobiert, weil OpenLyrics auch dort nach Texten sucht.
► Ebenfalls noch nicht probiert habe ich diese Anleitung, nach der man Texte von chinesischen Servern herunterladen kann.

Falls weitere Quellen für synchro­nisierte Texte exi­stieren, die ich nicht kenne, bin ich für Hin­weise dankbar.

Haben Sie die synchronisierten Textdateien schließlich alle gefunden, müssen Sie darauf achten, daß sie wieder denselben Dateinamen wie die zugehörige Musikdatei bekommen, damit sie von Lyrics Jukebox gefunden werden.
Bäckerchor - Das Wandern ist des Müllers Lust.mp3
Bäckerchor - Das Wandern ist des Müllers Lust.lrc


Das Dateiformat LRC

Das LRC-Dateiformat ist nicht in der Weise standardi­siert, wie man das von vielen anderen Formaten kennt, bei denen ein Standardisierungsgremium zuständig ist und offizielle Beschreibungen des Standards liefert.
In diesem Abschnitt versuche ich, alle relevanten Informationen zum LRC-Format zusammenzufassen.

Anhand diverser Aussagen im Netz (die jedoch anscheinend weitgehend voneinander oder aus der Wikipedia abgeschrieben sind und letztlich wohl alle auf einem Satz aus der FAQ beruhen, die dem „A2 Media Player“ Version 2.51 beiliegt) scheint die Grundstruktur in den 1990ern von einem Programmierer in Taiwan entworfen worden zu sein, der eine Lösung für sein Lyrics-Anzeigeprogramm brauchte. Die Art der Zeitstempel wurde dann von anderen Entwicklern übernommen, die auch Erweiterungen nach eigenen Vorstellungen vorgenommen haben, so daß LRC-Dateien aus verschiedenen Quellen durchaus etwas unterschiedlich aufgebaut sein können. (Auch der Autor des oben genannten Programms LRCGET hat sich eine private Variante des LRC-Formats ausgedacht: Alle Zeilen beginnen bei ihm mit einem Leerzeichen, und der LRC-Editor erzwingt eine leere Zeile am Ende.)
Lyrics Jukebox soll möglichst mit allen LRC-Varianten zurecht­kommen, wenn Sie also Dateien finden, die nicht korrekt dargestellt werden, senden Sie mir bitte eine Mail.

Nachdem sich das LRC-Format etabliert hatte, sind im Internet auch Websites entstanden, auf denen Nutzer Texte hochladen können und so eine große LRC-Sammlung aufgebaut haben. Ein Teil dieser Sites existiert aber inzwischen nicht mehr (beispielsweise https://web.archive.org/web/20111025202311/http://www.lrcfiles.com/ oder https://web.archive.org/web/20120701190252/http://www.lyrdb.com/karaoke/index.htm oder http://powerlrc.atspace.com/). Manche existieren noch, werden aber nicht mehr gepflegt (beispielsweise https://cool-lyrics.tripod.com/). Die vier aktiven (die ich kenne) sind oben bei den Quellen für synchronisierte Texte genannt.

Um sich eine LRC-Datei anzusehen, benötigen Sie keine besondere Software, ein beliebiger Texteditor genügt, weil so eine Datei auch nur ein Text ist, nur nicht mit der Dateinamenserweiterung .txt, sondern mit .lrc.
Der Anfang so einer Datei könnte dann etwa folgendermaßen aussehen:

[ar:Bäckerchor]
[ti:Das Wandern ist des Müllers Lust]
[au:Musik: Carl Friedrich Zöllner / Text: Wilhelm Müller]
[la:de]
[offset:500]
[00:13.45]Das Wandern ist des Müllers Lust,
[00:17.32]das Wandern ist des Müllers Lust,
[00:21.26]das Wandern!
[00:25.45]Das muß ein schlechter Müller sein,
[00:29.45][00:33.45]dem niemals fiel das Wandern ein,
[00:37.38][00:53.49]das Wandern.
[00:41.42]Das Wandern,
[00:45.42][00:49.42][00:51.49]das Wandern,
[00:57.43]
[01:01.50]Vom Wasser haben wir's gelernt,
[01:05.47]vom Wasser haben wir's gelernt,
[01:09.41]vom Wasser!
[01:13.41]Das hat nicht Ruh bei Tag und Nacht,
[01:17.47]ist stets auf Wanderschaft bedacht,
[01:21.45]ist stets auf Wanderschaft bedacht,
[01:25.39][01:41.45]das Wasser.
[01:29.39]Das Wasser,
[01:33.45][01:37.45][01:39.39]das Wasser,

In diesem Beispiel sehen Sie auch schon alle wesentlichen Elemente einer einfachen LRC-Datei, und man kann meistens schon erraten, wozu sie gedacht sind.
Grundsätzlich besteht so eine LRC-Datei aus zwei Arten von Textzeilen:
1. Den ID-Tags
2. Den Zeilen des Liedtextes mit vorangestellten Zeitstempeln

Die ID-Tags

Am Anfang des Beispiels stehen in eckigen Klammern in jeweils einer Zeile einige sogenannte ID-Tags, die die LRC-Datei beschreiben. („ID“ steht für Identifikation und das „Tag“ ist ein Etikett.)
Das sind hier der Künstler (Artist) hinter dem Tag ar:, dann der Titel im Tag ti:, es folgen Komponist und Textautor (au:), die Sprache (la:) und ein Offset (offset:).
Ob die Inhalte dieser Identifikationsetiketten von einem Musikabspielprogramm in irgendeiner Form benutzt werden, ist dem jeweiligen Programmierer überlassen. Lyrics Jukebox ignoriert die meisten davon und zeigt stattdessen die Angaben für Interpret und Titel an, die in den Tags des Musikstücks stehen. Es könnte zwar sinnvoll sein, die Tags der LRC-Datei zu benutzen, wenn die entsprechenden Tags in der Musikdatei fehlen, aber da meine Musiksammlung vollständig mit Tags versehen ist, fand ich das bisher nicht so wichtig.
Die Position der Tags in der LRC-Datei ist nicht festgelegt, manchmal finden sich auch Einträge mitten im Liedtext oder am Ende. Und viele LRC-Dateien enthalten gar keine ID-Tags.

Ein wichtiges Tag ist der Offset. Die darin angegebene Zahl ist eine Zeitangabe in Millisekunden, mit der sich der Anfang des Musikstücks und die erste Zeile des LRC-Textes synchronisieren lassen. Das wird deshalb gebraucht, weil dieselben Musikstücke aus unterschiedlichen Quellen am Anfang oft ein unterschiedlich langes Stück Stille haben; bei der einen Version beginnt die Musik vielleicht nach einer Sekunde, bei der anderen sofort. Das führt dann dazu, daß der gesamte Text, der zur Variante mit der Sekunde angefertigt wurde, bei der anderen Variante generell um eine Sekunde zu spät angezeigt wird. Der Eintrag offset:1000 würde das korrigieren. Im umgekehrten Fall müßte der Eintrag offset:-1000 lauten.
Momentan werden von Lyrics Jukebox nur zwei Tags ausgewertet, das sind der Offset und die Sprache. Der Offset verschiebt, wie eben beschrieben, bei der Wiedergabe alle Zeitstempel, und abhängig vom la-Tag kann man für Stücke der damit gekennzeichneten Sprache eine andere Schriftart wählen.

Hier ist eine Liste der ID-Tags, die mir bisher begegnet sind:

TagBedeutungBeispiele
ar: (Artist) Name des Interpreten, der Band oder des Orchesters[ar:Agnetha Fältskog]
ti: (Title) Titel des Musikstücks[ti:Tack för en underbar, vanlig dag]
al: (Album) Album, auf dem das Musikstück veröffentlicht wurde[al:Elva kvinnor i ett hus]
au: (Author) Komponist, Textautor[au:Agnetha Fältskog / Bosse Carlgren]
length: Länge des Musikstücks in der Form mm:ss, auch mm:ss.cc[length:2:38]
[length:2:38.11]
la: (Language) Sprache des Textes in Form von zwei Buchstaben der ISO-639-1-Notation[la:sv]
by: (Entered by) Verfasser der LRC-Datei
[by:Flinx]
offset: Versatz für alle Zeitstempel in Millisekunden[offset:-100]
re: (Remarks) Anmerkungen aller Art. Manche Programme schreiben hier ihren Namen hin.[re: LRC Editor - Android app]
ve: (Version) Versionsnummer. War ursprünglich wohl für die Version des erweiterten LRC-Formats gedacht (das weiter unten beschrieben wird), jetzt hinterlassen hier teilweise die LRC-Editoren ihre Programmversion.[ve:V2.20]
[ve:Version 2.4.1]
tool: Das Gerät oder Programm, mit dem die LRC-Datei erzeugt wurde[tool:LRC Maker https://lrc-maker.github.io]
id: (Identification) Ein internes Kennzeichen der MiniLyrics-Datenbank[id: lq_khiqqpqk]
artist: dasselbe wie ar:[artist:Chris de Burgh]
title: dasselbe wie ti:[title:Say Goodbye To It All]
album: dasselbe wie al:[album:Into the Light]
Artiste: dasselbe wie ar: (französisch)[Artiste: Alan Jackson]
Titre: dasselbe wie ti: (französisch)[Titre: Don't Rock The Jukebox]
Album: dasselbe wie al: (französisch)[Album: Don't Rock The Jukebox,(1991)]

Die Liedzeilen mit Zeitstempeln

Der Text, der zur Musik angezeigt werden soll, hat am Beginn jeder Zeile einen Zeitstempel, der für diese Zeile den genauen Zeitpunkt kennzeichnet, zu dem begonnen wird, sie wiederzugeben.
Für diesen Zeitstempel findet man vier Syntaxvarianten:

[mm:ss.cc] Die am häufigsten anzutreffende Variante. mm sind Minuten, ss Sekunden und cc Hundertstelsekunden.
[mm:ss:cc] Ähnlich, aber mit einem Doppelpunkt anstelle des Dezimaltrenners zwischen Sekunden und Hundertstelsekunden.
[mm:ss.ttt] Ähnlich, aber mit Tausendstelsekunden ttt.
[mm:ss] Nur Minuten mm und Sekunden ss.

Die zweite Variante könnte man übrigens als Fehler betrachten. Hier hat der Programmierer wohl nicht verstanden, daß es sich bei den Sekundenangeben der anderen drei Varianten einfach um Gleitkommazahlen handelt.

In Liedtexten werden oft Zeilen wiederholt, denken Sie an den Kehrreim (Refrain) vieler Lieder. Um die LRC-Dateien klein zu halten, kann man identische Zeilen zusammenfassen. Die Textzeile ist dann nur einmal vorhanden, und alle Zeitstempel werden am Zeilenanfang hintereinander aufgeführt. Im Beispiel oben kommt das mehrfach vor, etwa hier:
[00:45.42][00:49.42][00:51.49]das Wandern,

Das erweiterte LRC-Format

Für Karaoke genügt das normale LRC-Format nicht. Die zuerst in Japan entstandenen Karaoke-Anlagen markieren nicht nur die gerade zu singende Liedzeile, sondern die einzelnen Wörter oder auch Silben. Um eine ähnliche Darstellung möglich zu machen, ist das erweiterte LRC-Format entstanden. (Es wurde für ein Programm namens „A2 Media Player“ entworfen, dessen letzte Version 2005 erschienen ist.)
Dabei dienen zusätzliche Zeitstempel innerhalb der Zeile zur genaueren Markierung. Diese zusätzlichen Zeitstempel werden „Word Time Tag“ genannt, sie haben das Format <mm:ss.cc> und können an beliebiger Stelle des Textes stehen. Eine Zeile des Beispieltextes von oben könnte dann so aussehen:

[00:13.45]Das <00:14.05>Wandern <00:15.05>ist <00:15.49>des <00:15.98>Müllers <00:17.02>Lust,
oder auch so
[00:12.95]<00:13.45>Das <00:14.05>Wandern <00:15.05>ist <00:15.49>des <00:15.98>Müllers <00:17.02>Lust,<00:17.23>

Bei der zweiten Variante dienen die zusätzlichen Zeiten am Zeilenanfang und -ende dazu, während der Wiedergabe die Darstellung der Zeile, die momentan im Fokus ist, unabhängig vom Markieren der Wörter ändern zu können.

Lyrics Jukebox kann vorerst nur die gesamte Textzeile markieren, aber keine einzelnen Wörter. Ob ich das irgendwann einbaue, weiß ich noch nicht. Momentan werden Zeitstempel des erweiterten LRC-Formats lediglich aus dem angezeigten Text ausgeblendet.


Leere Zeilen als Zeilenendzeiten

Manchmal enthalten heruntergeladene LRC-Dateien Zeitstempel der Endzeiten vieler oder aller Zeilen des Textes als Leerzeile, manchmal ganz leer, manchmal mit einem Leerzeichen. Oft sind diese Zeiten am Anfang in einer Zeile zusammengefaßt. Das sieht dann ungefähr so aus:
[04:19.62][04:14.63][04:07.26][04:03.33][03:55.64][03:48.96][03:45.29]

Beispielsweise entstehen Zeilen mit Endzeiten auch, wenn Sie einen Liedtext vom SubRip-Untertitelformat mit einem Werkzeug wie dem SRT to LRC Converter in das LRC-Format konvertieren.

Weil Texte mit zusätzlichen Leerzeilen in Lyrics Jukebox eher unvorteilhaft wirken, hat das Programm zwei Möglichkeiten, damit umzugehen.

Eigentlich unterscheiden sich LRC-Dateien mit zu einer Zeile mit vielen Zeitstempeln zusammengefaßten Leerzeilen rein formell nicht von solchen, in denen die Zeilen einzeln stehen, aber es gibt einen praktischen Grund, aus dem ich sie bei EmptyLinesThreshold auseinanderhalte: Bei meinen heruntergeladenen LRC-Dateien gibt kaum welche mit separaten Leerzeilen, die als Zeilenendzeiten gedacht sind. Vermutlich hängt das davon ab, mit welchen Werkzeugen die Dateien angefertigt worden sind. Mit den getrennten Schwellwerten ist die Trefferquote der Heuristik jedenfalls besser.
  • Standardmäßig versucht Lyrics Jukebox zu erraten, ob es sich bei Leerzeilen mit Zeitstempel um gewünschte Leerzeilen handelt, wie sie oft zwischen Strophe und Refrain stehen, oder ob es nur Zeitstempel mit der Endzeit der vorhergehenden Zeile sind. Dafür wird das Verhältnis der Anzahl an Textzeilen zur Anzahl der Leerzeilen herangezogen. Wenn es mehr als ca. ein Drittel Leerzeilen sind, werden sie als Endzeiten betrachtet und nicht angezeigt.
    Sie können dieses Verhalten mit den Konfigurationseinträgen EmptyLinesThreshold und EmptyLinesThresholdC steuern. Soll diese Heuristik gänzlich deaktiviert werden, dann tragen Sie bei beiden Werten 1 ein.
  • Weiterhin habe ich mit dem Parameter HideSpaceLines die Möglichkeit vorgesehen, derartige Zeilen manuell gezielt zu verbergen. Es werden diejenigen Zeilen ausgeblendet, die nur aus einem Leerzeichen bestehen. Beim Beispiel hier müßten Sie also in der LRC-Datei ans Ende dieser Zeile ein einzelnes Leerzeichen setzen, um die sieben leeren Zeilen unsichtbar zu machen.
    Einen Sonderfall gibt es hierbei aber auch: Weil manche LRC-Editoren alle Textzeilen mit einem Leerzeichen zwischen Zeitstempel und der Liedzeile versehen, entfernt Lyrics Jukebox beim Einlesen des Textes intern dieses Leerzeichen (um die Zeilen vernünftig zentrieren zu können). Bei solchen LRC-Dateien müssen Sie also nicht nur ein, sondern zwei Leerzeichen eintragen.

Natürlich könnten Sie die leeren Zeilen auch einfach löschen. Der Vorteil des beschriebenen Vorgehens ist, daß die leere Zeile zwar nicht mehr angezeigt wird, aber die Hervorhebung der vorhergehenden aktiven Textzeile trotzdem zur angegebenen Zeit aufgehoben wird und nicht erst, wenn die nächste Zeile dran ist.


In der Musikdatei eingebettete Texte

Es sind auch Versuche unternommen worden, Standards zum Einbetten von Texten in die MP3-Dateien zu etablieren.

Für unsynchronisierte Texte gab es Lyrics3 und Lyrics3 v2; aber etwas aktueller ist das ID3-Frame USLT der Tag-Formate ID3v2.3 und ID3v2.4.
► Lyrics Jukebox liest den Inhalt eines USLT-Frames und erkennt auch, wenn sich darin ein LRC-Text befindet.

Für synchronisierte Texte hatte bereits der A2 Media Player eine Funktion zum Einbetten des Textes in das ID3-Tag. Diese Funktion versucht, ein Frame namens A2LC in das Tag einzufügen, aber es funktioniert wahrscheinlich nur für veraltete ID3-Versionen. Bei meinen Versuchen mit MP3-Dateien, die ein id3v2.3-Tag enthalten, hat das Programm offenbar bei den Berechnungen der Framegrößen versagt und jedesmal teilweise das APIC-Frame (enthält ein Coverbild) überschrieben. Es hat also wenig Sinn, das noch unterstützen zu wollen.

Und dann gibt es noch das ID3-Frame SYLT des Tag-Formats ID3v2 (siehe Abschnitt 4.9). In diesem Frame werden die Zeitstempel silben- bzw. wortweise in Form einer 32-Bit-Binärzahl angegeben, und das Zeilenende wird mit einer Zeilenschaltung gekennzeichnet. Daher ist das nicht so flexibel wie das erweiterte LRC-Format, weil bei den Zeitstempeln nicht zwischen Wort und Zeile unterschieden wird. Die Beschreibung des Frames ist auch etwas unpräzise, möglicherweise deshalb hat es keine weite Verbreitung gefunden.
► Lyrics Jukebox unterstützt momentan das Lesen eines SYLT-Frames in der Form, wie es von MiniLyrics geschrieben wird, wenn man dort im "Songtext-Editor" die Funktion "Songtext in Song-Datei speichern..." aufruft und das Format ID3v2 wählt. Diese Variante unterscheidet sich etwas von der Beschreibung bei id3.org: Zeitstempel sind zeilenweise angegeben, und es gibt keine Zeilenschaltungen, sondern der Zeitstempel kennzeichnet auch das Zeilenende.


Umgang mit Playlisten

Lyrics Jukebox unterstützt momentan die Wiedergabelistenformate M3U und EXTM3U.
Um Playlisten zu verwenden, stehen mehrere Möglichkeiten zur Verfügung.

  • Als erstes können Sie beim Konfigurationsparameter PlayList eine Wiedergabeliste angeben. Diese Playlist wird dann anstelle der automatisch erzeugten geladen, der Konfigurationseintrag MusicDir hat in dem Fall also keine Bedeutung. Diese Wiedergabeliste wird dann auf die gleiche Art behandelt wie eine aus Verzeichnisinhalten generierte, also auch (je nach Konfiguration) für Zufallswiedergabe umsortiert. Auch wird entsprechend der Ratinglist die Wiedergabehäufigkeit gesteuert.
  • Wenn sich alle Stücke, die in einer Playlist aufgeführt sind, in den Verzeichnissen MusicDir oder MusicSpareDir befinden, gibt es zweitens eine andere praktische Möglichkeit. Wenn Sie diese Liste beim Konfigurationseintrag OldPlayList eintragen, dann wird die interne Wiedergabeliste so umsortiert, daß sich alle Stücke der OldPlayList am Anfang befinden. Danach kommen dann alle anderen Stücke aus den beiden Musikverzeichnissen, die nicht in der Liste stehen.
    Die Pfadangaben der auf diese Weise übernommenen Liste werden ignoriert (die Pfade sind ja bekannt), und so genügt es auch, nur die Dateinamen der Musikstücke in der Liste aufzuführen. Das ist auch dann nützlich, wenn Sie Musikstücke in den Verzeichnissen an einen anderen Ort verschoben haben.
    Diese Funktion könnten Sie auch benutzen, um für diesen Fall eine neue Playlist mit den richtigen Pfaden zu erzeugen (die dann auch in anderen Programmen funktioniert). Dazu geben Sie bei ExportPlayList einen Dateinamen an. In diese Datei wird dann die komplette interne Wiedergabeliste im M3U-Format exportiert.
    Falls eine OldPlayList importiert wurde und gleichzeitig eine Ratinglist aktiviert ist, werden die in der OldPlayList vorhandenen Stücke beim Auswerten der Ratinglist ignoriert, damit die Stücke der OldPlayList genau in deren Reihenfolge wiedergegeben werden.
  • Die dritte Möglichkeit, eine Playlist wiederzugeben, besteht darin, sie per Drag&Drop mit der Maus ins Programmfenster zu ziehen. Dann allerdings werden die Musikstücke dieser Liste auf die Weise eingefügt, wie es auch von der Suche und der Jukeboxfunktion gemacht wird. Das bedeutet, daß danach die Stücke, die Sie per Suche oder Jukebox auswählen, hinter die per Drag&Drop eingefügte Playlist einsortiert werden. Diese Art des Imports ist also eher nur für kurze Wiedergabelisten sinnvoll.

Zurücksetzen der Wiedergabeposition

Wenn Sie nach Änderungen der Wiedergabelisten die Wiedergabe von vorn beginnen möchten, dann erreichen Sie das, indem Sie in der Textdatei, die bei StateFile definiert ist (standardmäßig LJ_Status.config), den Namen des aktuellen Stücks entfernen, der in der letzten Zeile steht.
Bei Bedarf können Sie hier auch das Lesen des Verzeichnisinhaltes der Musikordner und den Neuaufbau der internen Playlist und des Caches der Coverbilder auslösen, indem Sie den Wert von Music Hash verändern.
Sie können auch gleich die gesamte Datei löschen, aber dann gehen auch die gespeicherten Einstellungen verloren, beispielsweise die Lautstärke, die Jukeboxeinstellungen oder die aktuelle Radiostation.


Einheitliche Wiedergabelautstärke

Musikdateien, die von verschiedenen CDs oder aus anderen Quellen kommen, unterscheiden sich oft in ihrer Lautstärke. Bei einer gemischten Wiedergabe kann das ziemlich stören, daher gibt es einige Programme, die die Musik auf eine einheitliche Lautstärke einstellen.
Für Musik, die mit Lyrics Jukebox wiedergegeben werden soll, eignet sich MP3Gain. MP3Gain ändert die Lautstärke, ohne die Audiodaten zu modifizieren, also ohne Qualitätsverlust.
Es besteht aus zwei Komponenten: Der grafischen Oberfläche und einem Kommandozeilenprogamm. Die Bedienung der Oberfläche ist ziemlich selbsterklärend, und das Kommandozeilenwerkzeug eignet sich für eigene Skripte (hier ein Beispiel, wie es unter Windows gemacht werden könnte).
Für die Bedienoberfläche gibt es mit wxMP3gain auch eine modernisierte Variante, die technisch aber dasselbe macht.
Weitergehende Informationen finden Sie in diesem englischsprachigen Artikel: ReplayGain.




Wir wiederholen: Kinematik

Den folgenden Abschnitt brauchen Sie als Anwender von Lyrics Jukebox nicht. Er ist für jemanden interessant, der vielleicht etwas Ähnliches in einer anderen Programmiersprache entwickeln möchte.
Als nach längerer Zeit des Herumprobierens die Funktion zum Scrollen des Textes endlich einigermaßen so funktionierte wie ich wollte, dachte ich mir: Mach lieber eine Beschreibung des Algorithmus, damit du dein Programm auch in ein paar Jahren noch verstehst. Kommen wir also jetzt zum Physikunterricht der 9. Klasse und der Berechnung der Scrollgeschwindigkeit.

Anfangs hatte ich für das Scrollen einfach die unterste Textzeile genommen und die Geschwindigkeit berechnet, die nötig war, damit die Zeile zur gewünschten Zeit in der Mitte ankam. Um eine ruckelige Darstellung zu vermeiden, nahm ich dann den Mittelwert der Geschwindigkeiten aller Zeilen unterhalb der Mitte, und weil es dennoch unruhig aussah, mußte ich eine Dämpfung einbauen, damit sich die Geschwindigkeit nicht zu plötzlich ändert. Das hat meistens brauchbar ausgesehen, aber es gab immer wieder Situationen, in denen es nicht funktioniert hat. Beispielsweise sind dann manchmal Textzeilen schnell durchgelaufen gefolgt von einer längeren Textpause, und während dieser sind aufgrund der Dämpfung Zeilen oben rausgerutscht, die noch gar nicht dran waren. Daher war eine Notbremse nötig. Und es kamen immer neue Sonderfälle dazu, die ich irgendwann satt hatte.

Letztlich habe ich deshalb nach vielen Experimenten die gesamte Berechnung noch einmal neu geschrieben und dabei nicht mehr die erforderliche Geschwindigkeit ermittelt, sondern die Beschleunigung. Wie so etwas gemacht wird, haben Sie vielleicht schon in der Schule gelernt, und man findet es natürlich auch an vielen Stellen im Netz, suchen Sie nach Beschleunigte Bewegung mit Anfangsgeschwindigkeit. Bei den Erklärungen, die Sie da finden werden, geht es zwar oft um Autos, doch lassen sich km/h und Pixel/s tatsächlich auf die gleiche Weise berechnen.

Kennt man den zurückzulegenden Weg s, die dafür zur Verfügung stehende Zeit t und die momentane Geschwindigkeit v1, dann erhält man die notwendige Beschleunigung a folgendermaßen:

a = 2 s 2 v 1 t t 2 a = { 2 cdot s - 2 cdot v_1 cdot t} over t^2

Ein Physiklehrer würde jetzt vermutlich erklären, daß Weg und Zeit eigentlich Differenzen sein müßten und daher immer ein Delta davor gehöre, und außerdem alles Vektoren sein sollten. Aber wir machen es uns lieber so einfach wie möglich. Vektoren brauchen wir nicht, weil Geschwindigkeit und Beschleunigung in dieselbe Richtung zeigen, und dann definieren wir z. B. beim Weg Δs (Delta s) den Anfang als Null, und schon ist Δs dasselbe wie s, weil es schließlich Ende minus Anfang gerechnet wird.
(Allerdings schadet es nicht, wenn man von den Differenzen weiß, denn dann versteht man später vielleicht auch besser, wie sich die Mathematiker letztlich solche Sachen wie die Differentialrechnung ausgedacht haben. Doch so weit müssen wir es hier nicht treiben.)

Nachdem wir jetzt also wissen, wie die Beschleunigung berechnet wird, wollen wir noch herausbekommen, wie weit die Textzeilen bewegt werden müssen, wenn die Scrollfunktion aufgerufen wird, die dafür zuständig ist, in kurzen Abständen alle Textzeilen ein paar Pixel nach oben zu verschieben. Wir kennen die momentane Geschwindigkeit, die aktuelle Beschleunigung und die Zeit seit dem letzten Scrollvorgang, und wir brauchen den Weg s:

s = v 1 t + a t 2 2 s = v_1 cdot t +{ a cdot t^2 } over 2

Und wir benötigen für jeden Scrollvorgang die neue Geschwindigkeit v2:

v 2 = v 1 + a t v_2 = v_1 + a cdot t

Das könnte es schon sein (und diese drei Formeln finden sich so auch im Programm), wenn wir beim Textscrollen nicht einen Sonderwunsch hätten: Der Text soll sich schließlich immer nur vorwärts (nach oben) bewegen.
Bei einer gleichmäßig beschleunigten Bewegung ist das aber keineswegs garantiert.

Das nachfolgende Diagramm zeigt den Zusammenhang zwischen Geschwindigkeit v, Zeit t und zurückgelegtem Weg s. Dabei wird der Weg als Fläche dargestellt, weil er bei dieser Darstellung das Produkt aus Geschwindigkeit und Zeit ist.

Diagramm für konstante Geschwindigkeit

In diesem ersten Diagramm ist die Geschwindigkeit konstant (die Beschleunigung also Null).

Mit positiver Beschleunigung sieht das so aus:

Diagramm für positive Beschleunigung

Mit zunehmender Zeit nehmen die Geschwindigkeit und der je Zeiteinheit zurückgelegte Weg zu.

Bei negativer Beschleunigung (also dem Bremsen) kann es folgendermaßen aussehen:

Diagramm für negative Beschleunigung

Mit zunehmender Zeit nehmen hier die Geschwindigkeit und damit der je Zeiteinheit zurückgelegte Weg ab.

Aber eine negative Beschleunigung hat noch andere Auswirkungen, die einem vielleicht nicht gleich in den Sinn kommen, wenn man nur an die Autobeispiele denkt, die man gerade im Internet gefunden hat. Haben Sie schon mal ein Objekt in die Luft geworfen, beispielsweise einen Apfel? Auch der wird gleichmäßig negativ beschleunigt, weil er der der Gravitation unterworfen ist. Er bewegt sich nach oben, aber wird immer langsamer, und nach kurzer Zeit wechselt das Vorzeichen der Geschwindigkeit von Plus nach Minus, und der Apfel kommt wieder zurück nach unten.
Im Diagramm sieht das dann so aus:

Diagramm für negative Beschleunigung mit Richtungsumkehr

Die Geschwindigkeit nimmt gleichmäßig ab und wird schließlich negativ. (In diesem Beispiel ist der Apfel nicht mehr so weit nach unten gefallen wie er nach oben geworfen wurde, wahrscheinlich ist er auf einem Dach liegengeblieben.)

Unsere erste Formel, die zur Berechnung der Beschleunigung aus Weg, Zeit und Geschwindigkeit, funktioniert in so einem Fall natürlich auch, nur liefert sie leider ein Ergebnis, das uns nicht hilft. Unser Liedtext soll schließlich nicht erst weit nach oben und dann wieder zurück scrollen, um an der richtigen Stelle zwar zum richtigen Zeitpunkt, aber in falscher Richtung anzukommen. Daß übrigens mathematisch dabei tatsächlich der gewünschte Weg zurückgelegt wurde, ist im Diagramm dargestellt, indem der negative Weg vom positiven subtrahiert wird. Der linke dunkle Bereich von s stellt also unseren vorgegebenen Weg dar.

Mit der hier berechneten konstanten Beschleunigung läßt sich das ohne diese Richtungsumkehr mit der ersten Formel nicht lösen.
Im Programm wird daher geprüft, ob am Ziel die Geschwindigkeit v2 negativ wäre, und wenn ja, wird anstelle der zuerst berechneten eine solche negative Beschleunigung gewählt, daß der Text den Zielpunkt vorwärts mit der Geschwindigkeit Null erreicht und dann gewartet werden kann, bis es mit der nächsten Zeile weitergeht:

a = 0 v 1 2 2 s a = { 0 - v_1^2} over {2 cdot s}