midilib 2.0.4 → 2.0.5
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.
- checksums.yaml +7 -0
 - data/README.rdoc +9 -4
 - data/Rakefile +2 -6
 - data/examples/from_scratch.rb +3 -5
 - data/examples/measures_mbt.rb +4 -4
 - data/examples/print_program_changes.rb +9 -9
 - data/examples/reader2text.rb +188 -188
 - data/examples/seq2text.rb +17 -17
 - data/examples/split.rb +19 -19
 - data/examples/strings.rb +14 -14
 - data/examples/transpose.rb +31 -31
 - data/html/IO.html +65 -169
 - data/html/MIDI.html +138 -256
 - data/html/MIDI/ActiveSense.html +89 -178
 - data/html/MIDI/ChannelEvent.html +95 -183
 - data/html/MIDI/ChannelPressure.html +105 -190
 - data/html/MIDI/Clock.html +89 -178
 - data/html/MIDI/Continue.html +89 -178
 - data/html/MIDI/Controller.html +107 -192
 - data/html/MIDI/Event.html +138 -222
 - data/html/MIDI/IO.html +45 -157
 - data/html/MIDI/IO/MIDIFile.html +596 -568
 - data/html/MIDI/IO/SeqReader.html +272 -314
 - data/html/MIDI/IO/SeqWriter.html +229 -305
 - data/html/MIDI/KeySig.html +129 -211
 - data/html/MIDI/MIDI.html +45 -154
 - data/html/MIDI/MIDI/MIDI.html +45 -154
 - data/html/MIDI/MIDI/MIDI/Array.html +87 -185
 - data/html/MIDI/Marker.html +71 -170
 - data/html/MIDI/Measure.html +95 -190
 - data/html/MIDI/Measures.html +103 -193
 - data/html/MIDI/MetaEvent.html +180 -253
 - data/html/MIDI/NoteEvent.html +118 -204
 - data/html/MIDI/NoteOff.html +95 -183
 - data/html/MIDI/NoteOn.html +95 -183
 - data/html/MIDI/PitchBend.html +106 -191
 - data/html/MIDI/PolyPressure.html +106 -189
 - data/html/MIDI/ProgramChange.html +105 -190
 - data/html/MIDI/Realtime.html +98 -184
 - data/html/MIDI/Sequence.html +246 -311
 - data/html/MIDI/SongPointer.html +106 -191
 - data/html/MIDI/SongSelect.html +105 -190
 - data/html/MIDI/Start.html +89 -178
 - data/html/MIDI/Stop.html +89 -178
 - data/html/MIDI/SystemCommon.html +71 -170
 - data/html/MIDI/SystemExclusive.html +108 -193
 - data/html/MIDI/SystemReset.html +89 -178
 - data/html/MIDI/Tempo.html +135 -213
 - data/html/MIDI/TimeSig.html +135 -214
 - data/html/MIDI/Track.html +217 -291
 - data/html/MIDI/TuneRequest.html +98 -184
 - data/html/MIDI/Utils.html +89 -189
 - data/html/README_rdoc.html +237 -257
 - data/html/TODO_rdoc.html +64 -139
 - data/html/created.rid +14 -14
 - data/html/css/fonts.css +167 -0
 - data/html/{rdoc.css → css/rdoc.css} +265 -218
 - data/html/fonts/Lato-Light.ttf +0 -0
 - data/html/fonts/Lato-LightItalic.ttf +0 -0
 - data/html/fonts/Lato-Regular.ttf +0 -0
 - data/html/fonts/Lato-RegularItalic.ttf +0 -0
 - data/html/fonts/SourceCodePro-Bold.ttf +0 -0
 - data/html/fonts/SourceCodePro-Regular.ttf +0 -0
 - data/html/images/add.png +0 -0
 - data/html/images/arrow_up.png +0 -0
 - data/html/images/delete.png +0 -0
 - data/html/images/tag_blue.png +0 -0
 - data/html/index.html +187 -169
 - data/html/js/darkfish.js +41 -33
 - data/html/js/jquery.js +4 -18
 - data/html/js/navigation.js.gz +0 -0
 - data/html/js/search.js +20 -5
 - data/html/js/search_index.js +1 -1
 - data/html/js/search_index.js.gz +0 -0
 - data/html/js/searcher.js.gz +0 -0
 - data/html/table_of_contents.html +1111 -498
 - data/install.rb +43 -32
 - data/lib/midilib/consts.rb +407 -407
 - data/lib/midilib/event.rb +295 -294
 - data/lib/midilib/info.rb +5 -5
 - data/lib/midilib/io/midifile.rb +266 -267
 - data/lib/midilib/io/seqreader.rb +106 -106
 - data/lib/midilib/io/seqwriter.rb +59 -60
 - data/lib/midilib/measure.rb +69 -69
 - data/lib/midilib/sequence.rb +68 -70
 - data/lib/midilib/track.rb +96 -102
 - data/lib/midilib/utils.rb +15 -15
 - data/test/event_equality.rb +50 -50
 - data/test/test_event.rb +120 -122
 - data/test/test_io.rb +35 -48
 - data/test/test_sequence.rb +60 -60
 - data/test/test_track.rb +154 -154
 - data/test/test_varlen.rb +23 -25
 - metadata +65 -57
 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
    
        data/html/images/add.png
    CHANGED
    
    | 
         
            File without changes
         
     | 
| 
         Binary file 
     | 
    
        data/html/images/delete.png
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        data/html/images/tag_blue.png
    CHANGED
    
    | 
         
            File without changes
         
     | 
    
        data/html/index.html
    CHANGED
    
    | 
         @@ -2,65 +2,75 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            <html>
         
     | 
| 
       4 
4 
     | 
    
         
             
            <head>
         
     | 
| 
       5 
     | 
    
         
            -
            <meta  
     | 
| 
      
 5 
     | 
    
         
            +
            <meta charset="UTF-8">
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            <title>midilib</title>
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            <link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet">
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
9 
     | 
    
         
             
            <script type="text/javascript">
         
     | 
| 
       12 
10 
     | 
    
         
             
              var rdoc_rel_prefix = "./";
         
     | 
| 
       13 
11 
     | 
    
         
             
            </script>
         
     | 
| 
       14 
12 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
            <script  
     | 
| 
       16 
     | 
    
         
            -
            <script  
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
            < 
     | 
| 
       19 
     | 
    
         
            -
            < 
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 13 
     | 
    
         
            +
            <script src="./js/jquery.js"></script>
         
     | 
| 
      
 14 
     | 
    
         
            +
            <script src="./js/darkfish.js"></script>
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            <link href="./css/fonts.css" rel="stylesheet">
         
     | 
| 
      
 17 
     | 
    
         
            +
            <link href="./css/rdoc.css" rel="stylesheet">
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
       21 
20 
     | 
    
         | 
| 
      
 21 
     | 
    
         
            +
            <body id="top" role="document" class="file">
         
     | 
| 
      
 22 
     | 
    
         
            +
            <nav role="navigation">
         
     | 
| 
      
 23 
     | 
    
         
            +
              <div id="project-navigation">
         
     | 
| 
      
 24 
     | 
    
         
            +
                <div id="home-section" role="region" title="Quick navigation" class="nav-section">
         
     | 
| 
      
 25 
     | 
    
         
            +
              <h2>
         
     | 
| 
      
 26 
     | 
    
         
            +
                <a href="./index.html" rel="home">Home</a>
         
     | 
| 
      
 27 
     | 
    
         
            +
              </h2>
         
     | 
| 
       22 
28 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
            < 
     | 
| 
       24 
     | 
    
         
            -
            < 
     | 
| 
       25 
     | 
    
         
            -
              <nav id="home-section" class="section">
         
     | 
| 
       26 
     | 
    
         
            -
              <h3 class="section-header">
         
     | 
| 
       27 
     | 
    
         
            -
                <a href="./index.html">Home</a>
         
     | 
| 
      
 29 
     | 
    
         
            +
              <div id="table-of-contents-navigation">
         
     | 
| 
      
 30 
     | 
    
         
            +
                <a href="./table_of_contents.html#pages">Pages</a>
         
     | 
| 
       28 
31 
     | 
    
         
             
                <a href="./table_of_contents.html#classes">Classes</a>
         
     | 
| 
       29 
32 
     | 
    
         
             
                <a href="./table_of_contents.html#methods">Methods</a>
         
     | 
| 
       30 
     | 
    
         
            -
              </ 
     | 
| 
       31 
     | 
    
         
            -
            </ 
     | 
| 
      
 33 
     | 
    
         
            +
              </div>
         
     | 
| 
      
 34 
     | 
    
         
            +
            </div>
         
     | 
| 
       32 
35 
     | 
    
         | 
| 
       33 
36 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
             
     | 
| 
      
 37 
     | 
    
         
            +
                <div id="search-section" role="search" class="project-section initially-hidden">
         
     | 
| 
       35 
38 
     | 
    
         
             
              <form action="#" method="get" accept-charset="utf-8">
         
     | 
| 
       36 
     | 
    
         
            -
                < 
     | 
| 
       37 
     | 
    
         
            -
                  <input  
     | 
| 
      
 39 
     | 
    
         
            +
                <div id="search-field-wrapper">
         
     | 
| 
      
 40 
     | 
    
         
            +
                  <input id="search-field" role="combobox" aria-label="Search"
         
     | 
| 
      
 41 
     | 
    
         
            +
                         aria-autocomplete="list" aria-controls="search-results"
         
     | 
| 
      
 42 
     | 
    
         
            +
                         type="text" name="search" placeholder="Search" spellcheck="false"
         
     | 
| 
       38 
43 
     | 
    
         
             
                         title="Type to search, Up and Down to navigate, Enter to load">
         
     | 
| 
       39 
     | 
    
         
            -
                </ 
     | 
| 
       40 
     | 
    
         
            -
              </form>
         
     | 
| 
      
 44 
     | 
    
         
            +
                </div>
         
     | 
| 
       41 
45 
     | 
    
         | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
      
 46 
     | 
    
         
            +
                <ul id="search-results" aria-label="Search Results"
         
     | 
| 
      
 47 
     | 
    
         
            +
                    aria-busy="false" aria-expanded="false"
         
     | 
| 
      
 48 
     | 
    
         
            +
                    aria-atomic="false" class="initially-hidden"></ul>
         
     | 
| 
      
 49 
     | 
    
         
            +
              </form>
         
     | 
| 
      
 50 
     | 
    
         
            +
            </div>
         
     | 
| 
       44 
51 
     | 
    
         | 
| 
      
 52 
     | 
    
         
            +
              </div>
         
     | 
| 
       45 
53 
     | 
    
         | 
| 
       46 
54 
     | 
    
         
             
              <div id="project-metadata">
         
     | 
| 
       47 
     | 
    
         
            -
                < 
     | 
| 
       48 
     | 
    
         
            -
              <h3 
     | 
| 
      
 55 
     | 
    
         
            +
                <div id="fileindex-section" class="nav-section">
         
     | 
| 
      
 56 
     | 
    
         
            +
              <h3>Pages</h3>
         
     | 
| 
       49 
57 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
              <ul>
         
     | 
| 
      
 58 
     | 
    
         
            +
              <ul class="link-list">
         
     | 
| 
       51 
59 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                <li 
     | 
| 
      
 60 
     | 
    
         
            +
                <li><a href="./README_rdoc.html">README</a>
         
     | 
| 
       53 
61 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                <li 
     | 
| 
      
 62 
     | 
    
         
            +
                <li><a href="./TODO_rdoc.html">TODO</a>
         
     | 
| 
       55 
63 
     | 
    
         | 
| 
       56 
64 
     | 
    
         
             
              </ul>
         
     | 
| 
       57 
     | 
    
         
            -
            </ 
     | 
| 
      
 65 
     | 
    
         
            +
            </div>
         
     | 
| 
       58 
66 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                < 
     | 
| 
       60 
     | 
    
         
            -
              <h3 
     | 
| 
      
 67 
     | 
    
         
            +
                <div id="classindex-section" class="nav-section">
         
     | 
| 
      
 68 
     | 
    
         
            +
              <h3>Class and Module Index</h3>
         
     | 
| 
       61 
69 
     | 
    
         | 
| 
       62 
70 
     | 
    
         
             
              <ul class="link-list">
         
     | 
| 
       63 
71 
     | 
    
         | 
| 
      
 72 
     | 
    
         
            +
                <li><a href="./IO.html">IO</a>
         
     | 
| 
      
 73 
     | 
    
         
            +
              
         
     | 
| 
       64 
74 
     | 
    
         
             
                <li><a href="./MIDI.html">MIDI</a>
         
     | 
| 
       65 
75 
     | 
    
         | 
| 
       66 
76 
     | 
    
         
             
                <li><a href="./MIDI/ActiveSense.html">MIDI::ActiveSense</a>
         
     | 
| 
         @@ -145,17 +155,16 @@ 
     | 
|
| 
       145 
155 
     | 
    
         | 
| 
       146 
156 
     | 
    
         
             
                <li><a href="./MIDI/Utils.html">MIDI::Utils</a>
         
     | 
| 
       147 
157 
     | 
    
         | 
| 
       148 
     | 
    
         
            -
                <li><a href="./IO.html">IO</a>
         
     | 
| 
       149 
     | 
    
         
            -
              
         
     | 
| 
       150 
158 
     | 
    
         
             
              </ul>
         
     | 
| 
       151 
     | 
    
         
            -
            </ 
     | 
| 
      
 159 
     | 
    
         
            +
            </div>
         
     | 
| 
       152 
160 
     | 
    
         | 
| 
       153 
161 
     | 
    
         
             
              </div>
         
     | 
| 
       154 
162 
     | 
    
         
             
            </nav>
         
     | 
| 
       155 
163 
     | 
    
         | 
| 
       156 
     | 
    
         
            -
            < 
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
      
 164 
     | 
    
         
            +
            <main role="main">
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
            <h1 id="label-midilib">midilib<span><a href="#label-midilib">¶</a> <a href="#top">↑</a></span></h1>
         
     | 
| 
       159 
168 
     | 
    
         | 
| 
       160 
169 
     | 
    
         
             
            <p>midilib is a pure Ruby <a href="MIDI.html">MIDI</a> library useful for
         
     | 
| 
       161 
170 
     | 
    
         
             
            reading and writing standard <a href="MIDI.html">MIDI</a> files and
         
     | 
| 
         @@ -167,9 +176,9 @@ RubyGems.org page is <a 
     | 
|
| 
       167 
176 
     | 
    
         
             
            href="http://rubygems.org/gems/midilib">rubygems.org/gems/midilib</a>,
         
     | 
| 
       168 
177 
     | 
    
         
             
            where you can also find all the RDoc documentation.</p>
         
     | 
| 
       169 
178 
     | 
    
         | 
| 
       170 
     | 
    
         
            -
            <p>midilib is compatible with  
     | 
| 
      
 179 
     | 
    
         
            +
            <p>midilib is compatible with Ruby 1.8.x 1.9.x, and 2.x.</p>
         
     | 
| 
       171 
180 
     | 
    
         | 
| 
       172 
     | 
    
         
            -
            <h2 id="label-Dependencies">Dependencies 
     | 
| 
      
 181 
     | 
    
         
            +
            <h2 id="label-Dependencies">Dependencies<span><a href="#label-Dependencies">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       173 
182 
     | 
    
         | 
| 
       174 
183 
     | 
    
         
             
            <p>midilib does not require any other packages. The test suite in the tests
         
     | 
| 
       175 
184 
     | 
    
         
             
            directory requires the testing framework TestUnit, which comes with Ruby
         
     | 
| 
         @@ -180,9 +189,9 @@ href="http://raa.ruby-lang.org">raa.ruby-lang.org</a>).</p> 
     | 
|
| 
       180 
189 
     | 
    
         
             
            Rakefile which requires Rake (<a
         
     | 
| 
       181 
190 
     | 
    
         
             
            href="http://rake.rubyforge.org">rake.rubyforge.org</a>).</p>
         
     | 
| 
       182 
191 
     | 
    
         | 
| 
       183 
     | 
    
         
            -
            <h2 id="label-Installation">Installation 
     | 
| 
      
 192 
     | 
    
         
            +
            <h2 id="label-Installation">Installation<span><a href="#label-Installation">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       184 
193 
     | 
    
         | 
| 
       185 
     | 
    
         
            -
            <h3 id="label-RubyGems+Installation">RubyGems Installation 
     | 
| 
      
 194 
     | 
    
         
            +
            <h3 id="label-RubyGems+Installation">RubyGems Installation<span><a href="#label-RubyGems+Installation">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       186 
195 
     | 
    
         | 
| 
       187 
196 
     | 
    
         
             
            <p>To install midilib as a gem, type</p>
         
     | 
| 
       188 
197 
     | 
    
         | 
| 
         @@ -194,7 +203,7 @@ href="http://rake.rubyforge.org">rake.rubyforge.org</a>).</p> 
     | 
|
| 
       194 
203 
     | 
    
         | 
| 
       195 
204 
     | 
    
         
             
            <p>You may need root privileges to install or update the gem.</p>
         
     | 
| 
       196 
205 
     | 
    
         | 
| 
       197 
     | 
    
         
            -
            <h3 id="label-Manual+Installation">Manual Installation 
     | 
| 
      
 206 
     | 
    
         
            +
            <h3 id="label-Manual+Installation">Manual Installation<span><a href="#label-Manual+Installation">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       198 
207 
     | 
    
         | 
| 
       199 
208 
     | 
    
         
             
            <p>After downloading and expanding the archive, you can install midilib with
         
     | 
| 
       200 
209 
     | 
    
         
             
            the command</p>
         
     | 
| 
         @@ -207,49 +216,49 @@ the command</p> 
     | 
|
| 
       207 
216 
     | 
    
         | 
| 
       208 
217 
     | 
    
         
             
            <p>You may need root privileges to install.</p>
         
     | 
| 
       209 
218 
     | 
    
         | 
| 
       210 
     | 
    
         
            -
            <h2 id="label-Testing">Testing 
     | 
| 
      
 219 
     | 
    
         
            +
            <h2 id="label-Testing">Testing<span><a href="#label-Testing">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       211 
220 
     | 
    
         | 
| 
       212 
221 
     | 
    
         
             
            <pre>% rake test</pre>
         
     | 
| 
       213 
222 
     | 
    
         | 
| 
       214 
223 
     | 
    
         
             
            <p>runs all of the tests in the test directory.</p>
         
     | 
| 
       215 
224 
     | 
    
         | 
| 
       216 
     | 
    
         
            -
            <h2 id="label-Overview">Overview 
     | 
| 
      
 225 
     | 
    
         
            +
            <h2 id="label-Overview">Overview<span><a href="#label-Overview">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       217 
226 
     | 
    
         | 
| 
       218 
227 
     | 
    
         
             
            <p>The midilib <a href="MIDI.html">MIDI</a> file reader only understands <a
         
     | 
| 
       219 
228 
     | 
    
         
             
            href="MIDI.html">MIDI</a> file format 1, where a sequence is made up of
         
     | 
| 
       220 
     | 
    
         
            -
            multiple tracks. It doesn 
     | 
| 
      
 229 
     | 
    
         
            +
            multiple tracks. It doesn't yet understand format 0 (a single track
         
     | 
| 
       221 
230 
     | 
    
         
             
            containing all events) or format 2 (a collection of format 0 files in one
         
     | 
| 
       222 
231 
     | 
    
         
             
            file).</p>
         
     | 
| 
       223 
232 
     | 
    
         | 
| 
       224 
     | 
    
         
            -
            < 
     | 
| 
      
 233 
     | 
    
         
            +
            <h3 id="label-MIDI-3A-3ASequence"><a href="MIDI/Sequence.html">MIDI::Sequence</a><span><a href="#label-MIDI-3A-3ASequence">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       225 
234 
     | 
    
         | 
| 
       226 
235 
     | 
    
         
             
            <p>A sequence contains a collection of tracks and global information like the
         
     | 
| 
       227 
     | 
    
         
            -
            sequence 
     | 
| 
      
 236 
     | 
    
         
            +
            sequence's pulses per quarter note (ppqn) and time signature.</p>
         
     | 
| 
       228 
237 
     | 
    
         | 
| 
       229 
238 
     | 
    
         
             
            <p>The first track in a sequence is special; it holds meta-events like tempo
         
     | 
| 
       230 
     | 
    
         
            -
            and sequence name. Don 
     | 
| 
      
 239 
     | 
    
         
            +
            and sequence name. Don't put any notes in this track.</p>
         
     | 
| 
       231 
240 
     | 
    
         | 
| 
       232 
241 
     | 
    
         
             
            <p><a href="MIDI/Sequence.html">MIDI::Sequence</a> also contains some
         
     | 
| 
       233 
     | 
    
         
            -
            convenience methods that let you set and retrieve the sequence 
     | 
| 
       234 
     | 
    
         
            -
            time signature, and to retrieve the first tempo event 
     | 
| 
       235 
     | 
    
         
            -
            value.</p>
         
     | 
| 
      
 242 
     | 
    
         
            +
            convenience methods that let you set and retrieve the sequence's name,
         
     | 
| 
      
 243 
     | 
    
         
            +
            the time signature, and to retrieve the first tempo event's
         
     | 
| 
      
 244 
     | 
    
         
            +
            beats-per-minute value.</p>
         
     | 
| 
       236 
245 
     | 
    
         | 
| 
       237 
246 
     | 
    
         
             
            <p>Normally instances of <a
         
     | 
| 
       238 
247 
     | 
    
         
             
            href="MIDI/IO/SeqReader.html">MIDI::IO::SeqReader</a> and <a
         
     | 
| 
       239 
248 
     | 
    
         
             
            href="MIDI/IO/SeqWriter.html">MIDI::IO::SeqWriter</a> are used when a
         
     | 
| 
       240 
249 
     | 
    
         
             
            sequence reads itself from or writes itself to a <a
         
     | 
| 
       241 
     | 
    
         
            -
            href="MIDI.html">MIDI</a> file. You can change that by setting a 
     | 
| 
       242 
     | 
    
         
            -
            reader_class or writer_class attributes. Instances of the 
     | 
| 
       243 
     | 
    
         
            -
            in those attributes are created and used whenever the 
     | 
| 
       244 
     | 
    
         
            -
            writes itself.</p>
         
     | 
| 
      
 250 
     | 
    
         
            +
            href="MIDI.html">MIDI</a> file. You can change that by setting a
         
     | 
| 
      
 251 
     | 
    
         
            +
            sequence's reader_class or writer_class attributes. Instances of the
         
     | 
| 
      
 252 
     | 
    
         
            +
            classes contained in those attributes are created and used whenever the
         
     | 
| 
      
 253 
     | 
    
         
            +
            sequence reads or writes itself.</p>
         
     | 
| 
       245 
254 
     | 
    
         | 
| 
       246 
     | 
    
         
            -
            <h3 id="label-MIDI 
     | 
| 
      
 255 
     | 
    
         
            +
            <h3 id="label-MIDI-3A-3ATrack"><a href="MIDI/Track.html">MIDI::Track</a><span><a href="#label-MIDI-3A-3ATrack">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       247 
256 
     | 
    
         | 
| 
       248 
257 
     | 
    
         
             
            <p>A track contains an array of events.</p>
         
     | 
| 
       249 
258 
     | 
    
         | 
| 
       250 
259 
     | 
    
         
             
            <p>When you modify the <code>events</code> array, make sure to call
         
     | 
| 
       251 
260 
     | 
    
         
             
            recalc_times so each event gets its <code>time_from_start</code>
         
     | 
| 
       252 
     | 
    
         
            -
            recalculated. You don 
     | 
| 
      
 261 
     | 
    
         
            +
            recalculated. You don't have to do that after every event you add; just
         
     | 
| 
       253 
262 
     | 
    
         
             
            remember to do so before using the track in a way that expects the list of
         
     | 
| 
       254 
263 
     | 
    
         
             
            events to be ordered correctly.</p>
         
     | 
| 
       255 
264 
     | 
    
         | 
| 
         @@ -259,13 +268,13 @@ href="MIDI.html">MIDI</a> file by a SeqReader but is <em>not</em> kept up 
     | 
|
| 
       259 
268 
     | 
    
         
             
            to date by any other methods. Specifically, if you add events to a track at
         
     | 
| 
       260 
269 
     | 
    
         
             
            any other time, the bit mask will not be updated.</p>
         
     | 
| 
       261 
270 
     | 
    
         | 
| 
       262 
     | 
    
         
            -
            <h3 id="label-MIDI 
     | 
| 
      
 271 
     | 
    
         
            +
            <h3 id="label-MIDI-3A-3AMeasure"><a href="MIDI/Measure.html">MIDI::Measure</a><span><a href="#label-MIDI-3A-3AMeasure">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       263 
272 
     | 
    
         | 
| 
       264 
273 
     | 
    
         
             
            <p>This class contains information about a measure from the sequence. Measure
         
     | 
| 
       265 
274 
     | 
    
         
             
            data is based on the time signature information from the sequence and is
         
     | 
| 
       266 
275 
     | 
    
         
             
            not stored in the sequence itself.</p>
         
     | 
| 
       267 
276 
     | 
    
         | 
| 
       268 
     | 
    
         
            -
            <h3 id="label-MIDI 
     | 
| 
      
 277 
     | 
    
         
            +
            <h3 id="label-MIDI-3A-3AMeasures"><a href="MIDI/Measures.html">MIDI::Measures</a><span><a href="#label-MIDI-3A-3AMeasures">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       269 
278 
     | 
    
         | 
| 
       270 
279 
     | 
    
         
             
            <p>The class <a href="MIDI/Sequence.html">MIDI::Sequence</a> method
         
     | 
| 
       271 
280 
     | 
    
         
             
            get_measures returns a <a href="MIDI/Measures.html">MIDI::Measures</a>
         
     | 
| 
         @@ -277,16 +286,16 @@ remade when events are deleted/added in the sequence.</p> 
     | 
|
| 
       277 
286 
     | 
    
         | 
| 
       278 
287 
     | 
    
         
             
            <p><a href="MIDI/Measure.html">MIDI::Measure</a> and <a
         
     | 
| 
       279 
288 
     | 
    
         
             
            href="MIDI/Measures.html">MIDI::Measures</a> are brought to us by Jari
         
     | 
| 
       280 
     | 
    
         
            -
            Williamsson < 
     | 
| 
      
 289 
     | 
    
         
            +
            Williamsson <jari.williamsson@mailbox.swipnet.se>, who also
         
     | 
| 
       281 
290 
     | 
    
         
             
            contributed some improvements to the <a
         
     | 
| 
       282 
291 
     | 
    
         
             
            href="MIDI/Event.html">MIDI::Event</a> and <a
         
     | 
| 
       283 
292 
     | 
    
         
             
            href="MIDI/Track.html">MIDI::Track</a> classes.</p>
         
     | 
| 
       284 
293 
     | 
    
         | 
| 
       285 
     | 
    
         
            -
            <h3 id="label-MIDI 
     | 
| 
      
 294 
     | 
    
         
            +
            <h3 id="label-MIDI-3A-3AEvent"><a href="MIDI/Event.html">MIDI::Event</a><span><a href="#label-MIDI-3A-3AEvent">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       286 
295 
     | 
    
         | 
| 
       287 
296 
     | 
    
         
             
            <p>Each event holds not only its delta time but also its time from the start
         
     | 
| 
       288 
     | 
    
         
            -
            of the track. The track is responsible for recalculating its events 
     | 
| 
       289 
     | 
    
         
            -
            times. You can call <a
         
     | 
| 
      
 297 
     | 
    
         
            +
            of the track. The track is responsible for recalculating its events'
         
     | 
| 
      
 298 
     | 
    
         
            +
            start times. You can call <a
         
     | 
| 
       290 
299 
     | 
    
         
             
            href="MIDI/Track.html#method-i-recalc_times">MIDI::Track#recalc_times</a>
         
     | 
| 
       291 
300 
     | 
    
         
             
            to do so.</p>
         
     | 
| 
       292 
301 
     | 
    
         | 
| 
         @@ -295,30 +304,31 @@ various <a href="MIDI.html">MIDI</a> messages such as note on and off, 
     | 
|
| 
       295 
304 
     | 
    
         
             
            controller values, system exclusive data, and realtime bytes.</p>
         
     | 
| 
       296 
305 
     | 
    
         | 
| 
       297 
306 
     | 
    
         
             
            <p><a href="MIDI/Realtime.html">MIDI::Realtime</a> events have delta values
         
     | 
| 
       298 
     | 
    
         
            -
            and start times, just like all the other midilib event types do. ( 
     | 
| 
       299 
     | 
    
         
            -
             
     | 
| 
       300 
     | 
    
         
            -
             
     | 
| 
       301 
     | 
    
         
            -
             
     | 
| 
       302 
     | 
    
         
            -
             
     | 
| 
       303 
     | 
    
         
            -
            href="MIDI 
     | 
| 
       304 
     | 
    
         
            -
             
     | 
| 
      
 307 
     | 
    
         
            +
            and start times, just like all the other midilib event types do. (MIDI real
         
     | 
| 
      
 308 
     | 
    
         
            +
            time status bytes don't have delta times, but this way we can record
         
     | 
| 
      
 309 
     | 
    
         
            +
            when in a track the realtime byte was received and should be sent. This is
         
     | 
| 
      
 310 
     | 
    
         
            +
            useful for start/continue/stop events that control other devices, for
         
     | 
| 
      
 311 
     | 
    
         
            +
            example.) Note that when a <a href="MIDI/Realtime.html">MIDI::Realtime</a>
         
     | 
| 
      
 312 
     | 
    
         
            +
            event is written out to a <a href="MIDI.html">MIDI</a> file, the delta time
         
     | 
| 
      
 313 
     | 
    
         
            +
            is not written.</p>
         
     | 
| 
       305 
314 
     | 
    
         | 
| 
       306 
315 
     | 
    
         
             
            <p><a href="MIDI/MetaEvent.html">MIDI::MetaEvent</a> events hold an array of
         
     | 
| 
       307 
     | 
    
         
            -
            bytes named  
     | 
| 
       308 
     | 
    
         
            -
            marker, etc.) Though the  
     | 
| 
       309 
     | 
    
         
            -
            href="MIDI/MetaEvent.html">MIDI::MetaEvent</a> helps with saving 
     | 
| 
       310 
     | 
    
         
            -
            accessing string. The <a
         
     | 
| 
      
 316 
     | 
    
         
            +
            bytes named 'data'. Many meta events are string holders (text,
         
     | 
| 
      
 317 
     | 
    
         
            +
            lyric, marker, etc.) Though the 'data' value is always an array of
         
     | 
| 
      
 318 
     | 
    
         
            +
            bytes, <a href="MIDI/MetaEvent.html">MIDI::MetaEvent</a> helps with saving
         
     | 
| 
      
 319 
     | 
    
         
            +
            and accessing string. The <a
         
     | 
| 
       311 
320 
     | 
    
         
             
            href="MIDI/MetaEvent.html#method-i-data_as_str">MIDI::MetaEvent#data_as_str</a>
         
     | 
| 
       312 
     | 
    
         
            -
            method returns the data bytes as a string. When assigning to a meta 
     | 
| 
       313 
     | 
    
         
            -
            data, if you pass in a string it will get converted to an array 
     | 
| 
      
 321 
     | 
    
         
            +
            method returns the data bytes as a string. When assigning to a meta
         
     | 
| 
      
 322 
     | 
    
         
            +
            event's data, if you pass in a string it will get converted to an array
         
     | 
| 
      
 323 
     | 
    
         
            +
            of bytes.</p>
         
     | 
| 
       314 
324 
     | 
    
         | 
| 
       315 
     | 
    
         
            -
            <h2 id="label-How+To+Use">How To Use 
     | 
| 
      
 325 
     | 
    
         
            +
            <h2 id="label-How+To+Use">How To Use<span><a href="#label-How+To+Use">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       316 
326 
     | 
    
         | 
| 
       317 
327 
     | 
    
         
             
            <p>The following examples show you how to use midilib to read, write, and
         
     | 
| 
       318 
328 
     | 
    
         
             
            manipulate <a href="MIDI.html">MIDI</a> files and modify track events. See
         
     | 
| 
       319 
329 
     | 
    
         
             
            also the files in the examples directory, which are described below.</p>
         
     | 
| 
       320 
330 
     | 
    
         | 
| 
       321 
     | 
    
         
            -
            <h3 id="label-Reading+a+MIDI+File">Reading a <a href="MIDI.html">MIDI</a> File 
     | 
| 
      
 331 
     | 
    
         
            +
            <h3 id="label-Reading+a+MIDI+File">Reading a <a href="MIDI.html">MIDI</a> File<span><a href="#label-Reading+a+MIDI+File">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       322 
332 
     | 
    
         | 
| 
       323 
333 
     | 
    
         
             
            <p>To read a <a href="MIDI.html">MIDI</a> file, create a <a
         
     | 
| 
       324 
334 
     | 
    
         
             
            href="MIDI/Sequence.html">MIDI::Sequence</a> object and call its read
         
     | 
| 
         @@ -330,13 +340,13 @@ track object, the total number of tracks and the number of the current 
     | 
|
| 
       330 
340 
     | 
    
         
             
            track that has just been read. This is useful for notifying the user of
         
     | 
| 
       331 
341 
     | 
    
         
             
            progress, for example by updating a GUI progress bar.</p>
         
     | 
| 
       332 
342 
     | 
    
         | 
| 
       333 
     | 
    
         
            -
            <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string" 
     | 
| 
      
 343 
     | 
    
         
            +
            <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'midilib/io/seqreader'</span>
         
     | 
| 
       334 
344 
     | 
    
         | 
| 
       335 
345 
     | 
    
         
             
            <span class="ruby-comment"># Create a new, empty sequence.</span>
         
     | 
| 
       336 
346 
     | 
    
         
             
            <span class="ruby-identifier">seq</span> = <span class="ruby-constant">MIDI</span><span class="ruby-operator">::</span><span class="ruby-constant">Sequence</span>.<span class="ruby-identifier">new</span>()
         
     | 
| 
       337 
347 
     | 
    
         | 
| 
       338 
348 
     | 
    
         
             
            <span class="ruby-comment"># Read the contents of a MIDI file into the sequence.</span>
         
     | 
| 
       339 
     | 
    
         
            -
            <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string" 
     | 
| 
      
 349 
     | 
    
         
            +
            <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">'my_midi_file.mid'</span>, <span class="ruby-string">'rb'</span>) { <span class="ruby-operator">|</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">|</span>
         
     | 
| 
       340 
350 
     | 
    
         
             
                <span class="ruby-identifier">seq</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">file</span>) { <span class="ruby-operator">|</span> <span class="ruby-identifier">track</span>, <span class="ruby-identifier">num_tracks</span>, <span class="ruby-identifier">i</span> <span class="ruby-operator">|</span>
         
     | 
| 
       341 
351 
     | 
    
         
             
                    <span class="ruby-comment"># Print something when each track is read.</span>
         
     | 
| 
       342 
352 
     | 
    
         
             
                    <span class="ruby-identifier">puts</span> <span class="ruby-node">"read track #{i} of #{num_tracks}"</span>
         
     | 
| 
         @@ -344,21 +354,21 @@ progress, for example by updating a GUI progress bar.</p> 
     | 
|
| 
       344 
354 
     | 
    
         
             
            }
         
     | 
| 
       345 
355 
     | 
    
         
             
            </pre>
         
     | 
| 
       346 
356 
     | 
    
         | 
| 
       347 
     | 
    
         
            -
            <h3 id="label-Writing+a+MIDI+File">Writing a <a href="MIDI.html">MIDI</a> File 
     | 
| 
      
 357 
     | 
    
         
            +
            <h3 id="label-Writing+a+MIDI+File">Writing a <a href="MIDI.html">MIDI</a> File<span><a href="#label-Writing+a+MIDI+File">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       348 
358 
     | 
    
         | 
| 
       349 
359 
     | 
    
         
             
            <p>To write a <a href="MIDI.html">MIDI</a> file, call the write method,
         
     | 
| 
       350 
360 
     | 
    
         
             
            passing in an <a href="IO.html">IO</a> object.</p>
         
     | 
| 
       351 
361 
     | 
    
         | 
| 
       352 
     | 
    
         
            -
            <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string" 
     | 
| 
      
 362 
     | 
    
         
            +
            <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'midilib/io/seqwriter'</span>
         
     | 
| 
       353 
363 
     | 
    
         | 
| 
       354 
364 
     | 
    
         
             
            <span class="ruby-comment"># Start with a sequence that has something worth saving.</span>
         
     | 
| 
       355 
365 
     | 
    
         
             
            <span class="ruby-identifier">seq</span> = <span class="ruby-identifier">read_or_create_seq_we_care_not_how</span>()
         
     | 
| 
       356 
366 
     | 
    
         | 
| 
       357 
367 
     | 
    
         
             
            <span class="ruby-comment"># Write the sequence to a MIDI file.</span>
         
     | 
| 
       358 
     | 
    
         
            -
            <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string" 
     | 
| 
      
 368 
     | 
    
         
            +
            <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">'my_output_file.mid'</span>, <span class="ruby-string">'wb'</span>) { <span class="ruby-operator">|</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">seq</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">file</span>) }
         
     | 
| 
       359 
369 
     | 
    
         
             
            </pre>
         
     | 
| 
       360 
370 
     | 
    
         | 
| 
       361 
     | 
    
         
            -
            <h3 id="label-Editing+a+MIDI+File">Editing a <a href="MIDI.html">MIDI</a> File 
     | 
| 
      
 371 
     | 
    
         
            +
            <h3 id="label-Editing+a+MIDI+File">Editing a <a href="MIDI.html">MIDI</a> File<span><a href="#label-Editing+a+MIDI+File">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       362 
372 
     | 
    
         | 
| 
       363 
373 
     | 
    
         
             
            <p>Combining the last two examples, here is a script that reads a <a
         
     | 
| 
       364 
374 
     | 
    
         
             
            href="MIDI.html">MIDI</a> file, transposes some events, and writes the
         
     | 
| 
         @@ -368,16 +378,16 @@ programatically manipulating <a href="MIDI.html">MIDI</a> data.</p> 
     | 
|
| 
       368 
378 
     | 
    
         
             
            <p>This code transposes all of the note events (note on, note off, and poly
         
     | 
| 
       369 
379 
     | 
    
         
             
            pressure) on channel 5 down one octave.</p>
         
     | 
| 
       370 
380 
     | 
    
         | 
| 
       371 
     | 
    
         
            -
            <h4 id="label-Transposing+One+Channel">Transposing One Channel 
     | 
| 
      
 381 
     | 
    
         
            +
            <h4 id="label-Transposing+One+Channel">Transposing One Channel<span><a href="#label-Transposing+One+Channel">¶</a> <a href="#top">↑</a></span></h4>
         
     | 
| 
       372 
382 
     | 
    
         | 
| 
       373 
     | 
    
         
            -
            <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string" 
     | 
| 
       374 
     | 
    
         
            -
            <span class="ruby-identifier">require</span> <span class="ruby-string" 
     | 
| 
      
 383 
     | 
    
         
            +
            <pre class="ruby"><span class="ruby-identifier">require</span> <span class="ruby-string">'midilib/io/seqreader'</span>
         
     | 
| 
      
 384 
     | 
    
         
            +
            <span class="ruby-identifier">require</span> <span class="ruby-string">'midilib/io/seqwriter'</span>
         
     | 
| 
       375 
385 
     | 
    
         | 
| 
       376 
386 
     | 
    
         
             
            <span class="ruby-comment"># Create a new, empty sequence.</span>
         
     | 
| 
       377 
387 
     | 
    
         
             
            <span class="ruby-identifier">seq</span> = <span class="ruby-constant">MIDI</span><span class="ruby-operator">::</span><span class="ruby-constant">Sequence</span>.<span class="ruby-identifier">new</span>()
         
     | 
| 
       378 
388 
     | 
    
         | 
| 
       379 
389 
     | 
    
         
             
            <span class="ruby-comment"># Read the contents of a MIDI file into the sequence.</span>
         
     | 
| 
       380 
     | 
    
         
            -
            <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string" 
     | 
| 
      
 390 
     | 
    
         
            +
            <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">'my_input_file.mid'</span>, <span class="ruby-string">'rb'</span>) { <span class="ruby-operator">|</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">|</span>
         
     | 
| 
       381 
391 
     | 
    
         
             
                <span class="ruby-identifier">seq</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">file</span>) { <span class="ruby-operator">|</span> <span class="ruby-identifier">track</span>, <span class="ruby-identifier">num_tracks</span>, <span class="ruby-identifier">i</span> <span class="ruby-operator">|</span>
         
     | 
| 
       382 
392 
     | 
    
         
             
                    <span class="ruby-comment"># Print something when each track is read.</span>
         
     | 
| 
       383 
393 
     | 
    
         
             
                    <span class="ruby-identifier">puts</span> <span class="ruby-node">"read track #{i} of #{num_tracks}"</span>
         
     | 
| 
         @@ -397,52 +407,54 @@ pressure) on channel 5 down one octave.</p> 
     | 
|
| 
       397 
407 
     | 
    
         
             
            }
         
     | 
| 
       398 
408 
     | 
    
         | 
| 
       399 
409 
     | 
    
         
             
            <span class="ruby-comment"># Write the sequence to a MIDI file.</span>
         
     | 
| 
       400 
     | 
    
         
            -
            <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string" 
     | 
| 
      
 410 
     | 
    
         
            +
            <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-string">'my_output_file.mid'</span>, <span class="ruby-string">'wb'</span>) { <span class="ruby-operator">|</span> <span class="ruby-identifier">file</span> <span class="ruby-operator">|</span> <span class="ruby-identifier">seq</span>.<span class="ruby-identifier">write</span>(<span class="ruby-identifier">file</span>) }
         
     | 
| 
       401 
411 
     | 
    
         
             
            </pre>
         
     | 
| 
       402 
412 
     | 
    
         | 
| 
       403 
     | 
    
         
            -
            <h3 id="label-Manipulating+tracks">Manipulating tracks 
     | 
| 
      
 413 
     | 
    
         
            +
            <h3 id="label-Manipulating+tracks">Manipulating tracks<span><a href="#label-Manipulating+tracks">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       404 
414 
     | 
    
         | 
| 
       405 
     | 
    
         
            -
            <p>If you modify a track 
     | 
| 
      
 415 
     | 
    
         
            +
            <p>If you modify a track's list of events directly, don't forget to
         
     | 
| 
      
 416 
     | 
    
         
            +
            call <a
         
     | 
| 
       406 
417 
     | 
    
         
             
            href="MIDI/Track.html#method-i-recalc_times">MIDI::Track#recalc_times</a>
         
     | 
| 
       407 
418 
     | 
    
         
             
            when you are done.</p>
         
     | 
| 
       408 
419 
     | 
    
         | 
| 
       409 
     | 
    
         
            -
            <pre>track 
     | 
| 
       410 
     | 
    
         
            -
            track 
     | 
| 
       411 
     | 
    
         
            -
            track 
     | 
| 
       412 
     | 
    
         
            -
            track 
     | 
| 
      
 420 
     | 
    
         
            +
            <pre class="ruby"><span class="ruby-identifier">track</span>.<span class="ruby-identifier">events</span>[<span class="ruby-value">42</span>, <span class="ruby-value">1</span>] = <span class="ruby-identifier">array_of_events</span>
         
     | 
| 
      
 421 
     | 
    
         
            +
            <span class="ruby-identifier">track</span>.<span class="ruby-identifier">events</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">an_event</span>
         
     | 
| 
      
 422 
     | 
    
         
            +
            <span class="ruby-identifier">track</span>.<span class="ruby-identifier">merge</span>(<span class="ruby-identifier">array_of_events</span>)
         
     | 
| 
      
 423 
     | 
    
         
            +
            <span class="ruby-identifier">track</span>.<span class="ruby-identifier">recalc_times</span>
         
     | 
| 
      
 424 
     | 
    
         
            +
            </pre>
         
     | 
| 
       413 
425 
     | 
    
         | 
| 
       414 
     | 
    
         
            -
            <h3 id="label-Calculating+delta+times">Calculating delta times 
     | 
| 
      
 426 
     | 
    
         
            +
            <h3 id="label-Calculating+delta+times">Calculating delta times<span><a href="#label-Calculating+delta+times">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       415 
427 
     | 
    
         | 
| 
       416 
428 
     | 
    
         
             
            <p>A few methods in <a href="MIDI/Sequence.html">MIDI::Sequence</a> make it
         
     | 
| 
       417 
429 
     | 
    
         
             
            easier to calculate the delta times that represent note lengths. <a
         
     | 
| 
       418 
430 
     | 
    
         
             
            href="MIDI/Sequence.html#method-i-length_to_delta">MIDI::Sequence#length_to_delta</a>
         
     | 
| 
       419 
431 
     | 
    
         
             
            takes a note length (a multiple of a quarter note) and returns the delta
         
     | 
| 
       420 
     | 
    
         
            -
            time given the sequence 
     | 
| 
       421 
     | 
    
         
            -
            is a quarter note, 1.0/32.0 is a 32nd note (use floating-point 
     | 
| 
       422 
     | 
    
         
            -
            avoid integer rounding), 1.5 is a dotted quarter, etc. See the
         
     | 
| 
      
 432 
     | 
    
         
            +
            time given the sequence's current ppqn (pulses per quarter note)
         
     | 
| 
      
 433 
     | 
    
         
            +
            setting. 1 is a quarter note, 1.0/32.0 is a 32nd note (use floating-point
         
     | 
| 
      
 434 
     | 
    
         
            +
            numbers to avoid integer rounding), 1.5 is a dotted quarter, etc. See the
         
     | 
| 
       423 
435 
     | 
    
         
             
            documentation for that method for more information.</p>
         
     | 
| 
       424 
436 
     | 
    
         | 
| 
       425 
437 
     | 
    
         
             
            <p><a
         
     | 
| 
       426 
438 
     | 
    
         
             
            href="MIDI/Sequence.html#method-i-note_to_length">MIDI::Sequence#note_to_length</a>
         
     | 
| 
       427 
439 
     | 
    
         
             
            takes a note name and returns a length value (again, as a multiple of a
         
     | 
| 
       428 
440 
     | 
    
         
             
            quarter note). Legal note names are those found in
         
     | 
| 
       429 
     | 
    
         
            -
            MIDI::Sequence::NOTE_TO_LENGTH, and may begin with  
     | 
| 
       430 
     | 
    
         
            -
             
     | 
| 
       431 
     | 
    
         
            -
             
     | 
| 
      
 441 
     | 
    
         
            +
            MIDI::Sequence::NOTE_TO_LENGTH, and may begin with “dotted” and/or end with
         
     | 
| 
      
 442 
     | 
    
         
            +
            “triplet”. For example, “whole”, “sixteenth”, “32nd”, “quarter triplet”,
         
     | 
| 
      
 443 
     | 
    
         
            +
            “dotted 16th”, and “dotted 8th triplet” are all legal note names.</p>
         
     | 
| 
       432 
444 
     | 
    
         | 
| 
       433 
445 
     | 
    
         
             
            <p>Finally, <a
         
     | 
| 
       434 
446 
     | 
    
         
             
            href="MIDI/Sequence.html#method-i-note_to_delta">MIDI::Sequence#note_to_delta</a>
         
     | 
| 
       435 
447 
     | 
    
         
             
            takes a note name and returns a delta time. It does this by calling
         
     | 
| 
       436 
448 
     | 
    
         
             
            note_to_length, then passing the result to length_to_delta.</p>
         
     | 
| 
       437 
449 
     | 
    
         | 
| 
       438 
     | 
    
         
            -
            <h3 id="label-Example+Scripts">Example Scripts 
     | 
| 
      
 450 
     | 
    
         
            +
            <h3 id="label-Example+Scripts">Example Scripts<span><a href="#label-Example+Scripts">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       439 
451 
     | 
    
         | 
| 
       440 
452 
     | 
    
         
             
            <p>Here are short descriptions of each of the examples found in the examples
         
     | 
| 
       441 
453 
     | 
    
         
             
            directory.</p>
         
     | 
| 
       442 
454 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       443 
455 
     | 
    
         
             
            <p>examples/from_scratch.rb shows you how to create a new sequence from
         
     | 
| 
       444 
456 
     | 
    
         
             
            scratch and save it to a <a href="MIDI.html">MIDI</a> file. It creates a
         
     | 
| 
       445 
     | 
    
         
            -
            file called  
     | 
| 
      
 457 
     | 
    
         
            +
            file called 'from_scratch.mid'.</p>
         
     | 
| 
       446 
458 
     | 
    
         
             
            </li><li>
         
     | 
| 
       447 
459 
     | 
    
         
             
            <p>examples/seq2text.rb dumps a <a href="MIDI.html">MIDI</a> file as text. It
         
     | 
| 
       448 
460 
     | 
    
         
             
            reads in a sequence and uses the to_s method of each event.</p>
         
     | 
| 
         @@ -457,11 +469,11 @@ pressure) on a specified channel by a specified amount.</p> 
     | 
|
| 
       457 
469 
     | 
    
         
             
            <p>There is also one <a href="MIDI.html">MIDI</a> file, examples/NoFences.mid.
         
     | 
| 
       458 
470 
     | 
    
         
             
            It is a little pop ditty I wrote. The instruments in this file use General
         
     | 
| 
       459 
471 
     | 
    
         
             
            <a href="MIDI.html">MIDI</a> patch numbers and drum note assignments. Since
         
     | 
| 
       460 
     | 
    
         
            -
            I don 
     | 
| 
      
 472 
     | 
    
         
            +
            I don't normally use GM patches, the sounds used here are at best
         
     | 
| 
       461 
473 
     | 
    
         
             
            approximations of the sounds I use.</p>
         
     | 
| 
       462 
474 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       463 
475 
     | 
    
         | 
| 
       464 
     | 
    
         
            -
            <h2 id="label-Resources">Resources 
     | 
| 
      
 476 
     | 
    
         
            +
            <h2 id="label-Resources">Resources<span><a href="#label-Resources">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       465 
477 
     | 
    
         | 
| 
       466 
478 
     | 
    
         
             
            <p>The Ruby Web site (<a
         
     | 
| 
       467 
479 
     | 
    
         
             
            href="http://www.ruby-lang.org/en/index.html">www.ruby-lang.org/en/index.html</a>)
         
     | 
| 
         @@ -469,7 +481,7 @@ contains an introduction to Ruby, the Ruby Application Archive (RAA) at <a 
     | 
|
| 
       469 
481 
     | 
    
         
             
            href="http://raa.ruby-lang.org">raa.ruby-lang.org</a>, and pointers to more
         
     | 
| 
       470 
482 
     | 
    
         
             
            information.</p>
         
     | 
| 
       471 
483 
     | 
    
         | 
| 
       472 
     | 
    
         
            -
            <p><cite>Programming Ruby, The Pragmatic Programmer 
     | 
| 
      
 484 
     | 
    
         
            +
            <p><cite>Programming Ruby, The Pragmatic Programmer's
         
     | 
| 
       473 
485 
     | 
    
         
             
            Guide</cite>, by David Thomas and Andrew Hunt, is a well-written and
         
     | 
| 
       474 
486 
     | 
    
         
             
            practical introduction to Ruby. Its Web page at <a
         
     | 
| 
       475 
487 
     | 
    
         
             
            href="http://www.rubycentral.com/book">www.rubycentral.com/book</a> also
         
     | 
| 
         @@ -478,29 +490,29 @@ available online, I encourage you to purchase a copy of the latest edition.</p> 
     | 
|
| 
       478 
490 
     | 
    
         | 
| 
       479 
491 
     | 
    
         
             
            <p>A description of the <a href="MIDI.html">MIDI</a> file format can be found
         
     | 
| 
       480 
492 
     | 
    
         
             
            in a few places such as <a
         
     | 
| 
       481 
     | 
    
         
            -
            href="http://www.borg.com/~jglatt/tech/midifile.htm 
     | 
| 
      
 493 
     | 
    
         
            +
            href="http://www.borg.com/~jglatt/tech/midifile.htm">www.borg.com/~jglatt/tech/midifile.htm</a>.</p>
         
     | 
