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

¿Fue útil?

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:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top