midilib 3.0.1 → 3.1.0
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.
- checksums.yaml +4 -4
- data/Credits +5 -0
- data/html/MIDI/ActiveSense.html +171 -0
- data/html/MIDI/ChannelEvent.html +190 -0
- data/html/MIDI/ChannelPressure.html +212 -0
- data/html/MIDI/Clock.html +171 -0
- data/html/MIDI/Continue.html +171 -0
- data/html/MIDI/Controller.html +224 -0
- data/html/MIDI/Event.html +349 -0
- data/html/MIDI/IO/MIDIFile.html +1392 -0
- data/html/MIDI/IO/SeqReader.html +642 -0
- data/html/MIDI/IO/SeqWriter.html +442 -0
- data/html/MIDI/IO.html +91 -0
- data/html/MIDI/KeySig.html +292 -0
- data/html/MIDI/Marker.html +138 -0
- data/html/MIDI/Measure.html +260 -0
- data/html/MIDI/Measures.html +222 -0
- data/html/MIDI/MetaEvent.html +353 -0
- data/html/MIDI/NoteEvent.html +255 -0
- data/html/MIDI/NoteOff.html +188 -0
- data/html/MIDI/NoteOn.html +188 -0
- data/html/MIDI/PitchBend.html +213 -0
- data/html/MIDI/PolyPressure.html +216 -0
- data/html/MIDI/ProgramChange.html +212 -0
- data/html/MIDI/Realtime.html +194 -0
- data/html/MIDI/Sequence.html +641 -0
- data/html/MIDI/SongPointer.html +213 -0
- data/html/MIDI/SongSelect.html +212 -0
- data/html/MIDI/Start.html +171 -0
- data/html/MIDI/Stop.html +171 -0
- data/html/MIDI/SystemCommon.html +138 -0
- data/html/MIDI/SystemExclusive.html +215 -0
- data/html/MIDI/SystemReset.html +171 -0
- data/html/MIDI/Tempo.html +292 -0
- data/html/MIDI/TimeSig.html +286 -0
- data/html/MIDI/Track.html +489 -0
- data/html/MIDI/TuneRequest.html +194 -0
- data/html/MIDI/Utils.html +178 -0
- data/html/MIDI.html +281 -0
- data/html/Object.html +197 -0
- data/html/README_rdoc.html +545 -0
- data/html/TODO_rdoc.html +123 -0
- data/html/created.rid +15 -0
- data/html/css/fonts.css +167 -0
- data/html/css/rdoc.css +639 -0
- data/html/fonts/Lato-Light.ttf +0 -0
- data/html/fonts/Lato-LightItalic.ttf +0 -0
- data/html/fonts/Lato-Regular.ttf +0 -0
- data/html/fonts/Lato-RegularItalic.ttf +0 -0
- data/html/fonts/SourceCodePro-Bold.ttf +0 -0
- data/html/fonts/SourceCodePro-Regular.ttf +0 -0
- data/html/images/add.png +0 -0
- data/html/images/arrow_up.png +0 -0
- data/html/images/brick.png +0 -0
- data/html/images/brick_link.png +0 -0
- data/html/images/bug.png +0 -0
- data/html/images/bullet_black.png +0 -0
- data/html/images/bullet_toggle_minus.png +0 -0
- data/html/images/bullet_toggle_plus.png +0 -0
- data/html/images/date.png +0 -0
- data/html/images/delete.png +0 -0
- data/html/images/find.png +0 -0
- data/html/images/loadingAnimation.gif +0 -0
- data/html/images/macFFBgHack.png +0 -0
- data/html/images/package.png +0 -0
- data/html/images/page_green.png +0 -0
- data/html/images/page_white_text.png +0 -0
- data/html/images/page_white_width.png +0 -0
- data/html/images/plugin.png +0 -0
- data/html/images/ruby.png +0 -0
- data/html/images/tag_blue.png +0 -0
- data/html/images/tag_green.png +0 -0
- data/html/images/transparent.png +0 -0
- data/html/images/wrench.png +0 -0
- data/html/images/wrench_orange.png +0 -0
- data/html/images/zoom.png +0 -0
- data/html/index.html +534 -0
- data/html/js/darkfish.js +84 -0
- data/html/js/navigation.js +105 -0
- data/html/js/navigation.js.gz +0 -0
- data/html/js/search.js +110 -0
- data/html/js/search_index.js +1 -0
- data/html/js/search_index.js.gz +0 -0
- data/html/js/searcher.js +229 -0
- data/html/js/searcher.js.gz +0 -0
- data/html/table_of_contents.html +1258 -0
- data/lib/midilib/info.rb +2 -2
- data/lib/midilib/io/seqreader.rb +18 -5
- data/test/test_io.rb +18 -5
- metadata +85 -1
data/lib/midilib/info.rb
CHANGED
data/lib/midilib/io/seqreader.rb
CHANGED
@@ -81,16 +81,29 @@ module MIDI
|
|
81
81
|
def note_off(chan, note, vel)
|
82
82
|
# Find note on, create note off, connect the two, and remove
|
83
83
|
# note on from pending list.
|
84
|
+
|
85
|
+
corresp_note_on = nil
|
86
|
+
|
84
87
|
@pending.each_with_index do |on, i|
|
85
88
|
next unless on.note == note && on.channel == chan
|
86
89
|
|
87
|
-
make_note_off(on, vel)
|
88
90
|
@pending.delete_at(i)
|
89
|
-
|
91
|
+
corresp_note_on = on
|
92
|
+
break
|
90
93
|
end
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
+
|
95
|
+
if corresp_note_on
|
96
|
+
make_note_off(corresp_note_on, vel)
|
97
|
+
else
|
98
|
+
# When a corresponding note on is missing,
|
99
|
+
# keep note off as input with lefting on/off attr to nil.
|
100
|
+
off = NoteOff.new(chan, note, vel, @curr_ticks)
|
101
|
+
@track.events << off
|
102
|
+
|
103
|
+
if $DEBUG
|
104
|
+
warn "note off with no earlier note on (ch #{chan}, note" +
|
105
|
+
" #{note}, vel #{vel})"
|
106
|
+
end
|
94
107
|
end
|
95
108
|
end
|
96
109
|
|
data/test/test_io.rb
CHANGED
@@ -101,17 +101,30 @@ class IOTester < Test::Unit::TestCase
|
|
101
101
|
assert_equal(MIDI::GM_PATCH_NAMES[0], seq.tracks[1].instrument)
|
102
102
|
end
|
103
103
|
|
104
|
-
def
|
104
|
+
def test_preserve_deltas_in_some_situations
|
105
105
|
out_seq = MIDI::Sequence.new
|
106
106
|
out_track = MIDI::Track.new(out_seq)
|
107
107
|
out_seq.tracks << out_track
|
108
108
|
out_track.events << MIDI::Tempo.new(MIDI::Tempo.bpm_to_mpq(120))
|
109
|
+
|
110
|
+
# 1) The meta events with non-zero delta time
|
109
111
|
# Normally copyright and sequence name events are at time 0, but non-zero
|
110
112
|
# start times are allowed.
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
113
|
+
begin
|
114
|
+
out_track.events << MIDI::MetaEvent.new(MIDI::META_COPYRIGHT, '(C) 1950 Donald Duck', 100)
|
115
|
+
out_track.events << MIDI::MetaEvent.new(MIDI::META_SEQ_NAME, 'Quack, Track 1', 200)
|
116
|
+
out_track.events << MIDI::NoteOn.new(0, 64, 127, 0)
|
117
|
+
out_track.events << MIDI::NoteOff.new(0, 64, 127, 100)
|
118
|
+
end
|
119
|
+
|
120
|
+
# 2) The unusual note off event with non-zero delta time
|
121
|
+
begin
|
122
|
+
out_track.events << MIDI::NoteOff.new(0, 65, 127, 120)
|
123
|
+
out_track.events << MIDI::NoteOn.new(0, 65, 127, 0)
|
124
|
+
# Add note off (which will be complemented at #end_track if missing) for later comparison.
|
125
|
+
out_track.events << MIDI::NoteOff.new(0, 65, 127, 230)
|
126
|
+
end
|
127
|
+
|
115
128
|
File.open('/tmp/midilib_test.mid', 'wb') { |file| out_seq.write(file) }
|
116
129
|
|
117
130
|
# Although start times are not written out to the MIDI file, we
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: midilib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Menard
|
@@ -35,6 +35,90 @@ files:
|
|
35
35
|
- examples/split.rb
|
36
36
|
- examples/strings.rb
|
37
37
|
- examples/transpose.rb
|
38
|
+
- html/MIDI.html
|
39
|
+
- html/MIDI/ActiveSense.html
|
40
|
+
- html/MIDI/ChannelEvent.html
|
41
|
+
- html/MIDI/ChannelPressure.html
|
42
|
+
- html/MIDI/Clock.html
|
43
|
+
- html/MIDI/Continue.html
|
44
|
+
- html/MIDI/Controller.html
|
45
|
+
- html/MIDI/Event.html
|
46
|
+
- html/MIDI/IO.html
|
47
|
+
- html/MIDI/IO/MIDIFile.html
|
48
|
+
- html/MIDI/IO/SeqReader.html
|
49
|
+
- html/MIDI/IO/SeqWriter.html
|
50
|
+
- html/MIDI/KeySig.html
|
51
|
+
- html/MIDI/Marker.html
|
52
|
+
- html/MIDI/Measure.html
|
53
|
+
- html/MIDI/Measures.html
|
54
|
+
- html/MIDI/MetaEvent.html
|
55
|
+
- html/MIDI/NoteEvent.html
|
56
|
+
- html/MIDI/NoteOff.html
|
57
|
+
- html/MIDI/NoteOn.html
|
58
|
+
- html/MIDI/PitchBend.html
|
59
|
+
- html/MIDI/PolyPressure.html
|
60
|
+
- html/MIDI/ProgramChange.html
|
61
|
+
- html/MIDI/Realtime.html
|
62
|
+
- html/MIDI/Sequence.html
|
63
|
+
- html/MIDI/SongPointer.html
|
64
|
+
- html/MIDI/SongSelect.html
|
65
|
+
- html/MIDI/Start.html
|
66
|
+
- html/MIDI/Stop.html
|
67
|
+
- html/MIDI/SystemCommon.html
|
68
|
+
- html/MIDI/SystemExclusive.html
|
69
|
+
- html/MIDI/SystemReset.html
|
70
|
+
- html/MIDI/Tempo.html
|
71
|
+
- html/MIDI/TimeSig.html
|
72
|
+
- html/MIDI/Track.html
|
73
|
+
- html/MIDI/TuneRequest.html
|
74
|
+
- html/MIDI/Utils.html
|
75
|
+
- html/Object.html
|
76
|
+
- html/README_rdoc.html
|
77
|
+
- html/TODO_rdoc.html
|
78
|
+
- html/created.rid
|
79
|
+
- html/css/fonts.css
|
80
|
+
- html/css/rdoc.css
|
81
|
+
- html/fonts/Lato-Light.ttf
|
82
|
+
- html/fonts/Lato-LightItalic.ttf
|
83
|
+
- html/fonts/Lato-Regular.ttf
|
84
|
+
- html/fonts/Lato-RegularItalic.ttf
|
85
|
+
- html/fonts/SourceCodePro-Bold.ttf
|
86
|
+
- html/fonts/SourceCodePro-Regular.ttf
|
87
|
+
- html/images/add.png
|
88
|
+
- html/images/arrow_up.png
|
89
|
+
- html/images/brick.png
|
90
|
+
- html/images/brick_link.png
|
91
|
+
- html/images/bug.png
|
92
|
+
- html/images/bullet_black.png
|
93
|
+
- html/images/bullet_toggle_minus.png
|
94
|
+
- html/images/bullet_toggle_plus.png
|
95
|
+
- html/images/date.png
|
96
|
+
- html/images/delete.png
|
97
|
+
- html/images/find.png
|
98
|
+
- html/images/loadingAnimation.gif
|
99
|
+
- html/images/macFFBgHack.png
|
100
|
+
- html/images/package.png
|
101
|
+
- html/images/page_green.png
|
102
|
+
- html/images/page_white_text.png
|
103
|
+
- html/images/page_white_width.png
|
104
|
+
- html/images/plugin.png
|
105
|
+
- html/images/ruby.png
|
106
|
+
- html/images/tag_blue.png
|
107
|
+
- html/images/tag_green.png
|
108
|
+
- html/images/transparent.png
|
109
|
+
- html/images/wrench.png
|
110
|
+
- html/images/wrench_orange.png
|
111
|
+
- html/images/zoom.png
|
112
|
+
- html/index.html
|
113
|
+
- html/js/darkfish.js
|
114
|
+
- html/js/navigation.js
|
115
|
+
- html/js/navigation.js.gz
|
116
|
+
- html/js/search.js
|
117
|
+
- html/js/search_index.js
|
118
|
+
- html/js/search_index.js.gz
|
119
|
+
- html/js/searcher.js
|
120
|
+
- html/js/searcher.js.gz
|
121
|
+
- html/table_of_contents.html
|
38
122
|
- install.rb
|
39
123
|
- lib/midilib.rb
|
40
124
|
- lib/midilib/consts.rb
|