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