midilib 2.0.2 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,62 +7,74 @@ require 'test/unit'
7
7
  require 'midilib'
8
8
 
9
9
  class SequenceTester < Test::Unit::TestCase
10
+ def setup
11
+ @seq = MIDI::Sequence.new
12
+ @track = MIDI::Track.new(@seq)
13
+ @seq.tracks << @track
14
+ 3.times { @track.events << MIDI::NoteOn.new(0, 64, 64, 100) }
15
+ @track.recalc_times
16
+ end
10
17
 
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
+ def test_basics
19
+ assert_equal(120, @seq.beats_per_minute)
20
+ assert_equal(1, @seq.tracks.length)
21
+ assert_equal(MIDI::Track::UNNAMED, @seq.name)
22
+ assert_equal(MIDI::Sequence::DEFAULT_TEMPO, @seq.bpm)
23
+ end
18
24
 
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
+ def test_pulses_to_seconds
26
+ # At a tempo of 120 BPM 480 pulses (one quarter note) should take 0.5 seconds
27
+ assert_in_delta 0.5, @seq.pulses_to_seconds(480), 0.00001
25
28
 
26
- def test_length_to_delta
27
- assert_equal(480, @seq.ppqn)
28
- assert_equal(480, @seq.length_to_delta(1))
29
- assert_equal(240, @seq.length_to_delta(0.5))
29
+ # A half note should take one second
30
+ assert_in_delta 1.0, @seq.pulses_to_seconds(480 * 2), 0.00001
30
31
 
31
- @seq.ppqn = 12
32
- assert_equal(12, @seq.ppqn)
33
- assert_equal(12, @seq.length_to_delta(1))
34
- assert_equal(6, @seq.length_to_delta(0.5))
35
- assert_equal(5, @seq.length_to_delta(0.49))
36
- end
32
+ # An eight note should take 0.25 seconds
33
+ assert_in_delta 0.25, @seq.pulses_to_seconds(480 / 2), 0.00001
34
+ end
37
35
 
38
- def test_note_to_length
39
- assert_equal(1, @seq.note_to_length('quarter'))
40
- assert_equal(4, @seq.note_to_length('whole'))
41
- assert_equal(1.5, @seq.note_to_length('dotted quarter'))
42
- assert_equal(1.0 / 3.0, @seq.note_to_length('quarter triplet'))
43
- assert_equal(0.5, @seq.note_to_length('dotted quarter triplet'))
44
- assert_equal(1.0 / 4, @seq.note_to_length('sixteenth'))
45
- assert_equal(1.0 / 4, @seq.note_to_length('16th'))
46
- assert_equal(1.0 / 8, @seq.note_to_length('thirty second'))
47
- assert_equal(1.0 / 8, @seq.note_to_length('32nd'))
48
- assert_equal(1.0 / 16, @seq.note_to_length('sixty fourth'))
49
- assert_equal(1.0 / 16, @seq.note_to_length('sixtyfourth'))
50
- assert_equal(1.0 / 16, @seq.note_to_length('64th'))
51
- end
36
+ def test_length_to_delta
37
+ assert_equal(480, @seq.ppqn)
38
+ assert_equal(480, @seq.length_to_delta(1))
39
+ assert_equal(240, @seq.length_to_delta(0.5))
52
40
 
53
- def test_note_to_delta
54
- assert_equal(480, @seq.note_to_delta('quarter'))
55
- assert_equal(480 * 4, @seq.note_to_delta('whole'))
56
- assert_equal(720, @seq.note_to_delta('dotted quarter'))
57
- assert_equal(480 / 3.0, @seq.note_to_delta('quarter triplet'))
58
- assert_equal((480 / 3.0) * 1.5,
59
- @seq.note_to_delta('dotted quarter triplet'))
60
- assert_equal(480 / 4, @seq.note_to_delta('sixteenth'))
61
- assert_equal(480 / 4, @seq.note_to_delta('16th'))
62
- assert_equal(480 / 8, @seq.note_to_delta('thirty second'))
63
- assert_equal(480 / 8, @seq.note_to_delta('32nd'))
64
- assert_equal(480 / 16, @seq.note_to_delta('sixty fourth'))
65
- assert_equal(480 / 16, @seq.note_to_delta('sixtyfourth'))
66
- assert_equal(480 / 16, @seq.note_to_delta('64th'))
67
- end
41
+ @seq.ppqn = 12
42
+ assert_equal(12, @seq.ppqn)
43
+ assert_equal(12, @seq.length_to_delta(1))
44
+ assert_equal(6, @seq.length_to_delta(0.5))
45
+ # rounding tests
46
+ assert_equal(6, @seq.length_to_delta(0.49))
47
+ assert_equal(5, @seq.length_to_delta(0.45))
48
+ end
49
+
50
+ def test_note_to_length
51
+ assert_equal(1, @seq.note_to_length('quarter'))
52
+ assert_equal(4, @seq.note_to_length('whole'))
53
+ assert_equal(1.5, @seq.note_to_length('dotted quarter'))
54
+ assert_equal(1.0 / 3.0, @seq.note_to_length('quarter triplet'))
55
+ assert_equal(0.5, @seq.note_to_length('dotted quarter triplet'))
56
+ assert_equal(1.0 / 4, @seq.note_to_length('sixteenth'))
57
+ assert_equal(1.0 / 4, @seq.note_to_length('16th'))
58
+ assert_equal(1.0 / 8, @seq.note_to_length('thirty second'))
59
+ assert_equal(1.0 / 8, @seq.note_to_length('32nd'))
60
+ assert_equal(1.0 / 16, @seq.note_to_length('sixty fourth'))
61
+ assert_equal(1.0 / 16, @seq.note_to_length('sixtyfourth'))
62
+ assert_equal(1.0 / 16, @seq.note_to_length('64th'))
63
+ end
64
+
65
+ def test_note_to_delta
66
+ assert_equal(480, @seq.note_to_delta('quarter'))
67
+ assert_equal(480 * 4, @seq.note_to_delta('whole'))
68
+ assert_equal(720, @seq.note_to_delta('dotted quarter'))
69
+ assert_equal(480 / 3.0, @seq.note_to_delta('quarter triplet'))
70
+ assert_equal((480 / 3.0) * 1.5,
71
+ @seq.note_to_delta('dotted quarter triplet'))
72
+ assert_equal(480 / 4, @seq.note_to_delta('sixteenth'))
73
+ assert_equal(480 / 4, @seq.note_to_delta('16th'))
74
+ assert_equal(480 / 8, @seq.note_to_delta('thirty second'))
75
+ assert_equal(480 / 8, @seq.note_to_delta('32nd'))
76
+ assert_equal(480 / 16, @seq.note_to_delta('sixty fourth'))
77
+ assert_equal(480 / 16, @seq.note_to_delta('sixtyfourth'))
78
+ assert_equal(480 / 16, @seq.note_to_delta('64th'))
79
+ end
68
80
  end
data/test/test_track.rb CHANGED
@@ -7,166 +7,137 @@ require 'test/unit'
7
7
  require 'midilib'
8
8
 
9
9
  class TrackTester < Test::Unit::TestCase
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
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
- }
10
+ def setup
11
+ @seq = MIDI::Sequence.new
12
+ @track = MIDI::Track.new(@seq)
13
+ @seq.tracks << @track
14
+ 3.times { @track.events << MIDI::NoteOn.new(0, 64, 64, 100) }
15
+ @track.recalc_times
16
+ end
17
+
18
+ def test_basics
19
+ assert_equal(3, @track.events.length)
20
+ 3.times do |i|
21
+ assert_equal(100, @track.events[i].delta_time)
22
+ assert_equal((i + 1) * 100, @track.events[i].time_from_start)
35
23
  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
- }
24
+ assert_equal(MIDI::Track::UNNAMED, @track.name)
25
+ end
26
+
27
+ def test_append_event
28
+ @track.events << MIDI::NoteOn.new(0, 64, 64, 100)
29
+ @track.recalc_times
30
+ assert_equal(4, @track.events.length)
31
+ 4.times do |i|
32
+ assert_equal((i + 1) * 100, @track.events[i].time_from_start)
51
33
  end
34
+ end
52
35
 
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
36
+ def test_append_list
37
+ @track.events +=
38
+ (1..12).collect { |i| MIDI::NoteOn.new(0, 64, 64, 3) }
39
+ @track.recalc_times
61
40
 
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)
41
+ 3.times do |i|
42
+ assert_equal(100, @track.events[i].delta_time)
43
+ assert_equal((i + 1) * 100, @track.events[i].time_from_start)
83
44
  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) }
