In [1]:
import midi
import random
from mididim.pitch import pitch2n

In [2]:
filename = "/Users/szabel/repo/mma/PlectrumExample.mid"
pattern = midi.read_midifile(filename)

In [3]:
pattern


Out[3]:
midi.Pattern(format=1, resolution=192, tracks=\
[midi.Track(\
  [midi.TrackNameEvent(tick=0, text='PlectrumExample', data=[80, 108, 101, 99, 116, 114, 117, 109, 69, 120, 97, 109, 112, 108, 101]),
   midi.TextMetaEvent(tick=0, text='Created by MMA. Input filename: PlectrumExample.mma', data=[67, 114, 101, 97, 116, 101, 100, 32, 98, 121, 32, 77, 77, 65, 46, 32, 73, 110, 112, 117, 116, 32, 102, 105, 108, 101, 110, 97, 109, 101, 58, 32, 80, 108, 101, 99, 116, 114, 117, 109, 69, 120, 97, 109, 112, 108, 101, 46, 109, 109, 97]),
   midi.TimeSignatureEvent(tick=0, data=[4, 2, 48, 8]),
   midi.SetTempoEvent(tick=0, data=[7, 161, 32]),
   midi.EndOfTrackEvent(tick=0, data=[])]),
 midi.Track(\
  [midi.TrackNameEvent(tick=0, text='Plectrum-Singlestrum', data=[80, 108, 101, 99, 116, 114, 117, 109, 45, 83, 105, 110, 103, 108, 101, 115, 116, 114, 117, 109]),
   midi.NoteOnEvent(tick=0, channel=14, data=[80, 90]),
   midi.NoteOnEvent(tick=1, channel=14, data=[80, 0]),
   midi.ProgramChangeEvent(tick=21503, channel=14, data=[24]),
   midi.NoteOnEvent(tick=0, channel=14, data=[43, 80]),
   midi.NoteOnEvent(tick=30, channel=14, data=[47, 70]),
   midi.NoteOnEvent(tick=30, channel=14, data=[50, 60]),
   midi.NoteOnEvent(tick=30, channel=14, data=[55, 40]),
   midi.NoteOnEvent(tick=30, channel=14, data=[59, 30]),
   midi.NoteOnEvent(tick=264, channel=14, data=[43, 0]),
   midi.NoteOnEvent(tick=0, channel=14, data=[47, 0]),
   midi.NoteOnEvent(tick=0, channel=14, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=14, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=14, data=[59, 0]),
   midi.ControlChangeEvent(tick=384, channel=14, data=[123, 0]),
   midi.EndOfTrackEvent(tick=0, data=[])]),
 midi.Track(\
  [midi.TrackNameEvent(tick=0, text='Plectrum-Fingerpicking', data=[80, 108, 101, 99, 116, 114, 117, 109, 45, 70, 105, 110, 103, 101, 114, 112, 105, 99, 107, 105, 110, 103]),
   midi.ProgramChangeEvent(tick=0, channel=15, data=[24]),
   midi.NoteOnEvent(tick=0, channel=15, data=[47, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[80, 90]),
   midi.NoteOnEvent(tick=1, channel=15, data=[80, 0]),
   midi.NoteOnEvent(tick=95, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[47, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[47, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[47, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[45, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[45, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[48, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[52, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[52, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[52, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[48, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[52, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[54, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[54, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[72, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[47, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[47, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[47, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[47, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[45, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[45, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[48, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[52, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[52, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[52, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[48, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[52, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 100]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[72, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[76, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[72, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[76, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[47, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[47, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[47, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[47, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[45, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[45, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[50, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[52, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[57, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[48, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[52, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[52, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[52, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[52, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[48, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[52, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[54, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[54, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[72, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 40]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 40]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 40]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 40]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[55, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 40]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 40]),
   midi.NoteOnEvent(tick=96, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 40]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 40]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[59, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[71, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[54, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 40]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 40]),
   midi.NoteOnEvent(tick=96, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 40]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 40]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[54, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[62, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 60]),
   midi.NoteOnEvent(tick=0, channel=15, data=[66, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[69, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[74, 0]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 90]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 40]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 40]),
   midi.NoteOnEvent(tick=96, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 40]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 40]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 80]),
   midi.NoteOnEvent(tick=96, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 80]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 60]),
   midi.NoteOnEvent(tick=96, channel=15, data=[55, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[60, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[64, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[67, 0]),
   midi.NoteOnEvent(tick=0, channel=15, data=[72, 0]),
   midi.ControlChangeEvent(tick=768, channel=15, data=[123, 0]),
   midi.EndOfTrackEvent(tick=0, data=[])])])

In [9]:
test_pattern = midi.Pattern(format=1, resolution=1000, tracks=[])

In [10]:
track0 = [
  midi.TrackNameEvent(tick=0, text='TestExampleFile'),
  midi.TimeSignatureEvent(tick=0, data=[3, 2, 24, 8]),
  midi.SetTempoEvent(tick=0, data=[7, 161, 32]),
  midi.EndOfTrackEvent(), 
]
test_pattern.append(track0)

In [11]:
track1 = [
  midi.TrackNameEvent(tick=0, text='Easy Bass Line'),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_2n),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_2n),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_1n),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_1n),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_0),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_0),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_1),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_1),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_2),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_2),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_3),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_3),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_4),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_4),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_5),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_5),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_6),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_6),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_7),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_7),
  midi.NoteOnEvent(tick=0, velocity=20, pitch=pitch2n.C_8),
  midi.NoteOffEvent(tick=1000, pitch=pitch2n.C_8),
  midi.EndOfTrackEvent(), 
]
test_pattern.append(track1)

In [12]:
midi.write_midifile("easy_bass1.mid", test_pattern)

In [18]:
for evt in track1:
    if type(evt) is midi.NoteOnEvent:
        evt.velocity = random.randint(10, 127)
        print evt
test_pattern[1] = track1


midi.NoteOnEvent(tick=0, channel=0, data=[43, 87])
midi.NoteOnEvent(tick=0, channel=0, data=[43, 16])
midi.NoteOnEvent(tick=0, channel=0, data=[43, 11])
midi.NoteOnEvent(tick=0, channel=0, data=[43, 14])
midi.NoteOnEvent(tick=0, channel=0, data=[43, 115])
midi.NoteOnEvent(tick=0, channel=0, data=[43, 19])
midi.NoteOnEvent(tick=0, channel=0, data=[43, 54])

In [60]:
pattern = midi.read_midifile('./exported34.mid')

In [61]:
pattern


Out[61]:
midi.Pattern(format=1, resolution=480, tracks=\
[midi.Track(\
  [midi.TrackNameEvent(tick=0, text='easy_bass1', data=[101, 97, 115, 121, 95, 98, 97, 115, 115, 49]),
   midi.NoteOnEvent(tick=0, channel=0, data=[43, 20]),
   midi.NoteOffEvent(tick=480, channel=0, data=[43, 20]),
   midi.NoteOnEvent(tick=0, channel=0, data=[43, 20]),
   midi.NoteOffEvent(tick=480, channel=0, data=[43, 20]),
   midi.NoteOnEvent(tick=0, channel=0, data=[43, 20]),
   midi.NoteOffEvent(tick=480, channel=0, data=[43, 20]),
   midi.EndOfTrackEvent(tick=0, data=[])])])

In [65]:
480 /2.0 /2.0 /2.0/ 2.0/ 2.0


Out[65]:
15.0

In [78]:
midi.C_0


Out[78]:
0

In [ ]: