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.
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 kommerzielle Webseiten, die unsynchronisierte 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 Suchergebnissen hochmogeln, wenn sie nichts anzubieten haben.
Ist ein Text partout nicht aufzufinden, hilft es gelegentlich, eine Textpassage, die man sicher verstanden hat, bei Google in Anführungszeichen zu setzen. Da erscheinen manchmal Webseiten, die eine simple Suche nach Interpret, 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 Textdatei im Verzeichnis der Musikdatei oder im
separaten Texte-Verzeichnis unter dem Namen der Musikdatei ab.
Bäckerchor - Das Wandern ist des Müllers Lust.mp3
Bäckerchor - Das Wandern ist des Müllers Lust.txt
Irgendwann möchte man den Text aber wahrscheinlich doch mit Zeitstempeln versehen. Dafür gibt es einiges an Software, ich empfehle, sich ein geeignetes Werkzeug auf der Wikipedia-Seite zum LRC-Dateiformat aus den Weblinks herauszusuchen.
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.
Schöner wäre es natürlich, wenn der Text gleich fertig synchronisiert vorläge. Einen beträchtlichen Teil meiner
LRC-Sammlung habe ich der Downloadfunktion des foobar2000-Plugins Lyric Show Panel 3 (foo_uie_lyrics3) zu verdanken,
das aber nicht mehr weitergepflegt wird.
► Inzwischen gibt es stattdessen das Plugin OpenLyrics, das
eine Textanzeige bietet, eine automatische oder manuelle Downloadfunktion aus verschiedenen Quellen und einen Editor.
► Sehr hilfreich sind zweitens das Programm
MiniLyrics von crintsoft (das ich ebenfalls als foobar2000-Plugin benutze) und
► drittens die Website Lyricsify, die beide auch in den Weblinks des Wikipedia-Artikels zu finden sind.
► Eine weitere Website mit Texten im LRC-Format ist https://rclyricsband.com/.
MiniLyrics ist die umfangreichste Lösung, die ich kenne (Textanzeige,
eine eigene Online-Datenbank mit TXT- und LRC-Texten und ein LRC-Editor), aber es wird anscheinend auch nicht mehr weiterentwickelt,
und seine Website war schon mehrfach für einige Wochen nicht auffindbar – beeilen Sie sich also lieber mit
der Textbeschaffung.
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 synchronisierte Texte existieren, die ich nicht kenne, bin ich für Hinweise
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 LRC-Dateiformat ist nicht in der Weise standardisiert, 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 zurechtkommen, 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
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:
Tag | Bedeutung | Beispiele |
---|---|---|
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)] |
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,
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.
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]
Weil Texte mit zusätzlichen Leerzeilen in Lyrics Jukebox eher unvorteilhaft wirken, hat das Programm zwei Möglichkeiten, damit umzugehen.
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.
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.
Lyrics Jukebox unterstützt momentan die Wiedergabelistenformate M3U
und EXTM3U.
Um Playlisten zu verwenden, stehen mehrere Möglichkeiten zur Verfügung.
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.
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.
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:
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:
Und wir benötigen für jeden Scrollvorgang die neue Geschwindigkeit v2:
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.
In diesem ersten Diagramm ist die Geschwindigkeit konstant (die Beschleunigung also Null).
Mit positiver Beschleunigung sieht das so aus:
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:
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:
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: