midi with ctypes

Anton Vredegoor anton at vredegoor.doge.nl
Thu Aug 7 14:04:29 EDT 2003


Recently there has been a lot of progress concerning the integration
of midi into python. A midipy.cpp for Python20 is found and various
compiling efforts having been undertaken to compile it for Python23.
See the other threads about midipy.cpp for more info.

However, seeing that the resulting midipy.pyd is only 48 kilobyte long
and seeing that midipy.cpp exports only 14 functions, most of which
are inside winmm.dll (for W98 and W2000 at least) I decided to start
another effort, which I'm presenting below and for which I hope kind
people will add some functions since I doesn't seem to be too hard.

first create a winmm.def like this:

pexports winmm.dll > winmm.def

Now open winmm.def and find the relevant functions, compare them with
what's inside midipy.cpp and try to reproduce them using ctypes. The
file "mmedia.hlp" from Borland C++ Builder for example, contains
detailed info about midi functions, most of which seem to be direct
wrappers around the functions inside winmm.dll .

Now to get started try this:

#ctypesmidipy.py

from ctypes import *

def getNumMidiInDevices():
    return windll.winmm.midiInGetNumDevs()

def getNumMidiOutDevices():
    return windll.winmm.midiOutGetNumDevs()

def test():
    print getNumMidiInDevices()
    print getNumMidiOutDevices()

if __name__=='__main__':
    test()

Please note that after importing this file every function should work
the same as if midipy.pyd had been imported. Not being very familiar
with midi programming I succeeded only to get 2 of the 14 functions
working. Getting more functions to work should be harder, but not very
hard. Please, anybody reading this, add a function if there's a sudden
insight into how it should be done. By and by ctypesmidipy.py will be
put together like a little pypy-alike project replacing midipy.cpp :-)
Any feasibility studies and remarks about possible legal objections to
this are very welcome too.

Anton




More information about the Python-list mailing list