Example #1
0
 def testAddNote(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.addNote(0, 0, 100, 0, 1, 100)
     self.assertEquals(MyMIDI.tracks[0].eventList[0].type, "note")
     self.assertEquals(MyMIDI.tracks[0].eventList[0].pitch, 100)
     self.assertEquals(MyMIDI.tracks[0].eventList[0].time, 0)
     self.assertEquals(MyMIDI.tracks[0].eventList[0].duration, 1)
     self.assertEquals(MyMIDI.tracks[0].eventList[0].volume, 100)
Example #2
0
 def testAddNote(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.addNote(0, 0, 100,0,1,100)
     self.assertEquals(MyMIDI.tracks[0].eventList[0].type, "note")
     self.assertEquals(MyMIDI.tracks[0].eventList[0].pitch, 100)
     self.assertEquals(MyMIDI.tracks[0].eventList[0].time, 0)
     self.assertEquals(MyMIDI.tracks[0].eventList[0].duration, 1)
     self.assertEquals(MyMIDI.tracks[0].eventList[0].volume, 100)
Example #3
0
 def testSysEx(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.addSysEx(0,0, 0, struct.pack('>B', 0x01))
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'SysEx')
     self.assertEquals(get_byte(MyMIDI, 0, 0), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 1), 0xf0)
     self.assertEquals(get_byte(MyMIDI, 0, 2), 3)
     self.assertEquals(get_byte(MyMIDI, 0, 3), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 4), 0x01)
     self.assertEquals(get_byte(MyMIDI, 0, 5), 0xf7)
Example #4
0
 def testDeinterleaveNotes(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.addNote(0, 0, 100, 0, 2, 100)
     MyMIDI.addNote(0, 0, 100, 1, 2, 100)
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[2].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[2].time,  0)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].time,  256)
Example #5
0
    def __init__(self, number_tracks: object = 1, tempo: object = 60, instrument: object = 0) -> object:
        """
        instrument: can be an integer or a list
        """

        self.number_tracks = number_tracks
        self.midi_data = MIDIFile(number_tracks)

        for track in range(number_tracks):
            self.midi_data.addTrackName(track, 0, "Track {0}".format(track))
            self.midi_data.addTempo(track, 0, tempo)
            instr = instrument[track] if isinstance(instrument, list) else instrument
            self.midi_data.addProgramChange(track, 0, 0, instr)
Example #6
0
 def testUniversalSysEx(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.addUniversalSysEx(0,0, 1, 2, struct.pack('>B', 0x01))
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'UniversalSysEx')
     self.assertEquals(get_byte(MyMIDI, 0, 0), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 1), 0xf0)
     self.assertEquals(get_byte(MyMIDI, 0, 2), 6)
     self.assertEquals(get_byte(MyMIDI, 0, 3), 0x7E)
     self.assertEquals(get_byte(MyMIDI, 0, 4), 0x7F)
     self.assertEquals(get_byte(MyMIDI, 0, 5), 0x01)
     self.assertEquals(get_byte(MyMIDI, 0, 6), 0x02)
     self.assertEquals(get_byte(MyMIDI, 0, 7), 0x01)
     self.assertEquals(get_byte(MyMIDI, 0, 8), 0xf7)
Example #7
0
    def __init__(self, number_tracks=1, tempo=60, instrument=0, channel=None):
        """
        instrument: can be an integer or a list
        channel: can be an integer or a list
        """

        self.number_tracks = number_tracks
        self.midi_data = MIDIFile(number_tracks)

        for track in range(number_tracks):
            self.midi_data.addTrackName(track, 0, "Track {0}".format(track))
            self.midi_data.addTempo(track, 0, tempo)
            instr = instrument[track] if isinstance(instrument,
                                                    list) else instrument
            if channel is None:
                _channel = track
            elif isinstance(channel, list):
                _channel = channel[track]
            else:
                _channel = channel
            self.midi_data.addProgramChange(track, _channel, 0, instr)
Example #8
0
    def __init__(self, number_tracks=1, tempo=60, instrument=0):
        """
        instrument: can be an integer or a list
        """

        self.number_tracks = number_tracks
        self.midi_data = MIDIFile(number_tracks)

        for track in range(number_tracks):
            self.midi_data.addTrackName(track, 0, "Track {0}".format(track))
            self.midi_data.addTempo(track, 0, tempo)
            instr = instrument[track] if isinstance(instrument, list) else instrument
            self.midi_data.addProgramChange(track, 0, 0, instr)
Example #9
0
 def testTuning(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.changeNoteTuning(0, [(1, 440), (2, 880)])
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'UniversalSysEx')
     self.assertEquals(get_byte(MyMIDI, 0, 0), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 1), 0xf0)
     self.assertEquals(get_byte(MyMIDI, 0, 2), 15)
     self.assertEquals(get_byte(MyMIDI, 0, 3), 0x7E)
     self.assertEquals(get_byte(MyMIDI, 0, 4), 0x7F)
     self.assertEquals(get_byte(MyMIDI, 0, 5), 0x08)
     self.assertEquals(get_byte(MyMIDI, 0, 6), 0x02)
     self.assertEquals(get_byte(MyMIDI, 0, 7), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 8), 0x2)
     self.assertEquals(get_byte(MyMIDI, 0, 9), 0x1)
     self.assertEquals(get_byte(MyMIDI, 0, 10), 69)
     self.assertEquals(get_byte(MyMIDI, 0, 11), 0)
     self.assertEquals(get_byte(MyMIDI, 0, 12), 0)
     self.assertEquals(get_byte(MyMIDI, 0, 13), 0x2)
     self.assertEquals(get_byte(MyMIDI, 0, 14), 81)
     self.assertEquals(get_byte(MyMIDI, 0, 15), 0)
     self.assertEquals(get_byte(MyMIDI, 0, 16), 0)
     self.assertEquals(get_byte(MyMIDI, 0, 17), 0xf7)
Example #10
0
 def testSysEx(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.addSysEx(0, 0, 0, struct.pack('>B', 0x01))
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'SysEx')
     self.assertEquals(get_byte(MyMIDI, 0, 0), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 1), 0xf0)
     self.assertEquals(get_byte(MyMIDI, 0, 2), 3)
     self.assertEquals(get_byte(MyMIDI, 0, 3), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 4), 0x01)
     self.assertEquals(get_byte(MyMIDI, 0, 5), 0xf7)
Example #11
0
 def testDeinterleaveNotes(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.addNote(0, 0, 100, 0, 2, 100)
     MyMIDI.addNote(0, 0, 100, 1, 2, 100)
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time, 0)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time, 128)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[2].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[2].time, 0)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[3].time, 256)
Example #12
0
    def __init__(self, number_tracks=1, tempo=60, instrument=0, channel=None):
        """
        instrument: can be an integer or a list
        channel: can be an integer or a list
        """

        self.number_tracks = number_tracks
        self.midi_data = MIDIFile(number_tracks)

        for track in range(number_tracks):
            self.midi_data.addTrackName(track, 0, "Track {0}".format(track))
            self.midi_data.addTempo(track, 0, tempo)
            instr = instrument[track] if isinstance(instrument, list) else instrument
            if channel is None:
                _channel = track
            elif isinstance(channel, list):
                _channel = channel[track]
            else:
                _channel = channel
            self.midi_data.addProgramChange(track, _channel, 0, instr)
Example #13
0
 def testUniversalSysEx(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.addUniversalSysEx(0, 0, 1, 2, struct.pack('>B', 0x01))
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type,
                       'UniversalSysEx')
     self.assertEquals(get_byte(MyMIDI, 0, 0), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 1), 0xf0)
     self.assertEquals(get_byte(MyMIDI, 0, 2), 6)
     self.assertEquals(get_byte(MyMIDI, 0, 3), 0x7E)
     self.assertEquals(get_byte(MyMIDI, 0, 4), 0x7F)
     self.assertEquals(get_byte(MyMIDI, 0, 5), 0x01)
     self.assertEquals(get_byte(MyMIDI, 0, 6), 0x02)
     self.assertEquals(get_byte(MyMIDI, 0, 7), 0x01)
     self.assertEquals(get_byte(MyMIDI, 0, 8), 0xf7)
Example #14
0
 def testTuning(self):
     MyMIDI = MIDIFile(1)
     MyMIDI.changeNoteTuning(0, [(1, 440), (2, 880)])
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type,
                       'UniversalSysEx')
     self.assertEquals(get_byte(MyMIDI, 0, 0), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 1), 0xf0)
     self.assertEquals(get_byte(MyMIDI, 0, 2), 15)
     self.assertEquals(get_byte(MyMIDI, 0, 3), 0x7E)
     self.assertEquals(get_byte(MyMIDI, 0, 4), 0x7F)
     self.assertEquals(get_byte(MyMIDI, 0, 5), 0x08)
     self.assertEquals(get_byte(MyMIDI, 0, 6), 0x02)
     self.assertEquals(get_byte(MyMIDI, 0, 7), 0x00)
     self.assertEquals(get_byte(MyMIDI, 0, 8), 0x2)
     self.assertEquals(get_byte(MyMIDI, 0, 9), 0x1)
     self.assertEquals(get_byte(MyMIDI, 0, 10), 69)
     self.assertEquals(get_byte(MyMIDI, 0, 11), 0)
     self.assertEquals(get_byte(MyMIDI, 0, 12), 0)
     self.assertEquals(get_byte(MyMIDI, 0, 13), 0x2)
     self.assertEquals(get_byte(MyMIDI, 0, 14), 81)
     self.assertEquals(get_byte(MyMIDI, 0, 15), 0)
     self.assertEquals(get_byte(MyMIDI, 0, 16), 0)
     self.assertEquals(get_byte(MyMIDI, 0, 17), 0xf7)
Example #15
0
class Midi(object):
    def __init__(self, number_tracks=1, tempo=60, instrument=0, channel=None):
        """
        instrument: can be an integer or a list
        channel: can be an integer or a list
        """

        self.number_tracks = number_tracks
        self.midi_data = MIDIFile(number_tracks)

        for track in range(number_tracks):
            self.midi_data.addTrackName(track, 0, "Track {0}".format(track))
            self.midi_data.addTempo(track, 0, tempo)
            instr = instrument[track] if isinstance(instrument,
                                                    list) else instrument
            if channel is None:
                _channel = track
            elif isinstance(channel, list):
                _channel = channel[track]
            else:
                _channel = channel
            self.midi_data.addProgramChange(track, _channel, 0, instr)

    def seq_chords(self, seqlist, track=0, time=0, channel=None):
        if track + 1 > self.number_tracks:
            raise MidiError("You are trying to use more tracks than we have.")

        _channel = channel if channel is not None else track

        for item in seqlist:
            if isinstance(item, NoteSeq):
                volume = item[0].volume
                dur = item[0].midi_dur
                for note in item:
                    self.midi_data.addNote(track, _channel, note.midi_number,
                                           time, dur, volume)
                time += dur
            elif isinstance(item, Rest):
                time += item.midi_dur
            else:
                raise MidiError(
                    "The input should be a list of NoteSeq but yours is a {0}: {1}"
                    .format(type(seqlist), seqlist))
        return time

    def seq_notes(self, noteseq, track=0, time=0, channel=None):
        if track + 1 > self.number_tracks:
            raise MidiError("You are trying to use more tracks than we have.")

        _channel = channel if channel is not None else track

        for note in noteseq:
            if isinstance(note, Note):
                self.midi_data.addNote(track, _channel, note.midi_number, time,
                                       note.midi_dur, note.volume)
            else:
                # we ignore the rests
                pass
            time += note.midi_dur

        return time

    def write(self, filename):
        if isinstance(filename, str):
            with open(filename, 'wb') as midifile:
                self.midi_data.writeFile(midifile)
        else:
            self.midi_data.writeFile(filename)
Example #16
0
from pyknon.MidiFile import MIDIFile, MIDIHeader, MIDITrack, writeVarLength, frequencyTransform, returnFrequency

tx = 11
m = MIDIFile(tx)
length = 256
# all notes off
for t in range(128):
    m.addNote(0, 0, t, 0, 0, 0)
prev = [-1] * tx


def writeNote(a, b, c, d, e, f, g=False):
    if d >= length:
        return
    if g or c != prev[a]:
        m.addNote(a, b, c, d, e, f)
    else:
        m.tracks[a].eventList[-1].duration += e
    prev[a] = c


def popcnt(x):
    return bin(x).count('1')


def toscale(scale, note):  # todo: totally broken
    poct = popcnt(scale)
    n = note % (poct + 1)
    c = 0
    o = 0
    for i in format(scale, '012b'):
import math
from pyknon.MidiFile import MIDIFile

ntracks = 8
m = MIDIFile(ntracks)
length = 1024
prev = [-1] * ntracks


def add(trk, chn, note, time, dur, vol, rep=False):
    if time >= length:
        return
    if rep or note != prev[trk]:
        m.addNote(trk, chn, note, time, dur, vol)
    else:
        idx = -1
        while 'duration' not in dir(m.tracks[trk].eventList[idx]):
            idx -= 1
        m.tracks[trk].eventList[idx].duration += dur
    prev[trk] = note


def popcnt(x):
    return bin(x).count('1')


def toscale(scale, note):
    poct = popcnt(scale)
    n = note % (poct + 1)
    c = 0
    o = 0
Example #18
0
class Midi(object):
    def __init__(self, number_tracks=1, tempo=60, instrument=0, channel=None):
        """
        instrument: can be an integer or a list
        channel: can be an integer or a list
        """

        self.number_tracks = number_tracks
        self.midi_data = MIDIFile(number_tracks)

        for track in range(number_tracks):
            self.midi_data.addTrackName(track, 0, "Track {0}".format(track))
            self.midi_data.addTempo(track, 0, tempo)
            instr = instrument[track] if isinstance(instrument, list) else instrument
            if channel is None:
                _channel = track
            elif isinstance(channel, list):
                _channel = channel[track]
            else:
                _channel = channel
            self.midi_data.addProgramChange(track, _channel, 0, instr)

    def seq_chords(self, seqlist, track=0, time=0, channel=None):
        if track + 1 > self.number_tracks:
            raise MidiError("You are trying to use more tracks than we have.")

        _channel = channel if channel is not None else track

        for item in seqlist:
            if isinstance(item, NoteSeq):
                volume = item[0].volume
                dur = item[0].midi_dur
                for note in item:
                    self.midi_data.addNote(track, _channel, note.midi_number, time, dur, volume)
                time += dur
            elif isinstance(item, Rest):
                time += item.midi_dur
            else:
                raise MidiError("The input should be a list of NoteSeq but yours is a {0}: {1}".format(type(seqlist), seqlist))
        return time

    def seq_notes(self, noteseq, track=0, time=0, channel=None):
        if track + 1 > self.number_tracks:
            raise MidiError("You are trying to use more tracks than we have.")

        _channel = channel if channel is not None else track

        for note in noteseq:
            if isinstance(note, Note):
                self.midi_data.addNote(track, _channel, note.midi_number, time, note.midi_dur, note.volume)
            else:
                # we ignore the rests
                pass
            time += note.midi_dur

        return time

    def write(self, filename):
        if isinstance(filename, str):
            with open(filename, 'wb') as midifile:
                self.midi_data.writeFile(midifile)
        else:
            self.midi_data.writeFile(filename)
Example #19
0
 def testTimeShift(self):
     
     # With one track
     MyMIDI = MIDIFile(1)
     MyMIDI.addNote(0, 0, 100, 5, 1, 100)
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
     
     # With two tracks
     MyMIDI = MIDIFile(2)
     MyMIDI.addNote(0, 0, 100, 5, 1, 100)
     MyMIDI.addNote(1, 0, 100, 6, 1, 100)
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
     self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  128)
     self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  128)
     
     # Negative Time
     MyMIDI = MIDIFile(1)
     MyMIDI.addNote(0, 0, 100, -5, 1, 100)
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
     
     # Negative time, two tracks
     
     MyMIDI = MIDIFile(2)
     MyMIDI.addNote(0, 0, 100, -1, 1, 100)
     MyMIDI.addNote(1, 0, 100, 0, 1, 100)
     MyMIDI.close()
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time,  0)
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time,  128)
     self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].type, 'NoteOn')
     self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time,  128)
     self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].type, 'NoteOff')
     self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time,  128)
Example #20
0
    def testTimeShift(self):

        # With one track
        MyMIDI = MIDIFile(1)
        MyMIDI.addNote(0, 0, 100, 5, 1, 100)
        MyMIDI.close()
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time, 0)
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time, 128)

        # With two tracks
        MyMIDI = MIDIFile(2)
        MyMIDI.addNote(0, 0, 100, 5, 1, 100)
        MyMIDI.addNote(1, 0, 100, 6, 1, 100)
        MyMIDI.close()
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time, 0)
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time, 128)
        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].type, 'NoteOn')
        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time, 128)
        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].type, 'NoteOff')
        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time, 128)

        # Negative Time
        MyMIDI = MIDIFile(1)
        MyMIDI.addNote(0, 0, 100, -5, 1, 100)
        MyMIDI.close()
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time, 0)
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time, 128)

        # Negative time, two tracks

        MyMIDI = MIDIFile(2)
        MyMIDI.addNote(0, 0, 100, -1, 1, 100)
        MyMIDI.addNote(1, 0, 100, 0, 1, 100)
        MyMIDI.close()
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].type, 'NoteOn')
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[0].time, 0)
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].type, 'NoteOff')
        self.assertEquals(MyMIDI.tracks[0].MIDIEventList[1].time, 128)
        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].type, 'NoteOn')
        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[0].time, 128)
        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].type, 'NoteOff')
        self.assertEquals(MyMIDI.tracks[1].MIDIEventList[1].time, 128)