midilib 2.0.4 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/README.rdoc +9 -4
  3. data/Rakefile +2 -6
  4. data/examples/from_scratch.rb +3 -5
  5. data/examples/measures_mbt.rb +4 -4
  6. data/examples/print_program_changes.rb +9 -9
  7. data/examples/reader2text.rb +188 -188
  8. data/examples/seq2text.rb +17 -17
  9. data/examples/split.rb +19 -19
  10. data/examples/strings.rb +14 -14
  11. data/examples/transpose.rb +31 -31
  12. data/html/IO.html +65 -169
  13. data/html/MIDI.html +138 -256
  14. data/html/MIDI/ActiveSense.html +89 -178
  15. data/html/MIDI/ChannelEvent.html +95 -183
  16. data/html/MIDI/ChannelPressure.html +105 -190
  17. data/html/MIDI/Clock.html +89 -178
  18. data/html/MIDI/Continue.html +89 -178
  19. data/html/MIDI/Controller.html +107 -192
  20. data/html/MIDI/Event.html +138 -222
  21. data/html/MIDI/IO.html +45 -157
  22. data/html/MIDI/IO/MIDIFile.html +596 -568
  23. data/html/MIDI/IO/SeqReader.html +272 -314
  24. data/html/MIDI/IO/SeqWriter.html +229 -305
  25. data/html/MIDI/KeySig.html +129 -211
  26. data/html/MIDI/MIDI.html +45 -154
  27. data/html/MIDI/MIDI/MIDI.html +45 -154
  28. data/html/MIDI/MIDI/MIDI/Array.html +87 -185
  29. data/html/MIDI/Marker.html +71 -170
  30. data/html/MIDI/Measure.html +95 -190
  31. data/html/MIDI/Measures.html +103 -193
  32. data/html/MIDI/MetaEvent.html +180 -253
  33. data/html/MIDI/NoteEvent.html +118 -204
  34. data/html/MIDI/NoteOff.html +95 -183
  35. data/html/MIDI/NoteOn.html +95 -183
  36. data/html/MIDI/PitchBend.html +106 -191
  37. data/html/MIDI/PolyPressure.html +106 -189
  38. data/html/MIDI/ProgramChange.html +105 -190
  39. data/html/MIDI/Realtime.html +98 -184
  40. data/html/MIDI/Sequence.html +246 -311
  41. data/html/MIDI/SongPointer.html +106 -191
  42. data/html/MIDI/SongSelect.html +105 -190
  43. data/html/MIDI/Start.html +89 -178
  44. data/html/MIDI/Stop.html +89 -178
  45. data/html/MIDI/SystemCommon.html +71 -170
  46. data/html/MIDI/SystemExclusive.html +108 -193
  47. data/html/MIDI/SystemReset.html +89 -178
  48. data/html/MIDI/Tempo.html +135 -213
  49. data/html/MIDI/TimeSig.html +135 -214
  50. data/html/MIDI/Track.html +217 -291
  51. data/html/MIDI/TuneRequest.html +98 -184
  52. data/html/MIDI/Utils.html +89 -189
  53. data/html/README_rdoc.html +237 -257
  54. data/html/TODO_rdoc.html +64 -139
  55. data/html/created.rid +14 -14
  56. data/html/css/fonts.css +167 -0
  57. data/html/{rdoc.css → css/rdoc.css} +265 -218
  58. data/html/fonts/Lato-Light.ttf +0 -0
  59. data/html/fonts/Lato-LightItalic.ttf +0 -0
  60. data/html/fonts/Lato-Regular.ttf +0 -0
  61. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  62. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  63. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  64. data/html/images/add.png +0 -0
  65. data/html/images/arrow_up.png +0 -0
  66. data/html/images/delete.png +0 -0
  67. data/html/images/tag_blue.png +0 -0
  68. data/html/index.html +187 -169
  69. data/html/js/darkfish.js +41 -33
  70. data/html/js/jquery.js +4 -18
  71. data/html/js/navigation.js.gz +0 -0
  72. data/html/js/search.js +20 -5
  73. data/html/js/search_index.js +1 -1
  74. data/html/js/search_index.js.gz +0 -0
  75. data/html/js/searcher.js.gz +0 -0
  76. data/html/table_of_contents.html +1111 -498
  77. data/install.rb +43 -32
  78. data/lib/midilib/consts.rb +407 -407
  79. data/lib/midilib/event.rb +295 -294
  80. data/lib/midilib/info.rb +5 -5
  81. data/lib/midilib/io/midifile.rb +266 -267
  82. data/lib/midilib/io/seqreader.rb +106 -106
  83. data/lib/midilib/io/seqwriter.rb +59 -60
  84. data/lib/midilib/measure.rb +69 -69
  85. data/lib/midilib/sequence.rb +68 -70
  86. data/lib/midilib/track.rb +96 -102
  87. data/lib/midilib/utils.rb +15 -15
  88. data/test/event_equality.rb +50 -50
  89. data/test/test_event.rb +120 -122
  90. data/test/test_io.rb +35 -48
  91. data/test/test_sequence.rb +60 -60
  92. data/test/test_track.rb +154 -154
  93. data/test/test_varlen.rb +23 -25
  94. metadata +65 -57
@@ -8,72 +8,72 @@ require 'midilib'
8
8
 
9
9
  class SequenceTester < Test::Unit::TestCase
10
10
 
11
- def setup
12
- @seq = MIDI::Sequence.new
13
- @track = MIDI::Track.new(@seq)
14
- @seq.tracks << @track
15
- 3.times { @track.events << MIDI::NoteOn.new(0, 64, 64, 100) }
16
- @track.recalc_times
17
- end
11
+ def setup
12
+ @seq = MIDI::Sequence.new
13
+ @track = MIDI::Track.new(@seq)
14
+ @seq.tracks << @track
15
+ 3.times { @track.events << MIDI::NoteOn.new(0, 64, 64, 100) }
16
+ @track.recalc_times
17
+ end
18
18
 
19
- def test_basics
20
- assert_equal(120, @seq.beats_per_minute)
21
- assert_equal(1, @seq.tracks.length)
22
- assert_equal(MIDI::Track::UNNAMED, @seq.name)
23
- assert_equal(MIDI::Sequence::DEFAULT_TEMPO, @seq.bpm)
24
- end
19
+ def test_basics
20
+ assert_equal(120, @seq.beats_per_minute)
21
+ assert_equal(1, @seq.tracks.length)
22
+ assert_equal(MIDI::Track::UNNAMED, @seq.name)
23
+ assert_equal(MIDI::Sequence::DEFAULT_TEMPO, @seq.bpm)
24
+ end
25
25
 
26
- def test_pulses_to_seconds
27
- # At a tempo of 120 BPM 480 pulses (one quarter note) should take 0.5 seconds
28
- assert_in_delta 0.5, @seq.pulses_to_seconds(480), 0.00001
26
+ def test_pulses_to_seconds
27
+ # At a tempo of 120 BPM 480 pulses (one quarter note) should take 0.5 seconds
28
+ assert_in_delta 0.5, @seq.pulses_to_seconds(480), 0.00001
29
29
 
30
- # A half note should take one second
31
- assert_in_delta 1.0, @seq.pulses_to_seconds(480*2), 0.00001
30
+ # A half note should take one second
31
+ assert_in_delta 1.0, @seq.pulses_to_seconds(480*2), 0.00001
32
32
 
33
- # An eight note should take 0.25 seconds
34
- assert_in_delta 0.25, @seq.pulses_to_seconds(480/2), 0.00001
35
- end
33
+ # An eight note should take 0.25 seconds
34
+ assert_in_delta 0.25, @seq.pulses_to_seconds(480/2), 0.00001
35
+ end
36
36
 
37
- def test_length_to_delta
38
- assert_equal(480, @seq.ppqn)
39
- assert_equal(480, @seq.length_to_delta(1))
40
- assert_equal(240, @seq.length_to_delta(0.5))
37
+ def test_length_to_delta
38
+ assert_equal(480, @seq.ppqn)
39
+ assert_equal(480, @seq.length_to_delta(1))
40
+ assert_equal(240, @seq.length_to_delta(0.5))
41
41
 
42
- @seq.ppqn = 12
43
- assert_equal(12, @seq.ppqn)
44
- assert_equal(12, @seq.length_to_delta(1))
45
- assert_equal(6, @seq.length_to_delta(0.5))
46
- assert_equal(5, @seq.length_to_delta(0.49))
47
- end
42
+ @seq.ppqn = 12
43
+ assert_equal(12, @seq.ppqn)
44
+ assert_equal(12, @seq.length_to_delta(1))
45
+ assert_equal(6, @seq.length_to_delta(0.5))
46
+ assert_equal(5, @seq.length_to_delta(0.49))
47
+ end
48
48
 
49
- def test_note_to_length
50
- assert_equal(1, @seq.note_to_length('quarter'))
51
- assert_equal(4, @seq.note_to_length('whole'))
52
- assert_equal(1.5, @seq.note_to_length('dotted quarter'))
53
- assert_equal(1.0 / 3.0, @seq.note_to_length('quarter triplet'))
54
- assert_equal(0.5, @seq.note_to_length('dotted quarter triplet'))
55
- assert_equal(1.0 / 4, @seq.note_to_length('sixteenth'))
56
- assert_equal(1.0 / 4, @seq.note_to_length('16th'))
57
- assert_equal(1.0 / 8, @seq.note_to_length('thirty second'))
58
- assert_equal(1.0 / 8, @seq.note_to_length('32nd'))
59
- assert_equal(1.0 / 16, @seq.note_to_length('sixty fourth'))
60
- assert_equal(1.0 / 16, @seq.note_to_length('sixtyfourth'))
61
- assert_equal(1.0 / 16, @seq.note_to_length('64th'))
62
- end
49
+ def test_note_to_length
50
+ assert_equal(1, @seq.note_to_length('quarter'))
51
+ assert_equal(4, @seq.note_to_length('whole'))
52
+ assert_equal(1.5, @seq.note_to_length('dotted quarter'))
53
+ assert_equal(1.0 / 3.0, @seq.note_to_length('quarter triplet'))
54
+ assert_equal(0.5, @seq.note_to_length('dotted quarter triplet'))
55
+ assert_equal(1.0 / 4, @seq.note_to_length('sixteenth'))
56
+ assert_equal(1.0 / 4, @seq.note_to_length('16th'))
57
+ assert_equal(1.0 / 8, @seq.note_to_length('thirty second'))
58
+ assert_equal(1.0 / 8, @seq.note_to_length('32nd'))
59
+ assert_equal(1.0 / 16, @seq.note_to_length('sixty fourth'))
60
+ assert_equal(1.0 / 16, @seq.note_to_length('sixtyfourth'))
61
+ assert_equal(1.0 / 16, @seq.note_to_length('64th'))
62
+ end
63
63
 
64
- def test_note_to_delta
65
- assert_equal(480, @seq.note_to_delta('quarter'))
66
- assert_equal(480 * 4, @seq.note_to_delta('whole'))
67
- assert_equal(720, @seq.note_to_delta('dotted quarter'))
68
- assert_equal(480 / 3.0, @seq.note_to_delta('quarter triplet'))
69
- assert_equal((480 / 3.0) * 1.5,
70
- @seq.note_to_delta('dotted quarter triplet'))
71
- assert_equal(480 / 4, @seq.note_to_delta('sixteenth'))
72
- assert_equal(480 / 4, @seq.note_to_delta('16th'))
73
- assert_equal(480 / 8, @seq.note_to_delta('thirty second'))
74
- assert_equal(480 / 8, @seq.note_to_delta('32nd'))
75
- assert_equal(480 / 16, @seq.note_to_delta('sixty fourth'))
76
- assert_equal(480 / 16, @seq.note_to_delta('sixtyfourth'))
77
- assert_equal(480 / 16, @seq.note_to_delta('64th'))
78
- end
64
+ def test_note_to_delta
65
+ assert_equal(480, @seq.note_to_delta('quarter'))
66
+ assert_equal(480 * 4, @seq.note_to_delta('whole'))
67
+ assert_equal(720, @seq.note_to_delta('dotted quarter'))
68
+ assert_equal(480 / 3.0, @seq.note_to_delta('quarter triplet'))
69
+ assert_equal((480 / 3.0) * 1.5,
70
+ @seq.note_to_delta('dotted quarter triplet'))
71
+ assert_equal(480 / 4, @seq.note_to_delta('sixteenth'))
72
+ assert_equal(480 / 4, @seq.note_to_delta('16th'))
73
+ assert_equal(480 / 8, @seq.note_to_delta('thirty second'))
74
+ assert_equal(480 / 8, @seq.note_to_delta('32nd'))
75
+ assert_equal(480 / 16, @seq.note_to_delta('sixty fourth'))
76
+ assert_equal(480 / 16, @seq.note_to_delta('sixtyfourth'))
77
+ assert_equal(480 / 16, @seq.note_to_delta('64th'))
78
+ end
79
79
  end
@@ -8,165 +8,165 @@ require 'midilib'
8
8
 
9
9
  class TrackTester < Test::Unit::TestCase
10
10
 
11
- def setup
12
- @seq = MIDI::Sequence.new
13
- @track = MIDI::Track.new(@seq)
14
- @seq.tracks << @track
15
- 3.times { @track.events << MIDI::NoteOn.new(0, 64, 64, 100) }
16
- @track.recalc_times
11
+ def setup
12
+ @seq = MIDI::Sequence.new
13
+ @track = MIDI::Track.new(@seq)
14
+ @seq.tracks << @track
15
+ 3.times { @track.events << MIDI::NoteOn.new(0, 64, 64, 100) }
16
+ @track.recalc_times
17
+ end
18
+
19
+ def test_basics
20
+ assert_equal(3, @track.events.length)
21
+ 3.times do |i|
22
+ assert_equal(100, @track.events[i].delta_time)
23
+ assert_equal((i+1) * 100, @track.events[i].time_from_start)
17
24
  end
18
-
19
- def test_basics
20
- assert_equal(3, @track.events.length)
21
- 3.times { | i |
22
- assert_equal(100, @track.events[i].delta_time)
23
- assert_equal((i+1) * 100, @track.events[i].time_from_start)
24
- }
25
- assert_equal(MIDI::Track::UNNAMED, @track.name)
26
- end
27
-
28
- def test_append_event
29
- @track.events << MIDI::NoteOn.new(0, 64, 64, 100)
30
- @track.recalc_times
31
- assert_equal(4, @track.events.length)
32
- 4.times { | i |
33
- assert_equal((i+1) * 100, @track.events[i].time_from_start)
34
- }
35
- end
36
-
37
- def test_append_list
38
- @track.events +=
39
- (1..12).collect { | i | MIDI::NoteOn.new(0, 64, 64, 3) }
40
- @track.recalc_times
41
-
42
- 3.times { | i |
43
- assert_equal(100, @track.events[i].delta_time)
44
- assert_equal((i+1) * 100, @track.events[i].time_from_start)
45
- }
46
- 12.times { | i |
47
- assert_equal(3, @track.events[3 + i].delta_time)
48
- assert_equal(300 + ((i+1) * 3),
49
- @track.events[3 + i].time_from_start)
50
- }
51
- end
52
-
53
- def test_insert
54
- @track.events[1,0] = MIDI::NoteOn.new(0, 64, 64, 3)
55
- @track.recalc_times
56
- assert_equal(100, @track.events[0].time_from_start)
57
- assert_equal(103, @track.events[1].time_from_start)
58
- assert_equal(203, @track.events[2].time_from_start)
59
- assert_equal(303, @track.events[3].time_from_start)
60
- end
61
-
62
- def test_merge
63
- list = (1..12).collect { | i | MIDI::NoteOn.new(0, 64, 64, 10) }
64
- @track.merge(list)
65
- assert_equal(15, @track.events.length)
66
- assert_equal(10, @track.events[0].time_from_start)
67
- assert_equal(10, @track.events[0].delta_time)
68
- assert_equal(20, @track.events[1].time_from_start)
69
- assert_equal(10, @track.events[1].delta_time)
70
- assert_equal(30, @track.events[2].time_from_start)
71
- assert_equal(40, @track.events[3].time_from_start)
72
- assert_equal(50, @track.events[4].time_from_start)
73
- assert_equal(60, @track.events[5].time_from_start)
74
- assert_equal(70, @track.events[6].time_from_start)
75
- assert_equal(80, @track.events[7].time_from_start)
76
- assert_equal(90, @track.events[8].time_from_start)
77
- assert_equal(100, @track.events[9].time_from_start)
78
- assert_equal(100, @track.events[10].time_from_start)
79
- assert_equal(110, @track.events[11].time_from_start)
80
- assert_equal(120, @track.events[12].time_from_start)
81
- assert_equal(200, @track.events[13].time_from_start)
82
- assert_equal(300, @track.events[14].time_from_start)
83
- end
84
-
85
- def test_recalc_delta_from_times
86
- @track.each { | event | event.delta_time = 0 }
87
- @track.recalc_delta_from_times
88
- @track.each { | event | assert_equal(100, event.delta_time) }
89
- end
90
-
91
- def test_recalc_delta_from_times_unsorted
92
- @track.events[0].time_from_start = 100
93
- @track.events[1].time_from_start = 50
94
- @track.events[2].time_from_start = 150
95
- @track.recalc_delta_from_times
96
- prev_start_time = 0
97
- @track.each { | event |
98
- assert(prev_start_time <= event.time_from_start)
99
- assert(event.delta_time > 0)
100
- prev_start_time = event.time_from_start
101
- }
102
- end
103
-
104
- def test_sort
105
- e = @track.events[0]
106
- e.time_from_start = 300
107
- e = @track.events[1]
108
- e.time_from_start = 100
109
- e = @track.events[2]
110
- e.time_from_start = 200
111
-
112
- @track.sort
113
-
114
- assert_equal(100, @track.events[0].time_from_start)
115
- assert_equal(100, @track.events[0].delta_time)
116
-
117
- assert_equal(200, @track.events[1].time_from_start)
118
- assert_equal(100, @track.events[1].delta_time)
119
-
120
- assert_equal(300, @track.events[2].time_from_start)
121
- assert_equal(100, @track.events[2].delta_time)
25
+ assert_equal(MIDI::Track::UNNAMED, @track.name)
26
+ end
27
+
28
+ def test_append_event
29
+ @track.events << MIDI::NoteOn.new(0, 64, 64, 100)
30
+ @track.recalc_times
31
+ assert_equal(4, @track.events.length)
32
+ 4.times do |i|
33
+ assert_equal((i+1) * 100, @track.events[i].time_from_start)
122
34
  end
