/src/echonest/support/midi/experimental/EventDispatcherBase.py
http://echo-nest-remix.googlecode.com/ · Python · 76 lines · 37 code · 27 blank · 12 comment · 1 complexity · 64ea7f519085b09e60dac050bedb6d44 MD5 · raw file
- 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')