Domanda

Ho musica di sottofondo per alcune canzoni disponibili in entrambi i formati MID e .KAR, ma in ogni caso è in riproduzione un po 'più veloce di quanto mi piacerebbe. Qual è il modo più semplice per creare sia i file mid o .KAR con lo stesso contenuto, ma ad un ritmo più lento - per esempio, uno rallentato del 20% o giù di lì, un altro 15%, un terzo del 25%, e così via?

Idealmente, avrei preferito uno script Python cross-platform (dal momento che mi permettesse di modificare facilmente sperimentalmente la fonte a convergere verso l'esatto effetto che voglio ;-), ma mi prendo alcuna soluzione gratuita che viene eseguito in Linux (Ubuntu 8.04 se è importante) e Mac (Mac OS X 10.5, 10.6, ma la compatibilità preferito).

È stato utile?

Soluzione

Si potrebbe modificare il file, come da http://www.sonicspot.com/guide /midifiles.html

Anche se probabilmente c'è una lettura MIDI / scrittura libreria già. In realtà, si trattava di una questione di vedere le questioni relative: semplice, Cross Platform MIDI Biblioteca per Python

  

Set Tempo

     

Questo meta evento imposta la   sequenza tempo in termini di   microsecondi per quarto di nota che è   codificati in tre byte. Di solito è   trovato nel primo blocco pista,   tempo allineato a verificarsi contemporaneamente   come messaggio MIDI clock per la promozione   sincronizzazione più accurata. Se no   evento set tempo è presente, 120 battiti   per minuto è assunto. Il seguente   La formula di può essere utilizzato per tradurre il   tempo da microsecondi per   quarto di nota a battiti al minuto e   indietro.

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

Altri suggerimenti

Come dice Vinko, è possibile modificare il file MIDI, ma dal momento che si tratta di un formato binario, spremuto nel minor numero di bit possibili, aiuta ad avere aiuto.

Questo è un midi-to-text converter (e viceversa):
http://midicomp.opensrc.org/
Ho usato un po 'ultimamente. è abbastanza banale da fare l'elaborazione del testo (ad esempio la ricerca di linea con "Tempo") per le operazioni semplici una volta che avete il file midi come testo. non hanno provato su Mac (compilato senza alcun problema su Ubuntu 8.04).

Per quanto riguarda midifile tempo specifico, è davvero facile per rallentare o accelerare la riproduzione in quanto la tempistica degli eventi è specificato in termini di "zecche", la cui durata effettiva in secondi è determinato dal parametro tempo descritto in citazione di Vinko. Credo che firma il tempo non è così rilevante, ed è principalmente per la visualizzazione di bar / beat correttamente quando viene aperto in un sequencer MIDI.

Inoltre, a parte pyPortMidi, ci sono un paio di altri moduli Python midi intorno.

[hmmm ... Sembra che io possa pubblicare solo su link per posta, essendo un nuovo utente. Cercherò postare i link ai moduli Python in un paio di commenti o un altro paio di risposte ...]

È possibile utilizzare music21 per fare questo, anche se ho testato solo su OSX 10.10.1.

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') 

Offset sono come i timestamp di ogni nota, e la durata è quanto a lungo la nota è suonato, credo applicando lo stesso fattore di scala a ciascuno è un po 'come la regolazione del tempo.

Se siete come me allora si sta ascoltando le stesse canzoni 7 anni più tardi e può dare a questo una prova! In caso contrario, spero che questo aiuta qualcun altro che si è svegliato oggi, come me, ed era graffiare la mia testa cercando di risolvere questo problema con facilità.

Ho un interesse simile come il tuo post. Ho appena imbattuto in questa biblioteca che sembra molto promettente:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top