midilib 1.2.1 → 2.0.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 (100) hide show
  1. data/ChangeLog +3 -1
  2. data/Credits +6 -1
  3. data/README.rdoc +41 -15
  4. data/Rakefile +3 -11
  5. data/TODO.rdoc +4 -7
  6. data/examples/from_scratch.rb +2 -2
  7. data/examples/measures_mbt.rb +1 -1
  8. data/examples/print_program_changes.rb +1 -1
  9. data/examples/strings.rb +1 -1
  10. data/examples/transpose.rb +1 -1
  11. data/html/Array.html +382 -0
  12. data/html/IO.html +277 -0
  13. data/html/MIDI.html +829 -0
  14. data/html/MIDI/ActiveSense.html +317 -0
  15. data/html/MIDI/ChannelEvent.html +347 -0
  16. data/html/MIDI/ChannelPressure.html +379 -0
  17. data/html/MIDI/Clock.html +317 -0
  18. data/html/MIDI/Continue.html +317 -0
  19. data/html/MIDI/Controller.html +398 -0
  20. data/html/MIDI/Event.html +659 -0
  21. data/html/MIDI/IO.html +238 -0
  22. data/html/MIDI/IO/MIDIFile.html +2269 -0
  23. data/html/MIDI/IO/SeqReader.html +1051 -0
  24. data/html/MIDI/IO/SeqWriter.html +706 -0
  25. data/html/MIDI/KeySig.html +487 -0
  26. data/html/MIDI/Marker.html +275 -0
  27. data/html/MIDI/Measure.html +479 -0
  28. data/html/MIDI/Measures.html +416 -0
  29. data/html/MIDI/MetaEvent.html +617 -0
  30. data/html/MIDI/NoteEvent.html +459 -0
  31. data/html/MIDI/NoteOff.html +341 -0
  32. data/html/MIDI/NoteOn.html +341 -0
  33. data/html/MIDI/PitchBend.html +380 -0
  34. data/html/MIDI/PolyPressure.html +390 -0
  35. data/html/MIDI/ProgramChange.html +379 -0
  36. data/html/MIDI/Realtime.html +354 -0
  37. data/html/MIDI/Sequence.html +1063 -0
  38. data/html/MIDI/SongPointer.html +380 -0
  39. data/html/MIDI/SongSelect.html +379 -0
  40. data/html/MIDI/Start.html +317 -0
  41. data/html/MIDI/Stop.html +317 -0
  42. data/html/MIDI/SystemCommon.html +275 -0
  43. data/html/MIDI/SystemExclusive.html +382 -0
  44. data/html/MIDI/SystemReset.html +317 -0
  45. data/html/MIDI/Tempo.html +519 -0
  46. data/html/MIDI/TimeSig.html +524 -0
  47. data/html/MIDI/Track.html +859 -0
  48. data/html/MIDI/TuneRequest.html +354 -0
  49. data/html/MIDI/Utils.html +350 -0
  50. data/html/README_rdoc.html +882 -0
  51. data/html/TODO_rdoc.html +215 -0
  52. data/html/created.rid +14 -0
  53. data/html/images/brick.png +0 -0
  54. data/html/images/brick_link.png +0 -0
  55. data/html/images/bug.png +0 -0
  56. data/html/images/bullet_black.png +0 -0
  57. data/html/images/bullet_toggle_minus.png +0 -0
  58. data/html/images/bullet_toggle_plus.png +0 -0
  59. data/html/images/date.png +0 -0
  60. data/html/images/find.png +0 -0
  61. data/html/images/loadingAnimation.gif +0 -0
  62. data/html/images/macFFBgHack.png +0 -0
  63. data/html/images/package.png +0 -0
  64. data/html/images/page_green.png +0 -0
  65. data/html/images/page_white_text.png +0 -0
  66. data/html/images/page_white_width.png +0 -0
  67. data/html/images/plugin.png +0 -0
  68. data/html/images/ruby.png +0 -0
  69. data/html/images/tag_green.png +0 -0
  70. data/html/images/wrench.png +0 -0
  71. data/html/images/wrench_orange.png +0 -0
  72. data/html/images/zoom.png +0 -0
  73. data/html/index.html +1266 -0
  74. data/html/js/darkfish.js +116 -0
  75. data/html/js/jquery.js +32 -0
  76. data/html/js/quicksearch.js +114 -0
  77. data/html/js/thickbox-compressed.js +10 -0
  78. data/html/lib/midilib/consts_rb.html +55 -0
  79. data/html/lib/midilib/event_rb.html +56 -0
  80. data/html/lib/midilib/info_rb.html +52 -0
  81. data/html/lib/midilib/io/midifile_rb.html +54 -0
  82. data/html/lib/midilib/io/seqreader_rb.html +58 -0
  83. data/html/lib/midilib/io/seqwriter_rb.html +59 -0
  84. data/html/lib/midilib/measure_rb.html +54 -0
  85. data/html/lib/midilib/sequence_rb.html +58 -0
  86. data/html/lib/midilib/track_rb.html +54 -0
  87. data/html/lib/midilib/utils_rb.html +52 -0
  88. data/html/lib/midilib_rb.html +71 -0
  89. data/html/rdoc.css +706 -0
  90. data/install.rb +1 -1
  91. data/lib/midilib/event.rb +11 -77
  92. data/lib/midilib/info.rb +4 -4
  93. data/lib/midilib/io/seqreader.rb +2 -2
  94. data/lib/midilib/io/seqwriter.rb +1 -1
  95. data/lib/midilib/sequence.rb +1 -1
  96. data/lib/midilib/track.rb +54 -8
  97. data/test/test_event.rb +4 -62
  98. data/test/test_sequence.rb +1 -1
  99. data/test/test_track.rb +39 -5
  100. metadata +102 -9
@@ -0,0 +1,215 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8
+
9
+ <title>File: TODO.rdoc [midilib]</title>
10
+
11
+ <link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet" />
12
+
13
+ <script src="./js/jquery.js" type="text/javascript"
14
+ charset="utf-8"></script>
15
+ <script src="./js/thickbox-compressed.js" type="text/javascript"
16
+ charset="utf-8"></script>
17
+ <script src="./js/quicksearch.js" type="text/javascript"
18
+ charset="utf-8"></script>
19
+ <script src="./js/darkfish.js" type="text/javascript"
20
+ charset="utf-8"></script>
21
+ </head>
22
+
23
+ <body class="file">
24
+ <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="./index.html">Home</a>
29
+ <a href="./index.html#classes">Classes</a>
30
+ <a href="./index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="project-metadata">
36
+
37
+
38
+ <div id="fileindex-section" class="section project-section">
39
+ <h3 class="section-header">Files</h3>
40
+ <ul>
41
+
42
+ <li class="file"><a href="./README_rdoc.html">README.rdoc</a></li>
43
+
44
+ <li class="file"><a href="./TODO_rdoc.html">TODO.rdoc</a></li>
45
+
46
+ </ul>
47
+ </div>
48
+
49
+
50
+ <div id="classindex-section" class="section project-section">
51
+ <h3 class="section-header">Class Index
52
+ <span class="search-toggle"><img src="./images/find.png"
53
+ height="16" width="16" alt="[+]"
54
+ title="show/hide quicksearch" /></span></h3>
55
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
56
+ <fieldset>
57
+ <legend>Quicksearch</legend>
58
+ <input type="text" name="quicksearch" value=""
59
+ class="quicksearch-field" />
60
+ </fieldset>
61
+ </form>
62
+
63
+ <ul class="link-list">
64
+
65
+ <li><a href="./MIDI.html">MIDI</a></li>
66
+
67
+ <li><a href="./MIDI/ActiveSense.html">MIDI::ActiveSense</a></li>
68
+
69
+ <li><a href="./MIDI/ChannelEvent.html">MIDI::ChannelEvent</a></li>
70
+
71
+ <li><a href="./MIDI/ChannelPressure.html">MIDI::ChannelPressure</a></li>
72
+
73
+ <li><a href="./MIDI/Clock.html">MIDI::Clock</a></li>
74
+
75
+ <li><a href="./MIDI/Continue.html">MIDI::Continue</a></li>
76
+
77
+ <li><a href="./MIDI/Controller.html">MIDI::Controller</a></li>
78
+
79
+ <li><a href="./MIDI/Event.html">MIDI::Event</a></li>
80
+
81
+ <li><a href="./MIDI/IO.html">MIDI::IO</a></li>
82
+
83
+ <li><a href="./MIDI/IO/MIDIFile.html">MIDI::IO::MIDIFile</a></li>
84
+
85
+ <li><a href="./MIDI/IO/SeqReader.html">MIDI::IO::SeqReader</a></li>
86
+
87
+ <li><a href="./MIDI/IO/SeqWriter.html">MIDI::IO::SeqWriter</a></li>
88
+
89
+ <li><a href="./MIDI/KeySig.html">MIDI::KeySig</a></li>
90
+
91
+ <li><a href="./MIDI/Marker.html">MIDI::Marker</a></li>
92
+
93
+ <li><a href="./MIDI/Measure.html">MIDI::Measure</a></li>
94
+
95
+ <li><a href="./MIDI/Measures.html">MIDI::Measures</a></li>
96
+
97
+ <li><a href="./MIDI/MetaEvent.html">MIDI::MetaEvent</a></li>
98
+
99
+ <li><a href="./MIDI/NoteEvent.html">MIDI::NoteEvent</a></li>
100
+
101
+ <li><a href="./MIDI/NoteOff.html">MIDI::NoteOff</a></li>
102
+
103
+ <li><a href="./MIDI/NoteOff.html">MIDI::NoteOff</a></li>
104
+
105
+ <li><a href="./MIDI/NoteOn.html">MIDI::NoteOn</a></li>
106
+
107
+ <li><a href="./MIDI/NoteOn.html">MIDI::NoteOn</a></li>
108
+
109
+ <li><a href="./MIDI/PitchBend.html">MIDI::PitchBend</a></li>
110
+
111
+ <li><a href="./MIDI/PolyPressure.html">MIDI::PolyPressure</a></li>
112
+
113
+ <li><a href="./MIDI/ProgramChange.html">MIDI::ProgramChange</a></li>
114
+
115
+ <li><a href="./MIDI/Realtime.html">MIDI::Realtime</a></li>
116
+
117
+ <li><a href="./MIDI/Sequence.html">MIDI::Sequence</a></li>
118
+
119
+ <li><a href="./MIDI/SongPointer.html">MIDI::SongPointer</a></li>
120
+
121
+ <li><a href="./MIDI/SongSelect.html">MIDI::SongSelect</a></li>
122
+
123
+ <li><a href="./MIDI/Start.html">MIDI::Start</a></li>
124
+
125
+ <li><a href="./MIDI/Stop.html">MIDI::Stop</a></li>
126
+
127
+ <li><a href="./MIDI/SystemCommon.html">MIDI::SystemCommon</a></li>
128
+
129
+ <li><a href="./MIDI/SystemExclusive.html">MIDI::SystemExclusive</a></li>
130
+
131
+ <li><a href="./MIDI/SystemReset.html">MIDI::SystemReset</a></li>
132
+
133
+ <li><a href="./MIDI/Tempo.html">MIDI::Tempo</a></li>
134
+
135
+ <li><a href="./MIDI/TimeSig.html">MIDI::TimeSig</a></li>
136
+
137
+ <li><a href="./MIDI/Track.html">MIDI::Track</a></li>
138
+
139
+ <li><a href="./MIDI/TuneRequest.html">MIDI::TuneRequest</a></li>
140
+
141
+ <li><a href="./MIDI/Utils.html">MIDI::Utils</a></li>
142
+
143
+ <li><a href="./Array.html">Array</a></li>
144
+
145
+ <li><a href="./IO.html">IO</a></li>
146
+
147
+ </ul>
148
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
149
+ </div>
150
+
151
+
152
+ </div>
153
+ </div>
154
+
155
+ <div id="documentation">
156
+ <h2>Bugs</h2>
157
+ <p>
158
+ No known bugs. (If that&#8217;s not a challenge, I don&#8217;t know what
159
+ is.)
160
+ </p>
161
+ <h2>Features</h2>
162
+ <ul>
163
+ <li><h1>print_decimal_numbers= and =print_channel_numbers_from_one= should be</h1>
164
+ <p>
165
+ associated with sequence, or perhaps track, not event.
166
+ </p>
167
+ </li>
168
+ <li><p>
169
+ Method to translate event&#8217;s time_from_start to number of milliseconds
170
+ from start.
171
+ </p>
172
+ </li>
173
+ <li><p>
174
+ Swing quantizing. (Implied by list email from Carl Youngblood
175
+ <carl.youngblood@gmail.com>)
176
+ </p>
177
+ </li>
178
+ <li><p>
179
+ Implement key signature in SeqReader.
180
+ </p>
181
+ </li>
182
+ <li><p>
183
+ Format 0 files.
184
+ </p>
185
+ </li>
186
+ <li><p>
187
+ Format 2 files(?).
188
+ </p>
189
+ </li>
190
+ </ul>
191
+ <h2>Documentation</h2>
192
+ <ul>
193
+ <li><p>
194
+ Write better docs.
195
+ </p>
196
+ </li>
197
+ </ul>
198
+ <h2>Tests</h2>
199
+ <ul>
200
+ <li><p>
201
+ Tests for Noah Thorp&#8217;s midilib bug fixes.
202
+ </p>
203
+ </li>
204
+ </ul>
205
+
206
+ </div>
207
+
208
+ <div id="validator-badges">
209
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
210
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
211
+ Rdoc Generator</a> 1.1.6</small>.</p>
212
+ </div>
213
+ </body>
214
+ </html>
215
+
@@ -0,0 +1,14 @@
1
+ Sun, 03 Oct 2010 10:16:04 -0400
2
+ README.rdoc Sun, 03 Oct 2010 10:14:05 -0400
3
+ TODO.rdoc Sun, 03 Oct 2010 10:09:23 -0400
4
+ lib/midilib/consts.rb Tue, 10 Nov 2009 10:33:07 -0500
5
+ lib/midilib/event.rb Sun, 03 Oct 2010 10:09:23 -0400
6
+ lib/midilib/info.rb Sun, 03 Oct 2010 10:09:23 -0400
7
+ lib/midilib/io/midifile.rb Tue, 10 Nov 2009 10:33:07 -0500
8
+ lib/midilib/io/seqreader.rb Sun, 03 Oct 2010 10:09:23 -0400
9
+ lib/midilib/io/seqwriter.rb Tue, 20 Jul 2010 08:10:07 -0400
10
+ lib/midilib/measure.rb Tue, 10 Nov 2009 10:33:07 -0500
11
+ lib/midilib/sequence.rb Sun, 03 Oct 2010 10:09:23 -0400
12
+ lib/midilib/track.rb Sun, 03 Oct 2010 10:09:23 -0400
13
+ lib/midilib/utils.rb Tue, 10 Nov 2009 10:33:07 -0500
14
+ lib/midilib.rb Fri, 02 Apr 2010 15:06:32 -0400
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,1266 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
3
+ "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
6
+ <head>
7
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8
+
9
+ <title>midilib</title>
10
+
11
+ <link type="text/css" media="screen" href="rdoc.css" rel="stylesheet" />
12
+
13
+ <script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
14
+ <script src="js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
15
+ <script src="js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
16
+ <script src="js/darkfish.js" type="text/javascript" charset="utf-8"></script>
17
+
18
+ </head>
19
+ <body class="indexpage">
20
+
21
+
22
+ <h1>midilib</h1>
23
+
24
+
25
+ <div id="main">
26
+
27
+ <p>
28
+ midilib is a pure Ruby <a href="MIDI.html">MIDI</a> library useful for
29
+ reading and writing standard <a href="MIDI.html">MIDI</a> files and
30
+ manipulating <a href="MIDI.html">MIDI</a> event data. Classes include <a
31
+ href="MIDI/Sequence.html">MIDI::Sequence</a>, <a
32
+ href="MIDI/Track.html">MIDI::Track</a>, <a
33
+ href="MIDI/Event.html">MIDI::Event</a>, and <a
34
+ href="MIDI/IO/MIDIFile.html">MIDI::IO::MIDIFile</a> and its subclasses <a
35
+ href="MIDI/IO/SeqReader.html">MIDI::IO::SeqReader</a> and <a
36
+ href="MIDI/IO/SeqWriter.html">MIDI::IO::SeqWriter</a>.
37
+ </p>
38
+ <p>
39
+ The GitHub project page and Web site of midilib is <a
40
+ href="http://github.com/jimm/midilib">github.com/jimm/midilib</a> and the
41
+ RubyGems.org page is <a
42
+ href="http://rubygems.org/gems/midilib">rubygems.org/gems/midilib</a>,
43
+ where you can also find all the RDoc documentation.
44
+ </p>
45
+ <p>
46
+ midilib is compatible with both Ruby 1.8.x and 1.9.x.
47
+ </p>
48
+ <h2>Dependencies</h2>
49
+ <p>
50
+ midilib does not require any other packages. The test suite in the tests
51
+ directory requires the testing framework TestUnit, which comes with Ruby
52
+ 1.8 and later and can also be found in the Ruby Application Archive (<a
53
+ href="http://raa.ruby-lang.org">raa.ruby-lang.org</a>).
54
+ </p>
55
+ <p>
56
+ To rebuild the gem or RDocs or run the tests easily, you can use the
57
+ Rakefile which requires Rake (<a
58
+ href="http://rake.rubyforge.org">rake.rubyforge.org</a>).
59
+ </p>
60
+ <h2>Installation</h2>
61
+ <h3>RubyGems Installation</h3>
62
+ <p>
63
+ To install midilib as a gem, type
64
+ </p>
65
+ <pre>
66
+ % gem install midilib
67
+ </pre>
68
+ <p>
69
+ or
70
+ </p>
71
+ <pre>
72
+ % gem update midilib
73
+ </pre>
74
+ <p>
75
+ if you already have a previous version. You may need root privileges to
76
+ install or update the gem.
77
+ </p>
78
+ <h3>Manual Installation</h3>
79
+ <p>
80
+ After downloading and expanding the archive, you can install midilib with
81
+ the command
82
+ </p>
83
+ <pre>
84
+ % ruby install.rb
85
+ </pre>
86
+ <p>
87
+ (or)
88
+ </p>
89
+ <pre>
90
+ % ruby install.rb --install-dir=my_directory
91
+ </pre>
92
+ <p>
93
+ You may need root privileges to install.
94
+ </p>
95
+ <h2>Testing</h2>
96
+ <pre>
97
+ % rake test
98
+ </pre>
99
+ <p>
100
+ runs all of the tests in the test directory.
101
+ </p>
102
+ <h2>Overview</h2>
103
+ <p>
104
+ <a href="MIDI.html">MIDI</a> file <a href="IO.html">IO</a> only understands
105
+ <a href="MIDI.html">MIDI</a> file format 1, where a sequence is made up of
106
+ multiple tracks. It doesn&#8217;t yet understand format 0 (a single track
107
+ containing all events) or format 2 (a collection of format 0 files in one
108
+ file).
109
+ </p>
110
+ <h3><a href="MIDI/Sequence.html">MIDI::Sequence</a></h3>
111
+ <p>
112
+ A sequence contains a collection of tracks and global information like the
113
+ sequence&#8217;s pulses per quarter note (ppqn) and time signature.
114
+ </p>
115
+ <p>
116
+ The first track in a sequence is special; it holds meta-events like tempo
117
+ and sequence name. Don&#8217;t put any notes in this track.
118
+ </p>
119
+ <p>
120
+ <a href="MIDI/Sequence.html">MIDI::Sequence</a> also contains some
121
+ convenience methods that let you set and retrieve the sequence&#8217;s
122
+ name, the time signature, and to retrieve the first tempo event&#8217;s
123
+ beats-per-minute value.
124
+ </p>
125
+ <p>
126
+ Normally instances of <a
127
+ href="MIDI/IO/SeqReader.html">MIDI::IO::SeqReader</a> and <a
128
+ href="MIDI/IO/SeqWriter.html">MIDI::IO::SeqWriter</a> are used when a
129
+ sequence reads itself from or writes itself to a <a
130
+ href="MIDI.html">MIDI</a> file. You can change that by setting a
131
+ sequence&#8217;s reader_class or writer_class attributes. Instances of the
132
+ classes contained in those attributes are created and used whenever the
133
+ sequence reads or writes itself.
134
+ </p>
135
+ <h3><a href="MIDI/Track.html">MIDI::Track</a></h3>
136
+ <p>
137
+ A track contains an array of events.
138
+ </p>
139
+ <p>
140
+ When you modify the <tt>events</tt> array, make sure to call recalc_times
141
+ so each event gets its <tt>time_from_start</tt> recalculated. You
142
+ don&#8217;t have to do that after every event you add; just remember to do
143
+ so before using the track in a way that expects the list of events to be
144
+ ordered correctly.
145
+ </p>
146
+ <p>
147
+ A Track also holds a bit mask that specifies the channels used by the
148
+ track. This bit mask is set when the track is read from the <a
149
+ href="MIDI.html">MIDI</a> file by a SeqReader but is <em>not</em> kept up
150
+ to date by any other methods. Specifically, if you add events to a track at
151
+ any other time, the bit mask will not be updated.
152
+ </p>
153
+ <h3><a href="MIDI/Measure.html">MIDI::Measure</a></h3>
154
+ <p>
155
+ This class contains information about a measure from the sequence. Measure
156
+ data is based on the time signature information from the sequence and is
157
+ not stored in the sequence itself.
158
+ </p>
159
+ <h3><a href="MIDI/Measures.html">MIDI::Measures</a></h3>
160
+ <p>
161
+ The class <a href="MIDI/Sequence.html">MIDI::Sequence</a> method
162
+ get_measures returns a <a href="MIDI/Measures.html">MIDI::Measures</a>
163
+ object. <a href="MIDI/Measures.html">MIDI::Measures</a> is a subclass of <a
164
+ href="Array.html">Array</a>. It is a specialized container for <a
165
+ href="MIDI/Measure.html">MIDI::Measure</a> objects, which can be use to map
166
+ event times to measure numbers. Please note that this object has to be
167
+ remade when events are deleted/added in the sequence.
168
+ </p>
169
+ <p>
170
+ <a href="MIDI/Measure.html">MIDI::Measure</a> and <a
171
+ href="MIDI/Measures.html">MIDI::Measures</a> are brought to us by Jari
172
+ Williamsson <jari.williamsson@mailbox.swipnet.se>, who also contributed
173
+ some improvements to the <a href="MIDI/Event.html">MIDI::Event</a> and <a
174
+ href="MIDI/Track.html">MIDI::Track</a> classes.
175
+ </p>
176
+ <h3><a href="MIDI/Event.html">MIDI::Event</a></h3>
177
+ <p>
178
+ Each event holds not only its delta time but also its time from the start
179
+ of the track. The track is responsible for recalculating its events&#8217;
180
+ start times. You can call <a
181
+ href="MIDI/Track.html#method-i-recalc_times">MIDI::Track#recalc_times</a>
182
+ to do so.
183
+ </p>
184
+ <p>
185
+ Events have a number of boolean methods that identify their types, like
186
+ channel?, note?, note_on?, note_off?, meta?, system?, realtime?, and
187
+ program_change?. Events know how to print themselves. By default, all
188
+ numbers are printed as hexidecimal and channel numbers are printed from
189
+ 0-15. Setting print_decimal_numbers to true will output decimal numbers and
190
+ setting print_channel_numbers_from_one will output channel numbers from
191
+ 1-16.
192
+ </p>
193
+ <p>
194
+ Subclasses of <a href="MIDI/Event.html">MIDI::Event</a> implement the
195
+ various <a href="MIDI.html">MIDI</a> messages such as note on and off,
196
+ controller values, system exclusive data, and realtime bytes.
197
+ </p>
198
+ <p>
199
+ <a href="MIDI/Realtime.html">MIDI::Realtime</a> events have delta values
200
+ and start times, just like all the other midilib event types do. (<a
201
+ href="MIDI.html">MIDI</a> real time status bytes don&#8217;t have delta
202
+ times, but this way we can record when in a track the realtime byte was
203
+ received and should be sent. This is useful for start/continue/stop events
204
+ that control other devices, for example.) Note that when a <a
205
+ href="MIDI/Realtime.html">MIDI::Realtime</a> event is written out to a <a
206
+ href="MIDI.html">MIDI</a> file, the delta time is not written.
207
+ </p>
208
+ <p>
209
+ <a href="MIDI/MetaEvent.html">MIDI::MetaEvent</a> events hold an array of
210
+ bytes named &#8216;data&#8217;. Many meta events are string holders (text,
211
+ lyric, marker, etc.) Though the &#8216;data&#8217; value is always an array
212
+ of bytes, <a href="MIDI/MetaEvent.html">MIDI::MetaEvent</a> helps with
213
+ saving and accessing string. The <a
214
+ href="MIDI/MetaEvent.html#method-i-data_as_str">MIDI::MetaEvent#data_as_str</a>
215
+ method returns the data bytes as a string. When assigning to a meta
216
+ event&#8217;s data, if you pass in a string it will get converted to an
217
+ array of bytes.
218
+ </p>
219
+ <h2>How To Use</h2>
220
+ <p>
221
+ The following examples show you how to use midilib to read, write, and
222
+ manipulate <a href="MIDI.html">MIDI</a> files and modify track events. See
223
+ also the files in the examples directory, which are described below.
224
+ </p>
225
+ <h3>Reading a <a href="MIDI.html">MIDI</a> File</h3>
226
+ <p>
227
+ To read a <a href="MIDI.html">MIDI</a> file, create a <a
228
+ href="MIDI/Sequence.html">MIDI::Sequence</a> object and call its # method,
229
+ passing in an <a href="IO.html">IO</a> object.
230
+ </p>
231
+ <p>
232
+ The # method takes an optional block. If present, the block is called once
233
+ after each track has finished being read. Each time, it is passed the total
234
+ number of tracks and the number of the current track that has just been
235
+ read. This is useful for notifying the user of progress, for example by
236
+ updating a GUI progress bar.
237
+ </p>
238
+ <pre>
239
+ require 'midilib/io/seqreader'
240
+
241
+ # Create a new, empty sequence.
242
+ seq = MIDI::Sequence.new()
243
+
244
+ # Read the contents of a MIDI file into the sequence.
245
+ File.open('my_midi_file.mid', 'rb') { | file |
246
+ seq.read(file) { | num_tracks, i |
247
+ # Print something when each track is read.
248
+ puts &quot;read track #{i} of #{num_tracks}&quot;
249
+ }
250
+ }
251
+ </pre>
252
+ <h3>Writing a <a href="MIDI.html">MIDI</a> File</h3>
253
+ <p>
254
+ To write a <a href="MIDI.html">MIDI</a> file, call the write method,
255
+ passing in an <a href="IO.html">IO</a> object.
256
+ </p>
257
+ <pre>
258
+ require 'midilib/io/seqwriter'
259
+
260
+ # Start with a sequence that has something worth saving.
261
+ seq = read_or_create_seq_we_care_not_how()
262
+
263
+ # Write the sequence to a MIDI file.
264
+ File.open('my_output_file.mid', 'wb') { | file | seq.write(file) }
265
+ </pre>
266
+ <h3>Editing a <a href="MIDI.html">MIDI</a> File</h3>
267
+ <p>
268
+ Combining the last two examples, here is a script that reads a <a
269
+ href="MIDI.html">MIDI</a> file, transposes some events, and writes the
270
+ sequence out to a different file. This is a useful template for
271
+ programatically manipulating <a href="MIDI.html">MIDI</a> data.
272
+ </p>
273
+ <p>
274
+ This code transposes all of the note events (note on, note off, and poly
275
+ pressure) on channel 5 down one octave. It&#8217;s easy to find events that
276
+ need to be transposed: the method # returns true.
277
+ </p>
278
+ <h4>Transposing One Channel</h4>
279
+ <pre>
280
+ require 'midilib/io/seqreader'
281
+ require 'midilib/io/seqwriter'
282
+
283
+ # Create a new, empty sequence.
284
+ seq = MIDI::Sequence.new()
285
+
286
+ # Read the contents of a MIDI file into the sequence.
287
+ File.open('my_input_file.mid', 'rb') { | file |
288
+ seq.read(file) { | num_tracks, i |
289
+ # Print something when each track is read.
290
+ puts &quot;read track #{i} of #{num_tracks}&quot;
291
+ }
292
+ }
293
+
294
+ # Iterate over every event in every track.
295
+ seq.each { | track |
296
+ track.each { | event |
297
+ # If the event is a note event (note on, note off, or poly
298
+ # pressure) and it is on MIDI channel 5 (channels start at
299
+ # 0, so we use 4), then transpose the event down one octave.
300
+ if event.note? &amp;&amp; event.channel == 4
301
+ event.note -= 12
302
+ end
303
+ }
304
+ }
305
+
306
+ # Write the sequence to a MIDI file.
307
+ File.open('my_output_file.mid', 'wb') { | file | seq.write(file) }
308
+ </pre>
309
+ <h3>Manipulating tracks</h3>
310
+ <p>
311
+ If you modify a track&#8217;s list of events directly, don&#8217;t forget
312
+ to call <a
313
+ href="MIDI/Track.html#method-i-recalc_times">MIDI::Track#recalc_times</a>
314
+ when you are done.
315
+ </p>
316
+ <pre>
317
+ track.events[42, 1] = array_of_events
318
+ track.events &lt;&lt; an_event
319
+ track.merge(array_of_events)
320
+ track.recalc_times
321
+ </pre>
322
+ <h3>Calculating delta times</h3>
323
+ <p>
324
+ A few methods in <a href="MIDI/Sequence.html">MIDI::Sequence</a> make it
325
+ easier to calculate the delta times that represent note lengths. <a
326
+ href="MIDI/Sequence.html#method-i-length_to_delta">MIDI::Sequence#length_to_delta</a>
327
+ takes a note length (a multiple of a quarter note) and returns the delta
328
+ time given the sequence&#8217;s current ppqn (pulses per quarter note)
329
+ setting. 1 is a quarter note, 1.0/32.0 is a 32nd note (use floating-point
330
+ numbers to avoid integer rounding), 1.5 is a dotted quarter, etc. See the
331
+ documentation for that method for more information.
332
+ </p>
333
+ <p>
334
+ <a
335
+ href="MIDI/Sequence.html#method-i-note_to_length">MIDI::Sequence#note_to_length</a>
336
+ takes a note name and returns a length value (again, as a multiple of a
337
+ quarter note). Legal note names are those found in
338
+ MIDI::Sequence::NOTE_TO_LENGTH, and may begin with &#8220;dotted&#8221;
339
+ and/or end with &#8220;triplet&#8221;. For example, &#8220;whole&#8221;,
340
+ &#8220;sixteenth&#8221;, &#8220;32nd&#8221;, &#8220;quarter triplet&#8221;,
341
+ &#8220;dotted 16th&#8221;, and &#8220;dotted 8th triplet&#8221; are all
342
+ legal note names.
343
+ </p>
344
+ <p>
345
+ Finally, <a
346
+ href="MIDI/Sequence.html#method-i-note_to_delta">MIDI::Sequence#note_to_delta</a>
347
+ takes a note name and returns a delta time. It does this by calling
348
+ note_to_length, then passing the result to length_to_delta.
349
+ </p>
350
+ <h3>Example Scripts</h3>
351
+ <p>
352
+ Here are short descriptions of each of the examples found in the examples
353
+ directory.
354
+ </p>
355
+ <ul>
356
+ <li><p>
357
+ examples/from_scratch.rb shows you how to create a new sequence from
358
+ scratch and save it to a <a href="MIDI.html">MIDI</a> file. It creates a
359
+ file called &#8216;from_scratch.mid&#8217;.
360
+ </p>
361
+ </li>
362
+ <li><p>
363
+ examples/seq2text.rb dumps a <a href="MIDI.html">MIDI</a> file as text. It
364
+ reads in a sequence and uses the to_s method of each event.
365
+ </p>
366
+ </li>
367
+ <li><p>
368
+ examples/reader2text.rb dumps a <a href="MIDI.html">MIDI</a> file as text.
369
+ It subclasses MIDI::SeqReader instead of creating a sequence containing
370
+ tracks and events.
371
+ </p>
372
+ </li>
373
+ <li><p>
374
+ examples/transpose.rb transposes all note events (note on, note off, poly
375
+ pressure) on a specified channel by a specified amount.
376
+ </p>
377
+ </li>
378
+ <li><p>
379
+ There is also one <a href="MIDI.html">MIDI</a> file, examples/NoFences.mid.
380
+ It is a little pop ditty I wrote. The instruments in this file use General
381
+ <a href="MIDI.html">MIDI</a> patch numbers and drum note assignments. Since
382
+ I don&#8217;t normally use GM patches, the sounds used here are at best
383
+ approximations of the sounds I use.
384
+ </p>
385
+ </li>
386
+ </ul>
387
+ <h2>Resources</h2>
388
+ <p>
389
+ The Ruby Web site (<a
390
+ href="http://www.ruby-lang.org/en/index.html">www.ruby-lang.org/en/index.html</a>)
391
+ contains an introduction to Ruby, the Ruby Application Archive (RAA) at <a
392
+ href="http://raa.ruby-lang.org">raa.ruby-lang.org</a>, and pointers to more
393
+ information.
394
+ </p>
395
+ <p>
396
+ <cite>Programming Ruby, The Pragmatic Programmer&#8217;s Guide</cite>, by
397
+ David Thomas and Andrew Hunt, is a well-written and practical introduction
398
+ to Ruby. Its Web page at <a
399
+ href="http://www.rubycentral.com/book">www.rubycentral.com/book</a> also
400
+ contains a wealth of Ruby information. Though the first edition book is
401
+ available online, I encourage you to purchase a copy of the latest edition.
402
+ </p>
403
+ <p>
404
+ A description of the <a href="MIDI.html">MIDI</a> file format can be found
405
+ in a few places such as <a
406
+ href="http://www.borg.com/~jglatt/tech/midifile.htm.">www.borg.com/~jglatt/tech/midifile.htm.</a>
407
+ </p>
408
+ <p>
409
+ The <a href="MIDI.html">MIDI</a> message reference at <a
410
+ href="http://www.io.com/~jimm/midi_ref.html">www.io.com/~jimm/midi_ref.html</a>
411
+ describes the format of <a href="MIDI.html">MIDI</a> commands.
412
+ </p>
413
+ <h1>To Do</h1>
414
+ <h2>Bugs</h2>
415
+ <p>
416
+ No known bugs. (If that&#8217;s not a challenge, I don&#8217;t know what
417
+ is.)
418
+ </p>
419
+ <h2>Features</h2>
420
+ <ul>
421
+ <li><h1>print_decimal_numbers= and =print_channel_numbers_from_one= should be</h1>
422
+ <p>
423
+ associated with sequence, or perhaps track, not event.
424
+ </p>
425
+ </li>
426
+ <li><p>
427
+ Method to translate event&#8217;s time_from_start to number of milliseconds
428
+ from start.
429
+ </p>
430
+ </li>
431
+ <li><p>
432
+ Swing quantizing. (Implied by list email from Carl Youngblood
433
+ <carl.youngblood@gmail.com>)
434
+ </p>
435
+ </li>
436
+ <li><p>
437
+ Implement key signature in SeqReader.
438
+ </p>
439
+ </li>
440
+ <li><p>
441
+ Format 0 files.
442
+ </p>
443
+ </li>
444
+ <li><p>
445
+ Format 2 files(?).
446
+ </p>
447
+ </li>
448
+ </ul>
449
+ <h2>Documentation</h2>
450
+ <ul>
451
+ <li><p>
452
+ Write better docs.
453
+ </p>
454
+ </li>
455
+ </ul>
456
+ <h2>Tests</h2>
457
+ <ul>
458
+ <li><p>
459
+ Tests for Noah Thorp&#8217;s midilib bug fixes.
460
+ </p>
461
+ </li>
462
+ </ul>
463
+ <h1>Support</h1>
464
+ <ul>
465
+ <li><p>
466
+ Visit the forums, bug list, and mailing list pages at <a
467
+ href="http://rubyforge.org/projects/midilib">rubyforge.org/projects/midilib</a>
468
+ </p>
469
+ </li>
470
+ <li><p>
471
+ Send email to Jim Menard at <a href="mailto:jimm@io.com">jimm@io.com</a>
472
+ </p>
473
+ </li>
474
+ <li><p>
475
+ Ask on the ruby-talk mailing list
476
+ </p>
477
+ </li>
478
+ </ul>
479
+ <h1>Administrivia</h1>
480
+ <table>
481
+ <tr><td valign="top">Author</td><td><p>
482
+ Jim Menard (<a href="mailto:jimm@io.com">jimm@io.com</a>)
483
+ </p>
484
+ </td></tr>
485
+ <tr><td valign="top">Copyright</td><td><p>
486
+ Copyright &#169; 2003-2010 Jim Menard
487
+ </p>
488
+ </td></tr>
489
+ <tr><td valign="top">License</td><td><p>
490
+ Distributed under the same license as Ruby.
491
+ </p>
492
+ </td></tr>
493
+ </table>
494
+ <h2>Copying</h2>
495
+ <p>
496
+ midilib is copyrighted free software by Jim Menard and is released under
497
+ the same license as Ruby. See the Ruby license at <a
498
+ href="http://www.ruby-lang.org/en/LICENSE.txt.">www.ruby-lang.org/en/LICENSE.txt.</a>
499
+ </p>
500
+ <p>
501
+ midilib may be freely copied in its entirety providing this notice, all
502
+ source code, all documentation, and all other files are included.
503
+ </p>
504
+ <p>
505
+ midilib is Copyright &#169; 2003-2010 by Jim Menard.
506
+ </p>
507
+ <p>
508
+ The song &#8220;No Fences&#8221; contained in the <a
509
+ href="MIDI.html">MIDI</a> file examples/NoFences.mid is Copyright &#169;
510
+ 1992 by Jim Menard (jimm@io.com). It may be freely used for non-commercial
511
+ purposes as long as the author is given credit.
512
+ </p>
513
+ <h3>Recent Changes</h3>
514
+ <h4>Changes for 2.0.0:</h4>
515
+ <p>
516
+ <a href="MIDI/NoteOn.html">MIDI::NoteOnEvent</a> and <a
517
+ href="MIDI/NoteOff.html">MIDI::NoteOffEvent</a> renamed to <a
518
+ href="MIDI/NoteOn.html">MIDI::NoteOn</a> and <a
519
+ href="MIDI/NoteOff.html">MIDI::NoteOff</a>. The old names will still work
520
+ for a while.
521
+ </p>
522
+ <p>
523
+ The <a href="MIDI/Event.html">MIDI::Event</a> boolean methods like meta?
524
+ and note? have been removed. Use the event classes themselves (for example,
525
+ <a href="MIDI/MetaEvent.html">MIDI::MetaEvent</a> === my_event or
526
+ my_event.kind_of?(<a href="MIDI/MetaEvent.html">MIDI::MetaEvent</a>)). Case
527
+ statements that use classes work, too:
528
+ </p>
529
+ <pre>
530
+ case my_event
531
+ when MIDI::NoteOn
532
+ do_this()
533
+ when MIDI::NoteOff
534
+ do_that()
535
+ end
536
+ </pre>
537
+ <p>
538
+ Introduced Adam Murray&#8217;s stable sorting code for <a
539
+ href="MIDI/Track.html#method-i-recalc_delta_from_times">MIDI::Track#recalc_delta_from_times</a>.
540
+ See <a
541
+ href="http://wiki.github.com/adamjmurray/cosy/midilib-notes">wiki.github.com/adamjmurray/cosy/midilib-notes</a>
542
+ and <a
543
+ href="http://github.com/adamjmurray/cosy/blob/master/lib/cosy/helper/midi_file_renderer_helper.rb">github.com/adamjmurray/cosy/blob/master/lib/cosy/helper/midi_file_renderer_helper.rb</a>
544
+ for details.
545
+ </p>
546
+ <p>
547
+ Aliased <a href="MIDI/Track.html#method-i-sort">MIDI::Track#sort</a> to <a
548
+ href="MIDI/Track.html#method-i-recalc_delta_from_times">MIDI::Track#recalc_delta_from_times</a>,
549
+ since all sort did was sort the events then call recalc_delta_from_times,
550
+ and recalc_delta_from_times sorts the events before doing anything else.
551
+ </p>
552
+ <p>
553
+ MIDI::Tempo#mpq_to_bpm now returns a float.
554
+ </p>
555
+ <h4>Changes for 1.2.0:</h4>
556
+ <p>
557
+ Use byte arrays instead of strings for passing around data. All tests now
558
+ pass for both Ruby 1.8.X and 1.9.X.
559
+ </p>
560
+ <h4>New code repository</h4>
561
+ <p>
562
+ The midilib code is now hosted at Github (<a
563
+ href="http://github.com/jimm/midilib">github.com/jimm/midilib</a>).
564
+ </p>
565
+ <h4>Changes for 1.1.4:</h4>
566
+ <ul>
567
+ <li><p>
568
+ Fixed a bug in KeySig.data_as_bytes. Thanks to Noah Thorp for finding this
569
+ and the bug fixed in 1.1.3.
570
+ </p>
571
+ </li>
572
+ </ul>
573
+ <h4>Changes for 1.1.3:</h4>
574
+ <ul>
575
+ <li><p>
576
+ Fixed the way midilib detects the behavior of IO.getc.
577
+ </p>
578
+ </li>
579
+ </ul>
580
+ <h4>Changes for 1.1.2:</h4>
581
+ <ul>
582
+ <li><p>
583
+ Define <a
584
+ href="MIDI/IO/MIDIFile.html#method-i-getc">MIDI::IO::MIDIFile.getc</a>
585
+ differently for different Ruby versions, instead of checking for
586
+ String.bytes every time we read a byte.
587
+ </p>
588
+ </li>
589
+ </ul>
590
+ <h4>Changes for 1.1.1:</h4>
591
+ <ul>
592
+ <li><p>
593
+ Make <a
594
+ href="MIDI/IO/MIDIFile.html#method-i-getc">MIDI::IO::MIDIFile.getc</a> do
595
+ the right thing for both Ruby 1.8 and 1.9.
596
+ </p>
597
+ </li>
598
+ </ul>
599
+ <h4>Changes for 1.1.0:</h4>
600
+ <ul>
601
+ <li><p>
602
+ Added test/test.mid to list of files to be included when packaging midifile
603
+ for distribution.
604
+ </p>
605
+ </li>
606
+ </ul>
607
+ <h4>Changes for 1.0.0:</h4>
608
+ <ul>
609
+ <li><p>
610
+ Fixed the bug in Track#recalc_delta_from_times found by Christopher Rose.
611
+ </p>
612
+ </li>
613
+ </ul>
614
+ <h4>Changes for 0.8.7:</h4>
615
+ <ul>
616
+ <li><p>
617
+ Fixed the misspelled POLY_PRESSURE constant, thanks to Mario Pehle.
618
+ </p>
619
+ </li>
620
+ </ul>
621
+ <h4>Changes for 0.8.6:</h4>
622
+ <ul>
623
+ <li><p>
624
+ Added missing test/test.mid.
625
+ </p>
626
+ </li>
627
+ </ul>
628
+ <h4>Changes for 0.8.5:</h4>
629
+ <ul>
630
+ <li><p>
631
+ Fixed bugs in <a href="MIDI/PitchBend.html">MIDI::PitchBend</a> reading and
632
+ writing, thanks to Emanuel Borsboom.
633
+ </p>
634
+ </li>
635
+ <li><p>
636
+ Fixed a bug in <a
637
+ href="MIDI/Track.html#method-i-quantize">MIDI::Track#quantize</a>.
638
+ </p>
639
+ </li>
640
+ <li><p>
641
+ The argument to <a
642
+ href="MIDI/Track.html#method-i-quantize">MIDI::Track#quantize</a> has
643
+ changed: it is now either a note name (&#8220;sixteenth&#8221;,
644
+ &#8220;32nd&#8221;, &#8220;8th triplet&#8221;) or a length (1 = quarter,
645
+ 0.25 = sixteenth). This is a drastic change that will break all previous
646
+ calls to quantize. However, since that method was broken already, I
647
+ don&#8217;t feel it&#8217;s a burden to anybody to change the arguments.
648
+ </p>
649
+ </li>
650
+ </ul>
651
+ <h4>Changes for 0.8.4:</h4>
652
+ <ul>
653
+ <li><p>
654
+ Realtime status bytes now set @is_realtime to true and return true when
655
+ realtime? is called.
656
+ </p>
657
+ </li>
658
+ <li><p>
659
+ All system common events now set @is_system to true and return true when
660
+ system? is called, not just system exclusive events.
661
+ </p>
662
+ </li>
663
+ <li><p>
664
+ Added examples/from_scratch.rb, which shows how to create a sequence
665
+ manually.
666
+ </p>
667
+ </li>
668
+ <li><p>
669
+ New <a href="MIDI/Sequence.html">MIDI::Sequence</a> methods that turn note
670
+ length names like &#8220;32nd&#8221;, &#8220;dotted quarter&#8221;, and
671
+ &#8220;16th triplet&#8221; into delta times. See the docs below and
672
+ MIDI::Sequence::length_to_delta, MIDI::Sequence::note_to_length, and
673
+ MIDI::Sequence::note_to_delta.
674
+ </p>
675
+ </li>
676
+ </ul>
677
+ <h4>Changes for 0.8.3:</h4>
678
+ <ul>
679
+ <li><p>
680
+ Added <a
681
+ href="MIDI/NoteEvent.html#method-i-note_to_s">MIDI::NoteEvent.note_to_s</a>,
682
+ which returns note name as a string like &#8220;C4&#8221; or
683
+ &#8220;F#6&#8221;.
684
+ </p>
685
+ </li>
686
+ <li><p>
687
+ Added new boolean attributes to MIDI::Event: @print_decimal_numbers and
688
+ @print_note_names. These are used by all Event to_s methods. See
689
+ examples/seq2text.rb for an example.
690
+ </p>
691
+ </li>
692
+ </ul>
693
+ <h4>Changes for 0.8.2:</h4>
694
+ <ul>
695
+ <li><p>
696
+ Changed MIDI::MetaEvent.type to MIDI::MetaEvent.event_type to avoid runtime
697
+ complaints about Object#type calls.
698
+ </p>
699
+ </li>
700
+ <li><p>
701
+ Added &#8216;b&#8217; binary flag to file open modes for Windows.
702
+ </p>
703
+ </li>
704
+ <li><p>
705
+ Fixed $LOAD_PATH in example files.
706
+ </p>
707
+ </li>
708
+ <li><p>
709
+ Fixed read and write block arguments.
710
+ </p>
711
+ </li>
712
+ <li><p>
713
+ Fixed other example script bugs.
714
+ </p>
715
+ </li>
716
+ </ul>
717
+ <h4>Changes for 0.8.1:</h4>
718
+ <ul>
719
+ <li><p>
720
+ Fixed track sorting.
721
+ </p>
722
+ </li>
723
+ <li><p>
724
+ Fixed track&#8217;s recalc_delta_from_times method.
725
+ </p>
726
+ </li>
727
+ <li><p>
728
+ Fixed event quantization.
729
+ </p>
730
+ </li>
731
+ <li><p>
732
+ More tests and documentation.
733
+ </p>
734
+ </li>
735
+ </ul>
736
+ <h2>Warranty</h2>
737
+ <p>
738
+ This software is provided &#8220;as is&#8221; and without any express or
739
+ implied warranties, including, without limitation, the implied warranties
740
+ of merchantability and fitness for a particular purpose.
741
+ </p>
742
+
743
+ </div>
744
+
745
+
746
+
747
+
748
+ <h2>Files</h2>
749
+ <ul>
750
+
751
+ <li class="file"><a href="README_rdoc.html">README.rdoc</a></li>
752
+
753
+ <li class="file"><a href="TODO_rdoc.html">TODO.rdoc</a></li>
754
+
755
+ </ul>
756
+
757
+
758
+ <h2 id="classes">Classes/Modules</h2>
759
+ <ul>
760
+
761
+ <li class="module"><a href="MIDI.html">MIDI</a></li>
762
+
763
+ <li class="class"><a href="MIDI/ActiveSense.html">MIDI::ActiveSense</a></li>
764
+
765
+ <li class="class"><a href="MIDI/ChannelEvent.html">MIDI::ChannelEvent</a></li>
766
+
767
+ <li class="class"><a href="MIDI/ChannelPressure.html">MIDI::ChannelPressure</a></li>
768
+
769
+ <li class="class"><a href="MIDI/Clock.html">MIDI::Clock</a></li>
770
+
771
+ <li class="class"><a href="MIDI/Continue.html">MIDI::Continue</a></li>
772
+
773
+ <li class="class"><a href="MIDI/Controller.html">MIDI::Controller</a></li>
774
+
775
+ <li class="class"><a href="MIDI/Event.html">MIDI::Event</a></li>
776
+
777
+ <li class="module"><a href="MIDI/IO.html">MIDI::IO</a></li>
778
+
779
+ <li class="class"><a href="MIDI/IO/MIDIFile.html">MIDI::IO::MIDIFile</a></li>
780
+
781
+ <li class="class"><a href="MIDI/IO/SeqReader.html">MIDI::IO::SeqReader</a></li>
782
+
783
+ <li class="class"><a href="MIDI/IO/SeqWriter.html">MIDI::IO::SeqWriter</a></li>
784
+
785
+ <li class="class"><a href="MIDI/KeySig.html">MIDI::KeySig</a></li>
786
+
787
+ <li class="class"><a href="MIDI/Marker.html">MIDI::Marker</a></li>
788
+
789
+ <li class="class"><a href="MIDI/Measure.html">MIDI::Measure</a></li>
790
+
791
+ <li class="class"><a href="MIDI/Measures.html">MIDI::Measures</a></li>
792
+
793
+ <li class="class"><a href="MIDI/MetaEvent.html">MIDI::MetaEvent</a></li>
794
+
795
+ <li class="class"><a href="MIDI/NoteEvent.html">MIDI::NoteEvent</a></li>
796
+
797
+ <li class="class"><a href="MIDI/NoteOff.html">MIDI::NoteOff</a></li>
798
+
799
+ <li class="class"><a href="MIDI/NoteOff.html">MIDI::NoteOff</a></li>
800
+
801
+ <li class="class"><a href="MIDI/NoteOn.html">MIDI::NoteOn</a></li>
802
+
803
+ <li class="class"><a href="MIDI/NoteOn.html">MIDI::NoteOn</a></li>
804
+
805
+ <li class="class"><a href="MIDI/PitchBend.html">MIDI::PitchBend</a></li>
806
+
807
+ <li class="class"><a href="MIDI/PolyPressure.html">MIDI::PolyPressure</a></li>
808
+
809
+ <li class="class"><a href="MIDI/ProgramChange.html">MIDI::ProgramChange</a></li>
810
+
811
+ <li class="class"><a href="MIDI/Realtime.html">MIDI::Realtime</a></li>
812
+
813
+ <li class="class"><a href="MIDI/Sequence.html">MIDI::Sequence</a></li>
814
+
815
+ <li class="class"><a href="MIDI/SongPointer.html">MIDI::SongPointer</a></li>
816
+
817
+ <li class="class"><a href="MIDI/SongSelect.html">MIDI::SongSelect</a></li>
818
+
819
+ <li class="class"><a href="MIDI/Start.html">MIDI::Start</a></li>
820
+
821
+ <li class="class"><a href="MIDI/Stop.html">MIDI::Stop</a></li>
822
+
823
+ <li class="class"><a href="MIDI/SystemCommon.html">MIDI::SystemCommon</a></li>
824
+
825
+ <li class="class"><a href="MIDI/SystemExclusive.html">MIDI::SystemExclusive</a></li>
826
+
827
+ <li class="class"><a href="MIDI/SystemReset.html">MIDI::SystemReset</a></li>
828
+
829
+ <li class="class"><a href="MIDI/Tempo.html">MIDI::Tempo</a></li>
830
+
831
+ <li class="class"><a href="MIDI/TimeSig.html">MIDI::TimeSig</a></li>
832
+
833
+ <li class="class"><a href="MIDI/Track.html">MIDI::Track</a></li>
834
+
835
+ <li class="class"><a href="MIDI/TuneRequest.html">MIDI::TuneRequest</a></li>
836
+
837
+ <li class="class"><a href="MIDI/Utils.html">MIDI::Utils</a></li>
838
+
839
+ <li class="class"><a href="Array.html">Array</a></li>
840
+
841
+ <li class="class"><a href="IO.html">IO</a></li>
842
+
843
+ </ul>
844
+
845
+ <h2 id="methods">Methods</h2>
846
+ <ul>
847
+
848
+ <li><a href="MIDI/Utils.html#method-c-as_var_len">::as_var_len &mdash; MIDI::Utils</a></li>
849
+
850
+ <li><a href="MIDI/Tempo.html#method-c-bpm_to_mpq">::bpm_to_mpq &mdash; MIDI::Tempo</a></li>
851
+
852
+ <li><a href="MIDI/MetaEvent.html#method-c-bytes_as_str">::bytes_as_str &mdash; MIDI::MetaEvent</a></li>
853
+
854
+ <li><a href="MIDI/Tempo.html#method-c-mpq_to_bpm">::mpq_to_bpm &mdash; MIDI::Tempo</a></li>
855
+
856
+ <li><a href="MIDI/NoteOff.html#method-c-new">::new &mdash; MIDI::NoteOff</a></li>
857
+
858
+ <li><a href="MIDI/IO/SeqWriter.html#method-c-new">::new &mdash; MIDI::IO::SeqWriter</a></li>
859
+
860
+ <li><a href="MIDI/IO/SeqReader.html#method-c-new">::new &mdash; MIDI::IO::SeqReader</a></li>
861
+
862
+ <li><a href="MIDI/ChannelEvent.html#method-c-new">::new &mdash; MIDI::ChannelEvent</a></li>
863
+
864
+ <li><a href="MIDI/SongPointer.html#method-c-new">::new &mdash; MIDI::SongPointer</a></li>
865
+
866
+ <li><a href="MIDI/NoteEvent.html#method-c-new">::new &mdash; MIDI::NoteEvent</a></li>
867
+
868
+ <li><a href="MIDI/IO/MIDIFile.html#method-c-new">::new &mdash; MIDI::IO::MIDIFile</a></li>
869
+
870
+ <li><a href="MIDI/KeySig.html#method-c-new">::new &mdash; MIDI::KeySig</a></li>
871
+
872
+ <li><a href="MIDI/TimeSig.html#method-c-new">::new &mdash; MIDI::TimeSig</a></li>
873
+
874
+ <li><a href="MIDI/NoteOn.html#method-c-new">::new &mdash; MIDI::NoteOn</a></li>
875
+
876
+ <li><a href="MIDI/Tempo.html#method-c-new">::new &mdash; MIDI::Tempo</a></li>
877
+
878
+ <li><a href="MIDI/NoteOn.html#method-c-new">::new &mdash; MIDI::NoteOn</a></li>
879
+
880
+ <li><a href="MIDI/Measures.html#method-c-new">::new &mdash; MIDI::Measures</a></li>
881
+
882
+ <li><a href="MIDI/NoteOff.html#method-c-new">::new &mdash; MIDI::NoteOff</a></li>
883
+
884
+ <li><a href="MIDI/Sequence.html#method-c-new">::new &mdash; MIDI::Sequence</a></li>
885
+
886
+ <li><a href="MIDI/Measure.html#method-c-new">::new &mdash; MIDI::Measure</a></li>
887
+
888
+ <li><a href="MIDI/Marker.html#method-c-new">::new &mdash; MIDI::Marker</a></li>
889
+
890
+ <li><a href="MIDI/PolyPressure.html#method-c-new">::new &mdash; MIDI::PolyPressure</a></li>
891
+
892
+ <li><a href="MIDI/MetaEvent.html#method-c-new">::new &mdash; MIDI::MetaEvent</a></li>
893
+
894
+ <li><a href="MIDI/Track.html#method-c-new">::new &mdash; MIDI::Track</a></li>
895
+
896
+ <li><a href="MIDI/SystemReset.html#method-c-new">::new &mdash; MIDI::SystemReset</a></li>
897
+
898
+ <li><a href="MIDI/Controller.html#method-c-new">::new &mdash; MIDI::Controller</a></li>
899
+
900
+ <li><a href="MIDI/ActiveSense.html#method-c-new">::new &mdash; MIDI::ActiveSense</a></li>
901
+
902
+ <li><a href="MIDI/Stop.html#method-c-new">::new &mdash; MIDI::Stop</a></li>
903
+
904
+ <li><a href="MIDI/ProgramChange.html#method-c-new">::new &mdash; MIDI::ProgramChange</a></li>
905
+
906
+ <li><a href="MIDI/Continue.html#method-c-new">::new &mdash; MIDI::Continue</a></li>
907
+
908
+ <li><a href="MIDI/Start.html#method-c-new">::new &mdash; MIDI::Start</a></li>
909
+
910
+ <li><a href="MIDI/ChannelPressure.html#method-c-new">::new &mdash; MIDI::ChannelPressure</a></li>
911
+
912
+ <li><a href="MIDI/Clock.html#method-c-new">::new &mdash; MIDI::Clock</a></li>
913
+
914
+ <li><a href="MIDI/Realtime.html#method-c-new">::new &mdash; MIDI::Realtime</a></li>
915
+
916
+ <li><a href="MIDI/PitchBend.html#method-c-new">::new &mdash; MIDI::PitchBend</a></li>
917
+
918
+ <li><a href="MIDI/TuneRequest.html#method-c-new">::new &mdash; MIDI::TuneRequest</a></li>
919
+
920
+ <li><a href="MIDI/SongSelect.html#method-c-new">::new &mdash; MIDI::SongSelect</a></li>
921
+
922
+ <li><a href="MIDI/SystemCommon.html#method-c-new">::new &mdash; MIDI::SystemCommon</a></li>
923
+
924
+ <li><a href="MIDI/SystemExclusive.html#method-c-new">::new &mdash; MIDI::SystemExclusive</a></li>
925
+
926
+ <li><a href="MIDI/Event.html#method-c-new">::new &mdash; MIDI::Event</a></li>
927
+
928
+ <li><a href="MIDI/Utils.html#method-c-note_to_s">::note_to_s &mdash; MIDI::Utils</a></li>
929
+
930
+ <li><a href="MIDI/MetaEvent.html#method-c-str_as_bytes">::str_as_bytes &mdash; MIDI::MetaEvent</a></li>
931
+
932
+ <li><a href="MIDI/MetaEvent.html#method-c-str_as_bytes">::str_as_bytes &mdash; MIDI::MetaEvent</a></li>
933
+
934
+ <li><a href="MIDI/Event.html#method-i-%3C%3D%3E">#<=> &mdash; MIDI::Event</a></li>
935
+
936
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-arbitrary">#arbitrary &mdash; MIDI::IO::MIDIFile</a></li>
937
+
938
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-bad_byte">#bad_byte &mdash; MIDI::IO::MIDIFile</a></li>
939
+
940
+ <li><a href="MIDI/Sequence.html#method-i-beats_per_minute">#beats_per_minute &mdash; MIDI::Sequence</a></li>
941
+
942
+ <li><a href="MIDI/Sequence.html#method-i-bpm">#bpm &mdash; MIDI::Sequence</a></li>
943
+
944
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-chan_message">#chan_message &mdash; MIDI::IO::MIDIFile</a></li>
945
+
946
+ <li><a href="MIDI/IO/SeqReader.html#method-i-chan_pressure">#chan_pressure &mdash; MIDI::IO::SeqReader</a></li>
947
+
948
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-chan_pressure">#chan_pressure &mdash; MIDI::IO::MIDIFile</a></li>
949
+
950
+ <li><a href="MIDI/Event.html#method-i-channel_to_s">#channel_to_s &mdash; MIDI::Event</a></li>
951
+
952
+ <li><a href="MIDI/Measure.html#method-i-contains_event%3F">#contains_event? &mdash; MIDI::Measure</a></li>
953
+
954
+ <li><a href="MIDI/IO/SeqReader.html#method-i-controller">#controller &mdash; MIDI::IO::SeqReader</a></li>
955
+
956
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-controller">#controller &mdash; MIDI::IO::MIDIFile</a></li>
957
+
958
+ <li><a href="MIDI/MetaEvent.html#method-i-data%3D">#data= &mdash; MIDI::MetaEvent</a></li>
959
+
960
+ <li><a href="MIDI/PitchBend.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::PitchBend</a></li>
961
+
962
+ <li><a href="MIDI/ProgramChange.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::ProgramChange</a></li>
963
+
964
+ <li><a href="MIDI/Realtime.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::Realtime</a></li>
965
+
966
+ <li><a href="MIDI/TuneRequest.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::TuneRequest</a></li>
967
+
968
+ <li><a href="MIDI/Event.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::Event</a></li>
969
+
970
+ <li><a href="MIDI/Controller.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::Controller</a></li>
971
+
972
+ <li><a href="MIDI/ChannelPressure.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::ChannelPressure</a></li>
973
+
974
+ <li><a href="MIDI/SystemExclusive.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::SystemExclusive</a></li>
975
+
976
+ <li><a href="MIDI/Tempo.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::Tempo</a></li>
977
+
978
+ <li><a href="MIDI/KeySig.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::KeySig</a></li>
979
+
980
+ <li><a href="MIDI/SongSelect.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::SongSelect</a></li>
981
+
982
+ <li><a href="MIDI/SongPointer.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::SongPointer</a></li>
983
+
984
+ <li><a href="MIDI/NoteEvent.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::NoteEvent</a></li>
985
+
986
+ <li><a href="MIDI/MetaEvent.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::MetaEvent</a></li>
987
+
988
+ <li><a href="MIDI/TimeSig.html#method-i-data_as_bytes">#data_as_bytes &mdash; MIDI::TimeSig</a></li>
989
+
990
+ <li><a href="MIDI/MetaEvent.html#method-i-data_as_str">#data_as_str &mdash; MIDI::MetaEvent</a></li>
991
+
992
+ <li><a href="MIDI/TimeSig.html#method-i-denominator">#denominator &mdash; MIDI::TimeSig</a></li>
993
+
994
+ <li><a href="MIDI/Track.html#method-i-each">#each &mdash; MIDI::Track</a></li>
995
+
996
+ <li><a href="MIDI/Sequence.html#method-i-each">#each &mdash; MIDI::Sequence</a></li>
997
+
998
+ <li><a href="MIDI/IO/SeqReader.html#method-i-end_track">#end_track &mdash; MIDI::IO::SeqReader</a></li>
999
+
1000
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-end_track">#end_track &mdash; MIDI::IO::MIDIFile</a></li>
1001
+
1002
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-eot">#eot &mdash; MIDI::IO::MIDIFile</a></li>
1003
+
1004
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-error">#error &mdash; MIDI::IO::MIDIFile</a></li>
1005
+
1006
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-get_bytes">#get_bytes &mdash; MIDI::IO::MIDIFile</a></li>
1007
+
1008
+ <li><a href="MIDI/Sequence.html#method-i-get_measures">#get_measures &mdash; MIDI::Sequence</a></li>
1009
+
1010
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-getc">#getc &mdash; MIDI::IO::MIDIFile</a></li>
1011
+
1012
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-handle_arbitrary">#handle_arbitrary &mdash; MIDI::IO::MIDIFile</a></li>
1013
+
1014
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-handle_sysex">#handle_sysex &mdash; MIDI::IO::MIDIFile</a></li>
1015
+
1016
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-header">#header &mdash; MIDI::IO::MIDIFile</a></li>
1017
+
1018
+ <li><a href="MIDI/IO/SeqReader.html#method-i-header">#header &mdash; MIDI::IO::SeqReader</a></li>
1019
+
1020
+ <li><a href="MIDI/Track.html#method-i-instrument">#instrument &mdash; MIDI::Track</a></li>
1021
+
1022
+ <li><a href="MIDI/Track.html#method-i-instrument%3D">#instrument= &mdash; MIDI::Track</a></li>
1023
+
1024
+ <li><a href="MIDI/IO/SeqReader.html#method-i-key_signature">#key_signature &mdash; MIDI::IO::SeqReader</a></li>
1025
+
1026
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-key_signature">#key_signature &mdash; MIDI::IO::MIDIFile</a></li>
1027
+
1028
+ <li><a href="MIDI/Sequence.html#method-i-length_to_delta">#length_to_delta &mdash; MIDI::Sequence</a></li>
1029
+
1030
+ <li><a href="MIDI/KeySig.html#method-i-major_key%3F">#major_key? &mdash; MIDI::KeySig</a></li>
1031
+
1032
+ <li><a href="MIDI/IO/SeqReader.html#method-i-make_note_off">#make_note_off &mdash; MIDI::IO::SeqReader</a></li>
1033
+
1034
+ <li><a href="MIDI/TimeSig.html#method-i-measure_duration">#measure_duration &mdash; MIDI::TimeSig</a></li>
1035
+
1036
+ <li><a href="MIDI/Measures.html#method-i-measure_for_event">#measure_for_event &mdash; MIDI::Measures</a></li>
1037
+
1038
+ <li><a href="MIDI/Track.html#method-i-merge">#merge &mdash; MIDI::Track</a></li>
1039
+
1040
+ <li><a href="Array.html#method-i-merge">#merge &mdash; Array</a></li>
1041
+
1042
+ <li><a href="MIDI/Track.html#method-i-merge_event_lists">#merge_event_lists &mdash; MIDI::Track</a></li>
1043
+
1044
+ <li><a href="Array.html#method-i-mergesort">#mergesort &mdash; Array</a></li>
1045
+
1046
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-meta_event">#meta_event &mdash; MIDI::IO::MIDIFile</a></li>
1047
+
1048
+ <li><a href="MIDI/IO/SeqReader.html#method-i-meta_misc">#meta_misc &mdash; MIDI::IO::SeqReader</a></li>
1049
+
1050
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-meta_misc">#meta_misc &mdash; MIDI::IO::MIDIFile</a></li>
1051
+
1052
+ <li><a href="MIDI/TimeSig.html#method-i-metronome_ticks">#metronome_ticks &mdash; MIDI::TimeSig</a></li>
1053
+
1054
+ <li><a href="MIDI/KeySig.html#method-i-minor_key%3F">#minor_key? &mdash; MIDI::KeySig</a></li>
1055
+
1056
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-msg">#msg &mdash; MIDI::IO::MIDIFile</a></li>
1057
+
1058
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-msg_add">#msg_add &mdash; MIDI::IO::MIDIFile</a></li>
1059
+
1060
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-msg_init">#msg_init &mdash; MIDI::IO::MIDIFile</a></li>
1061
+
1062
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-msg_read">#msg_read &mdash; MIDI::IO::MIDIFile</a></li>
1063
+
1064
+ <li><a href="MIDI/Sequence.html#method-i-name">#name &mdash; MIDI::Sequence</a></li>
1065
+
1066
+ <li><a href="MIDI/Track.html#method-i-name">#name &mdash; MIDI::Track</a></li>
1067
+
1068
+ <li><a href="MIDI/Track.html#method-i-name%3D">#name= &mdash; MIDI::Track</a></li>
1069
+
1070
+ <li><a href="MIDI/Sequence.html#method-i-name%3D">#name= &mdash; MIDI::Sequence</a></li>
1071
+
1072
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-note_off">#note_off &mdash; MIDI::IO::MIDIFile</a></li>
1073
+
1074
+ <li><a href="MIDI/IO/SeqReader.html#method-i-note_off">#note_off &mdash; MIDI::IO::SeqReader</a></li>
1075
+
1076
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-note_on">#note_on &mdash; MIDI::IO::MIDIFile</a></li>
1077
+
1078
+ <li><a href="MIDI/IO/SeqReader.html#method-i-note_on">#note_on &mdash; MIDI::IO::SeqReader</a></li>
1079
+
1080
+ <li><a href="MIDI/Sequence.html#method-i-note_to_delta">#note_to_delta &mdash; MIDI::Sequence</a></li>
1081
+
1082
+ <li><a href="MIDI/Sequence.html#method-i-note_to_length">#note_to_length &mdash; MIDI::Sequence</a></li>
1083
+
1084
+ <li><a href="MIDI/NoteEvent.html#method-i-note_to_s">#note_to_s &mdash; MIDI::NoteEvent</a></li>
1085
+
1086
+ <li><a href="MIDI/Event.html#method-i-number_to_s">#number_to_s &mdash; MIDI::Event</a></li>
1087
+
1088
+ <li><a href="MIDI/TimeSig.html#method-i-numerator">#numerator &mdash; MIDI::TimeSig</a></li>
1089
+
1090
+ <li><a href="MIDI/NoteEvent.html#method-i-pch_oct">#pch_oct &mdash; MIDI::NoteEvent</a></li>
1091
+
1092
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-pitch_bend">#pitch_bend &mdash; MIDI::IO::MIDIFile</a></li>
1093
+
1094
+ <li><a href="MIDI/IO/SeqReader.html#method-i-pitch_bend">#pitch_bend &mdash; MIDI::IO::SeqReader</a></li>
1095
+
1096
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-possibly_munge_due_to_running_status_byte">#possibly_munge_due_to_running_status_byte &mdash; MIDI::IO::SeqWriter</a></li>
1097
+
1098
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-pressure">#pressure &mdash; MIDI::IO::MIDIFile</a></li>
1099
+
1100
+ <li><a href="MIDI/IO/SeqReader.html#method-i-pressure">#pressure &mdash; MIDI::IO::SeqReader</a></li>
1101
+
1102
+ <li><a href="MIDI/PolyPressure.html#method-i-pressure">#pressure &mdash; MIDI::PolyPressure</a></li>
1103
+
1104
+ <li><a href="MIDI/PolyPressure.html#method-i-pressure%3D">#pressure= &mdash; MIDI::PolyPressure</a></li>
1105
+
1106
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-program">#program &mdash; MIDI::IO::MIDIFile</a></li>
1107
+
1108
+ <li><a href="MIDI/IO/SeqReader.html#method-i-program">#program &mdash; MIDI::IO::SeqReader</a></li>
1109
+
1110
+ <li><a href="MIDI/Track.html#method-i-quantize">#quantize &mdash; MIDI::Track</a></li>
1111
+
1112
+ <li><a href="MIDI/Event.html#method-i-quantize_to">#quantize_to &mdash; MIDI::Event</a></li>
1113
+
1114
+ <li><a href="MIDI/Sequence.html#method-i-read">#read &mdash; MIDI::Sequence</a></li>
1115
+
1116
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-read16">#read16 &mdash; MIDI::IO::MIDIFile</a></li>
1117
+
1118
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-read32">#read32 &mdash; MIDI::IO::MIDIFile</a></li>
1119
+
1120
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-read_from">#read_from &mdash; MIDI::IO::MIDIFile</a></li>
1121
+
1122
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-read_header">#read_header &mdash; MIDI::IO::MIDIFile</a></li>
1123
+
1124
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-read_mt_header_string">#read_mt_header_string &mdash; MIDI::IO::MIDIFile</a></li>
1125
+
1126
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-read_track">#read_track &mdash; MIDI::IO::MIDIFile</a></li>
1127
+
1128
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-read_var_len">#read_var_len &mdash; MIDI::IO::MIDIFile</a></li>
1129
+
1130
+ <li><a href="IO.html#method-i-readbyte">#readbyte &mdash; IO</a></li>
1131
+
1132
+ <li><a href="MIDI/Track.html#method-i-recalc_delta_from_times">#recalc_delta_from_times &mdash; MIDI::Track</a></li>
1133
+
1134
+ <li><a href="MIDI/Track.html#method-i-recalc_times">#recalc_times &mdash; MIDI::Track</a></li>
1135
+
1136
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-sequence_number">#sequence_number &mdash; MIDI::IO::MIDIFile</a></li>
1137
+
1138
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-sequencer_specific">#sequencer_specific &mdash; MIDI::IO::MIDIFile</a></li>
1139
+
1140
+ <li><a href="MIDI/KeySig.html#method-i-sharpflat">#sharpflat &mdash; MIDI::KeySig</a></li>
1141
+
1142
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-smpte">#smpte &mdash; MIDI::IO::MIDIFile</a></li>
1143
+
1144
+ <li><a href="MIDI/Track.html#method-i-sort">#sort &mdash; MIDI::Track</a></li>
1145
+
1146
+ <li><a href="Array.html#method-i-split">#split &mdash; Array</a></li>
1147
+
1148
+ <li><a href="MIDI/IO/SeqReader.html#method-i-start_track">#start_track &mdash; MIDI::IO::SeqReader</a></li>
1149
+
1150
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-start_track">#start_track &mdash; MIDI::IO::MIDIFile</a></li>
1151
+
1152
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-sysex">#sysex &mdash; MIDI::IO::MIDIFile</a></li>
1153
+
1154
+ <li><a href="MIDI/IO/SeqReader.html#method-i-sysex">#sysex &mdash; MIDI::IO::SeqReader</a></li>
1155
+
1156
+ <li><a href="MIDI/Tempo.html#method-i-tempo">#tempo &mdash; MIDI::Tempo</a></li>
1157
+
1158
+ <li><a href="MIDI/IO/SeqReader.html#method-i-tempo">#tempo &mdash; MIDI::IO::SeqReader</a></li>
1159
+
1160
+ <li><a href="MIDI/Sequence.html#method-i-tempo">#tempo &mdash; MIDI::Sequence</a></li>
1161
+
1162
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-tempo">#tempo &mdash; MIDI::IO::MIDIFile</a></li>
1163
+
1164
+ <li><a href="MIDI/Tempo.html#method-i-tempo%3D">#tempo= &mdash; MIDI::Tempo</a></li>
1165
+
1166
+ <li><a href="MIDI/IO/SeqReader.html#method-i-text">#text &mdash; MIDI::IO::SeqReader</a></li>
1167
+
1168
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-text">#text &mdash; MIDI::IO::MIDIFile</a></li>
1169
+
1170
+ <li><a href="MIDI/IO/SeqReader.html#method-i-time_signature">#time_signature &mdash; MIDI::IO::SeqReader</a></li>
1171
+
1172
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-time_signature">#time_signature &mdash; MIDI::IO::MIDIFile</a></li>
1173
+
1174
+ <li><a href="MIDI/Sequence.html#method-i-time_signature">#time_signature &mdash; MIDI::Sequence</a></li>
1175
+
1176
+ <li><a href="MIDI/Measures.html#method-i-to_mbt">#to_mbt &mdash; MIDI::Measures</a></li>
1177
+
1178
+ <li><a href="MIDI/ChannelPressure.html#method-i-to_s">#to_s &mdash; MIDI::ChannelPressure</a></li>
1179
+
1180
+ <li><a href="MIDI/Clock.html#method-i-to_s">#to_s &mdash; MIDI::Clock</a></li>
1181
+
1182
+ <li><a href="MIDI/ProgramChange.html#method-i-to_s">#to_s &mdash; MIDI::ProgramChange</a></li>
1183
+
1184
+ <li><a href="MIDI/Realtime.html#method-i-to_s">#to_s &mdash; MIDI::Realtime</a></li>
1185
+
1186
+ <li><a href="MIDI/Measure.html#method-i-to_s">#to_s &mdash; MIDI::Measure</a></li>
1187
+
1188
+ <li><a href="MIDI/KeySig.html#method-i-to_s">#to_s &mdash; MIDI::KeySig</a></li>
1189
+
1190
+ <li><a href="MIDI/TuneRequest.html#method-i-to_s">#to_s &mdash; MIDI::TuneRequest</a></li>
1191
+
1192
+ <li><a href="MIDI/TimeSig.html#method-i-to_s">#to_s &mdash; MIDI::TimeSig</a></li>
1193
+
1194
+ <li><a href="MIDI/SongSelect.html#method-i-to_s">#to_s &mdash; MIDI::SongSelect</a></li>
1195
+
1196
+ <li><a href="MIDI/Tempo.html#method-i-to_s">#to_s &mdash; MIDI::Tempo</a></li>
1197
+
1198
+ <li><a href="MIDI/ChannelEvent.html#method-i-to_s">#to_s &mdash; MIDI::ChannelEvent</a></li>
1199
+
1200
+ <li><a href="MIDI/PitchBend.html#method-i-to_s">#to_s &mdash; MIDI::PitchBend</a></li>
1201
+
1202
+ <li><a href="MIDI/Continue.html#method-i-to_s">#to_s &mdash; MIDI::Continue</a></li>
1203
+
1204
+ <li><a href="MIDI/SongPointer.html#method-i-to_s">#to_s &mdash; MIDI::SongPointer</a></li>
1205
+
1206
+ <li><a href="MIDI/NoteOn.html#method-i-to_s">#to_s &mdash; MIDI::NoteOn</a></li>
1207
+
1208
+ <li><a href="MIDI/NoteOn.html#method-i-to_s">#to_s &mdash; MIDI::NoteOn</a></li>
1209
+
1210
+ <li><a href="MIDI/NoteOff.html#method-i-to_s">#to_s &mdash; MIDI::NoteOff</a></li>
1211
+
1212
+ <li><a href="MIDI/NoteOff.html#method-i-to_s">#to_s &mdash; MIDI::NoteOff</a></li>
1213
+
1214
+ <li><a href="MIDI/MetaEvent.html#method-i-to_s">#to_s &mdash; MIDI::MetaEvent</a></li>
1215
+
1216
+ <li><a href="MIDI/SystemReset.html#method-i-to_s">#to_s &mdash; MIDI::SystemReset</a></li>
1217
+
1218
+ <li><a href="MIDI/Start.html#method-i-to_s">#to_s &mdash; MIDI::Start</a></li>
1219
+
1220
+ <li><a href="MIDI/PolyPressure.html#method-i-to_s">#to_s &mdash; MIDI::PolyPressure</a></li>
1221
+
1222
+ <li><a href="MIDI/ActiveSense.html#method-i-to_s">#to_s &mdash; MIDI::ActiveSense</a></li>
1223
+
1224
+ <li><a href="MIDI/Stop.html#method-i-to_s">#to_s &mdash; MIDI::Stop</a></li>
1225
+
1226
+ <li><a href="MIDI/Event.html#method-i-to_s">#to_s &mdash; MIDI::Event</a></li>
1227
+
1228
+ <li><a href="MIDI/Controller.html#method-i-to_s">#to_s &mdash; MIDI::Controller</a></li>
1229
+
1230
+ <li><a href="MIDI/SystemExclusive.html#method-i-to_s">#to_s &mdash; MIDI::SystemExclusive</a></li>
1231
+
1232
+ <li><a href="MIDI/IO/SeqReader.html#method-i-track_uses_channel">#track_uses_channel &mdash; MIDI::IO::SeqReader</a></li>
1233
+
1234
+ <li><a href="MIDI/Sequence.html#method-i-write">#write &mdash; MIDI::Sequence</a></li>
1235
+
1236
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-write16">#write16 &mdash; MIDI::IO::MIDIFile</a></li>
1237
+
1238
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-write16">#write16 &mdash; MIDI::IO::SeqWriter</a></li>
1239
+
1240
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-write32">#write32 &mdash; MIDI::IO::SeqWriter</a></li>
1241
+
1242
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-write32">#write32 &mdash; MIDI::IO::MIDIFile</a></li>
1243
+
1244
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-write_bytes">#write_bytes &mdash; MIDI::IO::SeqWriter</a></li>
1245
+
1246
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-write_header">#write_header &mdash; MIDI::IO::SeqWriter</a></li>
1247
+
1248
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-write_instrument">#write_instrument &mdash; MIDI::IO::SeqWriter</a></li>
1249
+
1250
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-write_to">#write_to &mdash; MIDI::IO::SeqWriter</a></li>
1251
+
1252
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-write_track">#write_track &mdash; MIDI::IO::SeqWriter</a></li>
1253
+
1254
+ <li><a href="MIDI/IO/SeqWriter.html#method-i-write_var_len">#write_var_len &mdash; MIDI::IO::SeqWriter</a></li>
1255
+
1256
+ <li><a href="MIDI/IO/MIDIFile.html#method-i-write_var_len">#write_var_len &mdash; MIDI::IO::MIDIFile</a></li>
1257
+
1258
+ </ul>
1259
+
1260
+ <div id="validator-badges">
1261
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
1262
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
1263
+ Rdoc Generator</a> 1.1.6</small>.</p>
1264
+ </div>
1265
+ </body>
1266
+ </html>