midi2ly, Genauigkeit von Tempoangaben

Begonnen von calp, Mittwoch, 27. Dezember 2017, 12:54

« vorheriges - nächstes »

calp

Guten Tag!

ich habe folgendes Problem: Ich habe eine Midi-Datei mit einer umfangreichen Tempo-Map (1 Tempoangabe pro Zählzeit).
Diese Tempoinformationen benötige ich in einer .ly-Datei (es geht um die Erstellung eines Videos mit mitlaufenden Noten zu einer real gespielten
Audiodatei mit stets schwankendem Tempo).
Eigentlich einfach zu erledigen mit midi2ly. Allerdings gibt es beim Konvertieren nun das Problem, dass die Werte mit drei Nachkommastellen zu einfachen Ganzzahligen
gerundet werden. Und auch das nicht immer korrekt. So wird z.B. 70.9 schonmal zu 70.
Weiß jemand, ob man diese Genauigkeit der Tempo-Umwandlung irgendwo einsetellen kann? Ich habe noch nichts gefunden.
Falls jemand eine andere Idee hat, wie man die Tempo-Information anderweitig aus der Midi-Datei extrahieren kann, so dass man sie z.B. einfach als Text hat, wäre mir
auch sehr geholfen.

Vielen Dank!

Malte

Hallo calp,

ich hab weder ne Ahnung von MIDI noch von Python noch von midi2ly, aber ich würd mal nach einem Blick auf midi2ly.py vermuten, daß das Problem ist, daß midi2ly den \tempo-Befehl verwendet, der nur ganze Zahlen akzeptiert. Die interessanten Stellen von midi2ly.py sind vermutlich die Zeilen 300–312 und 478–482.

Zwei Ideen, die beide eine Änderung an midi2ly erfordern:

  • Bisher wird der \tempo-Befehl genutzt, um das Tempo der Viertelnoten festzulegen. Da gibts nur 70 oder 71, nichts dazwischen. Stattdessen könntest du aber (z. B.) auf Sechzehntelbasis gehen und hättest dann zwischen 280 und 284 auch noch 281, 282, 283.
  • Statt des Tempo-Befehls kannst du \set Score.tempoWholesPerMinute = #(ly:make-moment ...) verwenden. Ich weiß es nicht 100%, aber ich würde vermuten, daß das fast beliebig genaue Brüche als Argumente nimmt.

Die zweite Lösung ist auf jeden Fall flexibler. Kriegst du solche Änderungen selbst hin oder bräuchtest du Hilfe von einem Programmierer?

calp

Hallo Malte,

vielen Dank für die Antwort.
Soweit hatte ich natürlich gar nicht gedacht, dass es an dem \tempo-Befehl liegen könnte...

Unter der Voraussetzung weiss ich nicht, ob mein ursprünglicher Plan überhaupt sinnvoll ist und
ob Deine Vorschläge dafür funktionieren.

Was ich eigentlich vorhatte:
Ich möchte ein Video des Notentextes mit ./mkvideo erstellen. http://lilypond.1069038.n5.nabble.com/Video-generation-on-linux-systems-Note-and-rests-change-color-td204566.html
Dieses Video soll synchron zu einer von einem echten Menschen gespielten Audioaufahme laufen. ./mkvideo kann Tempoänderungen, die in der lilypond-Datei mit \tempo angegeben sind, interpretieren und entsprechend die Geschwindigkeit der Noten anpassen. Das wollte ich jetzt für die Anpassung nutzen. (Irgendwo hatte ich gelesen, dass ein anderer Versuch zur Erstellung von Videos ein derartiges Verfahren benutzt. Dort wird die Tempoinformation in einer separaten Datei gespeichert und beim Erstellen des Videos ausgelesen).

Ich kann nicht beurteilen, ob Deine Vorschläge für diesen Fall an der richtigen Stelle ansetzen, oder ob man die Tempo-Informationen irgendwie anders in die Hilfsdatei videohelper.notes integrieren kann? Dort stehen ja nachher die gewünschten Daten.

Programmierhilfe bräuchte ich in jedem Fall, meine Kenntnisse sind da doch eher rudimentär...

Auf jeden Fall vielen Dank für die Vorschläge und Hilfe!

Hilflos-im-Code

Mal andere Frage, hast Du mal überprüft, ob die eingespielte Aufnahme zeitlich deckungsgleich der abgespielten MIDI-Datei ist?

Ich habe so etwas noch nie gemacht. Aber so unflexibel die Graphen der Tempomaps in den mir bekannten DAWs sind, könnte ich mir ein Auseinanderklaffen vorstellen. Ob gravierend oder nicht, sei dahingestellt.