45
+ 12.times do |i|
46
+ assert_equal(3, @track.events[3 + i].delta_time)
47
+ assert_equal(300 + ((i + 1) * 3),
48
+ @track.events[3 + i].time_from_start)
89
49
  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)
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
-
50
+ end
51
+
52
+ def test_insert
53
+ @track.events[1, 0] = MIDI::NoteOn.new(0, 64, 64, 3)
54
+ @track.recalc_times
55
+ assert_equal(100, @track.events[0].time_from_start)
56
+ assert_equal(103, @track.events[1].time_from_start)
57
+ assert_equal(203, @track.events[2].time_from_start)
58
+ assert_equal(303, @track.events[3].time_from_start)
59
+ end
60
+
61
+ def test_merge
62
+ list = (1..12).collect { |i| MIDI::NoteOn.new(0, 64, 64, 10) }
63
+ @track.merge(list)
64
+ assert_equal(15, @track.events.length)
65
+ assert_equal(10, @track.events[0].time_from_start)
66
+ assert_equal(10, @track.events[0].delta_time)
67
+ assert_equal(20, @track.events[1].time_from_start)
68
+ assert_equal(10, @track.events[1].delta_time)
69
+ assert_equal(30, @track.events[2].time_from_start)
70
+ assert_equal(40, @track.events[3].time_from_start)
71
+ assert_equal(50, @track.events[4].time_from_start)
72
+ assert_equal(60, @track.events[5].time_from_start)
73
+ assert_equal(70, @track.events[6].time_from_start)
74
+ assert_equal(80, @track.events[7].time_from_start)
75
+ assert_equal(90, @track.events[8].time_from_start)
76
+ assert_equal(100, @track.events[9].time_from_start)
77
+ assert_equal(100, @track.events[10].time_from_start)
78
+ assert_equal(110, @track.events[11].time_from_start)
79
+ assert_equal(120, @track.events[12].time_from_start)
80
+ assert_equal(200, @track.events[13].time_from_start)
81
+ assert_equal(300, @track.events[14].time_from_start)
82
+ end
83
+
84
+ def test_recalc_delta_from_times
85
+ @track.each { |event| event.delta_time = 0 }
86
+ @track.recalc_delta_from_times
87
+ @track.each { |event| assert_equal(100, event.delta_time) }
88
+ end
89
+
90
+ def test_recalc_delta_from_times_unsorted
91
+ @track.events[0].time_from_start = 100
92
+ @track.events[1].time_from_start = 50
93
+ @track.events[2].time_from_start = 150
94
+ @track.recalc_delta_from_times
95
+ prev_start_time = 0
96
+ @track.each do |event|
97
+ assert(prev_start_time <= event.time_from_start)
98
+ assert(event.delta_time > 0)
99
+ prev_start_time = event.time_from_start
171
100
  end
101
+ end
102
+
103
+ def test_sort
104
+ e = @track.events[0]
105
+ e.time_from_start = 300
106
+ e = @track.events[1]
107
+ e.time_from_start = 100
108
+ e = @track.events[2]
109
+ e.time_from_start = 200
110
+
111
+ @track.sort
112
+
113
+ assert_equal(100, @track.events[0].time_from_start)
114
+ assert_equal(100, @track.events[0].delta_time)
115
+
116
+ assert_equal(200, @track.events[1].time_from_start)
117
+ assert_equal(100, @track.events[1].delta_time)
118
+
119
+ assert_equal(300, @track.events[2].time_from_start)
120
+ assert_equal(100, @track.events[2].delta_time)
121
+ end
122
+
123
+ def test_quantize
124
+ @seq.ppqn = 80
125
+
126
+ @track.quantize(1) # Quantize to a quarter note
127
+ assert_equal(80, @track.events[0].time_from_start) # was 100
128
+ assert_equal(240, @track.events[1].time_from_start) # was 200
129
+ assert_equal(320, @track.events[2].time_from_start) # was 300
130
+ end
131
+
132
+ def test_instrument
133
+ @track.instrument = 'foo'
134
+ assert_equal('foo', @track.instrument)
135
+ end
136
+
137
+ def test_old_note_class_names
138
+ x = MIDI::NoteOn.new(0, 64, 64, 10)
139
+ assert(x.is_a?(MIDI::NoteOnEvent)) # old name
140
+ x = MIDI::NoteOff.new(0, 64, 64, 10)
141
+ assert(x.is_a?(MIDI::NoteOffEvent)) # old name
142
+ end
172
143
  end
data/test/test_varlen.rb CHANGED
@@ -7,34 +7,30 @@ require 'test/unit'
7
7
  require 'midilib'
8
8
 
9
9
  class VarLenTester < Test::Unit::TestCase
10
+ VAR_LEN_TEST_DATA = {
11
+ 0x00000000 => 0x00,
12
+ 0x00000040 => 0x40,
13
+ 0x0000007F => 0x7F,
14
+ 0x00000080 => 0x8100,
15
+ 0x00002000 => 0xC000,
16
+ 0x00003FFF => 0xFF7F,
17
+ 0x00004000 => 0x818000,
18
+ 0x00100000 => 0xC08000,
19
+ 0x001FFFFF => 0xFFFF7F,
20
+ 0x00200000 => 0x81808000,
21
+ 0x08000000 => 0xC0808000,
22
+ 0x0FFFFFFF => 0xFFFFFF7F
23
+ }
10
24
 