| 
       482 
494 
     | 
    
         | 
| 
       483 
495 
     | 
    
         
             
            <p>The <a href="MIDI.html">MIDI</a> message reference at <a
         
     | 
| 
       484 
496 
     | 
    
         
             
            href="http://www.jimmenard.com/midi_ref.html">www.jimmenard.com/midi_ref.html</a>
         
     | 
| 
       485 
497 
     | 
    
         
             
            describes the format of <a href="MIDI.html">MIDI</a> commands.</p>
         
     | 
| 
       486 
498 
     | 
    
         | 
| 
       487 
     | 
    
         
            -
            <h1 id="label-To+Do">To Do 
     | 
| 
      
 499 
     | 
    
         
            +
            <h1 id="label-To+Do">To Do<span><a href="#label-To+Do">¶</a> <a href="#top">↑</a></span></h1>
         
     | 
| 
       488 
500 
     | 
    
         | 
| 
       489 
     | 
    
         
            -
            <h2 id="label-Bugs">Bugs 
     | 
| 
      
 501 
     | 
    
         
            +
            <h2 id="label-Bugs">Bugs<span><a href="#label-Bugs">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       490 
502 
     | 
    
         | 
| 
       491 
     | 
    
         
            -
            <p>No known bugs. (If that 
     | 
| 
      
 503 
     | 
    
         
            +
            <p>No known bugs. (If that's not a challenge, I don't know what is.)</p>
         
     | 
| 
       492 
504 
     | 
    
         | 
| 
       493 
     | 
    
         
            -
            <h2 id="label-Features">Features 
     | 
| 
      
 505 
     | 
    
         
            +
            <h2 id="label-Features">Features<span><a href="#label-Features">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       494 
506 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       495 
507 
     | 
    
         
             
            <p><code>print_decimal_numbers</code> and
         
     | 
| 
       496 
508 
     | 
    
         
             
            <code>print_channel_numbers_from_one</code> should be associated with
         
     | 
| 
       497 
509 
     | 
    
         
             
            sequence, or perhaps track, not event.</p>
         
     | 
| 
       498 
510 
     | 
    
         
             
            </li><li>
         
     | 
| 
       499 
     | 
    
         
            -
            <p>Method to translate event 
     | 
| 
       500 
     | 
    
         
            -
            start.</p>
         
     | 
| 
      
 511 
     | 
    
         
            +
            <p>Method to translate event's time_from_start to number of milliseconds
         
     | 
| 
      
 512 
     | 
    
         
            +
            from start.</p>
         
     | 
| 
       501 
513 
     | 
    
         
             
            </li><li>
         
     | 
| 
       502 
     | 
    
         
            -
            <p>Swing quantizing. (Implied by list email from Carl Youngblood 
     | 
| 
       503 
     | 
    
         
            -
            carl.youngblood.com>)</p>
         
     | 
| 
      
 514 
     | 
    
         
            +
            <p>Swing quantizing. (Implied by list email from Carl Youngblood
         
     | 
| 
      
 515 
     | 
    
         
            +
            <carl.youngblood@gmail.com>)</p>
         
     | 
| 
       504 
516 
     | 
    
         
             
            </li><li>
         
     | 
| 
       505 
517 
     | 
    
         
             
            <p>Implement key signature in SeqReader.</p>
         
     | 
| 
       506 
518 
     | 
    
         
             
            </li><li>
         
     | 
| 
         @@ -509,17 +521,17 @@ carl.youngblood.com>)</p> 
     | 
|
| 
       509 
521 
     | 
    
         
             
            <p>Format 2 files(?).</p>
         
     | 
| 
       510 
522 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       511 
523 
     | 
    
         | 
| 
       512 
     | 
    
         
            -
            <h2 id="label-Documentation">Documentation 
     | 
| 
      
 524 
     | 
    
         
            +
            <h2 id="label-Documentation">Documentation<span><a href="#label-Documentation">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       513 
525 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       514 
526 
     | 
    
         
             
            <p>Write better docs.</p>
         
     | 
| 
       515 
527 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       516 
528 
     | 
    
         | 
| 
       517 
     | 
    
         
            -
            <h2 id="label-Tests">Tests 
     | 
| 
      
 529 
     | 
    
         
            +
            <h2 id="label-Tests">Tests<span><a href="#label-Tests">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       518 
530 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       519 
     | 
    
         
            -
            <p>Tests for Noah Thorp 
     | 
| 
      
 531 
     | 
    
         
            +
            <p>Tests for Noah Thorp's midilib bug fixes.</p>
         
     | 
| 
       520 
532 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       521 
533 
     | 
    
         | 
| 
       522 
     | 
    
         
            -
            <h1 id="label-Support">Support 
     | 
| 
      
 534 
     | 
    
         
            +
            <h1 id="label-Support">Support<span><a href="#label-Support">¶</a> <a href="#top">↑</a></span></h1>
         
     | 
| 
       523 
535 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       524 
536 
     | 
    
         
             
            <p>Visit the forums, bug list, and mailing list pages at <a
         
     | 
| 
       525 
537 
     | 
    
         
             
            href="http://rubyforge.org/projects/midilib">rubyforge.org/projects/midilib</a></p>
         
     | 
| 
         @@ -530,47 +542,52 @@ href="mailto:jim@jimmenard.com">jim@jimmenard.com</a></p> 
     | 
|
| 
       530 
542 
     | 
    
         
             
            <p>Ask on the ruby-talk mailing list</p>
         
     | 
| 
       531 
543 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       532 
544 
     | 
    
         | 
| 
       533 
     | 
    
         
            -
            <h1 id="label-Administrivia">Administrivia 
     | 
| 
      
 545 
     | 
    
         
            +
            <h1 id="label-Administrivia">Administrivia<span><a href="#label-Administrivia">¶</a> <a href="#top">↑</a></span></h1>
         
     | 
| 
       534 
546 
     | 
    
         
             
            <dl class="rdoc-list note-list"><dt>Author
         
     | 
| 
       535 
547 
     | 
    
         
             
            <dd>
         
     | 
| 
       536 
548 
     | 
    
         
             
            <p>Jim Menard (<a href="mailto:jim@jimmenard.com">jim@jimmenard.com</a>)</p>
         
     | 
| 
       537 
549 
     | 
    
         
             
            </dd><dt>Copyright
         
     | 
| 
       538 
550 
     | 
    
         
             
            <dd>
         
     | 
| 
       539 
     | 
    
         
            -
            <p>Copyright  
     | 
| 
      
 551 
     | 
    
         
            +
            <p>Copyright © 2003-2013 Jim Menard</p>
         
     | 
| 
       540 
552 
     | 
    
         
             
            </dd><dt>License
         
     | 
| 
       541 
553 
     | 
    
         
             
            <dd>
         
     | 
| 
       542 
554 
     | 
    
         
             
            <p>Distributed under the same license as Ruby.</p>
         
     | 
| 
       543 
555 
     | 
    
         
             
            </dd></dl>
         
     | 
| 
       544 
556 
     | 
    
         | 
| 
       545 
     | 
    
         
            -
            <h2 id="label-Copying">Copying 
     | 
| 
      
 557 
     | 
    
         
            +
            <h2 id="label-Copying">Copying<span><a href="#label-Copying">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       546 
558 
     | 
    
         | 
| 
       547 
559 
     | 
    
         
             
            <p>midilib is copyrighted free software by Jim Menard and is released under
         
     | 
| 
       548 
560 
     | 
    
         
             
            the same license as Ruby. See the Ruby license at <a
         
     | 
| 
       549 
     | 
    
         
            -
            href="http://www.ruby-lang.org/en/LICENSE.txt 
     | 
| 
      
 561 
     | 
    
         
            +
            href="http://www.ruby-lang.org/en/LICENSE.txt">www.ruby-lang.org/en/LICENSE.txt</a>.</p>
         
     | 
| 
       550 
562 
     | 
    
         | 
| 
       551 
563 
     | 
    
         
             
            <p>midilib may be freely copied in its entirety providing this notice, all
         
     | 
| 
       552 
564 
     | 
    
         
             
            source code, all documentation, and all other files are included.</p>
         
     | 
| 
       553 
565 
     | 
    
         | 
| 
       554 
     | 
    
         
            -
            <p>midilib is Copyright  
     | 
| 
      
 566 
     | 
    
         
            +
            <p>midilib is Copyright © 2003-2013 by Jim Menard.</p>
         
     | 
| 
       555 
567 
     | 
    
         | 
| 
       556 
     | 
    
         
            -
            <p>The song  
     | 
| 
       557 
     | 
    
         
            -
            examples/NoFences.mid is Copyright  
     | 
| 
      
 568 
     | 
    
         
            +
            <p>The song “No Fences” contained in the <a href="MIDI.html">MIDI</a> file
         
     | 
| 
      
 569 
     | 
    
         
            +
            examples/NoFences.mid is Copyright © 1992 by Jim Menard
         
     | 
| 
       558 
570 
     | 
    
         
             
            (jim@jimmenard.com). It may be freely used for non-commercial purposes as
         
     | 
| 
       559 
571 
     | 
    
         
             
            long as the author is given credit.</p>
         
     | 
| 
       560 
572 
     | 
    
         | 
| 
       561 
     | 
    
         
            -
            <h2 id="label-Recent+Changes">Recent Changes 
     | 
| 
      
 573 
     | 
    
         
            +
            <h2 id="label-Recent+Changes">Recent Changes<span><a href="#label-Recent+Changes">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
      
 574 
     | 
    
         
            +
             
     | 
| 
      
 575 
     | 
    
         
            +
            <h3 id="label-Changes+for+2.0.5-3A">Changes for 2.0.5:<span><a href="#label-Changes+for+2.0.5-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
      
 576 
     | 
    
         
            +
             
     | 
| 
      
 577 
     | 
    
         
            +
            <p>Updated <code>install.rb</code> to work with newer versions of Ruby by
         
     | 
| 
      
 578 
     | 
    
         
            +
            using <code>fileutils</code> instead of <code>ftools</code>.</p>
         
     | 
| 
       562 
579 
     | 
    
         | 
| 
       563 
     | 
    
         
            -
            <h3 id="label-Changes+for+2.0.3 
     | 
| 
      
 580 
     | 
    
         
            +
            <h3 id="label-Changes+for+2.0.3-3A">Changes for 2.0.3:<span><a href="#label-Changes+for+2.0.3-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       564 
581 
     | 
    
         | 
| 
       565 
582 
     | 
    
         
             
            <p>New <a
         
     | 
| 
       566 
583 
     | 
    
         
             
            href="MIDI/Sequence.html#method-i-pulses_to_seconds">MIDI::Sequence#pulses_to_seconds</a>
         
     | 
| 
       567 
584 
     | 
    
         
             
            method.</p>
         
     | 
| 
       568 
585 
     | 
    
         | 
| 
       569 
     | 
    
         
            -
            <h3 id="label-Changes+for+2.0.2 
     | 
| 
      
 586 
     | 
    
         
            +
            <h3 id="label-Changes+for+2.0.2-3A">Changes for 2.0.2:<span><a href="#label-Changes+for+2.0.2-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       570 
587 
     | 
    
         | 
| 
       571 
588 
     | 
    
         
             
            <p>Stop monkeypatching Array in <a href="MIDI/Track.html">MIDI::Track</a>.</p>
         
     | 
| 
       572 
589 
     | 
    
         | 
| 
       573 
     | 
    
         
            -
            <h3 id="label-Changes+for+2.0.0 
     | 
| 
      
 590 
     | 
    
         
            +
            <h3 id="label-Changes+for+2.0.0-3A">Changes for 2.0.0:<span><a href="#label-Changes+for+2.0.0-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       574 
591 
     | 
    
         | 
| 
       575 
592 
     | 
    
         
             
            <p><a href="MIDI/NoteOn.html">MIDI::NoteOnEvent</a> and <a
         
     | 
| 
       576 
593 
     | 
    
         
             
            href="MIDI/NoteOff.html">MIDI::NoteOffEvent</a> renamed to <a
         
     | 
| 
         @@ -581,17 +598,18 @@ for a while.</p> 
     | 
|
| 
       581 
598 
     | 
    
         
             
            <p>The <a href="MIDI/Event.html">MIDI::Event</a> boolean methods like meta?
         
     | 
| 
       582 
599 
     | 
    
         
             
            and note? have been removed. Use the event classes themselves (for example,
         
     | 
| 
       583 
600 
     | 
    
         
             
            <a href="MIDI/MetaEvent.html">MIDI::MetaEvent</a> === my_event or
         
     | 
| 
       584 
     | 
    
         
            -
            my_event.kind_of?( 
     | 
| 
       585 
     | 
    
         
            -
             
     | 
| 
       586 
     | 
    
         
            -
             
     | 
| 
       587 
     | 
    
         
            -
            <pre>case my_event
         
     | 
| 
       588 
     | 
    
         
            -
            when MIDI 
     | 
| 
       589 
     | 
    
         
            -
              do_this()
         
     | 
| 
       590 
     | 
    
         
            -
            when MIDI 
     | 
| 
       591 
     | 
    
         
            -
              do_that()
         
     | 
| 
       592 
     | 
    
         
            -
            end</ 
     | 
| 
      
 601 
     | 
    
         
            +
            my_event.kind_of?(MIDI::MetaEvent)). Case statements that use classes work,
         
     | 
| 
      
 602 
     | 
    
         
            +
            too:</p>
         
     | 
| 
      
 603 
     | 
    
         
            +
             
     | 
| 
      
 604 
     | 
    
         
            +
            <pre class="ruby"><span class="ruby-keyword">case</span> <span class="ruby-identifier">my_event</span>
         
     | 
| 
      
 605 
     | 
    
         
            +
            <span class="ruby-keyword">when</span> <span class="ruby-constant">MIDI</span><span class="ruby-operator">::</span><span class="ruby-constant">NoteEvent</span> <span class="ruby-comment"># superclass of note on, note off, poly press</span>
         
     | 
| 
      
 606 
     | 
    
         
            +
              <span class="ruby-identifier">do_this</span>()
         
     | 
| 
      
 607 
     | 
    
         
            +
            <span class="ruby-keyword">when</span> <span class="ruby-constant">MIDI</span><span class="ruby-operator">::</span><span class="ruby-constant">Controller</span>
         
     | 
| 
      
 608 
     | 
    
         
            +
              <span class="ruby-identifier">do_that</span>()
         
     | 
| 
      
 609 
     | 
    
         
            +
            <span class="ruby-keyword">end</span>
         
     | 
| 
      
 610 
     | 
    
         
            +
            </pre>
         
     | 
| 
       593 
611 
     | 
    
         | 
| 
       594 
     | 
    
         
            -
            <p>Introduced Adam Murray 
     | 
| 
      
 612 
     | 
    
         
            +
            <p>Introduced Adam Murray's stable sorting code for <a
         
     | 
| 
       595 
613 
     | 
    
         
             
            href="MIDI/Track.html#method-i-recalc_delta_from_times">MIDI::Track#recalc_delta_from_times</a>.
         
     | 
| 
       596 
614 
     | 
    
         
             
            See <a
         
     | 
| 
       597 
615 
     | 
    
         
             
            href="http://wiki.github.com/adamjmurray/cosy/midilib-notes">wiki.github.com/adamjmurray/cosy/midilib-notes</a>
         
     | 
| 
         @@ -606,28 +624,28 @@ and recalc_delta_from_times sorts the events before doing anything else.</p> 
     | 
|
| 
       606 
624 
     | 
    
         | 
| 
       607 
625 
     | 
    
         
             
            <p>MIDI::Tempo#mpq_to_bpm now returns a float.</p>
         
     | 
| 
       608 
626 
     | 
    
         | 
| 
       609 
     | 
    
         
            -
            <h3 id="label-Changes+for+1.2.0 
     | 
| 
      
 627 
     | 
    
         
            +
            <h3 id="label-Changes+for+1.2.0-3A">Changes for 1.2.0:<span><a href="#label-Changes+for+1.2.0-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       610 
628 
     | 
    
         | 
| 
       611 
629 
     | 
    
         
             
            <p>Use byte arrays instead of strings for passing around data. All tests now
         
     | 
| 
       612 
630 
     | 
    
         
             
            pass for both Ruby 1.8.X and 1.9.X.</p>
         
     | 
| 
       613 
631 
     | 
    
         | 
| 
       614 
     | 
    
         
            -
            <h3 id="label-New+code+repository">New code repository 
     | 
| 
      
 632 
     | 
    
         
            +
            <h3 id="label-New+code+repository">New code repository<span><a href="#label-New+code+repository">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       615 
633 
     | 
    
         | 
| 
       616 
634 
     | 
    
         
             
            <p>The midilib code is now hosted at Github (<a
         
     | 
| 
       617 
635 
     | 
    
         
             
            href="http://github.com/jimm/midilib">github.com/jimm/midilib</a>).</p>
         
     | 
| 
       618 
636 
     | 
    
         | 
| 
       619 
     | 
    
         
            -
            <h3 id="label-Changes+for+1.1.4 
     | 
| 
      
 637 
     | 
    
         
            +
            <h3 id="label-Changes+for+1.1.4-3A">Changes for 1.1.4:<span><a href="#label-Changes+for+1.1.4-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       620 
638 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       621 
639 
     | 
    
         
             
            <p>Fixed a bug in KeySig.data_as_bytes. Thanks to Noah Thorp for finding this
         
     | 
| 
       622 
640 
     | 
    
         
             
            and the bug fixed in 1.1.3.</p>
         
     | 
| 
       623 
641 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       624 
642 
     | 
    
         | 
| 
       625 
     | 
    
         
            -
            <h3 id="label-Changes+for+1.1.3 
     | 
| 
      
 643 
     | 
    
         
            +
            <h3 id="label-Changes+for+1.1.3-3A">Changes for 1.1.3:<span><a href="#label-Changes+for+1.1.3-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       626 
644 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       627 
645 
     | 
    
         
             
            <p>Fixed the way midilib detects the behavior of IO.getc.</p>
         
     | 
| 
       628 
646 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       629 
647 
     | 
    
         | 
| 
       630 
     | 
    
         
            -
            <h3 id="label-Changes+for+1.1.2 
     | 
| 
      
 648 
     | 
    
         
            +
            <h3 id="label-Changes+for+1.1.2-3A">Changes for 1.1.2:<span><a href="#label-Changes+for+1.1.2-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       631 
649 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       632 
650 
     | 
    
         
             
            <p>Define <a
         
     | 
| 
       633 
651 
     | 
    
         
             
            href="MIDI/IO/MIDIFile.html#method-i-getc">MIDI::IO::MIDIFile#getc</a>
         
     | 
| 
         @@ -635,35 +653,35 @@ differently for different Ruby versions, instead of checking for 
     | 
|
| 
       635 
653 
     | 
    
         
             
            String.bytes every time we read a byte.</p>
         
     | 
| 
       636 
654 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       637 
655 
     | 
    
         | 
| 
       638 
     | 
    
         
            -
            <h3 id="label-Changes+for+1.1.1 
     | 
| 
      
 656 
     | 
    
         
            +
            <h3 id="label-Changes+for+1.1.1-3A">Changes for 1.1.1:<span><a href="#label-Changes+for+1.1.1-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       639 
657 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       640 
658 
     | 
    
         
             
            <p>Make <a
         
     | 
| 
       641 
659 
     | 
    
         
             
            href="MIDI/IO/MIDIFile.html#method-i-getc">MIDI::IO::MIDIFile#getc</a> do
         
     | 
| 
       642 
660 
     | 
    
         
             
            the right thing for both Ruby 1.8 and 1.9.</p>
         
     | 
| 
       643 
661 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       644 
662 
     | 
    
         | 
| 
       645 
     | 
    
         
            -
            <h3 id="label-Changes+for+1.1.0 
     | 
| 
      
 663 
     | 
    
         
            +
            <h3 id="label-Changes+for+1.1.0-3A">Changes for 1.1.0:<span><a href="#label-Changes+for+1.1.0-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       646 
664 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       647 
665 
     | 
    
         
             
            <p>Added test/test.mid to list of files to be included when packaging midifile
         
     | 
| 
       648 
666 
     | 
    
         
             
            for distribution.</p>
         
     | 
| 
       649 
667 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       650 
668 
     | 
    
         | 
| 
       651 
     | 
    
         
            -
            <h3 id="label-Changes+for+1.0.0 
     | 
| 
      
 669 
     | 
    
         
            +
            <h3 id="label-Changes+for+1.0.0-3A">Changes for 1.0.0:<span><a href="#label-Changes+for+1.0.0-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       652 
670 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       653 
671 
     | 
    
         
             
            <p>Fixed the bug in Track#recalc_delta_from_times found by Christopher Rose.</p>
         
     | 
| 
       654 
672 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       655 
673 
     | 
    
         | 
| 
       656 
     | 
    
         
            -
            <h3 id="label-Changes+for+0.8.7 
     | 
| 
      
 674 
     | 
    
         
            +
            <h3 id="label-Changes+for+0.8.7-3A">Changes for 0.8.7:<span><a href="#label-Changes+for+0.8.7-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       657 
675 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       658 
676 
     | 
    
         
             
            <p>Fixed the misspelled POLY_PRESSURE constant, thanks to Mario Pehle.</p>
         
     | 
| 
       659 
677 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       660 
678 
     | 
    
         | 
| 
       661 
     | 
    
         
            -
            <h3 id="label-Changes+for+0.8.6 
     | 
| 
      
 679 
     | 
    
         
            +
            <h3 id="label-Changes+for+0.8.6-3A">Changes for 0.8.6:<span><a href="#label-Changes+for+0.8.6-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       662 
680 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       663 
681 
     | 
    
         
             
            <p>Added missing test/test.mid.</p>
         
     | 
| 
       664 
682 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       665 
683 
     | 
    
         | 
| 
       666 
     | 
    
         
            -
            <h3 id="label-Changes+for+0.8.5 
     | 
| 
      
 684 
     | 
    
         
            +
            <h3 id="label-Changes+for+0.8.5-3A">Changes for 0.8.5:<span><a href="#label-Changes+for+0.8.5-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       667 
685 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       668 
686 
     | 
    
         
             
            <p>Fixed bugs in <a href="MIDI/PitchBend.html">MIDI::PitchBend</a> reading and
         
     | 
| 
       669 
687 
     | 
    
         
             
            writing, thanks to Emanuel Borsboom.</p>
         
     | 
| 
         @@ -673,14 +691,14 @@ href="MIDI/Track.html#method-i-quantize">MIDI::Track#quantize</a>.</p> 
     | 
|
| 
       673 
691 
     | 
    
         
             
            </li><li>
         
     | 
| 
       674 
692 
     | 
    
         
             
            <p>The argument to <a
         
     | 
| 
       675 
693 
     | 
    
         
             
            href="MIDI/Track.html#method-i-quantize">MIDI::Track#quantize</a> has
         
     | 
| 
       676 
     | 
    
         
            -
            changed: it is now either a note name ( 
     | 
| 
      
 694 
     | 
    
         
            +
            changed: it is now either a note name (“sixteenth”, “32nd”, “8th triplet”)
         
     | 
| 
       677 
695 
     | 
    
         
             
            or a length (1 = quarter, 0.25 = sixteenth). This is a drastic change that
         
     | 
| 
       678 
696 
     | 
    
         
             
            will break all previous calls to quantize. However, since that method was
         
     | 
| 
       679 
     | 
    
         
            -
            broken already, I don 
     | 
| 
      
 697 
     | 
    
         
            +
            broken already, I don't feel it's a burden to anybody to change the
         
     | 
| 
       680 
698 
     | 
    
         
             
            arguments.</p>
         
     | 
| 
       681 
699 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       682 
700 
     | 
    
         | 
| 
       683 
     | 
    
         
            -
            <h3 id="label-Changes+for+0.8.4 
     | 
| 
      
 701 
     | 
    
         
            +
            <h3 id="label-Changes+for+0.8.4-3A">Changes for 0.8.4:<span><a href="#label-Changes+for+0.8.4-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       684 
702 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       685 
703 
     | 
    
         
             
            <p>Realtime status bytes now set @is_realtime to true and return true when
         
     | 
| 
       686 
704 
     | 
    
         
             
            realtime? is called.</p>
         
     | 
| 
         @@ -692,28 +710,28 @@ system? is called, not just system exclusive events.</p> 
     | 
|
| 
       692 
710 
     | 
    
         
             
            manually.</p>
         
     | 
| 
       693 
711 
     | 
    
         
             
            </li><li>
         
     | 
| 
       694 
712 
     | 
    
         
             
            <p>New <a href="MIDI/Sequence.html">MIDI::Sequence</a> methods that turn note
         
     | 
| 
       695 
     | 
    
         
            -
            length names like  
     | 
| 
      
 713 
     | 
    
         
            +
            length names like “32nd”, “dotted quarter”, and “16th triplet” into delta
         
     | 
| 
       696 
714 
     | 
    
         
             
            times. See the docs below and MIDI::Sequence::length_to_delta,
         
     | 
| 
       697 
715 
     | 
    
         
             
            MIDI::Sequence::note_to_length, and MIDI::Sequence::note_to_delta.</p>
         
     | 
| 
       698 
716 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       699 
717 
     | 
    
         | 
| 
       700 
     | 
    
         
            -
            <h3 id="label-Changes+for+0.8.3 
     | 
| 
      
 718 
     | 
    
         
            +
            <h3 id="label-Changes+for+0.8.3-3A">Changes for 0.8.3:<span><a href="#label-Changes+for+0.8.3-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       701 
719 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       702 
720 
     | 
    
         
             
            <p>Added <a
         
     | 
| 
       703 
721 
     | 
    
         
             
            href="MIDI/NoteEvent.html#method-i-note_to_s">MIDI::NoteEvent#note_to_s</a>,
         
     | 
| 
       704 
     | 
    
         
            -
            which returns note name as a string like  
     | 
| 
      
 722 
     | 
    
         
            +
            which returns note name as a string like “C4” or “F#6”.</p>
         
     | 
| 
       705 
723 
     | 
    
         
             
            </li><li>
         
     | 
| 
       706 
724 
     | 
    
         
             
            <p>Added new boolean attributes to MIDI::Event: @print_decimal_numbers and
         
     | 
| 
       707 
725 
     | 
    
         
             
            @print_note_names. These are used by all Event to_s methods. See
         
     | 
| 
       708 
726 
     | 
    
         
             
            examples/seq2text.rb for an example.</p>
         
     | 
| 
       709 
727 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       710 
728 
     | 
    
         | 
| 
       711 
     | 
    
         
            -
            <h3 id="label-Changes+for+0.8.2 
     | 
| 
      
 729 
     | 
    
         
            +
            <h3 id="label-Changes+for+0.8.2-3A">Changes for 0.8.2:<span><a href="#label-Changes+for+0.8.2-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       712 
730 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       713 
731 
     | 
    
         
             
            <p>Changed MIDI::MetaEvent.type to MIDI::MetaEvent.event_type to avoid runtime
         
     | 
| 
       714 
732 
     | 
    
         
             
            complaints about Object#type calls.</p>
         
     | 
| 
       715 
733 
     | 
    
         
             
            </li><li>
         
     | 
| 
       716 
     | 
    
         
            -
            <p>Added  
     | 
| 
      
 734 
     | 
    
         
            +
            <p>Added 'b' binary flag to file open modes for Windows.</p>
         
     | 
| 
       717 
735 
     | 
    
         
             
            </li><li>
         
     | 
| 
       718 
736 
     | 
    
         
             
            <p>Fixed $LOAD_PATH in example files.</p>
         
     | 
| 
       719 
737 
     | 
    
         
             
            </li><li>
         
     | 
| 
         @@ -722,29 +740,29 @@ complaints about Object#type calls.</p> 
     | 
|
| 
       722 
740 
     | 
    
         
             
            <p>Fixed other example script bugs.</p>
         
     | 
| 
       723 
741 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       724 
742 
     | 
    
         | 
| 
       725 
     | 
    
         
            -
            <h3 id="label-Changes+for+0.8.1 
     | 
| 
      
 743 
     | 
    
         
            +
            <h3 id="label-Changes+for+0.8.1-3A">Changes for 0.8.1:<span><a href="#label-Changes+for+0.8.1-3A">¶</a> <a href="#top">↑</a></span></h3>
         
     | 
| 
       726 
744 
     | 
    
         
             
            <ul><li>
         
     | 
| 
       727 
745 
     | 
    
         
             
            <p>Fixed track sorting.</p>
         
     | 
| 
       728 
746 
     | 
    
         
             
            </li><li>
         
     | 
| 
       729 
     | 
    
         
            -
            <p>Fixed track 
     | 
| 
      
 747 
     | 
    
         
            +
            <p>Fixed track's recalc_delta_from_times method.</p>
         
     | 
| 
       730 
748 
     | 
    
         
             
            </li><li>
         
     | 
| 
       731 
749 
     | 
    
         
             
            <p>Fixed event quantization.</p>
         
     | 
| 
       732 
750 
     | 
    
         
             
            </li><li>
         
     | 
| 
       733 
751 
     | 
    
         
             
            <p>More tests and documentation.</p>
         
     | 
| 
       734 
752 
     | 
    
         
             
            </li></ul>
         
     | 
| 
       735 
753 
     | 
    
         | 
| 
       736 
     | 
    
         
            -
            <h2 id="label-Warranty">Warranty 
     | 
| 
      
 754 
     | 
    
         
            +
            <h2 id="label-Warranty">Warranty<span><a href="#label-Warranty">¶</a> <a href="#top">↑</a></span></h2>
         
     | 
| 
       737 
755 
     | 
    
         | 
| 
       738 
     | 
    
         
            -
            <p>This software is provided  
     | 
| 
      
 756 
     | 
    
         
            +
            <p>This software is provided “as is” and without any express or implied
         
     | 
| 
       739 
757 
     | 
    
         
             
            warranties, including, without limitation, the implied warranties of
         
     | 
| 
       740 
758 
     | 
    
         
             
            merchantability and fitness for a particular purpose.</p>
         
     | 
| 
      
 759 
     | 
    
         
            +
            </main>
         
     | 
| 
       741 
760 
     | 
    
         | 
| 
       742 
     | 
    
         
            -
            </div>
         
     | 
| 
       743 
761 
     | 
    
         | 
| 
       744 
762 
     | 
    
         | 
| 
       745 
     | 
    
         
            -
            <footer id="validator-badges">
         
     | 
| 
       746 
     | 
    
         
            -
              <p><a href="http://validator.w3.org/check/referer"> 
     | 
| 
       747 
     | 
    
         
            -
              <p>Generated by <a href=" 
     | 
| 
       748 
     | 
    
         
            -
              <p> 
     | 
| 
      
 763 
     | 
    
         
            +
            <footer id="validator-badges" role="contentinfo">
         
     | 
| 
      
 764 
     | 
    
         
            +
              <p><a href="http://validator.w3.org/check/referer">Validate</a>
         
     | 
| 
      
 765 
     | 
    
         
            +
              <p>Generated by <a href="http://docs.seattlerb.org/rdoc/">RDoc</a> 4.2.0.
         
     | 
| 
      
 766 
     | 
    
         
            +
              <p>Based on <a href="http://deveiate.org/projects/Darkfish-RDoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
         
     | 
| 
       749 
767 
     | 
    
         
             
            </footer>
         
     | 
| 
       750 
768 
     | 
    
         |