midilib 1.2.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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>