Cómo “desaceleración” un archivo MIDI (idealmente en Python)?
Pregunta
Me tiene música de fondo para algunas canciones disponibles en ambos formatos .MID y .KAR, pero en cada caso se está reproduciendo un poco más rápido de lo que me gustaría. ¿Cuál es la forma más sencilla de crear cualquiera de los archivos .MID o .KAR con el mismo contenido, pero a un ritmo más lento - por ejemplo, una ralentizado un 20% más o menos, otro en un 15%, un tercio en un 25%, y así sucesivamente?
Lo ideal sería que preferiría una secuencia de comandos de Python multiplataforma (ya que eso me permite fácilmente ajustar experimentalmente la fuente a converger con el efecto exacto que quiero ;-), pero me quedo con cualquier solución libre que se ejecuta en Linux (Ubuntu 8.04 si importa) y Mac (Mac OS X 10.5, 10.6, pero la compatibilidad prefiere).
Solución
Se puede editar el archivo, según http://www.sonicspot.com/guide /midifiles.html
A pesar de que probablemente es una lectura MIDI / biblioteca por escrito ya. De hecho, era una cuestión de ver las preguntas relacionadas: , Cruz Plataforma MIDI biblioteca de Python
Set Tempo
Esto establece la metaevento tempo secuencia en términos de microsegundos por cuarto de nota que es codificada en tres bytes. Por lo general, encontrado en el primer trozo de pista, alineada en el tiempo que se produzca al mismo tiempo como un mensaje de reloj MIDI para promover sincronización más precisa. Si no conjunto evento de tempo está presente, 120 latidos por minuto se supone. El seguimiento la fórmula de se pueden utilizar para traducir el tempo de microsegundos por de negra a latidos por minuto y espalda.
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
Otros consejos
Como dice Vinko, puede editar el archivo MIDI, pero ya que es un formato binario, exprimido en el menor número de bits posibles, esto ayuda a tener ayuda.
Este es un convertidor midi a texto (y viceversa):
http://midicomp.opensrc.org/
He estado usando un poco últimamente. que es bastante trivial para realizar el procesamiento de texto (por ejemplo, la búsqueda de línea con "Tempo") para operaciones simples una vez que tenga el archivo MIDI como texto. no han intentado en mac (compilado sin ningún problema en ubuntu 8.04).
En cuanto a tempo archivo MIDI específicamente, es muy fácil para ralentizar o acelerar la reproducción ya se especifica el tiempo de los eventos en términos de "ticks", cuyo verdadero duración en segundos se determina por el parámetro tempo se describe en la cita de Vinko. Creo compás no es tan relevante, y es principalmente para la visualización de compases / tiempos correctamente cuando se abre en un secuenciador MIDI.
Además, aparte de pyPortMidi, hay un par de otros módulos de Python midi alrededor.
[hmmm ... parece que sólo se puede publicar en el enlace por mensaje, al ser un nuevo usuario. Voy a tratar de publicar los enlaces a los módulos de Python en un par de comentarios u otro par de respuestas ...]
Se puede usar music21 hacer esto, aunque sólo he probado que en 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')
Las compensaciones son como las marcas de tiempo de cada nota, y la duración es el tiempo que se hace sonar la nota, creo que aplicando el mismo factor de escala para cada uno es algo así como el ajuste del tempo.
Si usted es como yo, entonces usted está escuchando las mismas canciones 7 años después y puede darle una oportunidad! De lo contrario, espero que esto ayude a alguien más que se despertó hoy como yo y estaba rascando la cabeza tratando de resolver este problema fácilmente.
I tienen un interés similar al de su puesto. Acabo de encontrar esta biblioteca que parece muy prometedor: