Python und MIDI (ALSA, pygame/PortMidi)
- Author
Zusammenfassung
Die MIDI-Unterstützung unter Python war in der Vergangheit mehr schlecht als recht. Es gibt zwar einige Libraries und Tools (siehe Python Wiki) aber viele sind nur teilweise fertig und/oder werden nicht mehr weiterentwicklet. Außerdem sind die MIDI/Audio-Frameworks der verbreitetsten Plattformen (Linux, OS X, Windows) nicht unmittelbar miteinander kompatibel und es fehlte eine Python-Library zur plattform-übergreifenden MIDI-Programmierung. Ein solche ist mit PortMidi nun seit einiger Zeit vorhanden und es gibt sogar mehrere Python-Bindungs dafür. Diese Library unter allen Plattformen erfolgreich zu kompilieren war allerdings nicht ganz leicht. Seit Version 1.9 beinhaltet die Python Multimedia-Library PyGame ein Binding für die PortMidi-Library und diese ist dadurch nun viel einfacher zu installieren und zu nutzen. Damit braucht sich der Python-Programmierer nicht mehr um die Low-Leveldetails der MIDI-Schnittstelle kümmern und kann lustig drauf los hacken um MIDI-Daten zu empfangen, zu verwursten und zu versenden.
SVN Repository
svn co svn://svn.chrisarndt.de/talks/pybarcamp
Enthält zwei PyGame MIDI Testskripte, einen 4Mb GM-Soundfont und ein Shellskript zum Starten von fluidsynth.
Was braucht man?
Linux
alsa, libasound2, alsa-utils
timidity oder fluidsynth
- pygame 1.9.1
Hilfreich:
virtualenv
vmpk oder vkeyb
Windows
pygame 1.9.1
Hilfreich:
- MIDI-Ox
- MIDI Yoke
MIDI Setup unter Linux
MIDI Geräte anzeigen (Paket alsa-utils installieren):
amidi -l
Verfügbare ALSA Sequenzer-Ports anzeigen:
aplaymidi -l
(nur Output-Ports) oder:
aconnect -io
Sequenzer-Ports verbinden:
aconnect 128:0 129:0
wobei 128:0 Beispiel für den Input-Port (d.h. über den Daten rein kommen!) und 129:0 für den Output-Port ist.
PyGame Installation
Windows
- Python istallieren (2.5 oder 2.6)
PyGame Binary Installer runterladen und installieren
- Fertig!
Linux & Co
Entwder Paket python-pygame >= 1.9.1 installieren, falls Version nicht vorhanden via easy_install selbst kompilieren.
Voraussetzungen:
Pakete build-essentials, python, python-dev, libsdl-dev, libsdl-image-dev, libpm-dev und weitere, die nach dem configure-Schritt der Installation angezeigt werden.
Dann:
- Setuptools/Distribute installieren.
easy_install virtualenv virtualenv --no-site-packages venv source venv/bin/activate easy_install pygame
Links
MIDI Dokumentation:
Somascape Guide to the MIDI Specification: http://www.somascape.org/midi/tech/spec.html
MIDI Notennummern: z.B. http://tonalsoft.com/pub/news/pitch-bend.aspx
General MIDI (GM) Programmnummern: http://www.somascape.org/midi/help/gmins.html
Somascape Standard MIDI Files Specification: http://www.somascape.org/midi/tech/mfile.html
Python MIDI Libraries:
PyGame MIDI API: http://www.pygame.org/docs/ref/midi.html
PortMidi (bei PyGame schon dabei): http://sourceforge.net/apps/trac/portmedia/wiki/portmidi
Python Bindings für das ALSA Sequencer Interface (Auswahl):
Offizielle ALSA Python Bindings pyalsa: ftp://ftp.alsa-project.org/pub/pyalsa/
ALSA Libary API Referenz:
Rawmidi Interface: http://www.alsa-project.org/alsa-doc/alsa-lib/rawmidi.html
Sequencer Interface: http://www.alsa-project.org/alsa-doc/alsa-lib/seq.html
Programme:
Windows:
MIDI-Ox: http://www.midiox.com/
MIDI Yoke: http://www.midiox.com/myoke.htm#Download
Linux:
fluidsynth: http://fluidsynth.resonance.org/trac (Ubuntu Pakete)
Virtual MIDI Piano Keyboard (vmpk): http://vmpk.sourceforge.net/
Sonstiges:
Chaos Radio Express Podcast: Musik und MIDI-Hacking (CRE145): http://chaosradio.ccc.de/cre145.html