midilib 3.0.1 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/Credits +5 -0
  3. data/html/MIDI/ActiveSense.html +171 -0
  4. data/html/MIDI/ChannelEvent.html +190 -0
  5. data/html/MIDI/ChannelPressure.html +212 -0
  6. data/html/MIDI/Clock.html +171 -0
  7. data/html/MIDI/Continue.html +171 -0
  8. data/html/MIDI/Controller.html +224 -0
  9. data/html/MIDI/Event.html +349 -0
  10. data/html/MIDI/IO/MIDIFile.html +1392 -0
  11. data/html/MIDI/IO/SeqReader.html +642 -0
  12. data/html/MIDI/IO/SeqWriter.html +442 -0
  13. data/html/MIDI/IO.html +91 -0
  14. data/html/MIDI/KeySig.html +292 -0
  15. data/html/MIDI/Marker.html +138 -0
  16. data/html/MIDI/Measure.html +260 -0
  17. data/html/MIDI/Measures.html +222 -0
  18. data/html/MIDI/MetaEvent.html +353 -0
  19. data/html/MIDI/NoteEvent.html +255 -0
  20. data/html/MIDI/NoteOff.html +188 -0
  21. data/html/MIDI/NoteOn.html +188 -0
  22. data/html/MIDI/PitchBend.html +213 -0
  23. data/html/MIDI/PolyPressure.html +216 -0
  24. data/html/MIDI/ProgramChange.html +212 -0
  25. data/html/MIDI/Realtime.html +194 -0
  26. data/html/MIDI/Sequence.html +641 -0
  27. data/html/MIDI/SongPointer.html +213 -0
  28. data/html/MIDI/SongSelect.html +212 -0
  29. data/html/MIDI/Start.html +171 -0
  30. data/html/MIDI/Stop.html +171 -0
  31. data/html/MIDI/SystemCommon.html +138 -0
  32. data/html/MIDI/SystemExclusive.html +215 -0
  33. data/html/MIDI/SystemReset.html +171 -0
  34. data/html/MIDI/Tempo.html +292 -0
  35. data/html/MIDI/TimeSig.html +286 -0
  36. data/html/MIDI/Track.html +489 -0
  37. data/html/MIDI/TuneRequest.html +194 -0
  38. data/html/MIDI/Utils.html +178 -0
  39. data/html/MIDI.html +281 -0
  40. data/html/Object.html +197 -0
  41. data/html/README_rdoc.html +545 -0
  42. data/html/TODO_rdoc.html +123 -0
  43. data/html/created.rid +15 -0
  44. data/html/css/fonts.css +167 -0
  45. data/html/css/rdoc.css +639 -0
  46. data/html/fonts/Lato-Light.ttf +0 -0
  47. data/html/fonts/Lato-LightItalic.ttf +0 -0
  48. data/html/fonts/Lato-Regular.ttf +0 -0
  49. data/html/fonts/Lato-RegularItalic.ttf +0 -0
  50. data/html/fonts/SourceCodePro-Bold.ttf +0 -0
  51. data/html/fonts/SourceCodePro-Regular.ttf +0 -0
  52. data/html/images/add.png +0 -0
  53. data/html/images/arrow_up.png +0 -0
  54. data/html/images/brick.png +0 -0
  55. data/html/images/brick_link.png +0 -0
  56. data/html/images/bug.png +0 -0
  57. data/html/images/bullet_black.png +0 -0
  58. data/html/images/bullet_toggle_minus.png +0 -0
  59. data/html/images/bullet_toggle_plus.png +0 -0
  60. data/html/images/date.png +0 -0
  61. data/html/images/delete.png +0 -0
  62. data/html/images/find.png +0 -0
  63. data/html/images/loadingAnimation.gif +0 -0
  64. data/html/images/macFFBgHack.png +0 -0
  65. data/html/images/package.png +0 -0
  66. data/html/images/page_green.png +0 -0
  67. data/html/images/page_white_text.png +0 -0
  68. data/html/images/page_white_width.png +0 -0
  69. data/html/images/plugin.png +0 -0
  70. data/html/images/ruby.png +0 -0
  71. data/html/images/tag_blue.png +0 -0
  72. data/html/images/tag_green.png +0 -0
  73. data/html/images/transparent.png +0 -0
  74. data/html/images/wrench.png +0 -0
  75. data/html/images/wrench_orange.png +0 -0
  76. data/html/images/zoom.png +0 -0
  77. data/html/index.html +534 -0
  78. data/html/js/darkfish.js +84 -0
  79. data/html/js/navigation.js +105 -0
  80. data/html/js/navigation.js.gz +0 -0
  81. data/html/js/search.js +110 -0
  82. data/html/js/search_index.js +1 -0
  83. data/html/js/search_index.js.gz +0 -0
  84. data/html/js/searcher.js +229 -0
  85. data/html/js/searcher.js.gz +0 -0
  86. data/html/table_of_contents.html +1258 -0
  87. data/lib/midilib/info.rb +2 -2
  88. data/lib/midilib/io/seqreader.rb +18 -5
  89. data/test/test_io.rb +18 -5
  90. metadata +85 -1
