This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
Generating MIDI Music | ||
---|---|---|
Code | Expected | Actual |
require 'rubygems' require 'midilib' |
false | false |
class Array def to_midi(file, note_length='eighth') midi_max = 108.0 midi_min = 21.0 low, high = min, max song = MIDI::Sequence.new # Create a new track to hold the melody, running at 120 beats per minute. song.tracks << (melody = MIDI::Track.new(song)) melody.events << MIDI::Tempo.new(MIDI::Tempo.bpm_to_mpq(120)) # Tell channel zero to use the "piano" sound. melody.events << MIDI::ProgramChange.new(0, 0) # Create a series of note events that play on channel zero. each do |number| midi_note = (midi_min + ((number-midi_min) * (midi_max-low)/high)).to_i melody.events << MIDI::NoteOnEvent.new(0, midi_note, 127, 0) melody.events << MIDI::NoteOffEvent.new(0, midi_note, 127, song.note_to_delta(note_length)) end open(file, 'w') { |f| song.write(f) } end end ((1..100).collect { |x| x ** 2 }).to_midi('squares.mid') class TimedTrack < MIDI::Track MIDDLE_C = 60 @@channel_counter=0 def initialize(number, song) super(number) @sequence = song @time = 0 @channel = @@channel_counter @@channel_counter += 1 end # Tell this track's channel to use the given instrument, and # also set the track's instrument display name. def instrument=(instrument) @events << MIDI::ProgramChange.new(@channel, instrument) super(MIDI::GM_PATCH_NAMES[instrument]) end # Add one or more notes to sound simultaneously. Increments the per-track # timer so that subsequent notes will sound after this one finishes. def add_notes(offsets, velocity=127, duration='quarter') offsets = [offsets] unless offsets.respond_to? :each offsets.each do |offset| event(MIDI::NoteOnEvent.new(@channel, MIDDLE_C + offset, velocity)) end @time += @sequence.note_to_delta(duration) offsets.each do |offset| event(MIDI::NoteOffEvent.new(@channel, MIDDLE_C + offset, velocity)) end recalc_delta_from_times end # Uses add_notes to sound a chord (a major triad in root position), using the # given note as the low note. Like add_notes, increments the per-track timer. def add_major_triad(low_note, velocity=127, duration='quarter') add_notes([0, 4, 7].collect { |x| x + low_note }, velocity, duration) end private def event(event) @events << event event.time_from_start = @time end end song = MIDI::Sequence.new song.tracks << (melody = TimedTrack.new(0, song)) song.tracks << (background = TimedTrack.new(1, song)) melody.instrument = 56 # Trumpet background.instrument = 19 # Church organ melody.events << MIDI::Tempo.new(MIDI::Tempo.bpm_to_mpq(120)) melody.events << MIDI::MetaEvent.new(MIDI::META_SEQ_NAME, 'A random Ruby composition') |
Some musically pleasing intervals: thirds and fifths. |
|
intervals = [-5, -1, 0, 4, 7] |
Start at middle C. |
|
note = 0 |
Create 8 measures of music in 4/4 time |
|
(8*4).times do |i| note += intervals[rand(intervals.size)] #Reset to middle C if we go out of the MIDI range note = 0 if note < -39 or note > 48 # Add a quarter note on every beat. melody.add_notes(note, 127, 'quarter') # Add a chord of whole notes at the beginning of each measure. background.add_major_triad(note, 50, 'whole') if i % 4 == 0 end open('random.mid', 'w') { |f| song.write(f) } |
[#<TimedTrack:0xb79cf8d4 @channels_used=0, @instrument="Trumpet", @time=15360, @events=[#<MIDI::ProgramChange:0xb79c6c5c @status=192, @is_system=false, @program=56, @is_note=false, @is_meta=false, @is_channel=true, @time_from_start=0, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @is_note_on=false>, #<MIDI::Tempo:0xb79b9124 @meta_type=81, @status=255, @is_system=false, @data=500000, @is_note=false, @is_meta=true, @is_channel=false, @time_from_start=0, @is_note_off=false, @delta_time=0, @is_realtime=false, @is_note_on=false>, #<MIDI::MetaEvent:0xb79b2090 @meta_type=3, @status=255, @is_system=false, @data="A random Ruby composition", @is_note=false, @is_meta=true, @is_channel=false, @time_from_start=0, @is_note_off=false, @delta_time=0, @is_realtime=false, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb7990ad0 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=0, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=64, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb7990a1c @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=480, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=64, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb79907b0 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=480, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=59, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb7990724 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=960, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=59, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb79906ac @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=960, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=58, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb7990620 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1440, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=58, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb7990594 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1440, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=53, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb799051c @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1920, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=53, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb7990490 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1920, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=60, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb7990418 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=2400, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=60, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb799024c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=2400, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=64, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb79901d4 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=2880, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=64, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb7990148 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=2880, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=64, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb79900d0 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3360, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=64, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb7990058 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3360, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=63, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798ffcc @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3840, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=63, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798ff40 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3840, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=67, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798fea0 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=4320, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=67, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798fc98 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=4320, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=71, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798fbd0 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=4800, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=71, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798fb30 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=4800, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=78, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798fab8 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5280, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=78, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798fa40 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5280, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=77, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798f9b4 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5760, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=77, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798f8ec @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5760, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=77, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798e258 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=6240, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=77, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798e014 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=6240, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=81, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798df88 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=6720, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=81, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798defc @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=6720, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=76, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798de84 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7200, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=76, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798de0c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7200, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=83, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798dd80 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7680, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=83, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798dcf4 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7680, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=78, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798dc68 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=8160, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=78, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798da60 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=8160, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=77, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798d9e8 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=8640, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=77, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798d95c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=8640, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=77, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798d8d0 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9120, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=77, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798d81c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9120, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=76, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798d768 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9600, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=76, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798d6b4 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9600, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=80, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798d600 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=10080, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=80, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798d344 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=10080, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=79, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798d290 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=10560, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=79, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798d1dc @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=10560, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=83, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798d128 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11040, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=83, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798d074 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11040, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=90, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798cfc0 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11520, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=90, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798cf0c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11520, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=89, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798ce58 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=12000, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=89, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798cbb0 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=12000, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=88, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798cafc @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=12480, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=88, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798ca48 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=12480, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=95, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798c994 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=12960, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=95, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798c8e0 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=12960, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=99, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798c82c @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13440, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=99, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798c778 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13440, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=103, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798c6c4 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13920, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=103, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798c408 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13920, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=60, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798c354 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=14400, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=60, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798c2a0 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=14400, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=60, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798c1ec @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=14880, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=60, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798c138 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=14880, @velocity=127, @is_note_off=false, @channel=0, @delta_time=0, @is_realtime=false, @note=59, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798c084 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=15360, @velocity=127, @is_note_off=true, @channel=0, @delta_time=480, @is_realtime=false, @note=59, @is_note_on=false>], @channel=0, @sequence=#<MIDI::Sequence:0xb7bf3450 @ppqn=480, @writer_class=MIDI::IO::SeqWriter, @clocks=480, @tracks=[...], @denom=2, @reader_class=MIDI::IO::SeqReader, @numer=4, @qnotes=8>>, #<TimedTrack:0xb79ca30c @channels_used=0, @instrument="Church Organ", @time=15360, @events=[#<MIDI::ProgramChange:0xb79c3764 @status=192, @is_system=false, @program=19, @is_note=false, @is_meta=false, @is_channel=true, @time_from_start=0, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb799092c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=0, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=64, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb7990904 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=0, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=68, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb79908f0 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=0, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=71, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb7990864 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1920, @velocity=50, @is_note_off=true, @channel=1, @delta_time=1920, @is_realtime=false, @note=64, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb7990850 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1920, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=68, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb799083c @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1920, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=71, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb7990378 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1920, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=60, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb7990364 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1920, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=64, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb7990350 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=1920, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=67, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb79902d8 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3840, @velocity=50, @is_note_off=true, @channel=1, @delta_time=1920, @is_realtime=false, @note=60, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb79902c4 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3840, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=64, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb79902b0 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3840, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=67, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798fe00 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3840, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=67, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798fdec @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3840, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=71, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798fdd8 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=3840, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=74, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798fd4c @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5760, @velocity=50, @is_note_off=true, @channel=1, @delta_time=1920, @is_realtime=false, @note=67, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798fd38 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5760, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=71, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798fd24 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5760, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=74, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798e190 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5760, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=77, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798e17c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5760, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=81, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798e12c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=5760, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=84, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798e0a0 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7680, @velocity=50, @is_note_off=true, @channel=1, @delta_time=1920, @is_realtime=false, @note=77, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798e08c @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7680, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=81, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798e078 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7680, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=84, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798dbb4 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7680, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=78, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798dba0 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7680, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=82, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798db8c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=7680, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=85, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798db00 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9600, @velocity=50, @is_note_off=true, @channel=1, @delta_time=1920, @is_realtime=false, @note=78, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798daec @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9600, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=82, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798dac4 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9600, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=85, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798d510 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9600, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=80, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798d4e8 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9600, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=84, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798d4d4 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=9600, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=87, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798d420 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11520, @velocity=50, @is_note_off=true, @channel=1, @delta_time=1920, @is_realtime=false, @note=80, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798d3f8 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11520, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=84, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798d3e4 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11520, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=87, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798cd68 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11520, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=89, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798cd54 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11520, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=93, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798cd2c @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=11520, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=96, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798cc78 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13440, @velocity=50, @is_note_off=true, @channel=1, @delta_time=1920, @is_realtime=false, @note=89, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798cc64 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13440, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=93, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798cc3c @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13440, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=96, @is_note_on=false>, #<MIDI::NoteOnEvent:0xb798c5d4 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13440, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=103, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798c5ac @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13440, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=107, @is_note_on=true>, #<MIDI::NoteOnEvent:0xb798c598 @status=144, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=13440, @velocity=50, @is_note_off=false, @channel=1, @delta_time=0, @is_realtime=false, @note=110, @is_note_on=true>, #<MIDI::NoteOffEvent:0xb798c4e4 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=15360, @velocity=50, @is_note_off=true, @channel=1, @delta_time=1920, @is_realtime=false, @note=103, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798c4bc @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=15360, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=107, @is_note_on=false>, #<MIDI::NoteOffEvent:0xb798c4a8 @status=128, @is_system=false, @is_note=true, @is_meta=false, @is_channel=true, @time_from_start=15360, @velocity=50, @is_note_off=true, @channel=1, @delta_time=0, @is_realtime=false, @note=110, @is_note_on=false>], @channel=1, @sequence=#<MIDI::Sequence:0xb7bf3450 @ppqn=480, @writer_class=MIDI::IO::SeqWriter, @clocks=480, @tracks=[...], @denom=2, @reader_class=MIDI::IO::SeqReader, @numer=4, @qnotes=8>>] |