Table Of Contents

Previous topic

music21.analysis.metrical

Next topic

music21.midi.translate

music21.midi.base

Objects and tools for processing MIDI data. This module uses routines from Will Ware’s public domain midi.py from 2001 see http://groups.google.com/group/alt.sources/msg/0c5fc523e050c35e

music21.midi.base.getEndEvents(mt=None, channelNumber=1)
Provide a list of events found at the end of a track.
music21.midi.base.getNumber(str, length)

Return the value of a string byte from and 8-bit string. This will sum a length greater than 1 if desired.

>>> getNumber('test', 0)
(0, 'test')
>>> getNumber('test', 2)
(29797, 'st')
>>> getNumber('test', 4)
(1952805748, '')
music21.midi.base.getNumbersAsList(str)

Translate each char into a number, return in a list. Used for reading data messages where each byte encodes a different discrete value.

>>> getNumbersAsList('\x00\x00\x00\x03')
[0, 0, 0, 3]
music21.midi.base.getStartEvents(mt=None, partName=, partProgram=0)
Provide a list of events found at the beginning of a track. A MidiTrack reference can be provided via the mt parameter.
music21.midi.base.getVariableLengthNumber(str)
>>> getVariableLengthNumber('test')
(116, 'est')
music21.midi.base.putNumber(num, length)
>>> putNumber(3, 4)
'\x00\x00\x00\x03'
>>> putNumber(0, 1)
'\x00'
music21.midi.base.putNumbersAsList(numList)

Translate a list of numbers into a character byte strings. Used for encoding data messages where each byte encodes a different discrete value.

>>> putNumbersAsList([0, 0, 0, 3])
'\x00\x00\x00\x03'
>>> putNumbersAsList([0, 0, 0, -3])
'\x00\x00\x00\xfd'
>>> putNumbersAsList([0, 0, 0, -1])
'\x00\x00\x00\xff'
music21.midi.base.putVariableLengthNumber(x)
>>> putVariableLengthNumber(4)
'\x04'
>>> putVariableLengthNumber(127)
'\x7f'
>>> putVariableLengthNumber(0)
'\x00'
>>> putVariableLengthNumber(1024)
'\x88\x00'
>>> putVariableLengthNumber(-1)
Traceback (most recent call last):
MidiException: cannot putVariableLengthNumber() when number is negative: -1

DeltaTime

Inherits from: MidiEvent

class music21.midi.base.DeltaTime(track)

Store the time change since the start or the last MidiEvent. Pairs of DeltaTime and MidiEvent objects are the basic presentation of temporal data. The track argument must be a MidiTrack object. Time values are in integers, representing ticks. The channel attribute, inherited from MidiEvent is not used.

>>> mt = MidiTrack(1)
>>> dt = DeltaTime(mt)
>>> dt.time = 380
>>> dt
<MidiEvent DeltaTime, t=380, track=1, channel=None>

DeltaTime methods

read(oldstr)
No documentation.
write()
No documentation.

Methods inherited from MidiEvent: isDeltaTime(), isNoteOff(), isNoteOn(), matchedNoteOff()

Enumeration

class music21.midi.base.Enumeration(enumList)

Utility object for defining binary MIDI message constants.

Enumeration methods

has_value(attr)
No documentation.
hasattr(attr)
No documentation.
whatis(value)
No documentation.

MidiChannel

class music21.midi.base.MidiChannel(track, index)

A channel (together with a track) provides the continuity connecting a NOTE_ON event with its corresponding NOTE_OFF event. Together, those define the beginning and ending times for a Note.

>>> mc = MidiChannel(0, 0)

MidiChannel methods

noteOff(pitch, time)
No documentation.
noteOn(pitch, time, velocity)
No documentation.

MidiEvent

class music21.midi.base.MidiEvent(track)

A model of a MIDI event, including note-on, note-off, program change, controller change, any many others. MidiEvent objects are paired (preceded) by DeltaTime objects in the list of events in a MidiTrack object. The track argument must be a MidiTrack object. The type attribute is a string representation of a Midi event from the channelVoiceMessages or metaEvents definitions. The channel attribute is an integer channel id, from 1 to 16. The time attribute is an integer duration of the event in ticks. This value can be zero. This value is not essential, as ultimate time positioning is determined by DeltaTime objects. The pitch attribute is only defined for note-on and note-off messages. The attribute stores an integer representation (0-127). The velocity attribute is only defined for note-on and note-off messages. The attribute stores an integer representation (0-127). The data attribute is used for storing other messages, such as SEQUENCE_TRACK_NAME string values.

>>> mt = MidiTrack(1)
>>> me1 = MidiEvent(mt)
>>> me1.type = "NOTE_ON"
>>> me1.channel = 1
>>> me1.time = 200
>>> me1.pitch = 60
>>> me1.velocity = 120
>>> me1
<MidiEvent NOTE_ON, t=200, track=1, channel=1, pitch=60, velocity=120>
>>> me2 = MidiEvent(mt)
>>> me2.type = "SEQUENCE_TRACK_NAME"
>>> me2.time = 0
>>> me2.data = 'guitar'
>>> me2
<MidiEvent SEQUENCE_TRACK_NAME, t=0, track=1, channel=None, data='guitar'>

MidiEvent methods

isDeltaTime()

Return a boolean if this is a note-on message and velocity is not zero.

>>> mt = MidiTrack(1)
>>> dt = DeltaTime(mt)
>>> dt.isDeltaTime()
True
isNoteOff()

Return a boolean if this is a note-off message, either as a note-off or as a note-on with zero velocity.

>>> mt = MidiTrack(1)
>>> me1 = MidiEvent(mt)
>>> me1.type = "NOTE_OFF"
>>> me1.isNoteOn()
False
>>> me1.isNoteOff()
True
>>> me2 = MidiEvent(mt)
>>> me2.type = "NOTE_ON"
>>> me2.velocity = 0
>>> me2.isNoteOn()
False
>>> me2.isNoteOff()
True
isNoteOn()

Return a boolean if this is a note-on message and velocity is not zero.

>>> mt = MidiTrack(1)
>>> me1 = MidiEvent(mt)
>>> me1.type = "NOTE_ON"
>>> me1.velocity = 120
>>> me1.isNoteOn()
True
>>> me1.isNoteOff()
False
matchedNoteOff(other)

If this is a note-on, given another MIDI event, is this a matching note-off for this event, return True. Checks both pitch and channel.

>>> mt = MidiTrack(1)
>>> me1 = MidiEvent(mt)
>>> me1.type = "NOTE_ON"
>>> me1.velocity = 120
>>> me1.pitch = 60
>>> me2 = MidiEvent(mt)
>>> me2.type = "NOTE_ON"
>>> me2.velocity = 0
>>> me2.pitch = 60
>>> me1.matchedNoteOff(me2)
True
>>> me2.pitch = 61
>>> me1.matchedNoteOff(me2)
False
>>> me2.type = "NOTE_OFF"
>>> me1.matchedNoteOff(me2)
False
>>> me2.pitch = 60
>>> me1.matchedNoteOff(me2)
True
read(time, str)
Read a MIDI event.
write()
No documentation.

MidiFile

class music21.midi.base.MidiFile

Low-level MIDI file writing, emulating methods from normal Python files. The ticksPerQuarterNote attribute must be set before writing. 1024 is a common value. This object is returned by some properties for directly writing files of midi representations.

MidiFile attributes

Attributes without Documentation: ticksPerSecond, tracks, ticksPerQuarterNote, file, format

MidiFile methods

close()
Close the file.
open(filename, attrib=rb)
Open a MIDI file path for reading or writing. For writing to a MIDI file, attrib should be “wb”.
openFileLike(fileLike)

Assign a file-like object, such as those provided by StringIO, as an open file object.

>>> fileLikeOpen = StringIO.StringIO()
>>> mf = MidiFile()
>>> mf.openFileLike(fileLikeOpen)
>>> mf.close()
read()
Read and parse MIDI data stored in a file.
readstr(str)
Read and parse MIDI data as a string.
write()
Write MIDI data as a file.
writestr()
Return MIDI data as a string.

MidiTrack

class music21.midi.base.MidiTrack(index)

A MIDI track. An index is an integer identifier for this object.

>>> mt = MidiTrack(0)

MidiTrack methods

hasNotes()
Return True/False if this track has any note-on/note-off pairs defined.
read(str)
No documentation.
updateEvents()
We may attach events to this track before setting their track parameter. This method will move through all events and set their track to this track.
write()
No documentation.