35
+ end
123
36
 
124
- def test_quantize
125
- @seq.ppqn = 80
126
-
127
- @track.quantize(1) # Quantize to a quarter note
128
- assert_equal(80, @track.events[0].time_from_start) # was 100
129
- assert_equal(240, @track.events[1].time_from_start) # was 200
130
- assert_equal(320, @track.events[2].time_from_start) # was 300
131
- end
37
+ def test_append_list
38
+ @track.events +=
39
+ (1..12).collect { |i| MIDI::NoteOn.new(0, 64, 64, 3) }
40
+ @track.recalc_times
132
41
 
133
- def test_instrument
134
- @track.instrument = 'foo'
135
- assert_equal('foo', @track.instrument)
42
+ 3.times do |i|
43
+ assert_equal(100, @track.events[i].delta_time)
44
+ assert_equal((i+1) * 100, @track.events[i].time_from_start)
136
45
  end
137
-
138
- def test_old_note_class_names
139
- x = MIDI::NoteOn.new(0, 64, 64, 10)
140
- assert(x.kind_of?(MIDI::NoteOnEvent)) # old name
141
- x = MIDI::NoteOff.new(0, 64, 64, 10)
142
- assert(x.kind_of?(MIDI::NoteOffEvent)) # old name
46
+ 12.times do |i|
47
+ assert_equal(3, @track.events[3 + i].delta_time)
48
+ assert_equal(300 + ((i+1) * 3),
49
+ @track.events[3 + i].time_from_start)
143
50
  end
144
-
145
- def test_mergesort
146
- @track.events = []
147
-
148
- # Two events with later start times but earlier in the event list
149
- e2 = MIDI::NoteOff.new(0, 64, 64, 100)
150
- e2.time_from_start = 100
151
- @track.events << e2
152
-
153
- e3 = MIDI::NoteOn.new(0, 64, 64, 100)
154
- e3.time_from_start = 100
155
- @track.events << e3
156
-
157
- # Earliest start time, latest in the list of events
158
- e1 = MIDI::NoteOn.new(0, 64, 64, 100)
159
- e1.time_from_start = 0
160
- @track.events << e1
161
-
162
- # Recalc sorts. Make sure note off/note on pair at t 100 are in the
163
- # correct order.
164
- @track.recalc_delta_from_times
165
-
166
- # These tests would fail before we moved to mergesort.
167
- assert_equal(e1, @track.events[0])
168
- assert_equal(e2, @track.events[1])
169
- assert_equal(e3, @track.events[2])
170
-
51
+ end
52
+
53
+ def test_insert
54
+ @track.events[1,0] = MIDI::NoteOn.new(0, 64, 64, 3)
55
+ @track.recalc_times
56
+ assert_equal(100, @track.events[0].time_from_start)
57
+ assert_equal(103, @track.events[1].time_from_start)
58
+ assert_equal(203, @track.events[2].time_from_start)
59
+ assert_equal(303, @track.events[3].time_from_start)
60
+ end
61
+
62
+ def test_merge
63
+ list = (1..12).collect { |i| MIDI::NoteOn.new(0, 64, 64, 10) }
64
+ @track.merge(list)
65
+ assert_equal(15, @track.events.length)
66
+ assert_equal(10, @track.events[0].time_from_start)
67
+ assert_equal(10, @track.events[0].delta_time)
68
+ assert_equal(20, @track.events[1].time_from_start)
69
+ assert_equal(10, @track.events[1].delta_time)
70
+ assert_equal(30, @track.events[2].time_from_start)
71
+ assert_equal(40, @track.events[3].time_from_start)
72
+ assert_equal(50, @track.events[4].time_from_start)
73
+ assert_equal(60, @track.events[5].time_from_start)
74
+ assert_equal(70, @track.events[6].time_from_start)
75
+ assert_equal(80, @track.events[7].time_from_start)
76
+ assert_equal(90, @track.events[8].time_from_start)
77
+ assert_equal(100, @track.events[9].time_from_start)
78
+ assert_equal(100, @track.events[10].time_from_start)
79
+ assert_equal(110, @track.events[11].time_from_start)
80
+ assert_equal(120, @track.events[12].time_from_start)
81
+ assert_equal(200, @track.events[13].time_from_start)
82
+ assert_equal(300, @track.events[14].time_from_start)
83
+ end
84
+
85
+ def test_recalc_delta_from_times
86
+ @track.each { |event| event.delta_time = 0 }
87
+ @track.recalc_delta_from_times
88
+ @track.each { |event| assert_equal(100, event.delta_time) }
89
+ end
90
+
91
+ def test_recalc_delta_from_times_unsorted
92
+ @track.events[0].time_from_start = 100
93
+ @track.events[1].time_from_start = 50
94
+ @track.events[2].time_from_start = 150
95
+ @track.recalc_delta_from_times
96
+ prev_start_time = 0
97
+ @track.each do |event|
98
+ assert(prev_start_time <= event.time_from_start)
99
+ assert(event.delta_time > 0)
100
+ prev_start_time = event.time_from_start
171
101
  end