11
- VAR_LEN_TEST_DATA = {
12
- 0x00000000 => 0x00,
13
- 0x00000040 => 0x40,
14
- 0x0000007F => 0x7F,
15
- 0x00000080 => 0x8100,
16
- 0x00002000 => 0xC000,
17
- 0x00003FFF => 0xFF7F,
18
- 0x00004000 => 0x818000,
19
- 0x00100000 => 0xC08000,
20
- 0x001FFFFF => 0xFFFF7F,
21
- 0x00200000 => 0x81808000,
22
- 0x08000000 => 0xC0808000,
23
- 0x0FFFFFFF => 0xFFFFFF7F,
24
- }
25
-
26
- def num_to_var_len(num, answer)
27
- varlen = MIDI::Utils.as_var_len(num)
28
- varlen.reverse.each { | b |
29
- assert_equal(answer & 0xff, b)
30
- answer = answer >> 8
31
- }
32
- end
33
-
34
- def test_num_to_var_len
35
- VAR_LEN_TEST_DATA.each { | varlen, answer |
36
- num_to_var_len(varlen, answer)
37
- }
25
+ def num_to_var_len(num, answer)
26
+ varlen = MIDI::Utils.as_var_len(num)
27
+ varlen.reverse.each do |b|
28
+ assert_equal(answer & 0xff, b)
29
+ answer = answer >> 8
38
30
  end
31
+ end
39
32
 
33
+ def test_num_to_var_len
34
+ VAR_LEN_TEST_DATA.each { |varlen, answer| num_to_var_len(varlen, answer) }
35
+ end
40
36
  end
metadata CHANGED
@@ -1,21 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: midilib
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
5
- prerelease:
4
+ version: 3.0.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jim Menard
9
- autorequire:
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-07-30 00:00:00.000000000 Z
11
+ date: 2022-09-04 00:00:00.000000000 Z
13
12
  dependencies: []
14
- description: ! 'midilib is a pure Ruby MIDI library useful for reading and
15
-
13
+ description: |
14
+ midilib is a pure Ruby MIDI library useful for reading and
16
15
  writing standard MIDI files and manipulating MIDI event data.
17
-
18
- '
19
16
  email: jim@jimmenard.com
20
17
  executables: []
21
18
  extensions: []
@@ -25,13 +22,13 @@ extra_rdoc_files:
25
22
  files:
26
23
  - ChangeLog
27
24
  - Credits
28
- - Rakefile
29
25
  - README.rdoc
26
+ - Rakefile
30
27
  - TODO.rdoc
28
+ - examples/NoFences.mid
31
29
  - examples/from_scratch.mid
32
30
  - examples/from_scratch.rb
33
31
  - examples/measures_mbt.rb
34
- - examples/NoFences.mid
35
32
  - examples/print_program_changes.rb
36
33
  - examples/reader2text.rb
37
34
  - examples/seq2text.rb
@@ -39,6 +36,7 @@ files:
39
36
  - examples/strings.rb
40
37
  - examples/transpose.rb
41
38
  - install.rb
39
+ - lib/midilib.rb
42
40
  - lib/midilib/consts.rb
43
41
  - lib/midilib/event.rb
44
42
  - lib/midilib/info.rb
@@ -46,43 +44,43 @@ files:
46
44
  - lib/midilib/io/seqreader.rb
47
45
  - lib/midilib/io/seqwriter.rb
48
46
  - lib/midilib/measure.rb
47
+ - lib/midilib/mergesort.rb
49
48
  - lib/midilib/sequence.rb
50
49
  - lib/midilib/track.rb
51
50
  - lib/midilib/utils.rb
52
- - lib/midilib.rb
53
51
  - test/event_equality.rb
54
52
  - test/test.mid
55
53
  - test/test_event.rb
56
54
  - test/test_io.rb
55
+ - test/test_mergesort.rb
57
56
  - test/test_midifile.rb
58
57
  - test/test_sequence.rb
59
58
  - test/test_track.rb
60
59
  - test/test_varlen.rb
61
60
  homepage: http://github.com/jimm/midilib
62
- licenses: []
63
- post_install_message:
61
+ licenses:
62
+ - Ruby
63
+ metadata: {}
64
+ post_install_message:
64
65
  rdoc_options:
65
- - --main
66
+ - "--main"
66
67
  - README.rdoc
67
68
  require_paths:
68
69
  - lib
69
70
  required_ruby_version: !ruby/object:Gem::Requirement
70
- none: false
71
71
  requirements:
72
- - - ! '>='
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  required_rubygems_version: !ruby/object:Gem::Requirement
76
- none: false
77
76
  requirements:
78
- - - ! '>='
77
+ - - ">="
79
78
  - !ruby/object:Gem::Version
80
79
  version: '0'
81
80
  requirements:
82
81
  - none
83
- rubyforge_project: midilib
84
- rubygems_version: 1.8.23
85
- signing_key:
86
- specification_version: 3
82
+ rubygems_version: 3.3.7
83
+ signing_key:
84
+ specification_version: 4
87
85
  summary: MIDI file and event manipulation library
88
86
  test_files: []