2009-02-20 75 views
23

Quiero crear una pequeña aplicación que cree sonidos MIDI. Nunca he tratado el sonido en la programación, así que me gustaría comenzar con algo básico y con buena documentación. Quiero quedarme con Python ya que estoy más cómodo con él y no quiero abrumarme, inicialmente.Biblioteca MIDI simple, multiplataforma para Python

Mi tiempo se divide aproximadamente 50/50 entre Windows y Ubuntu por lo que algo que "simplemente funciona" en ambas plataformas sería realmente útil.

¿Alguna sugerencia?

+0

Relacionados: http://stackoverflow.com/questions/507227/high-level-programming-language-for-music-composition –

+0

¿Por qué no marca su pregunta como respondida? – Shimmy

+3

Su pregunta no es muy clara. No puedes "crear sonidos MIDI". MIDI no almacena ni transmite sonido, solo datos de control para equipos/software compatibles con MIDI. Supongo que quiere a) a hablar con otros dispositivos/software MIDI en tiempo real usando la interfaz MIDI de su computadora o b) leer y escribir archivos MIDI estándar (SMF). Estos son dos requisitos diferentes (aunque muchas aplicaciones tendrán ambos) y hay diferentes bibliotecas para sugerir para ambas tareas –

Respuesta

33

La biblioteca MIDIUtil (alojada en here en Google Code) hace lo que usted quiere : escribe archivos MIDI desde una biblioteca de Python pura. Una vez que algo bueno de esto (y la revelación completa: soy el autor) es que no tienes que hacer un seguimiento de los eventos MID de nivel inferior, como note-on y note-off: los maneja por ti.

A modo de ejemplo para escribir una nota, que haría algo como:

MyMIDI = MIDIFile(1) 
track = 0 
channel = 0 
pitch = 60 
time = 0 
duration = 1 
volume = 100 
MyMIDI.addNote(track,channel,pitch,time,duration,volume) 

Esperanza esto ayuda

+2

Realmente tarde para publicar esto, pero ¿puede manejar acordes? Podría estar implementando esto en mi software si puede ... – Blender

+1

¡Eso es realmente útil, gracias! – Dan

+2

puede definir fácilmente los acordes, ¿verdad? 'para tono en tonos: midi.addNote (.., tono, ...)' –

8

pyPortMidi es un contenedor Python de PortMidi, que se describe como "una biblioteca C multiplataforma para control MIDI en tiempo real". No lo he usado yo mismo, pero parece muy prometedor. Mención explícita de poder enviar datos MIDI en tiempo real.

+4

Para las personas que encuentran esta página a través de Google: tenga en cuenta que pyPortMidi se actualizó por última vez el 15 de marzo de 2005. Sospecho que ha sido abandonado. – larsks

+2

Hay una versión un poco más actualizada de pyPortMidi incluida en pyGame, que he utilizado con éxito. – rjmunro

+0

ni siquiera puede enviar curvas de tono sin escribirlas en formato hexadecimal crudo? 'player.write_short (0xE0, 0x00, 0x60)':/ – endolith

-3

Mire cSounds.

+3

¿Podría ampliar esta respuesta? La página cSounds no menciona MIDI o Python. – rjmunro

+0

@rjmunro, FYI: http://www.csounds.com/manual/html/py.html –

3

El soporte Midi (entrada y salida) se ha agregado a pyGame 1.9, aunque se encuentra principalmente en la etapa de desarrollo y aún no está muy bien documentado, pero funciona.

La compatibilidad con Midi también se está desarrollando en el sucesor de pyGame, pgreloaded (o pygame2).

También tenga en cuenta que aunque pyGame tiene 'juego' en el título, sus usos van más allá del diseño del juego.

+4

El soporte MIDI en PyGame se basa en la misma base de código que pyPortMidi (vea la respuesta de @ unwind) y el código pyPortMidi en [ El repositorio de PyGame] (https://bitbucket.org/pygame/pygame) es actualmente la versión más actualizada y utilizable. Descargo de responsabilidad: soy el autor de un parche para la versión pyPortMidi de PyGame, que limpia mucho el código y corrige los errores graves. El parche aún no se ha aplicado en el [repositorio portmidi] (https://portmedia.svn.sourceforge.net/svnroot/portmedia/portmidi/), donde el código pyPortMidi está viviendo ahora. Hay muchos otros repositorios pyPortMidi en la red que están desactualizados. –

10

Estaba buscando una biblioteca Python puro para generar un archivo MIDI, mxm's Python MIDI library es exactamente eso.

De this dzone snippet, hay una versión de un solo archivo de la biblioteca anterior, smidi.py (gist'd here para la posteridad)

uso es bastante simple:

>>> import smidi 
>>> m = smidi.MidiOutFile('out.mid') 
>>> m.header() 
>>> m.start_of_track() 
>>> m.update_time(0) 
>>> m.note_on(note=0x40) # single note 
>>> m.update_time(192) 
>>> m.note_off(note=0x40) # stop it after 192 
>>> m.update_time(0) 
>>> m.end_of_track() 
>>> m.eof() 

obras de suponer que en Windows (como el ejemplo originales usa C:\out.mid como nombre de archivo de salida), y lo he probado en OS X

7

Si sólo necesita generar Midi o procesar archivos midi, tratar mingus, Es una gran paquete y también permite abstracciones mucho más altas como acordes, progresiones de acordes, escalas, etc.

5

Probé ocho paquetes enumerados en el wiki http://wiki.python.org/moin/PythonInMusic. me encontré con que el que music21 (http://web.mit.edu/music21/) fue

  • el más completo
  • el mejor tutorial
  • más fácil de instalar en las ventanas

pero en cuanto a su solicitud de simplicidad, creo que no es el más simple. Pero no pude obtener ninguno de los otros programas para leer archivos midi de manera robusta (tengo una variedad de formatos de archivos midi raros y maravillosos)

Cuestiones relacionadas