midilib 2.0.2 → 3.0.1

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.
@@ -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: []