102
+ end
103
+
104
+ def test_sort
105
+ e = @track.events[0]
106
+ e.time_from_start = 300
107
+ e = @track.events[1]
108
+ e.time_from_start = 100
109
+ e = @track.events[2]
110
+ e.time_from_start = 200
111
+
112
+ @track.sort
113
+
114
+ assert_equal(100, @track.events[0].time_from_start)
115
+ assert_equal(100, @track.events[0].delta_time)
116
+
117
+ assert_equal(200, @track.events[1].time_from_start)
118
+ assert_equal(100, @track.events[1].delta_time)
119
+
120
+ assert_equal(300, @track.events[2].time_from_start)
121
+ assert_equal(100, @track.events[2].delta_time)
122
+ end
123
+
124
+ def test_quantize
125
+ @seq.ppqn = 80
126
+
127
+ @track.quantize(1) # Quantize to a quarter note
128
+ assert_equal(80, @track.events[0].time_from_start) # was 100
129
+ assert_equal(240, @track.events[1].time_from_start) # was 200
130
+ assert_equal(320, @track.events[2].time_from_start) # was 300
131
+ end
132
+
133
+ def test_instrument
134
+ @track.instrument = 'foo'
135
+ assert_equal('foo', @track.instrument)
136
+ end
137
+
138
+ def test_old_note_class_names
139
+ x = MIDI::NoteOn.new(0, 64, 64, 10)
140
+ assert(x.kind_of?(MIDI::NoteOnEvent)) # old name
141
+ x = MIDI::NoteOff.new(0, 64, 64, 10)
142
+ assert(x.kind_of?(MIDI::NoteOffEvent)) # old name
143
+ end
144
+
145
+ def test_mergesort
146
+ @track.events = []
147
+
148
+ # Two events with later start times but earlier in the event list
149
+ e2 = MIDI::NoteOff.new(0, 64, 64, 100)
150
+ e2.time_from_start = 100
151
+ @track.events << e2
152
+
153
+ e3 = MIDI::NoteOn.new(0, 64, 64, 100)
154
+ e3.time_from_start = 100
155
+ @track.events << e3
156
+
157
+ # Earliest start time, latest in the list of events
158
+ e1 = MIDI::NoteOn.new(0, 64, 64, 100)
159
+ e1.time_from_start = 0
160
+ @track.events << e1
161
+
162
+ # Recalc sorts. Make sure note off/note on pair at t 100 are in the
163
+ # correct order.
164
+ @track.recalc_delta_from_times
165
+
166
+ # These tests would fail before we moved to mergesort.
167
+ assert_equal(e1, @track.events[0])
168
+ assert_equal(e2, @track.events[1])
169
+ assert_equal(e3, @track.events[2])
170
+
171
+ end
172
172
  end