midilib 2.0.5 → 3.0.1

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