neingeist
/
arduinisten
Archived
1
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

76 lines
2.3 KiB
Python

class EventDispatcherBase:
def __init__(self, outstream):
"""
The event dispatcher generates events on the outstream. This
is the base implementation. It is more like an interface for
how the EventDispatcher. It has the methods that are used by
the Midi Parser.
"""
# internal values, don't mess with 'em directly
self.outstream = outstream
def eof(self):
"End of file!"
self.outstream.eof()
def update_time(self, new_time=0, relative=1):
"Updates relative/absolute time."
self.outstream.update_time(new_time, relative)
# 'official' midi events
def header(self, format, nTracks, division):
"Triggers the header event"
self.outstream.header(format, nTracks, division)
def start_of_track(self, current_track):
"Triggers the start of track event"
# I do this twice so that users can overwrite the
# start_of_track event handler without worrying whether the
# track number is updated correctly.
self.outstream.set_current_track(current_track)
self.outstream.start_of_track(current_track)
# Event dispatchers for midi events
def channel_messages(self, hi_nible, channel, data):
"Dispatches channel messages"
self.outstream.channel_message(hi_nible, channel, data)
def continuous_controllers(self, channel, controller, value):
"Dispatches channel messages"
self.outstream.continuous_controller(channel, controller, value)
def system_commons(self, common_type, common_data):
"Dispatches system common messages"
self.outstream.system_common(common_type, common_data)
def meta_event(self, meta_type, data):
"Dispatches meta events"
self.outstream.meta_event(meta_type, data)
def sysex_events(self, data):
"Dispatcher for sysex events"
self.outstream.sysex_event(data)
if __name__ == '__main__':
from MidiToText import MidiToText
from constants import NOTE_ON
outstream = MidiToText()
dispatcher = EventDispatcherBase(outstream)
dispatcher.channel_messages(NOTE_ON, 0x00, '\x40\x40')