@@ -0,0 +1,442 @@
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
+ var index_rel_prefix = "../../";
12
+ </script>
13
+
14
+ <script src="../../js/navigation.js" defer></script>
15
+ <script src="../../js/search.js" defer></script>
16
+ <script src="../../js/search_index.js" defer></script>
17
+ <script src="../../js/searcher.js" defer></script>
18
+ <script src="../../js/darkfish.js" defer></script>
19
+
20
+ <link href="../../css/fonts.css" rel="stylesheet">
21
+ <link href="../../css/rdoc.css" rel="stylesheet">
22
+
23
+
24
+ <body id="top" role="document" class="class">
25
+ <nav role="navigation">
26
+ <div id="project-navigation">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
+ <h2>
29
+ <a href="../../index.html" rel="home">Home</a>
30
+ </h2>
31
+
32
+ <div id="table-of-contents-navigation">
33
+ <a href="../../table_of_contents.html#pages">Pages</a>
34
+ <a href="../../table_of_contents.html#classes">Classes</a>
35
+ <a href="../../table_of_contents.html#methods">Methods</a>
36
+ </div>
37
+ </div>
38
+
39
+ <div id="search-section" role="search" class="project-section initially-hidden">
40
+ <form action="#" method="get" accept-charset="utf-8">
41
+ <div id="search-field-wrapper">
42
+ <input id="search-field" role="combobox" aria-label="Search"
43
+ aria-autocomplete="list" aria-controls="search-results"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
+ title="Type to search, Up and Down to navigate, Enter to load">
46
+ </div>
47
+
48
+ <ul id="search-results" aria-label="Search Results"
49
+ aria-busy="false" aria-expanded="false"
50
+ aria-atomic="false" class="initially-hidden"></ul>
51
+ </form>
52
+ </div>
53
+
54
+ </div>
55
+
56
+
57
+
58
+ <div id="class-metadata">
59
+
60
+
61
+ <div id="parent-class-section" class="nav-section">
62
+ <h3>Parent</h3>
63
+
64
+ <p class="link"><a href="../../Object.html">Object</a>
65
+ </div>
66
+
67
+
68
+
69
+
70
+ <!-- Method Quickref -->
71
+ <div id="method-list-section" class="nav-section">
72
+ <h3>Methods</h3>
73
+
74
+ <ul class="link-list" role="directory">
75
+ <li ><a href="#method-c-new">::new</a>
76
+ <li ><a href="#method-i-possibly_munge_due_to_running_status_byte">#possibly_munge_due_to_running_status_byte</a>
77
+ <li ><a href="#method-i-write16">#write16</a>
78
+ <li ><a href="#method-i-write32">#write32</a>
79
+ <li ><a href="#method-i-write_bytes">#write_bytes</a>
80
+ <li ><a href="#method-i-write_header">#write_header</a>
81
+ <li ><a href="#method-i-write_instrument">#write_instrument</a>
82
+ <li ><a href="#method-i-write_to">#write_to</a>
83
+ <li ><a href="#method-i-write_track">#write_track</a>
84
+ <li ><a href="#method-i-write_var_len">#write_var_len</a>
85
+ </ul>
86
+ </div>
87
+
88
+ </div>
89
+ </nav>
90
+
91
+ <main role="main" aria-labelledby="class-MIDI::IO::SeqWriter">
92
+ <h1 id="class-MIDI::IO::SeqWriter" class="class">
93
+ class MIDI::IO::SeqWriter
94
+ </h1>
95
+
96
+ <section class="description">
97
+
98
+ </section>
99
+
100
+ <section id="5Buntitled-5D" class="documentation-section">
101
+
102
+
103
+
104
+
105
+
106
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
107
+ <header>
108
+ <h3>Public Class Methods</h3>
109
+ </header>
110
+
111
+ <div id="method-c-new" class="method-detail ">
112
+ <div class="method-heading">
113
+ <span class="method-name">new</span><span
114
+ class="method-args">(seq, midi_format = 1) { |num_tracks, index| ... }</span>
115
+ <span class="method-click-advice">click to toggle source</span>
116
+ </div>
117
+
118
+ <div class="method-description">
119
+
120
+
121
+ <div class="method-source-code" id="new-source">
122
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 9</span>
123
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">initialize</span>(<span class="ruby-identifier">seq</span>, <span class="ruby-identifier">midi_format</span> = <span class="ruby-value">1</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>) <span class="ruby-comment"># :yields: num_tracks, index</span>
124
+ <span class="ruby-ivar">@seq</span> = <span class="ruby-identifier">seq</span>
125
+ <span class="ruby-ivar">@midi_format</span> = <span class="ruby-identifier">midi_format</span> <span class="ruby-operator">||</span> <span class="ruby-value">1</span>
126
+ <span class="ruby-ivar">@update_block</span> = <span class="ruby-identifier">block</span>
127
+ <span class="ruby-keyword">end</span></pre>
128
+ </div>
129
+ </div>
130
+
131
+
132
+ </div>
133
+
134
+ </section>
135
+
136
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
137
+ <header>
138
+ <h3>Public Instance Methods</h3>
139
+ </header>
140
+
141
+ <div id="method-i-possibly_munge_due_to_running_status_byte" class="method-detail ">
142
+ <div class="method-heading">
143
+ <span class="method-name">possibly_munge_due_to_running_status_byte</span><span
144
+ class="method-args">(data, prev_status)</span>
145
+ <span class="method-click-advice">click to toggle source</span>
146
+ </div>
147
+
148
+ <div class="method-description">
149
+ <p>If we can use a running status byte, delete the status byte from the given data. Return the status to remember for next time as the running status byte for this event.</p>
150
+
151
+ <div class="method-source-code" id="possibly_munge_due_to_running_status_byte-source">
152
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 84</span>
153
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">possibly_munge_due_to_running_status_byte</span>(<span class="ruby-identifier">data</span>, <span class="ruby-identifier">prev_status</span>)
154
+ <span class="ruby-identifier">status</span> = <span class="ruby-identifier">data</span>[<span class="ruby-value">0</span>]
155
+ <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>
156
+
157
+ <span class="ruby-identifier">chan</span> = (<span class="ruby-identifier">status</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0x0f</span>)
158
+ <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>)
159
+
160
+ <span class="ruby-identifier">status</span> = (<span class="ruby-identifier">status</span> <span class="ruby-operator">&amp;</span> <span class="ruby-value">0xf0</span>)
161
+ <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>)
162
+
163
+ <span class="ruby-comment"># Both events are on the same channel. If the two status bytes are</span>
164
+ <span class="ruby-comment"># exactly the same, the rest is trivial. If it&#39;s note on/note off,</span>
165
+ <span class="ruby-comment"># we can combine those further.</span>
166
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">status</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">prev_status</span>
167
+ <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>
168
+ <span class="ruby-identifier">status</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">chan</span>
169
+ <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>
170
+ <span class="ruby-comment"># If we see a note off and the velocity is 64, we can store</span>
171
+ <span class="ruby-comment"># a note on with a velocity of 0. If the velocity isn&#39;t 64</span>
172
+ <span class="ruby-comment"># then storing a note on would be bad because the would be</span>
173
+ <span class="ruby-comment"># changed to 64 when reading the file back in.</span>
174
+ <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>
175
+ <span class="ruby-identifier">status</span> = <span class="ruby-constant">NOTE_ON</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">chan</span>
176
+ <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>
177
+ <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>
178
+ <span class="ruby-keyword">else</span>
179
+ <span class="ruby-identifier">data</span>[<span class="ruby-value">0</span>] = <span class="ruby-identifier">status</span>
180
+ <span class="ruby-keyword">end</span>
181
+ <span class="ruby-identifier">status</span>
182
+ <span class="ruby-keyword">else</span>
183
+ <span class="ruby-comment"># Can&#39;t compress data</span>
184
+ <span class="ruby-identifier">status</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">chan</span>
185
+ <span class="ruby-keyword">end</span>
186
+ <span class="ruby-keyword">end</span></pre>
187
+ </div>
188
+ </div>
189
+
190
+
191
+ </div>
192
+
193
+ <div id="method-i-write16" class="method-detail ">
194
+ <div class="method-heading">
195
+ <span class="method-name">write16</span><span
196
+ class="method-args">(val)</span>
197
+ <span class="method-click-advice">click to toggle source</span>
198
+ </div>
199
+
200
+ <div class="method-description">
201
+
202
+
203
+ <div class="method-source-code" id="write16-source">
204
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 133</span>
205
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write16</span>(<span class="ruby-identifier">val</span>)
206
+ <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>
207
+
208
+ <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>)
209
+ <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>)
210
+ <span class="ruby-ivar">@bytes_written</span> <span class="ruby-operator">+=</span> <span class="ruby-value">2</span>
211
+ <span class="ruby-keyword">end</span></pre>
212
+ </div>
213
+ </div>
214
+
215
+
216
+ </div>
217
+
218
+ <div id="method-i-write32" class="method-detail ">
219
+ <div class="method-heading">
220
+ <span class="method-name">write32</span><span
221
+ class="method-args">(val)</span>
222
+ <span class="method-click-advice">click to toggle source</span>
223
+ </div>
224
+
225
+ <div class="method-description">
226
+
227
+
228
+ <div class="method-source-code" id="write32-source">
229
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 141</span>
230
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write32</span>(<span class="ruby-identifier">val</span>)
231
+ <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>
232
+
233
+ <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>)
234
+ <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>)
235
+ <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>)
236
+ <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>)
237
+ <span class="ruby-ivar">@bytes_written</span> <span class="ruby-operator">+=</span> <span class="ruby-value">4</span>
238
+ <span class="ruby-keyword">end</span></pre>
239
+ </div>
240
+ </div>
241
+
242
+
243
+ </div>
244
+
245
+ <div id="method-i-write_bytes" class="method-detail ">
246
+ <div class="method-heading">
247
+ <span class="method-name">write_bytes</span><span
248
+ class="method-args">(bytes)</span>
249
+ <span class="method-click-advice">click to toggle source</span>
250
+ </div>
251
+
252
+ <div class="method-description">
253
+
254
+
255
+ <div class="method-source-code" id="write_bytes-source">
256
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 151</span>
257
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write_bytes</span>(<span class="ruby-identifier">bytes</span>)
258
+ <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>) }
259
+ <span class="ruby-identifier">bytes</span>.<span class="ruby-identifier">length</span>
260
+ <span class="ruby-keyword">end</span></pre>
261
+ </div>
262
+ </div>
263
+
264
+
265
+ </div>
266
+
267
+ <div id="method-i-write_header" class="method-detail ">
268
+ <div class="method-heading">
269
+ <span class="method-name">write_header</span><span
270
+ class="method-args">()</span>
271
+ <span class="method-click-advice">click to toggle source</span>
272
+ </div>
273
+
274
+ <div class="method-description">
275
+
276
+
277
+ <div class="method-source-code" id="write_header-source">
278
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 38</span>
279
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write_header</span>
280
+ <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">print</span> <span class="ruby-string">&#39;MThd&#39;</span>
281
+ <span class="ruby-identifier">write32</span>(<span class="ruby-value">6</span>)
282
+ <span class="ruby-identifier">write16</span>(<span class="ruby-ivar">@midi_format</span>) <span class="ruby-comment"># Ignore sequence format; write as format 1 or 0, default 1</span>
283
+ <span class="ruby-identifier">write16</span>(<span class="ruby-ivar">@seq</span>.<span class="ruby-identifier">tracks</span>.<span class="ruby-identifier">length</span>)
284
+ <span class="ruby-identifier">write16</span>(<span class="ruby-ivar">@seq</span>.<span class="ruby-identifier">ppqn</span>)
285
+ <span class="ruby-keyword">end</span></pre>
286
+ </div>
287
+ </div>
288
+
289
+
290
+ </div>
291
+
292
+ <div id="method-i-write_instrument" class="method-detail ">
293
+ <div class="method-heading">
294
+ <span class="method-name">write_instrument</span><span
295
+ class="method-args">(instrument)</span>
296
+ <span class="method-click-advice">click to toggle source</span>
297
+ </div>
298
+
299
+ <div class="method-description">
300
+
301
+
302
+ <div class="method-source-code" id="write_instrument-source">
303
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 119</span>
304
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write_instrument</span>(<span class="ruby-identifier">instrument</span>)
305
+ <span class="ruby-keyword">return</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">instrument</span>.<span class="ruby-identifier">nil?</span>
306
+
307
+ <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>)
308
+ <span class="ruby-identifier">write_var_len</span>(<span class="ruby-value">0</span>)
309
+ <span class="ruby-identifier">data</span> = <span class="ruby-identifier">event</span>.<span class="ruby-identifier">data_as_bytes</span>
310
+ <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>)
311
+ <span class="ruby-keyword">end</span></pre>
312
+ </div>
313
+ </div>
314
+
315
+
316
+ </div>
317
+
318
+ <div id="method-i-write_to" class="method-detail ">
319
+ <div class="method-heading">
320
+ <span class="method-name">write_to</span><span
321
+ class="method-args">(io)</span>
322
+ <span class="method-click-advice">click to toggle source</span>
323
+ </div>
324
+
325
+ <div class="method-description">
326
+ <p>Writes a <a href="../../MIDI.html"><code>MIDI</code></a> format 1 file.</p>
327
+
328
+ <div class="method-source-code" id="write_to-source">
329
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 16</span>
330
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write_to</span>(<span class="ruby-identifier">io</span>)
331
+ <span class="ruby-keyword">if</span> <span class="ruby-ivar">@midi_format</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
332
+ <span class="ruby-comment"># merge tracks before writing</span>
333
+ <span class="ruby-identifier">merged_seq</span> = <span class="ruby-constant">Sequence</span>.<span class="ruby-identifier">new</span>
334
+ <span class="ruby-identifier">merged_track</span> = <span class="ruby-constant">Track</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">merged_seq</span>)
335
+ <span class="ruby-identifier">merged_seq</span>.<span class="ruby-identifier">tracks</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">merged_track</span>
336
+ <span class="ruby-ivar">@seq</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">track</span><span class="ruby-operator">|</span>
337
+ <span class="ruby-identifier">merged_track</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">track</span>.<span class="ruby-identifier">events</span>)
338
+ <span class="ruby-keyword">end</span>
339
+ <span class="ruby-ivar">@seq</span> = <span class="ruby-identifier">merged_seq</span> <span class="ruby-comment"># replace</span>
340
+ <span class="ruby-keyword">end</span>
341
+
342
+ <span class="ruby-ivar">@io</span> = <span class="ruby-identifier">io</span>
343
+ <span class="ruby-ivar">@bytes_written</span> = <span class="ruby-value">0</span>
344
+ <span class="ruby-identifier">write_header</span>
345
+ <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>
346
+ <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>
347
+ <span class="ruby-identifier">write_track</span>(<span class="ruby-identifier">track</span>)
348
+ <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>
349
+ <span class="ruby-keyword">end</span>
350
+ <span class="ruby-keyword">end</span></pre>
351
+ </div>
352
+ </div>
353
+
354
+
355
+ </div>
356
+
357
+ <div id="method-i-write_track" class="method-detail ">
358
+ <div class="method-heading">
359
+ <span class="method-name">write_track</span><span
360
+ class="method-args">(track)</span>
361
+ <span class="method-click-advice">click to toggle source</span>
362
+ </div>
363
+
364
+ <div class="method-description">
365
+
366
+
367
+ <div class="method-source-code" id="write_track-source">
368
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 46</span>
369
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write_track</span>(<span class="ruby-identifier">track</span>)
370
+ <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">print</span> <span class="ruby-string">&#39;MTrk&#39;</span>
371
+ <span class="ruby-identifier">track_size_file_pos</span> = <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">tell</span>
372
+ <span class="ruby-identifier">write32</span>(<span class="ruby-value">0</span>) <span class="ruby-comment"># Dummy byte count; overwritten later</span>
373
+ <span class="ruby-ivar">@bytes_written</span> = <span class="ruby-value">0</span> <span class="ruby-comment"># Reset after previous write</span>
374
+
375
+ <span class="ruby-identifier">write_instrument</span>(<span class="ruby-identifier">track</span>.<span class="ruby-identifier">instrument</span>)
376
+
377
+ <span class="ruby-identifier">prev_status</span> = <span class="ruby-value">0</span>
378
+ <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>
379
+ <span class="ruby-identifier">write_var_len</span>(<span class="ruby-identifier">event</span>.<span class="ruby-identifier">delta_time</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">event</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Realtime</span>)
380
+
381
+ <span class="ruby-identifier">data</span> = <span class="ruby-identifier">event</span>.<span class="ruby-identifier">data_as_bytes</span>
382
+ <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>
383
+
384
+ <span class="ruby-comment"># running status byte</span>
385
+ <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>)
386
+
387
+ <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>)
388
+
389
+ <span class="ruby-identifier">prev_status</span> = <span class="ruby-identifier">status</span>
390
+ <span class="ruby-keyword">end</span>
391
+
392
+ <span class="ruby-comment"># Write track end event.</span>
393
+ <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>)
394
+ <span class="ruby-identifier">write_var_len</span>(<span class="ruby-value">0</span>)
395
+ <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>)
396
+
397
+ <span class="ruby-comment"># Go back to beginning of track data and write number of bytes,</span>
398
+ <span class="ruby-comment"># then come back here to end of file.</span>
399
+ <span class="ruby-ivar">@io</span>.<span class="ruby-identifier">seek</span>(<span class="ruby-identifier">track_size_file_pos</span>)
400
+ <span class="ruby-identifier">write32</span>(<span class="ruby-ivar">@bytes_written</span>)
401
+ <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>)
402
+ <span class="ruby-keyword">end</span></pre>
403
+ </div>
404
+ </div>
405
+
406
+
407
+ </div>
408
+
409
+ <div id="method-i-write_var_len" class="method-detail ">
410
+ <div class="method-heading">
411
+ <span class="method-name">write_var_len</span><span
412
+ class="method-args">(val)</span>
413
+ <span class="method-click-advice">click to toggle source</span>
414
+ </div>
415
+
416
+ <div class="method-description">
417
+
418
+
419
+ <div class="method-source-code" id="write_var_len-source">
420
+ <pre><span class="ruby-comment"># File lib/midilib/io/seqwriter.rb, line 128</span>
421
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">write_var_len</span>(<span class="ruby-identifier">val</span>)
422
+ <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>)
423
+ <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>)
424
+ <span class="ruby-keyword">end</span></pre>
425
+ </div>
426
+ </div>
427
+
428
+
429
+ </div>
430
+
431
+ </section>
432
+
433
+ </section>
434
+ </main>
435
+
436
+
437
+ <footer id="validator-badges" role="contentinfo">
438
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
439
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.4.0.
440
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
441
+ </footer>
442
+
data/html/MIDI/IO.html ADDED
@@ -0,0 +1,91 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>module MIDI::IO - midilib</title>
8
+
9
+ <script type="text/javascript">
10
+ var rdoc_rel_prefix = "../";
11
+ var index_rel_prefix = "../";
12
+ </script>
13
+
14
+ <script src="../js/navigation.js" defer></script>
15
+ <script src="../js/search.js" defer></script>
16
+ <script src="../js/search_index.js" defer></script>
17
+ <script src="../js/searcher.js" defer></script>
18
+ <script src="../js/darkfish.js" defer></script>
19
+
20
+ <link href="../css/fonts.css" rel="stylesheet">
21
+ <link href="../css/rdoc.css" rel="stylesheet">
22
+
23
+
24
+ <body id="top" role="document" class="module">
25
+ <nav role="navigation">
26
+ <div id="project-navigation">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
+ <h2>
29
+ <a href="../index.html" rel="home">Home</a>
30
+ </h2>
31
+
32
+ <div id="table-of-contents-navigation">
33
+ <a href="../table_of_contents.html#pages">Pages</a>
34
+ <a href="../table_of_contents.html#classes">Classes</a>
35
+ <a href="../table_of_contents.html#methods">Methods</a>
36
+ </div>
37
+ </div>
38
+
39
+ <div id="search-section" role="search" class="project-section initially-hidden">
40
+ <form action="#" method="get" accept-charset="utf-8">
41
+ <div id="search-field-wrapper">
42
+ <input id="search-field" role="combobox" aria-label="Search"
43
+ aria-autocomplete="list" aria-controls="search-results"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
+ title="Type to search, Up and Down to navigate, Enter to load">
46
+ </div>
47
+
48
+ <ul id="search-results" aria-label="Search Results"
49
+ aria-busy="false" aria-expanded="false"
50
+ aria-atomic="false" class="initially-hidden"></ul>
51
+ </form>
52
+ </div>
53
+
54
+ </div>
55
+
56
+
57
+
58
+ <div id="class-metadata">
59
+
60
+
61
+
62
+
63
+
64
+ </div>
65
+ </nav>
66
+
67
+ <main role="main" aria-labelledby="module-MIDI::IO">
68
+ <h1 id="module-MIDI::IO" class="module">
69
+ module MIDI::IO
70
+ </h1>
71
+
72
+ <section class="description">
73
+
74
+ </section>
75
+
76
+ <section id="5Buntitled-5D" class="documentation-section">
77
+
78
+
79
+
80
+
81
+
82
+ </section>
83
+ </main>
84
+
85
+
86
+ <footer id="validator-badges" role="contentinfo">
87
+ <p><a href="https://validator.w3.org/check/referer">Validate</a>
88
+ <p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.4.0.
89
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
90
+ </footer>
91
+