Frage

Ich habe Hintergrundmusik für einige Songs, die sowohl in .mid- als auch in .kar -Formaten verfügbar sind, aber in jedem Fall wird es etwas schneller gespielt als ich möchte. Was ist der einfachste Weg, um entweder .mid- oder .kar -Dateien mit demselben Inhalt zu erstellen, aber in einem langsameren Tempo - sagen wir, einer verlangsamt sich um 20%, ein weiteres um 15%, ein Drittel um 25%und so weiter?

Idealerweise würde ich ein plattformübergreifendes Python-Skript bevorzugen (da ich dies ermöglicht, die Quelle leicht experimentell zu optimieren, um den genauen Effekt zu konvergieren; 8.04 Wenn es wichtig ist) und Mac (Mac OS X 10.5, aber 10,6 -Kompatibilität bevorzugt).

War es hilfreich?

Lösung

Sie können die Datei gemäß bearbeiten http://www.sonicspot.com/guide/midifiles.html

Obwohl es wahrscheinlich bereits eine MIDI -Lesen-/Schreibbibliothek gibt. Tatsächlich ging es darum, die damit verbundenen Fragen zu sehen: Einfache Cross -Plattform MIDI Library für Python

Tempo einstellen

Dieses Meta-Ereignis legt das Sequenztempo in Bezug auf Mikrosekunden pro Viertelstaat fest, das in drei Bytes codiert ist. Es befindet sich normalerweise im ersten Track-Chunk, der zeitlich ausgerichtet ist, um gleichzeitig eine MIDI-Uhr-Nachricht zu finden, um eine genauere Synchronisation zu fördern. Wenn kein Set -Tempo -Event vorhanden ist, werden 120 Schläge pro Minute angenommen. Die folgenden Formel können verwendet werden, um das Tempo von Mikrosekunden pro Viertel-Note auf Schläge pro Minute und zurück zu übersetzen.

MICROSECONDS_PER_MINUTE = 60000000

BPM = MICROSECONDS_PER_MINUTE / MPQN
MPQN = MICROSECONDS_PER_MINUTE / BPM
Meta Event  Type    Length  Microseconds/Quarter-Note
255 (0xFF)  81 (0x51)   3   0-8355711

Andere Tipps

Wie Vinko sagt, können Sie das Midifile bearbeiten, aber da es sich um ein binäres Format handelt, das in die geringste Anzahl von Bits gedrückt wird, hilft es, Hilfe zu haben.

Dies ist ein MIDI-zu-Text-Wandler (und umgekehrt):
http://midicomp.opensrc.org/
Ich habe es in letzter Zeit ziemlich viel benutzt. Es ist ziemlich trivial, eine Textverarbeitung (z. B. die Suche nach einer Linie mit "Tempo") für einfache Operationen durchzuführen, sobald Sie das mittelgroße Text als Text haben. Ich habe nicht auf Mac ausprobiert (kompiliert ohne Problem bei Ubuntu 8.04).

In Bezug auf das Midifile -Tempo ist es sehr einfach, die Wiedergabe zu verlangsamen oder zu beschleunigen, da das Timing der Ereignisse in Bezug auf "Zecken" angegeben ist, deren tatsächliche Dauer in Sekunden durch den in Vinko's Zitat beschriebenen Tempo -Parameter bestimmt wird. Ich glaube, die Zeitsignatur ist nicht so relevant und ist hauptsächlich zum korrekten Anzeigen von Balken/Beats, wenn sie in einem MIDI -Sequenzer geöffnet werden.

Abgesehen von Pyportmidi gibt es auch ein paar andere Python Midi -Module.

Hmmm ... Es scheint, dass ich nur auf Link pro Beitrag posten kann, da ich ein neuer Benutzer ist. Ich werde versuchen, die Links zu den Python -Modulen in ein paar Kommentaren oder einem anderen Paar Antworten zu veröffentlichen ...

Sie können verwenden Musik21 Dazu habe ich es nur unter OSX 10.10.1 getestet.

import music21

fctr = 1.25 # scale (in this case stretch) the overall tempo by this factor
score = music21.converter.parse('song.mid')
newscore = score.scaleOffsets(fctr).scaleDurations(fctr)

newscore.write('midi','song_slow.mid') 

Offsets sind wie die Zeitstempel jeder Note, und Dauer ist, wie lange die Notiz ertönt. Ich glaube, das Anwenden des gleichen Skalierungsfaktors auf jeden ist wie das Anpassen des Tempos.

Wenn Sie wie ich sind, hören Sie 7 Jahre später dieselben Songs und können es versuchen! Ansonsten hoffe ich, dass dies jemand anderem hilft, der heute wie ich aufgewacht ist und den Kopf kratzte, um dieses Problem leicht zu lösen.

Ich habe ein ähnliches Interesse wie Ihr Beitrag. Ich bin gerade auf diese Bibliothek gestoßen, die sehr vielversprechend aussieht:

http://web.mit.edu/music21/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top