midilib 2.0.2 → 2.0.4

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 (85) hide show
  1. data/Credits +5 -0
  2. data/README.rdoc +35 -30
  3. data/examples/reader2text.rb +1 -0
  4. data/html/IO.html +259 -0
  5. data/html/MIDI.html +665 -0
  6. data/html/MIDI/ActiveSense.html +295 -0
  7. data/html/MIDI/ChannelEvent.html +319 -0
  8. data/html/MIDI/ChannelPressure.html +350 -0
  9. data/html/MIDI/Clock.html +295 -0
  10. data/html/MIDI/Continue.html +295 -0
  11. data/html/MIDI/Controller.html +365 -0
  12. data/html/MIDI/Event.html +573 -0
  13. data/html/MIDI/IO.html +207 -0
  14. data/html/MIDI/IO/MIDIFile.html +1996 -0
  15. data/html/MIDI/IO/SeqReader.html +946 -0
  16. data/html/MIDI/IO/SeqWriter.html +648 -0
  17. data/html/MIDI/KeySig.html +435 -0
  18. data/html/MIDI/MIDI.html +204 -0
  19. data/html/MIDI/MIDI/MIDI.html +204 -0
  20. data/html/MIDI/MIDI/MIDI/Array.html +353 -0
  21. data/html/MIDI/Marker.html +257 -0
  22. data/html/MIDI/Measure.html +423 -0
  23. data/html/MIDI/Measures.html +375 -0
  24. data/html/MIDI/MetaEvent.html +534 -0
  25. data/html/MIDI/NoteEvent.html +417 -0
  26. data/html/MIDI/NoteOff.html +316 -0
  27. data/html/MIDI/NoteOn.html +316 -0
  28. data/html/MIDI/PitchBend.html +351 -0
  29. data/html/MIDI/PolyPressure.html +360 -0
  30. data/html/MIDI/ProgramChange.html +350 -0
  31. data/html/MIDI/Realtime.html +328 -0
  32. data/html/MIDI/Sequence.html +961 -0
  33. data/html/MIDI/SongPointer.html +351 -0
  34. data/html/MIDI/SongSelect.html +350 -0
  35. data/html/MIDI/Start.html +295 -0
  36. data/html/MIDI/Stop.html +295 -0
  37. data/html/MIDI/SystemCommon.html +257 -0
  38. data/html/MIDI/SystemExclusive.html +353 -0
  39. data/html/MIDI/SystemReset.html +295 -0
  40. data/html/MIDI/Tempo.html +474 -0
  41. data/html/MIDI/TimeSig.html +467 -0
  42. data/html/MIDI/Track.html +769 -0
  43. data/html/MIDI/TuneRequest.html +328 -0
  44. data/html/MIDI/Utils.html +320 -0
  45. data/html/README_rdoc.html +751 -0
  46. data/html/TODO_rdoc.html +200 -0
  47. data/html/created.rid +14 -0
  48. data/html/images/add.png +0 -0
  49. data/html/images/brick.png +0 -0
  50. data/html/images/brick_link.png +0 -0
  51. data/html/images/bug.png +0 -0
  52. data/html/images/bullet_black.png +0 -0
  53. data/html/images/bullet_toggle_minus.png +0 -0
  54. data/html/images/bullet_toggle_plus.png +0 -0
  55. data/html/images/date.png +0 -0
  56. data/html/images/delete.png +0 -0
  57. data/html/images/find.png +0 -0
  58. data/html/images/loadingAnimation.gif +0 -0
  59. data/html/images/macFFBgHack.png +0 -0
  60. data/html/images/package.png +0 -0
  61. data/html/images/page_green.png +0 -0
  62. data/html/images/page_white_text.png +0 -0
  63. data/html/images/page_white_width.png +0 -0
  64. data/html/images/plugin.png +0 -0
  65. data/html/images/ruby.png +0 -0
  66. data/html/images/tag_blue.png +0 -0
  67. data/html/images/tag_green.png +0 -0
  68. data/html/images/transparent.png +0 -0
  69. data/html/images/wrench.png +0 -0
  70. data/html/images/wrench_orange.png +0 -0
  71. data/html/images/zoom.png +0 -0
  72. data/html/index.html +750 -0
  73. data/html/js/darkfish.js +153 -0
  74. data/html/js/jquery.js +18 -0
  75. data/html/js/navigation.js +142 -0
  76. data/html/js/search.js +94 -0
  77. data/html/js/search_index.js +1 -0
  78. data/html/js/searcher.js +228 -0
  79. data/html/rdoc.css +543 -0
  80. data/html/table_of_contents.html +652 -0
  81. data/lib/midilib/info.rb +1 -1
  82. data/lib/midilib/io/seqreader.rb +1 -1
  83. data/lib/midilib/sequence.rb +7 -0
  84. data/test/test_sequence.rb +11 -0
  85. metadata +80 -3
@@ -0,0 +1,207 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
6
+
7
+ <title>module MIDI::IO - midilib</title>
8
+
9
+ <link type="text/css" media="screen" href="../rdoc.css" rel="stylesheet">
10
+
11
+ <script type="text/javascript">
12
+ var rdoc_rel_prefix = "../";
13
+ </script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
16
+ <script type="text/javascript" charset="utf-8" src="../js/navigation.js"></script>
17
+ <script type="text/javascript" charset="utf-8" src="../js/search_index.js"></script>
18
+ <script type="text/javascript" charset="utf-8" src="../js/search.js"></script>
19
+ <script type="text/javascript" charset="utf-8" src="../js/searcher.js"></script>
20
+ <script type="text/javascript" charset="utf-8" src="../js/darkfish.js"></script>
21
+
22
+
23
+ <body id="top" class="module">
24
+ <nav id="metadata">
25
+ <nav id="home-section" class="section">
26
+ <h3 class="section-header">
27
+ <a href="../index.html">Home</a>
28
+ <a href="../table_of_contents.html#classes">Classes</a>
29
+ <a href="../table_of_contents.html#methods">Methods</a>
30
+ </h3>
31
+ </nav>
32
+
33
+
34
+ <nav id="search-section" class="section project-section" class="initially-hidden">
35
+ <form action="#" method="get" accept-charset="utf-8">
36
+ <h3 class="section-header">
37
+ <input type="text" name="search" placeholder="Search" id="search-field"
38
+ title="Type to search, Up and Down to navigate, Enter to load">
39
+ </h3>
40
+ </form>
41
+
42
+ <ul id="search-results" class="initially-hidden"></ul>
43
+ </nav>
44
+
45
+
46
+ <div id="file-metadata">
47
+ <nav id="file-list-section" class="section">
48
+ <h3 class="section-header">Defined In</h3>
49
+ <ul>
50
+ <li>lib/midilib/io/midifile.rb
51
+ <li>lib/midilib/io/seqreader.rb
52
+ <li>lib/midilib/io/seqwriter.rb
53
+ </ul>
54
+ </nav>
55
+
56
+
57
+ </div>
58
+
59
+ <div id="class-metadata">
60
+
61
+
62
+
63
+
64
+ </div>
65
+
66
+ <div id="project-metadata">
67
+ <nav id="fileindex-section" class="section project-section">
68
+ <h3 class="section-header">Pages</h3>
69
+
70
+ <ul>
71
+
72
+ <li class="file"><a href="../README_rdoc.html">README</a>
73
+
74
+ <li class="file"><a href="../TODO_rdoc.html">TODO</a>
75
+
76
+ </ul>
77
+ </nav>
78
+
79
+ <nav id="classindex-section" class="section project-section">
80
+ <h3 class="section-header">Class and Module Index</h3>
81
+
82
+ <ul class="link-list">
83
+
84
+ <li><a href="../MIDI.html">MIDI</a>
85
+
86
+ <li><a href="../MIDI/ActiveSense.html">MIDI::ActiveSense</a>
87
+
88
+ <li><a href="../MIDI/ChannelEvent.html">MIDI::ChannelEvent</a>
89
+
90
+ <li><a href="../MIDI/ChannelPressure.html">MIDI::ChannelPressure</a>
91
+
92
+ <li><a href="../MIDI/Clock.html">MIDI::Clock</a>
93
+
94
+ <li><a href="../MIDI/Continue.html">MIDI::Continue</a>
95
+
96
+ <li><a href="../MIDI/Controller.html">MIDI::Controller</a>
97
+
98
+ <li><a href="../MIDI/Event.html">MIDI::Event</a>
99
+
100
+ <li><a href="../MIDI/IO.html">MIDI::IO</a>
101
+
102
+ <li><a href="../MIDI/IO/MIDIFile.html">MIDI::IO::MIDIFile</a>
103
+
104
+ <li><a href="../MIDI/IO/SeqReader.html">MIDI::IO::SeqReader</a>
105
+
106
+ <li><a href="../MIDI/IO/SeqWriter.html">MIDI::IO::SeqWriter</a>
107
+
108
+ <li><a href="../MIDI/KeySig.html">MIDI::KeySig</a>
109
+
110
+ <li><a href="../MIDI/MIDI.html">MIDI::MIDI</a>
111
+
112
+ <li><a href="../MIDI/MIDI/MIDI.html">MIDI::MIDI::MIDI</a>
113
+
114
+ <li><a href="../MIDI/MIDI/MIDI/Array.html">MIDI::MIDI::MIDI::Array</a>
115
+
116
+ <li><a href="../MIDI/Marker.html">MIDI::Marker</a>
117
+
118
+ <li><a href="../MIDI/Measure.html">MIDI::Measure</a>
119
+
120
+ <li><a href="../MIDI/Measures.html">MIDI::Measures</a>
121
+
122
+ <li><a href="../MIDI/MetaEvent.html">MIDI::MetaEvent</a>
123
+
124
+ <li><a href="../MIDI/NoteEvent.html">MIDI::NoteEvent</a>
125
+
126
+ <li><a href="../MIDI/NoteOff.html">MIDI::NoteOff</a>
127
+
128
+ <li><a href="../MIDI/NoteOff.html">MIDI::NoteOffEvent</a>
129
+
130
+ <li><a href="../MIDI/NoteOn.html">MIDI::NoteOn</a>
131
+
132
+ <li><a href="../MIDI/NoteOn.html">MIDI::NoteOnEvent</a>
133
+
134
+ <li><a href="../MIDI/PitchBend.html">MIDI::PitchBend</a>
135
+
136
+ <li><a href="../MIDI/PolyPressure.html">MIDI::PolyPressure</a>
137
+
138
+ <li><a href="../MIDI/ProgramChange.html">MIDI::ProgramChange</a>
139
+
140
+ <li><a href="../MIDI/Realtime.html">MIDI::Realtime</a>
141
+
142
+ <li><a href="../MIDI/Sequence.html">MIDI::Sequence</a>
143
+
144
+ <li><a href="../MIDI/SongPointer.html">MIDI::SongPointer</a>
145
+
146
+ <li><a href="../MIDI/SongSelect.html">MIDI::SongSelect</a>
147
+
148
+ <li><a href="../MIDI/Start.html">MIDI::Start</a>
149
+
150
+ <li><a href="../MIDI/Stop.html">MIDI::Stop</a>
151
+
152
+ <li><a href="../MIDI/SystemCommon.html">MIDI::SystemCommon</a>
153
+
154
+ <li><a href="../MIDI/SystemExclusive.html">MIDI::SystemExclusive</a>
155
+
156
+ <li><a href="../MIDI/SystemReset.html">MIDI::SystemReset</a>
157
+
158
+ <li><a href="../MIDI/Tempo.html">MIDI::Tempo</a>
159
+
160
+ <li><a href="../MIDI/TimeSig.html">MIDI::TimeSig</a>
161
+
162
+ <li><a href="../MIDI/Track.html">MIDI::Track</a>
163
+
164
+ <li><a href="../MIDI/TuneRequest.html">MIDI::TuneRequest</a>
165
+
166
+ <li><a href="../MIDI/Utils.html">MIDI::Utils</a>
167
+
168
+ <li><a href="../IO.html">IO</a>
169
+
170
+ </ul>
171
+ </nav>
172
+
173
+ </div>
174
+ </nav>
175
+
176
+ <div id="documentation">
177
+ <h1 class="module">module MIDI::IO</h1>
178
+
179
+ <div id="description" class="description">
180
+
181
+ </div><!-- description -->
182
+
183
+
184
+
185
+
186
+ <section id="5Buntitled-5D" class="documentation-section">
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+ <!-- Methods -->
196
+
197
+ </section><!-- 5Buntitled-5D -->
198
+
199
+ </div><!-- documentation -->
200
+
201
+
202
+ <footer id="validator-badges">
203
+ <p><a href="http://validator.w3.org/check/referer">[Validate]</a>
204
+ <p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.12.
205
+ <p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
206
+ </footer>
207
+
@@ -0,0 +1,1996 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta content="text/html; charset=US-ASCII" http-equiv="Content-Type">
6
+
7
+ <title>class MIDI::IO::MIDIFile - midilib</title>
8
+
9
+ <link type="text/css" media="screen" href="../../rdoc.css" rel="stylesheet">
10
+
11
+ <script type="text/javascript">
12
+ var rdoc_rel_prefix = "../../";
13
+ </script>
14
+
15
+ <script type="text/javascript" charset="utf-8" src="../../js/jquery.js"></script>
16
+ <script type="text/javascript" charset="utf-8" src="../../js/navigation.js"></script>
17
+ <script type="text/javascript" charset="utf-8" src="../../js/search_index.js"></script>
18
+ <script type="text/javascript" charset="utf-8" src="../../js/search.js"></script>
19
+ <script type="text/javascript" charset="utf-8" src="../../js/searcher.js"></script>
20
+ <script type="text/javascript" charset="utf-8" src="../../js/darkfish.js"></script>
21
+
22
+
23
+ <body id="top" class="class">
24
+ <nav id="metadata">
25
+ <nav id="home-section" class="section">
26
+ <h3 class="section-header">
27
+ <a href="../../index.html">Home</a>
28
+ <a href="../../table_of_contents.html#classes">Classes</a>
29
+ <a href="../../table_of_contents.html#methods">Methods</a>
30
+ </h3>
31
+ </nav>
32
+
33
+
34
+ <nav id="search-section" class="section project-section" class="initially-hidden">
35
+ <form action="#" method="get" accept-charset="utf-8">
36
+ <h3 class="section-header">
37
+ <input type="text" name="search" placeholder="Search" id="search-field"
38
+ title="Type to search, Up and Down to navigate, Enter to load">
39
+ </h3>
40
+ </form>
41
+
42
+ <ul id="search-results" class="initially-hidden"></ul>
43
+ </nav>
44
+
45
+
46
+ <div id="file-metadata">
47
+ <nav id="file-list-section" class="section">
48
+ <h3 class="section-header">Defined In</h3>
49
+ <ul>
50
+ <li>lib/midilib/io/midifile.rb
51
+ </ul>
52
+ </nav>
53
+
54
+
55
+ </div>
56
+
57
+ <div id="class-metadata">
58
+
59
+ <nav id="parent-class-section" class="section">
60
+ <h3 class="section-header">Parent</h3>
61
+
62
+ <p class="link">Object
63
+
64
+ </nav>
65
+
66
+
67
+ <!-- Method Quickref -->
68
+ <nav id="method-list-section" class="section">
69
+ <h3 class="section-header">Methods</h3>
70
+
71
+ <ul class="link-list">
72
+
73
+ <li><a href="#method-c-new">::new</a>
74
+
75
+ <li><a href="#method-i-arbitrary">#arbitrary</a>
76
+
77
+ <li><a href="#method-i-bad_byte">#bad_byte</a>
78
+
79
+ <li><a href="#method-i-chan_message">#chan_message</a>
80
+
81
+ <li><a href="#method-i-chan_pressure">#chan_pressure</a>
82
+
83
+ <li><a href="#method-i-controller">#controller</a>
84
+
85
+ <li><a href="#method-i-end_track">#end_track</a>
86
+
87
+ <li><a href="#method-i-eot">#eot</a>
88
+
89
+ <li><a href="#method-i-error">#error</a>
90
+
91
+ <li><a href="#method-i-get_bytes">#get_bytes</a>
92
+
93
+ <li><a href="#method-i-getc">#getc</a>
94
+
95
+ <li><a href="#method-i-handle_arbitrary">#handle_arbitrary</a>
96
+
97
+ <li><a href="#method-i-handle_sysex">#handle_sysex</a>
98
+
99
+ <li><a href="#method-i-header">#header</a>
100
+
101
+ <li><a href="#method-i-key_signature">#key_signature</a>
102
+
103
+ <li><a href="#method-i-meta_event">#meta_event</a>
104
+
105
+ <li><a href="#method-i-meta_misc">#meta_misc</a>
106
+
107
+ <li><a href="#method-i-msg">#msg</a>
108
+
109
+ <li><a href="#method-i-msg_add">#msg_add</a>
110
+
111
+ <li><a href="#method-i-msg_init">#msg_init</a>
112
+
113
+ <li><a href="#method-i-msg_read">#msg_read</a>
114
+
115
+ <li><a href="#method-i-note_off">#note_off</a>
116
+
117
+ <li><a href="#method-i-note_on">#note_on</a>
118
+
119
+ <li><a href="#method-i-pitch_bend">#pitch_bend</a>
120
+
121
+ <li><a href="#method-i-pressure">#pressure</a>
122
+
123
+ <li><a href="#method-i-program">#program</a>
124
+
125
+ <li><a href="#method-i-read16">#read16</a>
126
+
127
+ <li><a href="#method-i-read32">#read32</a>
128
+
129
+ <li><a href="#method-i-read_from">#read_from</a>
130
+
131
+ <li><a href="#method-i-read_header">#read_header</a>
132
+
133
+ <li><a href="#method-i-read_mt_header_string">#read_mt_header_string</a>
134
+
135
+ <li><a href="#method-i-read_track">#read_track</a>
136
+
137
+ <li><a href="#method-i-read_var_len">#read_var_len</a>
138
+
139
+ <li><a href="#method-i-sequence_number">#sequence_number</a>
140
+
141
+ <li><a href="#method-i-sequencer_specific">#sequencer_specific</a>
142
+
143
+ <li><a href="#method-i-smpte">#smpte</a>
144
+
145
+ <li><a href="#method-i-start_track">#start_track</a>
146
+
147
+ <li><a href="#method-i-sysex">#sysex</a>
148
+
149
+ <li><a href="#method-i-tempo">#tempo</a>
150
+
151
+ <li><a href="#method-i-text">#text</a>
152
+
153
+ <li><a href="#method-i-time_signature">#time_signature</a>
154
+
155
+ <li><a href="#method-i-write16">#write16</a>
156
+
157
+ <li><a href="#method-i-write32">#write32</a>
158
+
159
+ <li><a href="#method-i-write_var_len">#write_var_len</a>
160
+
161
+ </ul>
162
+ </nav>
163
+
164
+ </div>
165
+
166
+ <div id="project-metadata">
167
+ <nav id="fileindex-section" class="section project-section">
168
+ <h3 class="section-header">Pages</h3>
169
+
170
+ <ul>
171
+
172
+ <li class="file"><a href="../../README_rdoc.html">README</a>
173
+
174
+ <li class="file"><a href="../../TODO_rdoc.html">TODO</a>
175
+
176
+ </ul>
177
+ </nav>
178
+
179
+ <nav id="classindex-section" class="section project-section">
180
+ <h3 class="section-header">Class and Module Index</h3>
181
+
182
+ <ul class="link-list">
183
+
184
+ <li><a href="../../MIDI.html">MIDI</a>
185
+
186
+ <li><a href="../../MIDI/ActiveSense.html">MIDI::ActiveSense</a>
187
+
188
+ <li><a href="../../MIDI/ChannelEvent.html">MIDI::ChannelEvent</a>
189
+
190
+ <li><a href="../../MIDI/ChannelPressure.html">MIDI::ChannelPressure</a>
191
+
192
+ <li><a href="../../MIDI/Clock.html">MIDI::Clock</a>
193
+
194
+ <li><a href="../../MIDI/Continue.html">MIDI::Continue</a>
195
+
196
+ <li><a href="../../MIDI/Controller.html">MIDI::Controller</a>
197
+
198
+ <li><a href="../../MIDI/Event.html">MIDI::Event</a>
199
+
200
+ <li><a href="../../MIDI/IO.html">MIDI::IO</a>
201
+
202
+ <li><a href="../../MIDI/IO/MIDIFile.html">MIDI::IO::MIDIFile</a>
203
+
204
+ <li><a href="../../MIDI/IO/SeqReader.html">MIDI::IO::SeqReader</a>
205
+
206
+ <li><a href="../../MIDI/IO/SeqWriter.html">MIDI::IO::SeqWriter</a>
207
+
208
+ <li><a href="../../MIDI/KeySig.html">MIDI::KeySig</a>
209
+
210
+ <li><a href="../../MIDI/MIDI.html">MIDI::MIDI</a>
211
+
212
+ <li><a href="../../MIDI/MIDI/MIDI.html">MIDI::MIDI::MIDI</a>
213
+
214
+ <li><a href="../../MIDI/MIDI/MIDI/Array.html">MIDI::MIDI::MIDI::Array</a>
215
+
216
+ <li><a href="../../MIDI/Marker.html">MIDI::Marker</a>
217
+
218
+ <li><a href="../../MIDI/Measure.html">MIDI::Measure</a>
219
+
220
+ <li><a href="../../MIDI/Measures.html">MIDI::Measures</a>
221
+
222
+ <li><a href="../../MIDI/MetaEvent.html">MIDI::MetaEvent</a>
223
+
224
+ <li><a href="../../MIDI/NoteEvent.html">MIDI::NoteEvent</a>
225
+
226
+ <li><a href="../../MIDI/NoteOff.html">MIDI::NoteOff</a>
227
+
228
+ <li><a href="../../MIDI/NoteOff.html">MIDI::NoteOffEvent</a>
229
+
230
+ <li><a href="../../MIDI/NoteOn.html">MIDI::NoteOn</a>
231
+
232
+ <li><a href="../../MIDI/NoteOn.html">MIDI::NoteOnEvent</a>
233
+
234
+ <li><a href="../../MIDI/PitchBend.html">MIDI::PitchBend</a>
235
+
236
+ <li><a href="../../MIDI/PolyPressure.html">MIDI::PolyPressure</a>
237
+
238
+ <li><a href="../../MIDI/ProgramChange.html">MIDI::ProgramChange</a>
239
+
240
+ <li><a href="../../MIDI/Realtime.html">MIDI::Realtime</a>
241
+
242
+ <li><a href="../../MIDI/Sequence.html">MIDI::Sequence</a>
243
+
244
+ <li><a href="../../MIDI/SongPointer.html">MIDI::SongPointer</a>
245
+
246
+ <li><a href="../../MIDI/SongSelect.html">MIDI::SongSelect</a>
247
+
248
+ <li><a href="../../MIDI/Start.html">MIDI::Start</a>
249
+
250
+ <li><a href="../../MIDI/Stop.html">MIDI::Stop</a>
251
+
252
+ <li><a href="../../MIDI/SystemCommon.html">MIDI::SystemCommon</a>
253
+
254
+ <li><a href="../../MIDI/SystemExclusive.html">MIDI::SystemExclusive</a>
255
+
256
+ <li><a href="../../MIDI/SystemReset.html">MIDI::SystemReset</a>
257
+
258
+ <li><a href="../../MIDI/Tempo.html">MIDI::Tempo</a>
259
+
260
+ <li><a href="../../MIDI/TimeSig.html">MIDI::TimeSig</a>
261
+
262
+ <li><a href="../../MIDI/Track.html">MIDI::Track</a>
263
+
264
+ <li><a href="../../MIDI/TuneRequest.html">MIDI::TuneRequest</a>
265
+
266
+ <li><a href="../../MIDI/Utils.html">MIDI::Utils</a>
267
+
268
+ <li><a href="../../IO.html">IO</a>
269
+
270
+ </ul>
271
+ </nav>
272
+
273
+ </div>
274
+ </nav>
275
+
276
+ <div id="documentation">
277
+ <h1 class="class">class MIDI::IO::MIDIFile</h1>
278
+
279
+ <div id="description" class="description">
280
+
281
+ <p>A <a href="MIDIFile.html">MIDIFile</a> parses a <a
282
+ href="../MIDI.html">MIDI</a> file and calls methods when it sees <a
283
+ href="../MIDI.html">MIDI</a> events. Most of the methods are stubs. To do
284
+ anything interesting with the events, override these methods (those between
285
+ the "The rest of these are NOPs by default" and "End of NOPs" comments).</p>
286
+
287
+ <p>See <a href="SeqReader.html">SeqReader</a> for a subclass that uses these
288
+ methods to create <a href="../Event.html">Event</a> objects.</p>
289
+
290
+ </div><!-- description -->
291
+
292
+
293
+
294
+
295
+ <section id="5Buntitled-5D" class="documentation-section">
296
+
297
+
298
+
299
+
300
+
301
+ <!-- Constants -->
302
+ <section id="constants-list" class="section">
303
+ <h3 class="section-header">Constants</h3>
304
+ <dl>
305
+
306
+ <dt id="MThd_BYTE_ARRAY">MThd_BYTE_ARRAY
307
+
308
+ <dd class="description">
309
+
310
+
311
+ <dt id="MTrk_BYTE_ARRAY">MTrk_BYTE_ARRAY
312
+
313
+ <dd class="description">
314
+
315
+
316
+ <dt id="NUM_DATA_BYTES">NUM_DATA_BYTES
317
+
318
+ <dd class="description"><p>This array is indexed by the high half of a status byte. Its value is
319
+ either the number of bytes needed (1 or 2) for a channel message, or 0 if
320
+ it's not a channel message.</p>
321
+
322
+
323
+ </dl>
324
+ </section>
325
+
326
+
327
+
328
+ <!-- Attributes -->
329
+ <section id="attribute-method-details" class="method-section section">
330
+ <h3 class="section-header">Attributes</h3>
331
+
332
+
333
+ <div id="attribute-i-bytes_to_be_read" class="method-detail">
334
+ <div class="method-heading attribute-method-heading">
335
+ <span class="method-name">bytes_to_be_read</span><span
336
+ class="attribute-access-type">[RW]</span>
337
+ </div>
338
+
339
+ <div class="method-description">
340
+
341
+
342
+
343
+ </div>
344
+ </div>
345
+
346
+ <div id="attribute-i-curr_ticks" class="method-detail">
347
+ <div class="method-heading attribute-method-heading">
348
+ <span class="method-name">curr_ticks</span><span
349
+ class="attribute-access-type">[RW]</span>
350
+ </div>
351
+
352
+ <div class="method-description">
353
+
354
+
355
+
356
+ </div>
357
+ </div>
358
+
359
+ <div id="attribute-i-no_merge" class="method-detail">
360
+ <div class="method-heading attribute-method-heading">
361
+ <span class="method-name">no_merge</span><span
362
+ class="attribute-access-type">[RW]</span>
363
+ </div>
364
+
365
+ <div class="method-description">
366
+
367
+
368
+
369
+ </div>
370
+ </div>
371
+
372
+ <div id="attribute-i-raw_data" class="method-detail">
373
+ <div class="method-heading attribute-method-heading">
374
+ <span class="method-name">raw_data</span><span
375
+ class="attribute-access-type">[RW]</span>
376
+ </div>
377
+
378
+ <div class="method-description">
379
+
380
+
381
+
382
+ </div>
383
+ </div>
384
+
385
+ <div id="attribute-i-raw_time_stamp_data" class="method-detail">
386
+ <div class="method-heading attribute-method-heading">
387
+ <span class="method-name">raw_time_stamp_data</span><span
388
+ class="attribute-access-type">[RW]</span>
389
+ </div>
390
+
391
+ <div class="method-description">
392
+
393
+ <p>Raw data info</p>
394
+
395
+ </div>
396
+ </div>
397
+
398
+ <div id="attribute-i-raw_var_num_data" class="method-detail">
399
+ <div class="method-heading attribute-method-heading">
400
+ <span class="method-name">raw_var_num_data</span><span
401
+ class="attribute-access-type">[RW]</span>
402
+ </div>
403
+
404
+ <div class="method-description">
405
+
406
+
407
+
408
+ </div>
409
+ </div>
410
+
411
+ <div id="attribute-i-skip_init" class="method-detail">
412
+ <div class="method-heading attribute-method-heading">
413
+ <span class="method-name">skip_init</span><span
414
+ class="attribute-access-type">[RW]</span>
415
+ </div>
416
+
417
+ <div class="method-description">
418
+
419
+
420
+
421
+ </div>
422
+ </div>
423
+
424
+ <div id="attribute-i-ticks_so_far" class="method-detail">
425
+ <div class="method-heading attribute-method-heading">
426
+ <span class="method-name">ticks_so_far</span><span
427
+ class="attribute-access-type">[RW]</span>
428
+ </div>
429
+
430
+ <div class="method-description">
431
+
432
+
433
+
434
+ </div>
435
+ </div>
436
+
437
+ </section><!-- attribute-method-details -->
438
+
439
+
440
+ <!-- Methods -->
441
+
442
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section section">
443
+ <h3 class="section-header">Public Class Methods</h3>
444
+
445
+
446
+ <div id="method-c-new" class="method-detail ">
447
+
448
+ <div class="method-heading">
449
+ <span class="method-name">new</span><span
450
+ class="method-args">()</span>
451
+ <span class="method-click-advice">click to toggle source</span>
452
+ </div>
453
+
454
+
455
+ <div class="method-description">
456
+
457
+
458
+
459
+
460
+
461
+ <div class="method-source-code" id="new-source">
462
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 49</span>
463
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>
464
+ <span class="ruby-ivar">@no_merge</span> = <span class="ruby-keyword">false</span>
465
+ <span class="ruby-ivar">@skip_init</span> = <span class="ruby-keyword">true</span>
466
+ <span class="ruby-ivar">@io</span> = <span class="ruby-keyword">nil</span>
467
+ <span class="ruby-ivar">@bytes_to_be_read</span> = <span class="ruby-value">0</span>
468
+ <span class="ruby-ivar">@msg_buf</span> = <span class="ruby-keyword">nil</span>
469
+ <span class="ruby-keyword">end</span></pre>
470
+ </div><!-- new-source -->
471
+
472
+ </div>
473
+
474
+
475
+
476
+
477
+ </div><!-- new-method -->
478
+
479
+
480
+ </section><!-- public-class-method-details -->
481
+
482
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section section">
483
+ <h3 class="section-header">Public Instance Methods</h3>
484
+
485
+
486
+ <div id="method-i-arbitrary" class="method-detail ">
487
+
488
+ <div class="method-heading">
489
+ <span class="method-name">arbitrary</span><span
490
+ class="method-args">(msg)</span>
491
+ <span class="method-click-advice">click to toggle source</span>
492
+ </div>
493
+
494
+
495
+ <div class="method-description">
496
+
497
+
498
+
499
+
500
+
501
+ <div class="method-source-code" id="arbitrary-source">
502
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 152</span>
503
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">arbitrary</span>(<span class="ruby-identifier">msg</span>)
504
+ <span class="ruby-keyword">end</span></pre>
505
+ </div><!-- arbitrary-source -->
506
+
507
+ </div>
508
+
509
+
510
+
511
+
512
+ </div><!-- arbitrary-method -->
513
+
514
+
515
+ <div id="method-i-bad_byte" class="method-detail ">
516
+
517
+ <div class="method-heading">
518
+ <span class="method-name">bad_byte</span><span
519
+ class="method-args">(c)</span>
520
+ <span class="method-click-advice">click to toggle source</span>
521
+ </div>
522
+
523
+
524
+ <div class="method-description">
525
+
526
+ <p>Handle an unexpected byte.</p>
527
+
528
+
529
+
530
+ <div class="method-source-code" id="bad_byte-source">
531
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 294</span>
532
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">bad_byte</span>(<span class="ruby-identifier">c</span>)
533
+ <span class="ruby-identifier">error</span>(<span class="ruby-identifier">sprintf</span>(<span class="ruby-string">&quot;unexpected byte: 0x%02x&quot;</span>, <span class="ruby-identifier">c</span>))
534
+ <span class="ruby-keyword">end</span></pre>
535
+ </div><!-- bad_byte-source -->
536
+
537
+ </div>
538
+
539
+
540
+
541
+
542
+ </div><!-- bad_byte-method -->
543
+
544
+
545
+ <div id="method-i-chan_message" class="method-detail ">
546
+
547
+ <div class="method-heading">
548
+ <span class="method-name">chan_message</span><span
549
+ class="method-args">(running, status, c1, c2)</span>
550
+ <span class="method-click-advice">click to toggle source</span>
551
+ </div>
552
+
553
+
554
+ <div class="method-description">
555
+
556
+ <p>Handle a channel message (note on, note off, etc.)</p>
557
+
558
+
559
+
560
+ <div class="method-source-code" id="chan_message-source">
561
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 335</span>
562
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">chan_message</span>(<span class="ruby-identifier">running</span>, <span class="ruby-identifier">status</span>, <span class="ruby-identifier">c1</span>, <span class="ruby-identifier">c2</span>)
563
+ <span class="ruby-ivar">@raw_data</span> = []
564
+ <span class="ruby-ivar">@raw_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">status</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">running</span>
565
+ <span class="ruby-ivar">@raw_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c1</span>
566
+ <span class="ruby-ivar">@raw_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c2</span>
567
+
568
+ <span class="ruby-identifier">chan</span> = <span class="ruby-identifier">status</span> &amp; <span class="ruby-value">0x0f</span>
569
+
570
+ <span class="ruby-keyword">case</span> (<span class="ruby-identifier">status</span> &amp; <span class="ruby-value">0xf0</span>)
571
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">NOTE_OFF</span>
572
+ <span class="ruby-identifier">note_off</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">c1</span>, <span class="ruby-identifier">c2</span>)
573
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">NOTE_ON</span>
574
+ <span class="ruby-identifier">note_on</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">c1</span>, <span class="ruby-identifier">c2</span>)
575
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">POLY_PRESSURE</span>
576
+ <span class="ruby-identifier">pressure</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">c1</span>, <span class="ruby-identifier">c2</span>)
577
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">CONTROLLER</span>
578
+ <span class="ruby-identifier">controller</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">c1</span>, <span class="ruby-identifier">c2</span>)
579
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">PITCH_BEND</span>
580
+ <span class="ruby-identifier">pitch_bend</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">c1</span>, <span class="ruby-identifier">c2</span>)
581
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">PROGRAM_CHANGE</span>
582
+ <span class="ruby-identifier">program</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">c1</span>)
583
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">CHANNEL_PRESSURE</span>
584
+ <span class="ruby-identifier">chan_pressure</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">c1</span>)
585
+ <span class="ruby-keyword">else</span>
586
+ <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;illegal chan message 0x#{'%02x' % (status &amp; 0xf0)}\n&quot;</span>)
587
+ <span class="ruby-keyword">end</span>
588
+ <span class="ruby-keyword">end</span></pre>
589
+ </div><!-- chan_message-source -->
590
+
591
+ </div>
592
+
593
+
594
+
595
+
596
+ </div><!-- chan_message-method -->
597
+
598
+
599
+ <div id="method-i-chan_pressure" class="method-detail ">
600
+
601
+ <div class="method-heading">
602
+ <span class="method-name">chan_pressure</span><span
603
+ class="method-args">(chan, press)</span>
604
+ <span class="method-click-advice">click to toggle source</span>
605
+ </div>
606
+
607
+
608
+ <div class="method-description">
609
+
610
+
611
+
612
+
613
+
614
+ <div class="method-source-code" id="chan_pressure-source">
615
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 119</span>
616
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">chan_pressure</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">press</span>)
617
+ <span class="ruby-keyword">end</span></pre>
618
+ </div><!-- chan_pressure-source -->
619
+
620
+ </div>
621
+
622
+
623
+
624
+
625
+ </div><!-- chan_pressure-method -->
626
+
627
+
628
+ <div id="method-i-controller" class="method-detail ">
629
+
630
+ <div class="method-heading">
631
+ <span class="method-name">controller</span><span
632
+ class="method-args">(chan, control, value)</span>
633
+ <span class="method-click-advice">click to toggle source</span>
634
+ </div>
635
+
636
+
637
+ <div class="method-description">
638
+
639
+
640
+
641
+
642
+
643
+ <div class="method-source-code" id="controller-source">
644
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 110</span>
645
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">controller</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">control</span>, <span class="ruby-identifier">value</span>)
646
+ <span class="ruby-keyword">end</span></pre>
647
+ </div><!-- controller-source -->
648
+
649
+ </div>
650
+
651
+
652
+
653
+
654
+ </div><!-- controller-method -->
655
+
656
+
657
+ <div id="method-i-end_track" class="method-detail ">
658
+
659
+ <div class="method-heading">
660
+ <span class="method-name">end_track</span><span
661
+ class="method-args">()</span>
662
+ <span class="method-click-advice">click to toggle source</span>
663
+ </div>
664
+
665
+
666
+ <div class="method-description">
667
+
668
+
669
+
670
+
671
+
672
+ <div class="method-source-code" id="end_track-source">
673
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 98</span>
674
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">end_track</span>()
675
+ <span class="ruby-keyword">end</span></pre>
676
+ </div><!-- end_track-source -->
677
+
678
+ </div>
679
+
680
+
681
+
682
+
683
+ </div><!-- end_track-method -->
684
+
685
+
686
+ <div id="method-i-eot" class="method-detail ">
687
+
688
+ <div class="method-heading">
689
+ <span class="method-name">eot</span><span
690
+ class="method-args">()</span>
691
+ <span class="method-click-advice">click to toggle source</span>
692
+ </div>
693
+
694
+
695
+ <div class="method-description">
696
+
697
+
698
+
699
+
700
+
701
+ <div class="method-source-code" id="eot-source">
702
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 137</span>
703
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">eot</span>()
704
+ <span class="ruby-keyword">end</span></pre>
705
+ </div><!-- eot-source -->
706
+
707
+ </div>
708
+
709
+
710
+
711
+
712
+ </div><!-- eot-method -->
713
+
714
+
715
+ <div id="method-i-error" class="method-detail ">
716
+
717
+ <div class="method-heading">
718
+ <span class="method-name">error</span><span
719
+ class="method-args">(str)</span>
720
+ <span class="method-click-advice">click to toggle source</span>
721
+ </div>
722
+
723
+
724
+ <div class="method-description">
725
+
726
+ <p>The default error handler.</p>
727
+
728
+
729
+
730
+ <div class="method-source-code" id="error-source">
731
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 84</span>
732
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">error</span>(<span class="ruby-identifier">str</span>)
733
+ <span class="ruby-identifier">loc</span> = <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">tell</span>() <span class="ruby-operator">-</span> <span class="ruby-value">1</span>
734
+ <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;#{self.class.name} error at byte #{loc} (0x#{'%02x' % loc}): #{str}&quot;</span>
735
+ <span class="ruby-keyword">end</span></pre>
736
+ </div><!-- error-source -->
737
+
738
+ </div>
739
+
740
+
741
+
742
+
743
+ </div><!-- error-method -->
744
+
745
+
746
+ <div id="method-i-get_bytes" class="method-detail ">
747
+
748
+ <div class="method-heading">
749
+ <span class="method-name">get_bytes</span><span
750
+ class="method-args">(n)</span>
751
+ <span class="method-click-advice">click to toggle source</span>
752
+ </div>
753
+
754
+
755
+ <div class="method-description">
756
+
757
+ <p>Return the next <code>n</code> bytes from @io as an array.</p>
758
+
759
+
760
+
761
+ <div class="method-source-code" id="get_bytes-source">
762
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 77</span>
763
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">get_bytes</span>(<span class="ruby-identifier">n</span>)
764
+ <span class="ruby-identifier">buf</span> = []
765
+ <span class="ruby-identifier">n</span>.<span class="ruby-identifier">times</span> { <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">getc</span>() }
766
+ <span class="ruby-identifier">buf</span>
767
+ <span class="ruby-keyword">end</span></pre>
768
+ </div><!-- get_bytes-source -->
769
+
770
+ </div>
771
+
772
+
773
+
774
+
775
+ </div><!-- get_bytes-method -->
776
+
777
+
778
+ <div id="method-i-getc" class="method-detail ">
779
+
780
+ <div class="method-heading">
781
+ <span class="method-name">getc</span><span
782
+ class="method-args">()</span>
783
+ <span class="method-click-advice">click to toggle source</span>
784
+ </div>
785
+
786
+
787
+ <div class="method-description">
788
+
789
+ <p>This default getc implementation tries to read a single byte from io and
790
+ returns it as an integer.</p>
791
+
792
+
793
+
794
+ <div class="method-source-code" id="getc-source">
795
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 71</span>
796
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">getc</span>
797
+ <span class="ruby-ivar">@bytes_to_be_read</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
798
+ <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">readbyte</span>()
799
+ <span class="ruby-keyword">end</span></pre>
800
+ </div><!-- getc-source -->
801
+
802
+ </div>
803
+
804
+
805
+
806
+
807
+ </div><!-- getc-method -->
808
+
809
+
810
+ <div id="method-i-handle_arbitrary" class="method-detail ">
811
+
812
+ <div class="method-heading">
813
+ <span class="method-name">handle_arbitrary</span><span
814
+ class="method-args">(msg)</span>
815
+ <span class="method-click-advice">click to toggle source</span>
816
+ </div>
817
+
818
+
819
+ <div class="method-description">
820
+
821
+ <p>Copy message into raw data array, then call arbitrary().</p>
822
+
823
+
824
+
825
+ <div class="method-source-code" id="handle_arbitrary-source">
826
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 370</span>
827
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">handle_arbitrary</span>(<span class="ruby-identifier">msg</span>)
828
+ <span class="ruby-ivar">@raw_data</span> = <span class="ruby-identifier">msg</span>.<span class="ruby-identifier">dup</span>()
829
+ <span class="ruby-identifier">arbitrary</span>(<span class="ruby-identifier">msg</span>)
830
+ <span class="ruby-keyword">end</span></pre>
831
+ </div><!-- handle_arbitrary-source -->
832
+
833
+ </div>
834
+
835
+
836
+
837
+
838
+ </div><!-- handle_arbitrary-method -->
839
+
840
+
841
+ <div id="method-i-handle_sysex" class="method-detail ">
842
+
843
+ <div class="method-heading">
844
+ <span class="method-name">handle_sysex</span><span
845
+ class="method-args">(msg)</span>
846
+ <span class="method-click-advice">click to toggle source</span>
847
+ </div>
848
+
849
+
850
+ <div class="method-description">
851
+
852
+ <p>Copy message into raw data array, then call sysex().</p>
853
+
854
+
855
+
856
+ <div class="method-source-code" id="handle_sysex-source">
857
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 364</span>
858
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">handle_sysex</span>(<span class="ruby-identifier">msg</span>)
859
+ <span class="ruby-ivar">@raw_data</span> = <span class="ruby-identifier">msg</span>.<span class="ruby-identifier">dup</span>()
860
+ <span class="ruby-identifier">sysex</span>(<span class="ruby-identifier">msg</span>)
861
+ <span class="ruby-keyword">end</span></pre>
862
+ </div><!-- handle_sysex-source -->
863
+
864
+ </div>
865
+
866
+
867
+
868
+
869
+ </div><!-- handle_sysex-method -->
870
+
871
+
872
+ <div id="method-i-header" class="method-detail ">
873
+
874
+ <div class="method-heading">
875
+ <span class="method-name">header</span><span
876
+ class="method-args">(format, ntrks, division)</span>
877
+ <span class="method-click-advice">click to toggle source</span>
878
+ </div>
879
+
880
+
881
+ <div class="method-description">
882
+
883
+ <p><a href="../MIDI.html">MIDI</a> header.</p>
884
+
885
+
886
+
887
+ <div class="method-source-code" id="header-source">
888
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 92</span>
889
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">header</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">ntrks</span>, <span class="ruby-identifier">division</span>)
890
+ <span class="ruby-keyword">end</span></pre>
891
+ </div><!-- header-source -->
892
+
893
+ </div>
894
+
895
+
896
+
897
+
898
+ </div><!-- header-method -->
899
+
900
+
901
+ <div id="method-i-key_signature" class="method-detail ">
902
+
903
+ <div class="method-heading">
904
+ <span class="method-name">key_signature</span><span
905
+ class="method-args">(sharpflat, is_minor)</span>
906
+ <span class="method-click-advice">click to toggle source</span>
907
+ </div>
908
+
909
+
910
+ <div class="method-description">
911
+
912
+
913
+
914
+
915
+
916
+ <div class="method-source-code" id="key_signature-source">
917
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 149</span>
918
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">key_signature</span>(<span class="ruby-identifier">sharpflat</span>, <span class="ruby-identifier">is_minor</span>)
919
+ <span class="ruby-keyword">end</span></pre>
920
+ </div><!-- key_signature-source -->
921
+
922
+ </div>
923
+
924
+
925
+
926
+
927
+ </div><!-- key_signature-method -->
928
+
929
+
930
+ <div id="method-i-meta_event" class="method-detail ">
931
+
932
+ <div class="method-heading">
933
+ <span class="method-name">meta_event</span><span
934
+ class="method-args">(type)</span>
935
+ <span class="method-click-advice">click to toggle source</span>
936
+ </div>
937
+
938
+
939
+ <div class="method-description">
940
+
941
+ <p>Handle a meta event.</p>
942
+
943
+
944
+
945
+ <div class="method-source-code" id="meta_event-source">
946
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 299</span>
947
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">meta_event</span>(<span class="ruby-identifier">type</span>)
948
+ <span class="ruby-identifier">m</span> = <span class="ruby-identifier">msg</span>() <span class="ruby-comment"># Copy of internal message buffer</span>
949
+
950
+ <span class="ruby-comment"># Create raw data array</span>
951
+ <span class="ruby-ivar">@raw_data</span> = []
952
+ <span class="ruby-ivar">@raw_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">META_EVENT</span>
953
+ <span class="ruby-ivar">@raw_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">type</span>
954
+ <span class="ruby-ivar">@raw_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-ivar">@raw_var_num_data</span>
955
+ <span class="ruby-ivar">@raw_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">m</span>
956
+ <span class="ruby-ivar">@raw_data</span>.<span class="ruby-identifier">flatten!</span>
957
+
958
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">type</span>
959
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_SEQ_NUM</span>
960
+ <span class="ruby-identifier">sequence_number</span>((<span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">8</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>])
961
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_TEXT</span>, <span class="ruby-constant">META_COPYRIGHT</span>, <span class="ruby-constant">META_SEQ_NAME</span>, <span class="ruby-constant">META_INSTRUMENT</span>,
962
+ <span class="ruby-constant">META_LYRIC</span>, <span class="ruby-constant">META_MARKER</span>, <span class="ruby-constant">META_CUE</span>, <span class="ruby-value">0x08</span>, <span class="ruby-value">0x09</span>, <span class="ruby-value">0x0a</span>,
963
+ <span class="ruby-value">0x0b</span>, <span class="ruby-value">0x0c</span>, <span class="ruby-value">0x0d</span>, <span class="ruby-value">0x0e</span>, <span class="ruby-value">0x0f</span>
964
+ <span class="ruby-identifier">text</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">m</span>)
965
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_TRACK_END</span>
966
+ <span class="ruby-identifier">eot</span>()
967
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_SET_TEMPO</span>
968
+ <span class="ruby-identifier">tempo</span>((<span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">16</span>) <span class="ruby-operator">+</span> (<span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">8</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">m</span>[<span class="ruby-value">2</span>])
969
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_SMPTE</span>
970
+ <span class="ruby-identifier">smpte</span>(<span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">m</span>[<span class="ruby-value">2</span>], <span class="ruby-identifier">m</span>[<span class="ruby-value">3</span>], <span class="ruby-identifier">m</span>[<span class="ruby-value">4</span>])
971
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_TIME_SIG</span>
972
+ <span class="ruby-identifier">time_signature</span>(<span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>], <span class="ruby-identifier">m</span>[<span class="ruby-value">2</span>], <span class="ruby-identifier">m</span>[<span class="ruby-value">3</span>])
973
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_KEY_SIG</span>
974
+ <span class="ruby-identifier">key_signature</span>(<span class="ruby-identifier">m</span>[<span class="ruby-value">0</span>], <span class="ruby-identifier">m</span>[<span class="ruby-value">1</span>] <span class="ruby-operator">==</span> <span class="ruby-value">0</span> <span class="ruby-operator">?</span> <span class="ruby-keyword">false</span> <span class="ruby-operator">:</span> <span class="ruby-keyword">true</span>)
975
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_SEQ_SPECIF</span>
976
+ <span class="ruby-identifier">sequencer_specific</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">m</span>)
977
+ <span class="ruby-keyword">else</span>
978
+ <span class="ruby-identifier">meta_misc</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">m</span>)
979
+ <span class="ruby-keyword">end</span>
980
+ <span class="ruby-keyword">end</span></pre>
981
+ </div><!-- meta_event-source -->
982
+
983
+ </div>
984
+
985
+
986
+
987
+
988
+ </div><!-- meta_event-method -->
989
+
990
+
991
+ <div id="method-i-meta_misc" class="method-detail ">
992
+
993
+ <div class="method-heading">
994
+ <span class="method-name">meta_misc</span><span
995
+ class="method-args">(type, msg)</span>
996
+ <span class="method-click-advice">click to toggle source</span>
997
+ </div>
998
+
999
+
1000
+ <div class="method-description">
1001
+
1002
+
1003
+
1004
+
1005
+
1006
+ <div class="method-source-code" id="meta_misc-source">
1007
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 125</span>
1008
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">meta_misc</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">msg</span>)
1009
+ <span class="ruby-keyword">end</span></pre>
1010
+ </div><!-- meta_misc-source -->
1011
+
1012
+ </div>
1013
+
1014
+
1015
+
1016
+
1017
+ </div><!-- meta_misc-method -->
1018
+
1019
+
1020
+ <div id="method-i-msg" class="method-detail ">
1021
+
1022
+ <div class="method-heading">
1023
+ <span class="method-name">msg</span><span
1024
+ class="method-args">()</span>
1025
+ <span class="method-click-advice">click to toggle source</span>
1026
+ </div>
1027
+
1028
+
1029
+ <div class="method-description">
1030
+
1031
+ <p>Return a copy of the internal message buffer.</p>
1032
+
1033
+
1034
+
1035
+ <div class="method-source-code" id="msg-source">
1036
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 460</span>
1037
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">msg</span>
1038
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@msg_buf</span>.<span class="ruby-identifier">dup</span>()
1039
+ <span class="ruby-keyword">end</span></pre>
1040
+ </div><!-- msg-source -->
1041
+
1042
+ </div>
1043
+
1044
+
1045
+
1046
+
1047
+ </div><!-- msg-method -->
1048
+
1049
+
1050
+ <div id="method-i-msg_add" class="method-detail ">
1051
+
1052
+ <div class="method-heading">
1053
+ <span class="method-name">msg_add</span><span
1054
+ class="method-args">(c)</span>
1055
+ <span class="method-click-advice">click to toggle source</span>
1056
+ </div>
1057
+
1058
+
1059
+ <div class="method-description">
1060
+
1061
+ <p>Add a byte to the current message buffer.</p>
1062
+
1063
+
1064
+
1065
+ <div class="method-source-code" id="msg_add-source">
1066
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 442</span>
1067
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">msg_add</span>(<span class="ruby-identifier">c</span>)
1068
+ <span class="ruby-ivar">@msg_buf</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1069
+ <span class="ruby-keyword">end</span></pre>
1070
+ </div><!-- msg_add-source -->
1071
+
1072
+ </div>
1073
+
1074
+
1075
+
1076
+
1077
+ </div><!-- msg_add-method -->
1078
+
1079
+
1080
+ <div id="method-i-msg_init" class="method-detail ">
1081
+
1082
+ <div class="method-heading">
1083
+ <span class="method-name">msg_init</span><span
1084
+ class="method-args">()</span>
1085
+ <span class="method-click-advice">click to toggle source</span>
1086
+ </div>
1087
+
1088
+
1089
+ <div class="method-description">
1090
+
1091
+ <p>Initialize the internal message buffer.</p>
1092
+
1093
+
1094
+
1095
+ <div class="method-source-code" id="msg_init-source">
1096
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 455</span>
1097
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">msg_init</span>
1098
+ <span class="ruby-ivar">@msg_buf</span> = []
1099
+ <span class="ruby-keyword">end</span></pre>
1100
+ </div><!-- msg_init-source -->
1101
+
1102
+ </div>
1103
+
1104
+
1105
+
1106
+
1107
+ </div><!-- msg_init-method -->
1108
+
1109
+
1110
+ <div id="method-i-msg_read" class="method-detail ">
1111
+
1112
+ <div class="method-heading">
1113
+ <span class="method-name">msg_read</span><span
1114
+ class="method-args">(n_bytes)</span>
1115
+ <span class="method-click-advice">click to toggle source</span>
1116
+ </div>
1117
+
1118
+
1119
+ <div class="method-description">
1120
+
1121
+ <p>Read and add a number of bytes to the message buffer. Return the last byte
1122
+ (so we can see if it's an EOX or not).</p>
1123
+
1124
+
1125
+
1126
+ <div class="method-source-code" id="msg_read-source">
1127
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 448</span>
1128
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">msg_read</span>(<span class="ruby-identifier">n_bytes</span>)
1129
+ <span class="ruby-ivar">@msg_buf</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">get_bytes</span>(<span class="ruby-identifier">n_bytes</span>)
1130
+ <span class="ruby-ivar">@msg_buf</span>.<span class="ruby-identifier">flatten!</span>
1131
+ <span class="ruby-keyword">return</span> <span class="ruby-ivar">@msg_buf</span>[<span class="ruby-value">-1</span>]
1132
+ <span class="ruby-keyword">end</span></pre>
1133
+ </div><!-- msg_read-source -->
1134
+
1135
+ </div>
1136
+
1137
+
1138
+
1139
+
1140
+ </div><!-- msg_read-method -->
1141
+
1142
+
1143
+ <div id="method-i-note_off" class="method-detail ">
1144
+
1145
+ <div class="method-heading">
1146
+ <span class="method-name">note_off</span><span
1147
+ class="method-args">(chan, note, vel)</span>
1148
+ <span class="method-click-advice">click to toggle source</span>
1149
+ </div>
1150
+
1151
+
1152
+ <div class="method-description">
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+ <div class="method-source-code" id="note_off-source">
1159
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 104</span>
1160
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">note_off</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">note</span>, <span class="ruby-identifier">vel</span>)
1161
+ <span class="ruby-keyword">end</span></pre>
1162
+ </div><!-- note_off-source -->
1163
+
1164
+ </div>
1165
+
1166
+
1167
+
1168
+
1169
+ </div><!-- note_off-method -->
1170
+
1171
+
1172
+ <div id="method-i-note_on" class="method-detail ">
1173
+
1174
+ <div class="method-heading">
1175
+ <span class="method-name">note_on</span><span
1176
+ class="method-args">(chan, note, vel)</span>
1177
+ <span class="method-click-advice">click to toggle source</span>
1178
+ </div>
1179
+
1180
+
1181
+ <div class="method-description">
1182
+
1183
+
1184
+
1185
+
1186
+
1187
+ <div class="method-source-code" id="note_on-source">
1188
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 101</span>
1189
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">note_on</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">note</span>, <span class="ruby-identifier">vel</span>)
1190
+ <span class="ruby-keyword">end</span></pre>
1191
+ </div><!-- note_on-source -->
1192
+
1193
+ </div>
1194
+
1195
+
1196
+
1197
+
1198
+ </div><!-- note_on-method -->
1199
+
1200
+
1201
+ <div id="method-i-pitch_bend" class="method-detail ">
1202
+
1203
+ <div class="method-heading">
1204
+ <span class="method-name">pitch_bend</span><span
1205
+ class="method-args">(chan, msb, lsb)</span>
1206
+ <span class="method-click-advice">click to toggle source</span>
1207
+ </div>
1208
+
1209
+
1210
+ <div class="method-description">
1211
+
1212
+
1213
+
1214
+
1215
+
1216
+ <div class="method-source-code" id="pitch_bend-source">
1217
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 113</span>
1218
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">pitch_bend</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">msb</span>, <span class="ruby-identifier">lsb</span>)
1219
+ <span class="ruby-keyword">end</span></pre>
1220
+ </div><!-- pitch_bend-source -->
1221
+
1222
+ </div>
1223
+
1224
+
1225
+
1226
+
1227
+ </div><!-- pitch_bend-method -->
1228
+
1229
+
1230
+ <div id="method-i-pressure" class="method-detail ">
1231
+
1232
+ <div class="method-heading">
1233
+ <span class="method-name">pressure</span><span
1234
+ class="method-args">(chan, note, press)</span>
1235
+ <span class="method-click-advice">click to toggle source</span>
1236
+ </div>
1237
+
1238
+
1239
+ <div class="method-description">
1240
+
1241
+
1242
+
1243
+
1244
+
1245
+ <div class="method-source-code" id="pressure-source">
1246
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 107</span>
1247
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">pressure</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">note</span>, <span class="ruby-identifier">press</span>)
1248
+ <span class="ruby-keyword">end</span></pre>
1249
+ </div><!-- pressure-source -->
1250
+
1251
+ </div>
1252
+
1253
+
1254
+
1255
+
1256
+ </div><!-- pressure-method -->
1257
+
1258
+
1259
+ <div id="method-i-program" class="method-detail ">
1260
+
1261
+ <div class="method-heading">
1262
+ <span class="method-name">program</span><span
1263
+ class="method-args">(chan, program)</span>
1264
+ <span class="method-click-advice">click to toggle source</span>
1265
+ </div>
1266
+
1267
+
1268
+ <div class="method-description">
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+ <div class="method-source-code" id="program-source">
1275
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 116</span>
1276
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">program</span>(<span class="ruby-identifier">chan</span>, <span class="ruby-identifier">program</span>)
1277
+ <span class="ruby-keyword">end</span></pre>
1278
+ </div><!-- program-source -->
1279
+
1280
+ </div>
1281
+
1282
+
1283
+
1284
+
1285
+ </div><!-- program-method -->
1286
+
1287
+
1288
+ <div id="method-i-read16" class="method-detail ">
1289
+
1290
+ <div class="method-heading">
1291
+ <span class="method-name">read16</span><span
1292
+ class="method-args">()</span>
1293
+ <span class="method-click-advice">click to toggle source</span>
1294
+ </div>
1295
+
1296
+
1297
+ <div class="method-description">
1298
+
1299
+ <p>Read and return a sixteen bit value.</p>
1300
+
1301
+
1302
+
1303
+ <div class="method-source-code" id="read16-source">
1304
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 376</span>
1305
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">read16</span>
1306
+ <span class="ruby-identifier">val</span> = (<span class="ruby-identifier">getc</span>() <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">8</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">getc</span>()
1307
+ <span class="ruby-identifier">val</span> = <span class="ruby-operator">-</span>(<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x7fff</span>) <span class="ruby-keyword">if</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x8000</span>).<span class="ruby-identifier">nonzero?</span>
1308
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">val</span>
1309
+ <span class="ruby-keyword">end</span></pre>
1310
+ </div><!-- read16-source -->
1311
+
1312
+ </div>
1313
+
1314
+
1315
+
1316
+
1317
+ </div><!-- read16-method -->
1318
+
1319
+
1320
+ <div id="method-i-read32" class="method-detail ">
1321
+
1322
+ <div class="method-heading">
1323
+ <span class="method-name">read32</span><span
1324
+ class="method-args">()</span>
1325
+ <span class="method-click-advice">click to toggle source</span>
1326
+ </div>
1327
+
1328
+
1329
+ <div class="method-description">
1330
+
1331
+ <p>Read and return a 32-bit value.</p>
1332
+
1333
+
1334
+
1335
+ <div class="method-source-code" id="read32-source">
1336
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 383</span>
1337
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">read32</span>
1338
+ <span class="ruby-identifier">val</span> = (<span class="ruby-identifier">getc</span>() <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">24</span>) <span class="ruby-operator">+</span> (<span class="ruby-identifier">getc</span>() <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">16</span>) <span class="ruby-operator">+</span> (<span class="ruby-identifier">getc</span>() <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">8</span>) <span class="ruby-operator">+</span>
1339
+ <span class="ruby-identifier">getc</span>()
1340
+ <span class="ruby-identifier">val</span> = <span class="ruby-operator">-</span>(<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x7fffffff</span>) <span class="ruby-keyword">if</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x80000000</span>).<span class="ruby-identifier">nonzero?</span>
1341
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">val</span>
1342
+ <span class="ruby-keyword">end</span></pre>
1343
+ </div><!-- read32-source -->
1344
+
1345
+ </div>
1346
+
1347
+
1348
+
1349
+
1350
+ </div><!-- read32-method -->
1351
+
1352
+
1353
+ <div id="method-i-read_from" class="method-detail ">
1354
+
1355
+ <div class="method-heading">
1356
+ <span class="method-name">read_from</span><span
1357
+ class="method-args">(io)</span>
1358
+ <span class="method-click-advice">click to toggle source</span>
1359
+ </div>
1360
+
1361
+
1362
+ <div class="method-description">
1363
+
1364
+ <p>The only public method. Each <a href="../MIDI.html">MIDI</a> event in the
1365
+ file causes a method to be called.</p>
1366
+
1367
+
1368
+
1369
+ <div class="method-source-code" id="read_from-source">
1370
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 59</span>
1371
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">read_from</span>(<span class="ruby-identifier">io</span>)
1372
+ <span class="ruby-identifier">error</span>(<span class="ruby-string">'must specify non-nil input stream'</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">io</span>.<span class="ruby-identifier">nil?</span>
1373
+ <span class="ruby-ivar">@io</span> = <span class="ruby-identifier">io</span>
1374
+
1375
+ <span class="ruby-identifier">ntrks</span> = <span class="ruby-identifier">read_header</span>()
1376
+ <span class="ruby-identifier">error</span>(<span class="ruby-string">'No tracks!'</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">ntrks</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">0</span>
1377
+
1378
+ <span class="ruby-identifier">ntrks</span>.<span class="ruby-identifier">times</span> { <span class="ruby-identifier">read_track</span>() }
1379
+ <span class="ruby-keyword">end</span></pre>
1380
+ </div><!-- read_from-source -->
1381
+
1382
+ </div>
1383
+
1384
+
1385
+
1386
+
1387
+ </div><!-- read_from-method -->
1388
+
1389
+
1390
+ <div id="method-i-read_header" class="method-detail ">
1391
+
1392
+ <div class="method-heading">
1393
+ <span class="method-name">read_header</span><span
1394
+ class="method-args">()</span>
1395
+ <span class="method-click-advice">click to toggle source</span>
1396
+ </div>
1397
+
1398
+
1399
+ <div class="method-description">
1400
+
1401
+ <p>Read a header chunk.</p>
1402
+
1403
+
1404
+
1405
+ <div class="method-source-code" id="read_header-source">
1406
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 190</span>
1407
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">read_header</span>
1408
+ <span class="ruby-ivar">@bytes_to_be_read</span> = <span class="ruby-value">0</span>
1409
+ <span class="ruby-identifier">read_mt_header_string</span>(<span class="ruby-constant">MThd_BYTE_ARRAY</span>, <span class="ruby-ivar">@skip_init</span>) <span class="ruby-comment"># &quot;MThd&quot;</span>
1410
+
1411
+ <span class="ruby-ivar">@bytes_to_be_read</span> = <span class="ruby-identifier">read32</span>()
1412
+ <span class="ruby-identifier">format</span> = <span class="ruby-identifier">read16</span>()
1413
+ <span class="ruby-identifier">ntrks</span> = <span class="ruby-identifier">read16</span>()
1414
+ <span class="ruby-identifier">division</span> = <span class="ruby-identifier">read16</span>()
1415
+
1416
+ <span class="ruby-identifier">header</span>(<span class="ruby-identifier">format</span>, <span class="ruby-identifier">ntrks</span>, <span class="ruby-identifier">division</span>)
1417
+
1418
+ <span class="ruby-comment"># Flush any extra stuff, in case the length of the header is not 6</span>
1419
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@bytes_to_be_read</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
1420
+ <span class="ruby-identifier">get_bytes</span>(<span class="ruby-ivar">@bytes_to_be_read</span>)
1421
+ <span class="ruby-ivar">@bytes_to_be_read</span> = <span class="ruby-value">0</span>
1422
+ <span class="ruby-keyword">end</span>
1423
+
1424
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">ntrks</span>
1425
+ <span class="ruby-keyword">end</span></pre>
1426
+ </div><!-- read_header-source -->
1427
+
1428
+ </div>
1429
+
1430
+
1431
+
1432
+
1433
+ </div><!-- read_header-method -->
1434
+
1435
+
1436
+ <div id="method-i-read_mt_header_string" class="method-detail ">
1437
+
1438
+ <div class="method-heading">
1439
+ <span class="method-name">read_mt_header_string</span><span
1440
+ class="method-args">(bytes, skip)</span>
1441
+ <span class="method-click-advice">click to toggle source</span>
1442
+ </div>
1443
+
1444
+
1445
+ <div class="method-description">
1446
+
1447
+ <p>Read through 'MThd' or 'MTrk' header string. If skip is true, attempt to
1448
+ skip initial trash. If there is an error, <a
1449
+ href="MIDIFile.html#method-i-error">error</a> is called.</p>
1450
+
1451
+
1452
+
1453
+ <div class="method-source-code" id="read_mt_header_string-source">
1454
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 160</span>
1455
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">read_mt_header_string</span>(<span class="ruby-identifier">bytes</span>, <span class="ruby-identifier">skip</span>)
1456
+ <span class="ruby-identifier">b</span> = []
1457
+ <span class="ruby-identifier">bytes_to_read</span> = <span class="ruby-value">4</span>
1458
+ <span class="ruby-keyword">while</span> <span class="ruby-keyword">true</span>
1459
+ <span class="ruby-identifier">data</span> = <span class="ruby-identifier">get_bytes</span>(<span class="ruby-identifier">bytes_to_read</span>)
1460
+ <span class="ruby-identifier">b</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">data</span>
1461
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">4</span>
1462
+ <span class="ruby-identifier">error</span>(<span class="ruby-string">&quot;unexpected EOF while trying to read header&quot;</span> <span class="ruby-operator">+</span>
1463
+ <span class="ruby-node">&quot; string #{s}&quot;</span>)
1464
+ <span class="ruby-keyword">end</span>
1465
+
1466
+ <span class="ruby-comment"># See if we found the bytes we're looking for</span>
1467
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">bytes</span>
1468
+
1469
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">skip</span> <span class="ruby-comment"># Try again with the next char</span>
1470
+ <span class="ruby-identifier">i</span> = <span class="ruby-identifier">b</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>].<span class="ruby-identifier">index</span>(<span class="ruby-identifier">bytes</span>[<span class="ruby-value">0</span>])
1471
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">i</span>.<span class="ruby-identifier">nil?</span>
1472
+ <span class="ruby-identifier">b</span> = []
1473
+ <span class="ruby-identifier">bytes_to_read</span> = <span class="ruby-value">4</span>
1474
+ <span class="ruby-keyword">else</span>
1475
+ <span class="ruby-identifier">b</span> = <span class="ruby-identifier">b</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">..</span><span class="ruby-value">-1</span>]
1476
+ <span class="ruby-identifier">bytes_to_read</span> = <span class="ruby-value">4</span> <span class="ruby-operator">-</span> <span class="ruby-identifier">i</span>
1477
+ <span class="ruby-keyword">end</span>
1478
+ <span class="ruby-keyword">else</span>
1479
+ <span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;header string #{bytes.collect{|b| b.chr}.join} not found&quot;</span>)
1480
+ <span class="ruby-keyword">end</span>
1481
+ <span class="ruby-keyword">end</span>
1482
+ <span class="ruby-keyword">end</span></pre>
1483
+ </div><!-- read_mt_header_string-source -->
1484
+
1485
+ </div>
1486
+
1487
+
1488
+
1489
+
1490
+ </div><!-- read_mt_header_string-method -->
1491
+
1492
+
1493
+ <div id="method-i-read_track" class="method-detail ">
1494
+
1495
+ <div class="method-heading">
1496
+ <span class="method-name">read_track</span><span
1497
+ class="method-args">()</span>
1498
+ <span class="method-click-advice">click to toggle source</span>
1499
+ </div>
1500
+
1501
+
1502
+ <div class="method-description">
1503
+
1504
+ <p>Read a track chunk.</p>
1505
+
1506
+
1507
+
1508
+ <div class="method-source-code" id="read_track-source">
1509
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 211</span>
1510
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">read_track</span>
1511
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">c1</span> = <span class="ruby-identifier">type</span> = <span class="ruby-identifier">needed</span> = <span class="ruby-value">0</span>
1512
+ <span class="ruby-identifier">sysex_continue</span> = <span class="ruby-keyword">false</span> <span class="ruby-comment"># True if last msg was unfinished</span>
1513
+ <span class="ruby-identifier">running</span> = <span class="ruby-keyword">false</span> <span class="ruby-comment"># True when running status used</span>
1514
+ <span class="ruby-identifier">status</span> = <span class="ruby-value">0</span> <span class="ruby-comment"># (Possibly running) status byte</span>
1515
+
1516
+ <span class="ruby-ivar">@bytes_to_be_read</span> = <span class="ruby-value">0</span>
1517
+ <span class="ruby-identifier">read_mt_header_string</span>(<span class="ruby-constant">MTrk_BYTE_ARRAY</span>, <span class="ruby-keyword">false</span>)
1518
+
1519
+ <span class="ruby-ivar">@bytes_to_be_read</span> = <span class="ruby-identifier">read32</span>()
1520
+ <span class="ruby-ivar">@curr_ticks</span> = <span class="ruby-ivar">@ticks_so_far</span> = <span class="ruby-value">0</span>
1521
+
1522
+ <span class="ruby-identifier">start_track</span>()
1523
+
1524
+ <span class="ruby-keyword">while</span> <span class="ruby-ivar">@bytes_to_be_read</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
1525
+ <span class="ruby-ivar">@curr_ticks</span> = <span class="ruby-identifier">read_var_len</span>() <span class="ruby-comment"># Delta time</span>
1526
+ <span class="ruby-ivar">@ticks_so_far</span> <span class="ruby-operator">+=</span> <span class="ruby-ivar">@curr_ticks</span>
1527
+
1528
+ <span class="ruby-comment"># Copy raw var num data into raw time stamp data</span>
1529
+ <span class="ruby-ivar">@raw_time_stamp_data</span> = <span class="ruby-ivar">@raw_var_num_data</span>.<span class="ruby-identifier">dup</span>()
1530
+
1531
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">getc</span>() <span class="ruby-comment"># Read first byte</span>
1532
+
1533
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">sysex_continue</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">!=</span> <span class="ruby-constant">EOX</span>
1534
+ <span class="ruby-identifier">error</span>(<span class="ruby-string">&quot;didn't find expected continuation of a sysex&quot;</span>)
1535
+ <span class="ruby-keyword">end</span>
1536
+
1537
+ <span class="ruby-keyword">if</span> (<span class="ruby-identifier">c</span> &amp; <span class="ruby-value">0x80</span>).<span class="ruby-identifier">zero?</span> <span class="ruby-comment"># Running status?</span>
1538
+ <span class="ruby-identifier">error</span>(<span class="ruby-string">'unexpected running status'</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span>.<span class="ruby-identifier">zero?</span>
1539
+ <span class="ruby-identifier">running</span> = <span class="ruby-keyword">true</span>
1540
+ <span class="ruby-keyword">else</span>
1541
+ <span class="ruby-identifier">status</span> = <span class="ruby-identifier">c</span>
1542
+ <span class="ruby-identifier">running</span> = <span class="ruby-keyword">false</span>
1543
+ <span class="ruby-keyword">end</span>
1544
+
1545
+ <span class="ruby-identifier">needed</span> = <span class="ruby-constant">NUM_DATA_BYTES</span>[(<span class="ruby-identifier">status</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">4</span>) &amp; <span class="ruby-value">0x0f</span>]
1546
+
1547
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">needed</span>.<span class="ruby-identifier">nonzero?</span> <span class="ruby-comment"># i.e., is it a channel message?</span>
1548
+ <span class="ruby-identifier">c1</span> = <span class="ruby-identifier">running</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">:</span> (<span class="ruby-identifier">getc</span>() &amp; <span class="ruby-value">0x7f</span>)
1549
+
1550
+ <span class="ruby-comment"># The &quot;&amp; 0x7f&quot; here may seem unnecessary, but I've seen</span>
1551
+ <span class="ruby-comment"># &quot;bad&quot; MIDI files that had, for example, volume bytes</span>
1552
+ <span class="ruby-comment"># with the upper bit set. This code should not harm</span>
1553
+ <span class="ruby-comment"># proper data.</span>
1554
+ <span class="ruby-identifier">chan_message</span>(<span class="ruby-identifier">running</span>, <span class="ruby-identifier">status</span>, <span class="ruby-identifier">c1</span>,
1555
+ (<span class="ruby-identifier">needed</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span>) <span class="ruby-operator">?</span> (<span class="ruby-identifier">getc</span>() &amp; <span class="ruby-value">0x7f</span>) <span class="ruby-operator">:</span> <span class="ruby-value">0</span>)
1556
+ <span class="ruby-keyword">next</span>
1557
+ <span class="ruby-keyword">end</span>
1558
+
1559
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">c</span>
1560
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">META_EVENT</span> <span class="ruby-comment"># Meta event</span>
1561
+ <span class="ruby-identifier">type</span> = <span class="ruby-identifier">getc</span>()
1562
+ <span class="ruby-identifier">msg_init</span>()
1563
+ <span class="ruby-identifier">msg_read</span>(<span class="ruby-identifier">read_var_len</span>())
1564
+ <span class="ruby-identifier">meta_event</span>(<span class="ruby-identifier">type</span>)
1565
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">SYSEX</span> <span class="ruby-comment"># Start of system exclusive</span>
1566
+ <span class="ruby-identifier">msg_init</span>()
1567
+ <span class="ruby-identifier">msg_add</span>(<span class="ruby-constant">SYSEX</span>)
1568
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">msg_read</span>(<span class="ruby-identifier">read_var_len</span>())
1569
+
1570
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-constant">EOX</span> <span class="ruby-operator">||</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@no_merge</span>
1571
+ <span class="ruby-identifier">handle_sysex</span>(<span class="ruby-identifier">msg</span>())
1572
+ <span class="ruby-keyword">else</span>
1573
+ <span class="ruby-identifier">sysex_continue</span> = <span class="ruby-keyword">true</span>
1574
+ <span class="ruby-keyword">end</span>
1575
+ <span class="ruby-keyword">when</span> <span class="ruby-constant">EOX</span> <span class="ruby-comment"># Sysex continuation or arbitrary stuff</span>
1576
+ <span class="ruby-identifier">msg_init</span>() <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">sysex_continue</span>
1577
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">msg_read</span>(<span class="ruby-identifier">read_var_len</span>())
1578
+
1579
+ <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">sysex_continue</span>
1580
+ <span class="ruby-identifier">handle_arbitrary</span>(<span class="ruby-identifier">msg</span>())
1581
+ <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">c</span> <span class="ruby-operator">==</span> <span class="ruby-constant">EOX</span>
1582
+ <span class="ruby-identifier">handle_sysex</span>(<span class="ruby-identifier">msg</span>())
1583
+ <span class="ruby-identifier">sysex_continue</span> = <span class="ruby-keyword">false</span>
1584
+ <span class="ruby-keyword">end</span>
1585
+ <span class="ruby-keyword">else</span>
1586
+ <span class="ruby-identifier">bad_byte</span>(<span class="ruby-identifier">c</span>)
1587
+ <span class="ruby-keyword">end</span>
1588
+ <span class="ruby-keyword">end</span>
1589
+ <span class="ruby-identifier">end_track</span>()
1590
+ <span class="ruby-keyword">end</span></pre>
1591
+ </div><!-- read_track-source -->
1592
+
1593
+ </div>
1594
+
1595
+
1596
+
1597
+
1598
+ </div><!-- read_track-method -->
1599
+
1600
+
1601
+ <div id="method-i-read_var_len" class="method-detail ">
1602
+
1603
+ <div class="method-heading">
1604
+ <span class="method-name">read_var_len</span><span
1605
+ class="method-args">()</span>
1606
+ <span class="method-click-advice">click to toggle source</span>
1607
+ </div>
1608
+
1609
+
1610
+ <div class="method-description">
1611
+
1612
+ <p>Read a varlen value.</p>
1613
+
1614
+
1615
+
1616
+ <div class="method-source-code" id="read_var_len-source">
1617
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 391</span>
1618
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">read_var_len</span>
1619
+ <span class="ruby-ivar">@raw_var_num_data</span> = []
1620
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">getc</span>()
1621
+ <span class="ruby-ivar">@raw_var_num_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1622
+ <span class="ruby-identifier">val</span> = <span class="ruby-identifier">c</span>
1623
+ <span class="ruby-keyword">if</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x80</span>).<span class="ruby-identifier">nonzero?</span>
1624
+ <span class="ruby-identifier">val</span> <span class="ruby-operator">&amp;=</span> <span class="ruby-value">0x7f</span>
1625
+ <span class="ruby-keyword">while</span> <span class="ruby-keyword">true</span>
1626
+ <span class="ruby-identifier">c</span> = <span class="ruby-identifier">getc</span>()
1627
+ <span class="ruby-ivar">@raw_var_num_data</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">c</span>
1628
+ <span class="ruby-identifier">val</span> = (<span class="ruby-identifier">val</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value">7</span>) <span class="ruby-operator">+</span> (<span class="ruby-identifier">c</span> &amp; <span class="ruby-value">0x7f</span>)
1629
+ <span class="ruby-keyword">break</span> <span class="ruby-keyword">if</span> (<span class="ruby-identifier">c</span> &amp; <span class="ruby-value">0x80</span>).<span class="ruby-identifier">zero?</span>
1630
+ <span class="ruby-keyword">end</span>
1631
+ <span class="ruby-keyword">end</span>
1632
+ <span class="ruby-keyword">return</span> <span class="ruby-identifier">val</span>
1633
+ <span class="ruby-keyword">end</span></pre>
1634
+ </div><!-- read_var_len-source -->
1635
+
1636
+ </div>
1637
+
1638
+
1639
+
1640
+
1641
+ </div><!-- read_var_len-method -->
1642
+
1643
+
1644
+ <div id="method-i-sequence_number" class="method-detail ">
1645
+
1646
+ <div class="method-heading">
1647
+ <span class="method-name">sequence_number</span><span
1648
+ class="method-args">(num)</span>
1649
+ <span class="method-click-advice">click to toggle source</span>
1650
+ </div>
1651
+
1652
+
1653
+ <div class="method-description">
1654
+
1655
+
1656
+
1657
+
1658
+
1659
+ <div class="method-source-code" id="sequence_number-source">
1660
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 131</span>
1661
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">sequence_number</span>(<span class="ruby-identifier">num</span>)
1662
+ <span class="ruby-keyword">end</span></pre>
1663
+ </div><!-- sequence_number-source -->
1664
+
1665
+ </div>
1666
+
1667
+
1668
+
1669
+
1670
+ </div><!-- sequence_number-method -->
1671
+
1672
+
1673
+ <div id="method-i-sequencer_specific" class="method-detail ">
1674
+
1675
+ <div class="method-heading">
1676
+ <span class="method-name">sequencer_specific</span><span
1677
+ class="method-args">(type, msg)</span>
1678
+ <span class="method-click-advice">click to toggle source</span>
1679
+ </div>
1680
+
1681
+
1682
+ <div class="method-description">
1683
+
1684
+
1685
+
1686
+
1687
+
1688
+ <div class="method-source-code" id="sequencer_specific-source">
1689
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 128</span>
1690
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">sequencer_specific</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">msg</span>)
1691
+ <span class="ruby-keyword">end</span></pre>
1692
+ </div><!-- sequencer_specific-source -->
1693
+
1694
+ </div>
1695
+
1696
+
1697
+
1698
+
1699
+ </div><!-- sequencer_specific-method -->
1700
+
1701
+
1702
+ <div id="method-i-smpte" class="method-detail ">
1703
+
1704
+ <div class="method-heading">
1705
+ <span class="method-name">smpte</span><span
1706
+ class="method-args">(hour, min, sec, frame, fract)</span>
1707
+ <span class="method-click-advice">click to toggle source</span>
1708
+ </div>
1709
+
1710
+
1711
+ <div class="method-description">
1712
+
1713
+
1714
+
1715
+
1716
+
1717
+ <div class="method-source-code" id="smpte-source">
1718
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 143</span>
1719
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">smpte</span>(<span class="ruby-identifier">hour</span>, <span class="ruby-identifier">min</span>, <span class="ruby-identifier">sec</span>, <span class="ruby-identifier">frame</span>, <span class="ruby-identifier">fract</span>)
1720
+ <span class="ruby-keyword">end</span></pre>
1721
+ </div><!-- smpte-source -->
1722
+
1723
+ </div>
1724
+
1725
+
1726
+
1727
+
1728
+ </div><!-- smpte-method -->
1729
+
1730
+
1731
+ <div id="method-i-start_track" class="method-detail ">
1732
+
1733
+ <div class="method-heading">
1734
+ <span class="method-name">start_track</span><span
1735
+ class="method-args">(bytes_to_be_read)</span>
1736
+ <span class="method-click-advice">click to toggle source</span>
1737
+ </div>
1738
+
1739
+
1740
+ <div class="method-description">
1741
+
1742
+
1743
+
1744
+
1745
+
1746
+ <div class="method-source-code" id="start_track-source">
1747
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 95</span>
1748
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">start_track</span>(<span class="ruby-identifier">bytes_to_be_read</span>)
1749
+ <span class="ruby-keyword">end</span></pre>
1750
+ </div><!-- start_track-source -->
1751
+
1752
+ </div>
1753
+
1754
+
1755
+
1756
+
1757
+ </div><!-- start_track-method -->
1758
+
1759
+
1760
+ <div id="method-i-sysex" class="method-detail ">
1761
+
1762
+ <div class="method-heading">
1763
+ <span class="method-name">sysex</span><span
1764
+ class="method-args">(msg)</span>
1765
+ <span class="method-click-advice">click to toggle source</span>
1766
+ </div>
1767
+
1768
+
1769
+ <div class="method-description">
1770
+
1771
+
1772
+
1773
+
1774
+
1775
+ <div class="method-source-code" id="sysex-source">
1776
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 122</span>
1777
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">sysex</span>(<span class="ruby-identifier">msg</span>)
1778
+ <span class="ruby-keyword">end</span></pre>
1779
+ </div><!-- sysex-source -->
1780
+
1781
+ </div>
1782
+
1783
+
1784
+
1785
+
1786
+ </div><!-- sysex-method -->
1787
+
1788
+
1789
+ <div id="method-i-tempo" class="method-detail ">
1790
+
1791
+ <div class="method-heading">
1792
+ <span class="method-name">tempo</span><span
1793
+ class="method-args">(microsecs)</span>
1794
+ <span class="method-click-advice">click to toggle source</span>
1795
+ </div>
1796
+
1797
+
1798
+ <div class="method-description">
1799
+
1800
+
1801
+
1802
+
1803
+
1804
+ <div class="method-source-code" id="tempo-source">
1805
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 146</span>
1806
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">tempo</span>(<span class="ruby-identifier">microsecs</span>)
1807
+ <span class="ruby-keyword">end</span></pre>
1808
+ </div><!-- tempo-source -->
1809
+
1810
+ </div>
1811
+
1812
+
1813
+
1814
+
1815
+ </div><!-- tempo-method -->
1816
+
1817
+
1818
+ <div id="method-i-text" class="method-detail ">
1819
+
1820
+ <div class="method-heading">
1821
+ <span class="method-name">text</span><span
1822
+ class="method-args">(type, msg)</span>
1823
+ <span class="method-click-advice">click to toggle source</span>
1824
+ </div>
1825
+
1826
+
1827
+ <div class="method-description">
1828
+
1829
+
1830
+
1831
+
1832
+
1833
+ <div class="method-source-code" id="text-source">
1834
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 134</span>
1835
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">text</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">msg</span>)
1836
+ <span class="ruby-keyword">end</span></pre>
1837
+ </div><!-- text-source -->
1838
+
1839
+ </div>
1840
+
1841
+
1842
+
1843
+
1844
+ </div><!-- text-method -->
1845
+
1846
+
1847
+ <div id="method-i-time_signature" class="method-detail ">
1848
+
1849
+ <div class="method-heading">
1850
+ <span class="method-name">time_signature</span><span
1851
+ class="method-args">(numer, denom, clocks, qnotes)</span>
1852
+ <span class="method-click-advice">click to toggle source</span>
1853
+ </div>
1854
+
1855
+
1856
+ <div class="method-description">
1857
+
1858
+
1859
+
1860
+
1861
+
1862
+ <div class="method-source-code" id="time_signature-source">
1863
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 140</span>
1864
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">time_signature</span>(<span class="ruby-identifier">numer</span>, <span class="ruby-identifier">denom</span>, <span class="ruby-identifier">clocks</span>, <span class="ruby-identifier">qnotes</span>)
1865
+ <span class="ruby-keyword">end</span></pre>
1866
+ </div><!-- time_signature-source -->
1867
+
1868
+ </div>
1869
+
1870
+
1871
+
1872
+
1873
+ </div><!-- time_signature-method -->
1874
+
1875
+
1876
+ <div id="method-i-write16" class="method-detail ">
1877
+
1878
+ <div class="method-heading">
1879
+ <span class="method-name">write16</span><span
1880
+ class="method-args">(val)</span>
1881
+ <span class="method-click-advice">click to toggle source</span>
1882
+ </div>
1883
+
1884
+
1885
+ <div class="method-description">
1886
+
1887
+ <p>Write a sixteen-bit value.</p>
1888
+
1889
+
1890
+
1891
+ <div class="method-source-code" id="write16-source">
1892
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 409</span>
1893
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">write16</span>(<span class="ruby-identifier">val</span>)
1894
+ <span class="ruby-identifier">val</span> = (<span class="ruby-operator">-</span><span class="ruby-identifier">val</span>) <span class="ruby-operator">|</span> <span class="ruby-value">0x8000</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">val</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1895
+ <span class="ruby-identifier">putc</span>((<span class="ruby-identifier">val</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">8</span>) &amp; <span class="ruby-value">0xff</span>)
1896
+ <span class="ruby-identifier">putc</span>(<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0xff</span>)
1897
+ <span class="ruby-keyword">end</span></pre>
1898
+ </div><!-- write16-source -->
1899
+
1900
+ </div>
1901
+
1902
+
1903
+
1904
+
1905
+ </div><!-- write16-method -->
1906
+
1907
+
1908
+ <div id="method-i-write32" class="method-detail ">
1909
+
1910
+ <div class="method-heading">
1911
+ <span class="method-name">write32</span><span
1912
+ class="method-args">(val)</span>
1913
+ <span class="method-click-advice">click to toggle source</span>
1914
+ </div>
1915
+
1916
+
1917
+ <div class="method-description">
1918
+
1919
+ <p>Write a 32-bit value.</p>
1920
+
1921
+
1922
+
1923
+ <div class="method-source-code" id="write32-source">
1924
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 416</span>
1925
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">write32</span>(<span class="ruby-identifier">val</span>)
1926
+ <span class="ruby-identifier">val</span> = (<span class="ruby-operator">-</span><span class="ruby-identifier">val</span>) <span class="ruby-operator">|</span> <span class="ruby-value">0x80000000</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">val</span> <span class="ruby-operator">&lt;</span> <span class="ruby-value">0</span>
1927
+ <span class="ruby-identifier">putc</span>((<span class="ruby-identifier">val</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">24</span>) &amp; <span class="ruby-value">0xff</span>)
1928
+ <span class="ruby-identifier">putc</span>((<span class="ruby-identifier">val</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">16</span>) &amp; <span class="ruby-value">0xff</span>)
1929
+ <span class="ruby-identifier">putc</span>((<span class="ruby-identifier">val</span> <span class="ruby-operator">&gt;&gt;</span> <span class="ruby-value">8</span>) &amp; <span class="ruby-value">0xff</span>)
1930
+ <span class="ruby-identifier">putc</span>(<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0xff</span>)
1931
+ <span class="ruby-keyword">end</span></pre>
1932
+ </div><!-- write32-source -->
1933
+
1934
+ </div>
1935
+
1936
+
1937
+
1938
+
1939
+ </div><!-- write32-method -->
1940
+
1941
+
1942
+ <div id="method-i-write_var_len" class="method-detail ">
1943
+
1944
+ <div class="method-heading">
1945
+ <span class="method-name">write_var_len</span><span
1946
+ class="method-args">(val)</span>
1947
+ <span class="method-click-advice">click to toggle source</span>
1948
+ </div>
1949
+
1950
+
1951
+ <div class="method-description">
1952
+
1953
+ <p>Write a variable length value.</p>
1954
+
1955
+
1956
+
1957
+ <div class="method-source-code" id="write_var_len-source">
1958
+ <pre><span class="ruby-comment"># File lib/midilib/io/midifile.rb, line 425</span>
1959
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_var_len</span>(<span class="ruby-identifier">val</span>)
1960
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">zero?</span>
1961
+ <span class="ruby-identifier">putc</span>(<span class="ruby-value">0</span>)
1962
+ <span class="ruby-keyword">return</span>
1963
+ <span class="ruby-keyword">end</span>
1964
+
1965
+ <span class="ruby-identifier">buf</span> = []
1966
+
1967
+ <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x7f</span>)
1968
+ <span class="ruby-keyword">while</span> (<span class="ruby-identifier">value</span> <span class="ruby-operator">&gt;&gt;=</span> <span class="ruby-value">7</span>) <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
1969
+ <span class="ruby-identifier">buf</span> <span class="ruby-operator">&lt;&lt;</span> (<span class="ruby-identifier">val</span> &amp; <span class="ruby-value">0x7f</span>) <span class="ruby-operator">|</span> <span class="ruby-value">0x80</span>
1970
+ <span class="ruby-keyword">end</span>
1971
+
1972
+ <span class="ruby-identifier">buf</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">putc</span>(<span class="ruby-identifier">b</span>) }
1973
+ <span class="ruby-keyword">end</span></pre>
1974
+ </div><!-- write_var_len-source -->
1975
+
1976
+ </div>
1977
+
1978
+
1979
+
1980
+
1981
+ </div><!-- write_var_len-method -->
1982
+
1983
+
1984
+ </section><!-- public-instance-method-details -->
1985
+
1986
+ </section><!-- 5Buntitled-5D -->
1987
+
1988
+ </div><!-- documentation -->
1989
+
1990
+
1991
+ <footer id="validator-badges">
1992
+ <p><a href="http://validator.w3.org/check/referer">[Validate]</a>
1993
+ <p>Generated by <a href="https://github.com/rdoc/rdoc">RDoc</a> 3.12.
1994
+ <p>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish Rdoc Generator</a> 3.
1995
+ </footer>
1996
+