supriya_midi.messages¶
MIDI message classes.
Support parsing raw integer sequendces from the RtMidi backend into dataclasses representing each message type in the MIDI spec, and support serializing those message dataclasses back into raw integers for sending.
- class MidiMessage¶
Bases:
objectA MIDI message.
- classmethod parse(message: Sequence[int]) MidiMessage¶
Parse a sequence of integers into a MIDI message.
Use this method on the parent class to parse any valid sequence of integers into the appropriate subclass.
- serialize() tuple[int, ...]¶
Serialize this MIDI message into a sequence of integers.
- class NoteOffMessage(channel_id: int, note_number: int, velocity: int)¶
Bases:
MidiMessageA note off MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a note off message.
>>> MidiMessage.parse([0x83, 0x3E, 0x78]) NoteOffMessage(channel_id=3, note_number=62, velocity=120)
- serialize() tuple[int, ...]¶
Serialize this note off message into a sequence of integers.
>>> NoteOffMessage(channel_id=3, note_number=62, velocity=120).serialize() (131, 62, 120)
- class NoteOnMessage(channel_id: int, note_number: int, velocity: int)¶
Bases:
MidiMessageA note on MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a note on message.
>>> MidiMessage.parse([0x92, 0x3D, 0x78]) NoteOnMessage(channel_id=2, note_number=61, velocity=120)
- serialize() tuple[int, ...]¶
Serialize this note on message into a sequence of integers.
>>> NoteOnMessage(channel_id=2, note_number=61, velocity=120).serialize() (146, 61, 120)
- class AftertouchMessage(channel_id: int, note_number: int, pressure: int)¶
Bases:
MidiMessageAn aftertouch MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into an aftertouch message.
>>> MidiMessage.parse([0xA4, 0x3F, 0x79]) AftertouchMessage(channel_id=4, note_number=63, pressure=121)
- serialize() tuple[int, ...]¶
Serialize this after touch message into a sequence of integers.
>>> AftertouchMessage(channel_id=4, note_number=63, pressure=121).serialize() (164, 63, 121)
- class ControllerChangeMessage(channel_id: int, controller_number: int, controller_value: int)¶
Bases:
MidiMessageA controller change MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a controller change message.
>>> MidiMessage.parse([0xB6, 0x07, 0x10]) ControllerChangeMessage(channel_id=6, controller_number=7, controller_value=16)
- serialize() tuple[int, ...]¶
Serialize this controller change message into a sequence of integers.
>>> ControllerChangeMessage(channel_id=6, controller_number=7, controller_value=16).serialize() (182, 7, 16)
- class ProgramChangeMessage(channel_id: int, program_number: int)¶
Bases:
MidiMessageA program change MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a program change message.
>>> MidiMessage.parse([0xC6, 0x07]) ProgramChangeMessage(channel_id=6, program_number=7)
- serialize() tuple[int, ...]¶
Serialize this program change message into a sequence of integers.
>>> ProgramChangeMessage(channel_id=6, program_number=7).serialize() (198, 7)
- class ChannelPressureMessage(channel_id: int, pressure: int)¶
Bases:
MidiMessageA channel pressure MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a channel pressure message.
>>> MidiMessage.parse([0xD6, 0x35]) ChannelPressureMessage(channel_id=6, pressure=53)
- serialize() tuple[int, ...]¶
Serialize this channel pressure message into a sequence of integers.
>>> ChannelPressureMessage(channel_id=6, pressure=53).serialize() (214, 53)
- class PitchWheelMessage(channel_id: int, transposition: int)¶
Bases:
MidiMessageA pitch/modulation wheel MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a pitch wheel message.
>>> MidiMessage.parse([0xE3, 0x54, 0x39]) PitchWheelMessage(channel_id=3, transposition=7380)
- serialize() tuple[int, ...]¶
Serialize this pitch wheel message into a sequence of integers.
>>> PitchWheelMessage(channel_id=3, transposition=7380).serialize() (227, 84, 57)
- class SystemExclusiveMessage(manufacturer_id: int, data: tuple[int, ...])¶
Bases:
MidiMessageA system exclusive MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a system exclusive message.
>>> MidiMessage.parse([0xF0, 0x41, 0x01, 0x34, 0xF7]) SystemExclusiveMessage(manufacturer_id=65, data=(1, 52))
- serialize() tuple[int, ...]¶
Serialize this system exclusive message into a sequence of integers.
>>> SystemExclusiveMessage(manufacturer_id=65, data=(1, 52)).serialize() (240, 65, 1, 52, 247)
- class QuarterFrameMessage(data: int)¶
Bases:
MidiMessageA quarter frame MIDI message.
TODO: Implement second byte parsing usefully.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a quarter frame message.
>>> MidiMessage.parse([0xF1, 0x36]) QuarterFrameMessage(data=54)
- serialize() tuple[int, ...]¶
Serialize this quarter frame message into a sequence of integers.
>>> QuarterFrameMessage(data=54).serialize() (241, 54)
- class SongPositionMessage(position: int)¶
Bases:
MidiMessageA song position MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a song position message.
>>> MidiMessage.parse([0xF2, 0x00, 0x08]) SongPositionMessage(position=8)
- serialize() tuple[int, ...]¶
Serialize this song position message into a sequence of integers.
>>> SongPositionMessage(position=8).serialize() (242, 0, 8)
- class SongRequestMessage(song_id: int)¶
Bases:
MidiMessageA song request MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a song request message.
>>> MidiMessage.parse([0xF3, 0x01]) SongRequestMessage(song_id=1)
- serialize() tuple[int, ...]¶
Serialize this song request message into a sequence of integers.
>>> SongRequestMessage(song_id=1).serialize() (243, 1)
- class TuneRequestMessage¶
Bases:
MidiMessageA tune request MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a tune request message.
>>> MidiMessage.parse([0xF6]) TuneRequestMessage()
- serialize() tuple[int, ...]¶
Serialize this tune request message into a sequence of integers.
>>> TuneRequestMessage().serialize() (246,)
- class ClockMessage¶
Bases:
MidiMessageA clock MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a clock message.
>>> MidiMessage.parse([0xF8]) ClockMessage()
- serialize() tuple[int, ...]¶
Serialize this clock message into a sequence of integers.
>>> ClockMessage().serialize() (248,)
- class StartMessage¶
Bases:
MidiMessageA start MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a start message.
>>> MidiMessage.parse([0xFA]) StartMessage()
- serialize() tuple[int, ...]¶
Serialize this start message into a sequence of integers.
>>> StartMessage().serialize() (250,)
- class ContinueMessage¶
Bases:
MidiMessageA continue MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a continue message.
>>> MidiMessage.parse([0xFB]) ContinueMessage()
- serialize() tuple[int, ...]¶
Serialize this continue message into a sequence of integers.
>>> ContinueMessage().serialize() (251,)
- class StopMessage¶
Bases:
MidiMessageA stop MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a stop message.
>>> MidiMessage.parse([0xFC]) StopMessage()
- serialize() tuple[int, ...]¶
Serialize this stop message into a sequence of integers.
>>> StopMessage().serialize() (252,)
- class ActiveSenseMessage¶
Bases:
MidiMessageAn active sense MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into an active sense message.
>>> MidiMessage.parse([0xFE]) ActiveSenseMessage()
- serialize() tuple[int, ...]¶
Serialize this active sense message into a sequence of integers.
>>> ActiveSenseMessage().serialize() (254,)
- class ResetMessage¶
Bases:
MidiMessageA reset MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a reset message.
>>> MidiMessage.parse([0xFF]) ResetMessage()
- serialize() tuple[int, ...]¶
Serialize this reset message into a sequence of integers.
>>> ResetMessage().serialize() (255,)
- class MetaMessage(meta_type: MetaMessageType, data: tuple[int, ...])¶
Bases:
MidiMessageA meta MIDI message.
- classmethod parse(message: Sequence[int]) Self¶
Parse a sequence of integers into a meta message.
A time signature meta message:
>>> MidiMessage.parse([0xFF, 0x58, 0x04, 0x04, 0x02, 0x18, 0x08]) MetaMessage(meta_type=<MetaMessageType.TIME_SIGNATURE: 88>, data=(4, 2, 24, 8))A copyright notice meta message:
>>> MidiMessage.parse([0xFF, 0x02, 0x1E, 0xA9, 0x20, 0x32, 0x30, 0x30, 0x39, 0x20, 0x4B, 0x61, 0x6C, 0x69, 0x6F, 0x70, 0x61, 0x20, 0x50, 0x75, 0x62, 0x6C, 0x69, 0x73, 0x68, 0x69, 0x6E, 0x67, 0x2C, 0x20, 0x4C, 0x4C, 0x43]) MetaMessage(meta_type=<MetaMessageType.COPYRIGHT_NOTICE: 2>, data=(169, 32, 50, 48, 48, 57, 32, 75, 97, 108, 105, 111, 112, 97, 32, 80, 117, 98, 108, 105, 115, 104, 105, 110, 103, 44, 32, 76, 76, 67))An end-of-track meta message:
>>> MidiMessage.parse([0xFF, 0x2F, 0x00]) MetaMessage(meta_type=<MetaMessageType.END_OF_TRACK: 47>, data=())
- serialize() tuple[int, ...]¶
Serialize this meta message into a sequence of integers.
A time signature meta message:
>>> MetaMessage(meta_type=MetaMessageType.TIME_SIGNATURE, data=(4, 2, 24, 8)).serialize() (255, 88, 4, 4, 2, 24, 8)A copyright notice meta message:
>>> MetaMessage(meta_type=MetaMessageType.COPYRIGHT_NOTICE, data=(169, 32, 50, 48, 48, 57, 32, 75, 97, 108, 105, 111, 112, 97, 32, 80, 117, 98, 108, 105, 115, 104, 105, 110, 103, 44, 32, 76, 76, 67)).serialize() (255, 2, 30, 169, 32, 50, 48, 48, 57, 32, 75, 97, 108, 105, 111, 112, 97, 32, 80, 117, 98, 108, 105, 115, 104, 105, 110, 103, 44, 32, 76, 76, 67)An end-of-track meta message:
>>> MetaMessage(meta_type=MetaMessageType.END_OF_TRACK, data=()).serialize() (255, 47, 0)