Hallo Gem.einde,
Wi weitlaeufig bekannt, lebe ich in Thailand. Hier ist Karaoke, wie fast ueberall in Asien, ein grosses Thema. Deshalb befasse ich mich jetzt mit MIDI und .KAR Dateien, da hier eine sehr grosse Anzahl von Karaokesongs als .MID und als .KAR Dateien im Umlauf sind und hier die gaengigen Karaokeplayer dieses Format verarbeiten.
Ich habe mir die App Serenade v5.2 auf meinen Laptop heruntergeladen und fuege mit dieser App die Texte nun selbst in .MID Dateien ein. Um Korrekturen am Timing der Lyric im Nachhinein vornehmen zu koennen, habe ich das Format der eingefuegten Lyric manuell zu dekodieren und zu verstehen versucht. Ich habe einen Hex Editor, der mich die Dateien im Hex/ASCII Format betrachten und editieren laesst. Hier ein Beispiel des Songs Goldfinger:
Track Identifier
4D 54 72 6B 00 00 05 E5 00 -->MTrk
Time Signature
FF 58 04 04 02 18 08 00 --> 4/4
Tempo
FF 51 03 09 27 C0 00
Sequence / Track Name
FF 03 24 50 31 30 30 31 38 2D 47 6F 6C 64 66 69 6E 67 65 72 2E ... -->Name of the file
... P10018-Goldfinger- ...
Tempo
FF 51 03 0B F9 CB 9E 1D
Lyric
FF 05 04 47 6F 6C 64 81 44 -->Gold
FF 05 03 66 69 6E 25 -->fin
FF 05 05 67 65 72 2C 20 86 56 -->ger,_
FF 05 05 68 65 27 73 20 2B -->he's_
FF 05 04 74 68 65 20 28 -->the_
FF 05 03 6D 61 6E 81 54 -->man
FF 05 05 2F 74 68 65 20 23 -->/the_
FF 05 04 6D 61 6E 20 58 -->man_
FF 05 05 77 69 74 68 20 32 -->with_
FF 05 04 74 68 65 29 57 -->the_
FF 05 02 6D 69 67 -->mi
FF 05 04 64 61 73 20 3E -->das_
FF 05 05 74 6F 75 63 68 85 4D -->touch
FF 05 03 2F 41 20 5A -->/A_
FF 05 03 73 70 69 7A -->spi
FF 05 06 64 65 72 27 73 20 73 -->der's_
FF 05 05 74 6F 75 63 68 85 76 -->touch
FF 05 06 2F 53 75 63 6B 20 74 -->/such
... und so weiter ( _ steht hier fuer Space, Code 20)
Jede Lyriczeile beginnt mit der Markierung FF 05
FF markiert den Beginn eines Meta Events und 05 markiert eine Lyriczeile. Das naechste Byte enthaelt die Anzahl der Buchstaben und Zeichen der Lyric, die in diesem Metaevent abgelegt sind, in der ersten Zeile also 04 fuer den Text Gold, der 4 Buchstaben lang ist.
In der ersten Zeile und vor jedem Zeilenwechsel (Zeichen /) folgt nach dem Textfragment ein Timestamp (hier nach Gold 81 44, der in hexadezimaler Form den Einsatz des folgenden Zeilenbeginns markiert.
Die Kodierung dieser Bytes ist mir unklar. Ich weiss nur, wenn ich dort z. B. 83 44 eintrage, setzt die 2. Zeile spaeter ein.
Am Ende jeden Worts innerhalb einer Zeile steht ein Byte, das angibt, nach welcher Zeit das naechste Wort beginnt, aber die Kodierung dieses Bytes ist mir auch unklar. Ich weiss nur, dass ich mit diesem Byte den Zeitabstand zum naechsten Wort in der Zeile beeinflussen kann, aber groessere Werte ergeben nicht unbedingt groessere Abstaende und umgekehrt.
Die 3. Zeile (ger,_) endet mit den Bytes 86 56. Normalerweise ist innerhalb einer Zeile nur ein Timing Byte am Ende eines Lyrics Fragments angehaengt. Was bedeutet das vorletzte Byte 86 in der Zeile?
Auch weiss ich nicht, wo das Timing fuer den generellen Beginn der Lyric gespeichert ist. Das Timing innerhalb der Lyric beginnt erst vor der zweiten Zeile, aber irgendwo muss ja auch der Beginn der ersten Zeile festgelegt sein.
Ich hoffe sehr, dass ihr mir weiterhelfen koennt!
Herzliche Gruesse aus Thailand, wo zum Glueck schon sporadisch die Regenzeit eingesetzt hat.
Sigi Saudi