midilib 2.0.5 → 3.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,572 +0,0 @@
1
- <!DOCTYPE html>
2
-
3
- <html>
4
- <head>
5
- <meta charset="UTF-8">
6
-
7
- <title>class MIDI::IO::SeqWriter - 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-possibly_munge_due_to_running_status_byte">#possibly_munge_due_to_running_status_byte</a>
76
-
77
- <li ><a href="#method-i-write16">#write16</a>
78
-
79
- <li ><a href="#method-i-write32">#write32</a>
80
-
81
- <li ><a href="#method-i-write_bytes">#write_bytes</a>
82
-
83
- <li ><a href="#method-i-write_header">#write_header</a>
84
-
85
- <li ><a href="#method-i-write_instrument">#write_instrument</a>
86
-
87
- <li ><a href="#method-i-write_to">#write_to</a>
88
-
89
- <li ><a href="#method-i-write_track">#write_track</a>
90
-
91
- <li ><a href="#method-i-write_var_len">#write_var_len</a>
92
-
93
- </ul>
94
- </div>
95
-
96
- </div>
97
- </nav>
98
-
99
- <main role="main" aria-labelledby="class-MIDI::IO::SeqWriter">
100
- <h1 id="class-MIDI::IO::SeqWriter" class="class">
101
- class MIDI::IO::SeqWriter
102
- </h1>
103
-
104
- <section class="description">
105
-
106
- </section>
107
-
108
-
109
-
110
-
111
- <section id="5Buntitled-5D" class="documentation-section">
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
-
121
- <section id="public-class-5Buntitled-5D-method-details" class="method-section">
122
- <header>
123
- <h3>Public Class Methods</h3>
124
- </header>
125
-
126
-
127
- <div id="method-c-new" class="method-detail ">
128
-
129
- <div class="method-heading">
130
- <span class="method-name">new</span><span
131
- class="method-args">(seq, proc = nil) { |num_tracks, index| ... }</span>
132
-
133
- <span class="method-click-advice">click to toggle source</span>
134
-
135
- </div>
136
-
137
-
138
- <div class="method-description">
139
-
140
-
141
-
142
-
143
-
144
-
145
- <div class="method-source-code" id="new-source">
146
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 12</span>
147
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">seq</span>, <span class="ruby-identifier">proc</span> = <span class="ruby-keyword">nil</span>) <span class="ruby-comment"># :yields: num_tracks, index</span>
148
- <span class="ruby-ivar">@seq</span> = <span class="ruby-identifier">seq</span>
149
- <span class="ruby-ivar">@update_block</span> = <span class="ruby-identifier">block_given?</span>() <span class="ruby-operator">?</span> <span class="ruby-constant">Proc</span>.<span class="ruby-identifier">new</span>() <span class="ruby-operator">:</span> <span class="ruby-identifier">proc</span>
150
- <span class="ruby-keyword">end</span></pre>
151
- </div>
152
-
153
- </div>
154
-
155
-
156
-
157
-
158
- </div>
159
-
160
-
161
- </section>
162
-
163
- <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
164
- <header>
165
- <h3>Public Instance Methods</h3>
166
- </header>
167
-
168
-
169
- <div id="method-i-possibly_munge_due_to_running_status_byte" class="method-detail ">
170
-
171
- <div class="method-heading">
172
- <span class="method-name">possibly_munge_due_to_running_status_byte</span><span
173
- class="method-args">(data, prev_status)</span>
174
-
175
- <span class="method-click-advice">click to toggle source</span>
176
-
177
- </div>
178
-
179
-
180
- <div class="method-description">
181
-
182
- <p>If we can use a running status byte, delete the status byte from the given
183
- data. Return the status to remember for next time as the running status
184
- byte for this event.</p>
185
-
186
-
187
-
188
-
189
- <div class="method-source-code" id="possibly_munge_due_to_running_status_byte-source">
190
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 79</span>
191
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">possibly_munge_due_to_running_status_byte</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">prev_status</span>)
192
- <span class="ruby-identifier">status</span> = <span class="ruby-identifier">data</span>[<span class="ruby-value">0</span>]
193
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">status</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">0xf0</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">prev_status</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-value">0xf0</span>
194
-
195
- <span class="ruby-identifier">chan</span> = (<span class="ruby-identifier">status</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0x0f</span>)
196
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">status</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">chan</span> <span class="ruby-operator">!=</span> (<span class="ruby-identifier">prev_status</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0x0f</span>)
197
-
198
- <span class="ruby-identifier">status</span> = (<span class="ruby-identifier">status</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0xf0</span>)
199
- <span class="ruby-identifier">prev_status</span> = (<span class="ruby-identifier">prev_status</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0xf0</span>)
200
-
201
- <span class="ruby-comment"># Both events are on the same channel. If the two status bytes are</span>
202
- <span class="ruby-comment"># exactly the same, the rest is trivial. If it&#39;s note on/note off,</span>
203
- <span class="ruby-comment"># we can combine those further.</span>
204
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">prev_status</span>
205
- <span class="ruby-identifier">data</span>[<span class="ruby-value">0</span>,<span class="ruby-value">1</span>] = [] <span class="ruby-comment"># delete status byte from data</span>
206
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">chan</span>
207
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-constant">NOTE_OFF</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">data</span>[<span class="ruby-value">2</span>] <span class="ruby-operator">==</span> <span class="ruby-value">64</span>
208
- <span class="ruby-comment"># If we see a note off and the velocity is 64, we can store</span>
209
- <span class="ruby-comment"># a note on with a velocity of 0. If the velocity isn&#39;t 64</span>
210
- <span class="ruby-comment"># then storing a note on would be bad because the would be</span>
211
- <span class="ruby-comment"># changed to 64 when reading the file back in.</span>
212
- <span class="ruby-identifier">data</span>[<span class="ruby-value">2</span>] = <span class="ruby-value">0</span> <span class="ruby-comment"># set vel to 0; do before possible shrinking</span>
213
- <span class="ruby-identifier">status</span> = <span class="ruby-constant">NOTE_ON</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">chan</span>
214
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">prev_status</span> <span class="ruby-operator">==</span> <span class="ruby-constant">NOTE_ON</span>
215
- <span class="ruby-identifier">data</span>[<span class="ruby-value">0</span>,<span class="ruby-value">1</span>] = [] <span class="ruby-comment"># delete status byte</span>
216
- <span class="ruby-keyword">else</span>
217
- <span class="ruby-identifier">data</span>[<span class="ruby-value">0</span>] = <span class="ruby-identifier">status</span>
218
- <span class="ruby-keyword">end</span>
219
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">status</span>
220
- <span class="ruby-keyword">else</span>
221
- <span class="ruby-comment"># Can&#39;t compress data</span>
222
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">chan</span>
223
- <span class="ruby-keyword">end</span>
224
- <span class="ruby-keyword">end</span></pre>
225
- </div>
226
-
227
- </div>
228
-
229
-
230
-
231
-
232
- </div>
233
-
234
-
235
- <div id="method-i-write16" class="method-detail ">
236
-
237
- <div class="method-heading">
238
- <span class="method-name">write16</span><span
239
- class="method-args">(val)</span>
240
-
241
- <span class="method-click-advice">click to toggle source</span>
242
-
243
- </div>
244
-
245
-
246
- <div class="method-description">
247
-
248
-
249
-
250
-
251
-
252
-
253
- <div class="method-source-code" id="write16-source">
254
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 126</span>
255
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">write16</span>(<span class="ruby-identifier">val</span>)
256
- <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>
257
-
258
- <span class="ruby-identifier">buffer</span> = []
259
- <span class="ruby-ivar">@io</span>.<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>)
260
- <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">putc</span>(<span class="ruby-identifier">val</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0xff</span>)
261
- <span class="ruby-ivar">@bytes_written</span> <span class="ruby-operator">+=</span> <span class="ruby-value">2</span>
262
- <span class="ruby-keyword">end</span></pre>
263
- </div>
264
-
265
- </div>
266
-
267
-
268
-
269
-
270
- </div>
271
-
272
-
273
- <div id="method-i-write32" class="method-detail ">
274
-
275
- <div class="method-heading">
276
- <span class="method-name">write32</span><span
277
- class="method-args">(val)</span>
278
-
279
- <span class="method-click-advice">click to toggle source</span>
280
-
281
- </div>
282
-
283
-
284
- <div class="method-description">
285
-
286
-
287
-
288
-
289
-
290
-
291
- <div class="method-source-code" id="write32-source">
292
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 135</span>
293
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">write32</span>(<span class="ruby-identifier">val</span>)
294
- <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>
295
-
296
- <span class="ruby-ivar">@io</span>.<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>)
297
- <span class="ruby-ivar">@io</span>.<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>)
298
- <span class="ruby-ivar">@io</span>.<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>)
299
- <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">putc</span>(<span class="ruby-identifier">val</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0xff</span>)
300
- <span class="ruby-ivar">@bytes_written</span> <span class="ruby-operator">+=</span> <span class="ruby-value">4</span>
301
- <span class="ruby-keyword">end</span></pre>
302
- </div>
303
-
304
- </div>
305
-
306
-
307
-
308
-
309
- </div>
310
-
311
-
312
- <div id="method-i-write_bytes" class="method-detail ">
313
-
314
- <div class="method-heading">
315
- <span class="method-name">write_bytes</span><span
316
- class="method-args">(bytes)</span>
317
-
318
- <span class="method-click-advice">click to toggle source</span>
319
-
320
- </div>
321
-
322
-
323
- <div class="method-description">
324
-
325
-
326
-
327
-
328
-
329
-
330
- <div class="method-source-code" id="write_bytes-source">
331
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 145</span>
332
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_bytes</span>(<span class="ruby-identifier">bytes</span>)
333
- <span class="ruby-identifier">bytes</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-ivar">@io</span>.<span class="ruby-identifier">putc</span>(<span class="ruby-identifier">b</span>) }
334
- <span class="ruby-identifier">bytes</span>.<span class="ruby-identifier">length</span>
335
- <span class="ruby-keyword">end</span></pre>
336
- </div>
337
-
338
- </div>
339
-
340
-
341
-
342
-
343
- </div>
344
-
345
-
346
- <div id="method-i-write_header" class="method-detail ">
347
-
348
- <div class="method-heading">
349
- <span class="method-name">write_header</span><span
350
- class="method-args">()</span>
351
-
352
- <span class="method-click-advice">click to toggle source</span>
353
-
354
- </div>
355
-
356
-
357
- <div class="method-description">
358
-
359
-
360
-
361
-
362
-
363
-
364
- <div class="method-source-code" id="write_header-source">
365
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 29</span>
366
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_header</span>
367
- <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">print</span> <span class="ruby-string">&#39;MThd&#39;</span>
368
- <span class="ruby-identifier">write32</span>(<span class="ruby-value">6</span>)
369
- <span class="ruby-identifier">write16</span>(<span class="ruby-value">1</span>) <span class="ruby-comment"># Ignore sequence format; write as format 1</span>
370
- <span class="ruby-identifier">write16</span>(<span class="ruby-ivar">@seq</span>.<span class="ruby-identifier">tracks</span>.<span class="ruby-identifier">length</span>)
371
- <span class="ruby-identifier">write16</span>(<span class="ruby-ivar">@seq</span>.<span class="ruby-identifier">ppqn</span>)
372
- <span class="ruby-keyword">end</span></pre>
373
- </div>
374
-
375
- </div>
376
-
377
-
378
-
379
-
380
- </div>
381
-
382
-
383
- <div id="method-i-write_instrument" class="method-detail ">
384
-
385
- <div class="method-heading">
386
- <span class="method-name">write_instrument</span><span
387
- class="method-args">(instrument)</span>
388
-
389
- <span class="method-click-advice">click to toggle source</span>
390
-
391
- </div>
392
-
393
-
394
- <div class="method-description">
395
-
396
-
397
-
398
-
399
-
400
-
401
- <div class="method-source-code" id="write_instrument-source">
402
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 114</span>
403
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_instrument</span>(<span class="ruby-identifier">instrument</span>)
404
- <span class="ruby-identifier">event</span> = <span class="ruby-constant">MetaEvent</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">META_INSTRUMENT</span>, <span class="ruby-identifier">instrument</span>)
405
- <span class="ruby-identifier">write_var_len</span>(<span class="ruby-value">0</span>)
406
- <span class="ruby-identifier">data</span> = <span class="ruby-identifier">event</span>.<span class="ruby-identifier">data_as_bytes</span>()
407
- <span class="ruby-ivar">@bytes_written</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">write_bytes</span>(<span class="ruby-identifier">data</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-write_to" class="method-detail ">
420
-
421
- <div class="method-heading">
422
- <span class="method-name">write_to</span><span
423
- class="method-args">(io)</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>Writes a <a href="../MIDI.html">MIDI</a> format 1 file.</p>
433
-
434
-
435
-
436
-
437
- <div class="method-source-code" id="write_to-source">
438
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 18</span>
439
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_to</span>(<span class="ruby-identifier">io</span>)
440
- <span class="ruby-ivar">@io</span> = <span class="ruby-identifier">io</span>
441
- <span class="ruby-ivar">@bytes_written</span> = <span class="ruby-value">0</span>
442
- <span class="ruby-identifier">write_header</span>()
443
- <span class="ruby-ivar">@update_block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-keyword">nil</span>, <span class="ruby-ivar">@seq</span>.<span class="ruby-identifier">tracks</span>.<span class="ruby-identifier">length</span>, <span class="ruby-value">0</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@update_block</span>
444
- <span class="ruby-ivar">@seq</span>.<span class="ruby-identifier">tracks</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">track</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
445
- <span class="ruby-identifier">write_track</span>(<span class="ruby-identifier">track</span>)
446
- <span class="ruby-ivar">@update_block</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">track</span>, <span class="ruby-ivar">@seq</span>.<span class="ruby-identifier">tracks</span>.<span class="ruby-identifier">length</span>, <span class="ruby-identifier">i</span>) <span class="ruby-keyword">if</span> <span class="ruby-ivar">@update_block</span>
447
- <span class="ruby-keyword">end</span>
448
- <span class="ruby-keyword">end</span></pre>
449
- </div>
450
-
451
- </div>
452
-
453
-
454
-
455
-
456
- </div>
457
-
458
-
459
- <div id="method-i-write_track" class="method-detail ">
460
-
461
- <div class="method-heading">
462
- <span class="method-name">write_track</span><span
463
- class="method-args">(track)</span>
464
-
465
- <span class="method-click-advice">click to toggle source</span>
466
-
467
- </div>
468
-
469
-
470
- <div class="method-description">
471
-
472
-
473
-
474
-
475
-
476
-
477
- <div class="method-source-code" id="write_track-source">
478
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 37</span>
479
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_track</span>(<span class="ruby-identifier">track</span>)
480
- <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">print</span> <span class="ruby-string">&#39;MTrk&#39;</span>
481
- <span class="ruby-identifier">track_size_file_pos</span> = <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">tell</span>()
482
- <span class="ruby-identifier">write32</span>(<span class="ruby-value">0</span>) <span class="ruby-comment"># Dummy byte count; overwritten later</span>
483
- <span class="ruby-ivar">@bytes_written</span> = <span class="ruby-value">0</span> <span class="ruby-comment"># Reset after previous write</span>
484
-
485
- <span class="ruby-identifier">write_instrument</span>(<span class="ruby-identifier">track</span>.<span class="ruby-identifier">instrument</span>)
486
-
487
- <span class="ruby-identifier">prev_event</span> = <span class="ruby-keyword">nil</span>
488
- <span class="ruby-identifier">prev_status</span> = <span class="ruby-value">0</span>
489
- <span class="ruby-identifier">track</span>.<span class="ruby-identifier">events</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">event</span><span class="ruby-operator">|</span>
490
- <span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">event</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">Realtime</span>)
491
- <span class="ruby-identifier">write_var_len</span>(<span class="ruby-identifier">event</span>.<span class="ruby-identifier">delta_time</span>)
492
- <span class="ruby-keyword">end</span>
493
-
494
- <span class="ruby-identifier">data</span> = <span class="ruby-identifier">event</span>.<span class="ruby-identifier">data_as_bytes</span>()
495
- <span class="ruby-identifier">status</span> = <span class="ruby-identifier">data</span>[<span class="ruby-value">0</span>] <span class="ruby-comment"># status byte plus channel number, if any</span>
496
-
497
- <span class="ruby-comment"># running status byte</span>
498
- <span class="ruby-identifier">status</span> = <span class="ruby-identifier">possibly_munge_due_to_running_status_byte</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">prev_status</span>)
499
-
500
- <span class="ruby-ivar">@bytes_written</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">write_bytes</span>(<span class="ruby-identifier">data</span>)
501
-
502
- <span class="ruby-identifier">prev_event</span> = <span class="ruby-identifier">event</span>
503
- <span class="ruby-identifier">prev_status</span> = <span class="ruby-identifier">status</span>
504
- <span class="ruby-keyword">end</span>
505
-
506
- <span class="ruby-comment"># Write track end event.</span>
507
- <span class="ruby-identifier">event</span> = <span class="ruby-constant">MetaEvent</span>.<span class="ruby-identifier">new</span>(<span class="ruby-constant">META_TRACK_END</span>)
508
- <span class="ruby-identifier">write_var_len</span>(<span class="ruby-value">0</span>)
509
- <span class="ruby-ivar">@bytes_written</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">write_bytes</span>(<span class="ruby-identifier">event</span>.<span class="ruby-identifier">data_as_bytes</span>())
510
-
511
- <span class="ruby-comment"># Go back to beginning of track data and write number of bytes,</span>
512
- <span class="ruby-comment"># then come back here to end of file.</span>
513
- <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">seek</span>(<span class="ruby-identifier">track_size_file_pos</span>)
514
- <span class="ruby-identifier">write32</span>(<span class="ruby-ivar">@bytes_written</span>)
515
- <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">seek</span>(<span class="ruby-value">0</span>, <span class="ruby-operator">::</span><span class="ruby-constant">IO</span><span class="ruby-operator">::</span><span class="ruby-constant">SEEK_END</span>)
516
- <span class="ruby-keyword">end</span></pre>
517
- </div>
518
-
519
- </div>
520
-
521
-
522
-
523
-
524
- </div>
525
-
526
-
527
- <div id="method-i-write_var_len" class="method-detail ">
528
-
529
- <div class="method-heading">
530
- <span class="method-name">write_var_len</span><span
531
- class="method-args">(val)</span>
532
-
533
- <span class="method-click-advice">click to toggle source</span>
534
-
535
- </div>
536
-
537
-
538
- <div class="method-description">
539
-
540
-
541
-
542
-
543
-
544
-
545
- <div class="method-source-code" id="write_var_len-source">
546
- <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 121</span>
547
- <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_var_len</span>(<span class="ruby-identifier">val</span>)
548
- <span class="ruby-identifier">buffer</span> = <span class="ruby-constant">Utils</span>.<span class="ruby-identifier">as_var_len</span>(<span class="ruby-identifier">val</span>)
549
- <span class="ruby-ivar">@bytes_written</span> <span class="ruby-operator">+=</span> <span class="ruby-identifier">write_bytes</span>(<span class="ruby-identifier">buffer</span>)
550
- <span class="ruby-keyword">end</span></pre>
551
- </div>
552
-
553
- </div>
554
-
555
-
556
-
557
-
558
- </div>
559
-
560
-
561
- </section>
562
-
563
- </section>
564
- </main>
565
-
566
-
567
- <footer id="validator-badges" role="contentinfo">
568
- <p><a href="http://validator.w3.org/check/referer">Validate</a>
569
- <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
570
- <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
571
- </footer>
572
-