#!/usr/bin/python
# -*- coding: utf-8 -*-
# mingus - Music theory Python package, sequencer_observer module.
# Copyright (C) 2008-2009, Bart Spaans
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""Provides an easy to extend base class that can be used to observe a
Sequencer.
Each time a Sequencer starts playing a new Note, Bar, w/e, an event is
fired; this SequencerObserver intercepts the event messages and calls the
proper function so you only have to implement the functions for the events
you need to see.
"""
from mingus.midi.sequencer import Sequencer
[docs]class SequencerObserver(object):
"""An easy to extend base class that can be used to observe a Sequencer.
Each time a Sequencer starts playing a new Note, Bar, w/e, an event is
fired; this SequencerObserver intercepts the event messages and calls
the proper function so you only have to implement the functions for the
events you need to see.
"""
# Low Level MIDI Events
[docs] def play_int_note_event(self, int_note, channel, velocity):
pass
[docs] def stop_int_note_event(self, int_note, channel):
pass
[docs] def cc_event(self, channel, control, value):
pass
[docs] def instr_event(self, channel, instr, bank):
pass
[docs] def sleep(self, seconds):
pass
[docs] def play_Note(self, note, channel, velocity):
pass
[docs] def stop_Note(self, note, channel):
pass
[docs] def play_NoteContainer(self, notes, channel):
pass
[docs] def stop_NoteContainer(self, notes, channel):
pass
[docs] def play_Bar(self, bar, channel, bpm):
pass
[docs] def play_Bars(self, bars, channels, bpm):
pass
[docs] def play_Track(self, track, channel, bpm):
pass
[docs] def play_Tracks(self, tracks, channels, bpm):
pass
[docs] def play_Composition(self, composition, channels, bpm):
pass
[docs] def notify(self, msg_type, params):
if msg_type == Sequencer.MSG_PLAY_INT:
self.play_int_note_event(params['note'], params['channel'],
params['velocity'])
elif msg_type == Sequencer.MSG_STOP_INT:
self.stop_int_note_event(params['note'], params['channel'])
elif msg_type == Sequencer.MSG_CC:
self.cc_event(params['channel'], params['control'], params['value'])
elif msg_type == Sequencer.MSG_INSTR:
self.instr_event(params['channel'], params['instr'], params['bank'])
elif msg_type == Sequencer.MSG_SLEEP:
self.sleep(params['s'])
elif msg_type == Sequencer.MSG_PLAY_NOTE:
self.play_Note(params['note'], params['channel'],
params['velocity'])
elif msg_type == Sequencer.MSG_STOP_NOTE:
self.stop_Note(params['note'], params['channel'])
elif msg_type == Sequencer.MSG_PLAY_NC:
self.play_NoteContainer(params['notes'], params['channel'])
elif msg_type == Sequencer.MSG_STOP_NC:
self.stop_NoteContainer(params['notes'], params['channel'])
elif msg_type == Sequencer.MSG_PLAY_BAR:
self.play_Bar(params['bar'], params['channel'], params['bpm'])
elif msg_type == Sequencer.MSG_PLAY_BARS:
self.play_Bars(params['bars'], params['channels'], params['bpm'])
elif msg_type == Sequencer.MSG_PLAY_TRACK:
self.play_Track(params['track'], params['channel'], params['bpm'])
elif msg_type == Sequencer.MSG_PLAY_TRACKS:
self.play_Tracks(params['tracks'], params['channels'],
params['bpm'])
elif msg_type == Sequencer.MSG_PLAY_COMPOSITION:
self.play_Composition(params['composition'], params['channels'],
params['bpm'])