Python Midi package 0.1

Max M maxm at mxm.dk
Tue Aug 26 09:49:34 CEST 2003


If anybody is interrested in Midi, but are not on the Python Midi list, 
I will just notify that I have released the first version of a high 
level midi package for Python.

It is fully functional. It reads and writes midi files! It is *very* 
easy to write your own event handlers to make midi files do whatever you 
want them to.

It uses the same general ideas as the Sax parser for xml.


#########################################
# example #1

"""
This prints all note_on events on midi channel 0. It's a short example
of creating your own event handler by subclassing the MidiOutStream.
"""

from MidiOutStream import MidiOutStream
from MidiInFile import MidiInFile


class NoteOnPrinter(MidiOutStream):

     "Prints all note_on events on channel 0"

     def note_on(self, channel=0, note=0x40, velocity=0x40):
         if channel == 0:
             print channel, note, velocity, self.rel_time()


event_handler = NoteOnPrinter()

in_file = 'midiout/minimal_type0.mid'
midi_in = MidiInFile(event_handler, in_file)
midi_in.read()

#########################################


#########################################
# example #2

"""
This is an example of how to create the smallest possible type 0 midi
file, where all the midi events are in the same track.
"""

from MidiOutFile import MidiOutFile

out_file = 'midiout/minimal_type0.mid'
midi = MidiOutFile(out_file)

# non optional midi framework
midi.header()
midi.start_of_track()

# musical events

midi.update_time(0)
midi.note_on(channel=0, note=0x40)

midi.update_time(192)
midi.note_off(channel=0, note=0x40)

# midi framework

midi.update_time(0)
midi.end_of_track() # not optional!

midi.eof()
#########################################


It cannot read/write midi ports at this point. So no realtime stuff yet.


Get it at:
http://www.mxm.dk/technologies/pythonmidi/


regards Max M





More information about the Python-list mailing list