midilib 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. data/ChangeLog +23 -0
  2. data/Credits +6 -0
  3. data/README +33 -1
  4. data/Rakefile +1 -1
  5. data/examples/from_scratch.rb +0 -0
  6. data/examples/measures_mbt.rb +30 -0
  7. data/examples/print_program_changes.rb +28 -0
  8. data/examples/reader2text.rb +0 -0
  9. data/examples/seq2text.rb +0 -0
  10. data/examples/split.rb +0 -0
  11. data/examples/strings.rb +0 -0
  12. data/examples/transpose.rb +0 -0
  13. data/html/classes/MIDI/ActiveSense.html +156 -0
  14. data/html/classes/MIDI/ActiveSense.src/M000157.html +18 -0
  15. data/html/classes/MIDI/ActiveSense.src/M000158.html +18 -0
  16. data/html/classes/MIDI/ChannelEvent.html +179 -0
  17. data/html/classes/MIDI/ChannelEvent.src/M000129.html +20 -0
  18. data/html/classes/MIDI/ChannelEvent.src/M000130.html +18 -0
  19. data/html/classes/MIDI/ChannelPressure.html +184 -0
  20. data/html/classes/MIDI/ChannelPressure.src/M000089.html +19 -0
  21. data/html/classes/MIDI/ChannelPressure.src/M000090.html +21 -0
  22. data/html/classes/MIDI/ChannelPressure.src/M000091.html +18 -0
  23. data/html/classes/MIDI/Clock.html +156 -0
  24. data/html/classes/MIDI/Clock.src/M000145.html +18 -0
  25. data/html/classes/MIDI/Clock.src/M000146.html +18 -0
  26. data/html/classes/MIDI/Continue.html +156 -0
  27. data/html/classes/MIDI/Continue.src/M000143.html +18 -0
  28. data/html/classes/MIDI/Continue.src/M000144.html +18 -0
  29. data/html/classes/MIDI/Controller.html +189 -0
  30. data/html/classes/MIDI/Controller.src/M000134.html +21 -0
  31. data/html/classes/MIDI/Controller.src/M000135.html +22 -0
  32. data/html/classes/MIDI/Controller.src/M000136.html +18 -0
  33. data/html/classes/MIDI/Event.html +507 -0
  34. data/html/classes/MIDI/Event.src/M000166.html +30 -0
  35. data/html/classes/MIDI/Event.src/M000167.html +18 -0
  36. data/html/classes/MIDI/Event.src/M000168.html +18 -0
  37. data/html/classes/MIDI/Event.src/M000169.html +18 -0
  38. data/html/classes/MIDI/Event.src/M000170.html +18 -0
  39. data/html/classes/MIDI/Event.src/M000171.html +18 -0
  40. data/html/classes/MIDI/Event.src/M000172.html +18 -0
  41. data/html/classes/MIDI/Event.src/M000173.html +18 -0
  42. data/html/classes/MIDI/Event.src/M000174.html +18 -0
  43. data/html/classes/MIDI/Event.src/M000175.html +18 -0
  44. data/html/classes/MIDI/Event.src/M000176.html +18 -0
  45. data/html/classes/MIDI/Event.src/M000177.html +18 -0
  46. data/html/classes/MIDI/Event.src/M000178.html +22 -0
  47. data/html/classes/MIDI/Event.src/M000179.html +18 -0
  48. data/html/classes/MIDI/Event.src/M000180.html +18 -0
  49. data/html/classes/MIDI/Event.src/M000181.html +19 -0
  50. data/html/classes/MIDI/Event.src/M000182.html +18 -0
  51. data/html/classes/MIDI/IO/MIDIFile.html +931 -0
  52. data/html/classes/MIDI/IO/MIDIFile.src/M000029.html +22 -0
  53. data/html/classes/MIDI/IO/MIDIFile.src/M000030.html +24 -0
  54. data/html/classes/MIDI/IO/MIDIFile.src/M000031.html +20 -0
  55. data/html/classes/MIDI/IO/MIDIFile.src/M000032.html +19 -0
  56. data/html/classes/MIDI/IO/MIDIFile.src/M000033.html +17 -0
  57. data/html/classes/MIDI/IO/MIDIFile.src/M000034.html +17 -0
  58. data/html/classes/MIDI/IO/MIDIFile.src/M000035.html +17 -0
  59. data/html/classes/MIDI/IO/MIDIFile.src/M000036.html +17 -0
  60. data/html/classes/MIDI/IO/MIDIFile.src/M000037.html +17 -0
  61. data/html/classes/MIDI/IO/MIDIFile.src/M000038.html +17 -0
  62. data/html/classes/MIDI/IO/MIDIFile.src/M000039.html +17 -0
  63. data/html/classes/MIDI/IO/MIDIFile.src/M000040.html +17 -0
  64. data/html/classes/MIDI/IO/MIDIFile.src/M000041.html +17 -0
  65. data/html/classes/MIDI/IO/MIDIFile.src/M000042.html +17 -0
  66. data/html/classes/MIDI/IO/MIDIFile.src/M000043.html +17 -0
  67. data/html/classes/MIDI/IO/MIDIFile.src/M000044.html +17 -0
  68. data/html/classes/MIDI/IO/MIDIFile.src/M000045.html +17 -0
  69. data/html/classes/MIDI/IO/MIDIFile.src/M000046.html +17 -0
  70. data/html/classes/MIDI/IO/MIDIFile.src/M000047.html +17 -0
  71. data/html/classes/MIDI/IO/MIDIFile.src/M000048.html +17 -0
  72. data/html/classes/MIDI/IO/MIDIFile.src/M000049.html +17 -0
  73. data/html/classes/MIDI/IO/MIDIFile.src/M000050.html +17 -0
  74. data/html/classes/MIDI/IO/MIDIFile.src/M000051.html +17 -0
  75. data/html/classes/MIDI/IO/MIDIFile.src/M000052.html +17 -0
  76. data/html/classes/MIDI/IO/MIDIFile.src/M000053.html +17 -0
  77. data/html/classes/MIDI/IO/MIDIFile.src/M000054.html +43 -0
  78. data/html/classes/MIDI/IO/MIDIFile.src/M000055.html +34 -0
  79. data/html/classes/MIDI/IO/MIDIFile.src/M000056.html +96 -0
  80. data/html/classes/MIDI/IO/MIDIFile.src/M000057.html +18 -0
  81. data/html/classes/MIDI/IO/MIDIFile.src/M000058.html +48 -0
  82. data/html/classes/MIDI/IO/MIDIFile.src/M000059.html +42 -0
  83. data/html/classes/MIDI/IO/MIDIFile.src/M000060.html +19 -0
  84. data/html/classes/MIDI/IO/MIDIFile.src/M000061.html +19 -0
  85. data/html/classes/MIDI/IO/MIDIFile.src/M000062.html +20 -0
  86. data/html/classes/MIDI/IO/MIDIFile.src/M000063.html +21 -0
  87. data/html/classes/MIDI/IO/MIDIFile.src/M000064.html +31 -0
  88. data/html/classes/MIDI/IO/MIDIFile.src/M000065.html +20 -0
  89. data/html/classes/MIDI/IO/MIDIFile.src/M000066.html +22 -0
  90. data/html/classes/MIDI/IO/MIDIFile.src/M000067.html +30 -0
  91. data/html/classes/MIDI/IO/MIDIFile.src/M000068.html +18 -0
  92. data/html/classes/MIDI/IO/MIDIFile.src/M000069.html +20 -0
  93. data/html/classes/MIDI/IO/MIDIFile.src/M000070.html +18 -0
  94. data/html/classes/MIDI/IO/MIDIFile.src/M000071.html +18 -0
  95. data/html/classes/MIDI/IO/SeqReader.html +476 -0
  96. data/html/classes/MIDI/IO/SeqReader.src/M000001.html +22 -0
  97. data/html/classes/MIDI/IO/SeqReader.src/M000002.html +22 -0
  98. data/html/classes/MIDI/IO/SeqReader.src/M000003.html +21 -0
  99. data/html/classes/MIDI/IO/SeqReader.src/M000004.html +34 -0
  100. data/html/classes/MIDI/IO/SeqReader.src/M000005.html +26 -0
  101. data/html/classes/MIDI/IO/SeqReader.src/M000006.html +28 -0
  102. data/html/classes/MIDI/IO/SeqReader.src/M000007.html +21 -0
  103. data/html/classes/MIDI/IO/SeqReader.src/M000008.html +19 -0
  104. data/html/classes/MIDI/IO/SeqReader.src/M000009.html +19 -0
  105. data/html/classes/MIDI/IO/SeqReader.src/M000010.html +19 -0
  106. data/html/classes/MIDI/IO/SeqReader.src/M000011.html +19 -0
  107. data/html/classes/MIDI/IO/SeqReader.src/M000012.html +19 -0
  108. data/html/classes/MIDI/IO/SeqReader.src/M000013.html +18 -0
  109. data/html/classes/MIDI/IO/SeqReader.src/M000014.html +18 -0
  110. data/html/classes/MIDI/IO/SeqReader.src/M000015.html +29 -0
  111. data/html/classes/MIDI/IO/SeqReader.src/M000016.html +19 -0
  112. data/html/classes/MIDI/IO/SeqReader.src/M000017.html +18 -0
  113. data/html/classes/MIDI/IO/SeqReader.src/M000018.html +18 -0
  114. data/html/classes/MIDI/IO/SeqReader.src/M000019.html +18 -0
  115. data/html/classes/MIDI/IO/SeqWriter.html +267 -0
  116. data/html/classes/MIDI/IO/SeqWriter.src/M000020.html +19 -0
  117. data/html/classes/MIDI/IO/SeqWriter.src/M000021.html +25 -0
  118. data/html/classes/MIDI/IO/SeqWriter.src/M000022.html +22 -0
  119. data/html/classes/MIDI/IO/SeqWriter.src/M000023.html +54 -0
  120. data/html/classes/MIDI/IO/SeqWriter.src/M000024.html +49 -0
  121. data/html/classes/MIDI/IO/SeqWriter.src/M000025.html +21 -0
  122. data/html/classes/MIDI/IO/SeqWriter.src/M000026.html +19 -0
  123. data/html/classes/MIDI/IO/SeqWriter.src/M000027.html +24 -0
  124. data/html/classes/MIDI/IO/SeqWriter.src/M000028.html +26 -0
  125. data/html/classes/MIDI/IO.html +121 -0
  126. data/html/classes/MIDI/KeySig.html +241 -0
  127. data/html/classes/MIDI/KeySig.src/M000137.html +19 -0
  128. data/html/classes/MIDI/KeySig.src/M000138.html +23 -0
  129. data/html/classes/MIDI/KeySig.src/M000139.html +18 -0
  130. data/html/classes/MIDI/KeySig.src/M000140.html +18 -0
  131. data/html/classes/MIDI/KeySig.src/M000141.html +18 -0
  132. data/html/classes/MIDI/KeySig.src/M000142.html +23 -0
  133. data/html/classes/MIDI/Marker.html +139 -0
  134. data/html/classes/MIDI/Marker.src/M000111.html +18 -0
  135. data/html/classes/MIDI/Measure.html +242 -0
  136. data/html/classes/MIDI/Measure.src/M000147.html +23 -0
  137. data/html/classes/MIDI/Measure.src/M000148.html +20 -0
  138. data/html/classes/MIDI/Measure.src/M000149.html +18 -0
  139. data/html/classes/MIDI/Measures.html +217 -0
  140. data/html/classes/MIDI/Measures.src/M000105.html +20 -0
  141. data/html/classes/MIDI/Measures.src/M000106.html +18 -0
  142. data/html/classes/MIDI/Measures.src/M000107.html +21 -0
  143. data/html/classes/MIDI/MetaEvent.html +189 -0
  144. data/html/classes/MIDI/MetaEvent.src/M000192.html +21 -0
  145. data/html/classes/MIDI/MetaEvent.src/M000193.html +23 -0
  146. data/html/classes/MIDI/MetaEvent.src/M000194.html +53 -0
  147. data/html/classes/MIDI/NoteEvent.html +233 -0
  148. data/html/classes/MIDI/NoteEvent.src/M000092.html +21 -0
  149. data/html/classes/MIDI/NoteEvent.src/M000093.html +20 -0
  150. data/html/classes/MIDI/NoteEvent.src/M000094.html +18 -0
  151. data/html/classes/MIDI/NoteEvent.src/M000095.html +22 -0
  152. data/html/classes/MIDI/NoteOffEvent.html +169 -0
  153. data/html/classes/MIDI/NoteOffEvent.src/M000087.html +19 -0
  154. data/html/classes/MIDI/NoteOffEvent.src/M000088.html +19 -0
  155. data/html/classes/MIDI/NoteOnEvent.html +169 -0
  156. data/html/classes/MIDI/NoteOnEvent.src/M000103.html +19 -0
  157. data/html/classes/MIDI/NoteOnEvent.src/M000104.html +19 -0
  158. data/html/classes/MIDI/PitchBend.html +184 -0
  159. data/html/classes/MIDI/PitchBend.src/M000108.html +19 -0
  160. data/html/classes/MIDI/PitchBend.src/M000109.html +22 -0
  161. data/html/classes/MIDI/PitchBend.src/M000110.html +18 -0
  162. data/html/classes/MIDI/PolyPressure.html +186 -0
  163. data/html/classes/MIDI/PolyPressure.src/M000195.html +18 -0
  164. data/html/classes/MIDI/PolyPressure.src/M000196.html +18 -0
  165. data/html/classes/MIDI/PolyPressure.src/M000197.html +18 -0
  166. data/html/classes/MIDI/PolyPressure.src/M000198.html +19 -0
  167. data/html/classes/MIDI/ProgramChange.html +184 -0
  168. data/html/classes/MIDI/ProgramChange.src/M000100.html +20 -0
  169. data/html/classes/MIDI/ProgramChange.src/M000101.html +21 -0
  170. data/html/classes/MIDI/ProgramChange.src/M000102.html +18 -0
  171. data/html/classes/MIDI/Realtime.html +171 -0
  172. data/html/classes/MIDI/Realtime.src/M000084.html +19 -0
  173. data/html/classes/MIDI/Realtime.src/M000085.html +20 -0
  174. data/html/classes/MIDI/Realtime.src/M000086.html +18 -0
  175. data/html/classes/MIDI/Sequence.html +500 -0
  176. data/html/classes/MIDI/Sequence.src/M000112.html +28 -0
  177. data/html/classes/MIDI/Sequence.src/M000113.html +21 -0
  178. data/html/classes/MIDI/Sequence.src/M000114.html +22 -0
  179. data/html/classes/MIDI/Sequence.src/M000117.html +18 -0
  180. data/html/classes/MIDI/Sequence.src/M000118.html +27 -0
  181. data/html/classes/MIDI/Sequence.src/M000119.html +18 -0
  182. data/html/classes/MIDI/Sequence.src/M000120.html +19 -0
  183. data/html/classes/MIDI/Sequence.src/M000121.html +19 -0
  184. data/html/classes/MIDI/Sequence.src/M000122.html +19 -0
  185. data/html/classes/MIDI/Sequence.src/M000123.html +19 -0
  186. data/html/classes/MIDI/Sequence.src/M000124.html +18 -0
  187. data/html/classes/MIDI/Sequence.src/M000125.html +54 -0
  188. data/html/classes/MIDI/SongPointer.html +184 -0
  189. data/html/classes/MIDI/SongPointer.src/M000159.html +19 -0
  190. data/html/classes/MIDI/SongPointer.src/M000160.html +22 -0
  191. data/html/classes/MIDI/SongPointer.src/M000161.html +18 -0
  192. data/html/classes/MIDI/SongSelect.html +184 -0
  193. data/html/classes/MIDI/SongSelect.src/M000131.html +19 -0
  194. data/html/classes/MIDI/SongSelect.src/M000132.html +21 -0
  195. data/html/classes/MIDI/SongSelect.src/M000133.html +18 -0
  196. data/html/classes/MIDI/Start.html +156 -0
  197. data/html/classes/MIDI/Start.src/M000098.html +18 -0
  198. data/html/classes/MIDI/Start.src/M000099.html +18 -0
  199. data/html/classes/MIDI/Stop.html +156 -0
  200. data/html/classes/MIDI/Stop.src/M000096.html +18 -0
  201. data/html/classes/MIDI/Stop.src/M000097.html +18 -0
  202. data/html/classes/MIDI/SystemCommon.html +139 -0
  203. data/html/classes/MIDI/SystemCommon.src/M000165.html +19 -0
  204. data/html/classes/MIDI/SystemExclusive.html +184 -0
  205. data/html/classes/MIDI/SystemExclusive.src/M000162.html +19 -0
  206. data/html/classes/MIDI/SystemExclusive.src/M000163.html +23 -0
  207. data/html/classes/MIDI/SystemExclusive.src/M000164.html +18 -0
  208. data/html/classes/MIDI/SystemReset.html +156 -0
  209. data/html/classes/MIDI/SystemReset.src/M000082.html +18 -0
  210. data/html/classes/MIDI/SystemReset.src/M000083.html +18 -0
  211. data/html/classes/MIDI/Tempo.html +250 -0
  212. data/html/classes/MIDI/Tempo.src/M000183.html +18 -0
  213. data/html/classes/MIDI/Tempo.src/M000184.html +20 -0
  214. data/html/classes/MIDI/Tempo.src/M000185.html +18 -0
  215. data/html/classes/MIDI/Tempo.src/M000186.html +18 -0
  216. data/html/classes/MIDI/Tempo.src/M000187.html +18 -0
  217. data/html/classes/MIDI/Tempo.src/M000188.html +25 -0
  218. data/html/classes/MIDI/Tempo.src/M000189.html +18 -0
  219. data/html/classes/MIDI/TimeSig.html +263 -0
  220. data/html/classes/MIDI/TimeSig.src/M000150.html +19 -0
  221. data/html/classes/MIDI/TimeSig.src/M000151.html +25 -0
  222. data/html/classes/MIDI/TimeSig.src/M000152.html +18 -0
  223. data/html/classes/MIDI/TimeSig.src/M000153.html +18 -0
  224. data/html/classes/MIDI/TimeSig.src/M000154.html +18 -0
  225. data/html/classes/MIDI/TimeSig.src/M000155.html +18 -0
  226. data/html/classes/MIDI/TimeSig.src/M000156.html +18 -0
  227. data/html/classes/MIDI/Track.html +389 -0
  228. data/html/classes/MIDI/Track.src/M000072.html +23 -0
  229. data/html/classes/MIDI/Track.src/M000073.html +21 -0
  230. data/html/classes/MIDI/Track.src/M000074.html +26 -0
  231. data/html/classes/MIDI/Track.src/M000075.html +18 -0
  232. data/html/classes/MIDI/Track.src/M000076.html +22 -0
  233. data/html/classes/MIDI/Track.src/M000077.html +25 -0
  234. data/html/classes/MIDI/Track.src/M000078.html +22 -0
  235. data/html/classes/MIDI/Track.src/M000079.html +26 -0
  236. data/html/classes/MIDI/Track.src/M000080.html +18 -0
  237. data/html/classes/MIDI/Track.src/M000081.html +19 -0
  238. data/html/classes/MIDI/TuneRequest.html +171 -0
  239. data/html/classes/MIDI/TuneRequest.src/M000126.html +18 -0
  240. data/html/classes/MIDI/TuneRequest.src/M000127.html +20 -0
  241. data/html/classes/MIDI/TuneRequest.src/M000128.html +18 -0
  242. data/html/classes/MIDI/Utils.html +190 -0
  243. data/html/classes/MIDI/Utils.src/M000190.html +20 -0
  244. data/html/classes/MIDI/Utils.src/M000191.html +25 -0
  245. data/html/classes/MIDI.html +758 -0
  246. data/html/created.rid +1 -0
  247. data/html/files/README.html +681 -0
  248. data/html/files/TODO.html +142 -0
  249. data/html/files/lib/midilib/consts_rb.html +107 -0
  250. data/html/files/lib/midilib/event_rb.html +109 -0
  251. data/html/files/lib/midilib/info_rb.html +101 -0
  252. data/html/files/lib/midilib/io/midifile_rb.html +108 -0
  253. data/html/files/lib/midilib/io/seqreader_rb.html +110 -0
  254. data/html/files/lib/midilib/io/seqwriter_rb.html +115 -0
  255. data/html/files/lib/midilib/measure_rb.html +108 -0
  256. data/html/files/lib/midilib/sequence_rb.html +110 -0
  257. data/html/files/lib/midilib/track_rb.html +108 -0
  258. data/html/files/lib/midilib/utils_rb.html +101 -0
  259. data/html/files/lib/midilib_rb.html +124 -0
  260. data/html/fr_class_index.html +63 -0
  261. data/html/fr_file_index.html +39 -0
  262. data/html/fr_method_index.html +224 -0
  263. data/html/index.html +24 -0
  264. data/html/rdoc-style.css +208 -0
  265. data/lib/midilib/consts.rb +2 -1
  266. data/lib/midilib/event.rb +132 -4
  267. data/lib/midilib/info.rb +2 -2
  268. data/lib/midilib/io/midifile.rb +3 -2
  269. data/lib/midilib/io/seqreader.rb +10 -6
  270. data/lib/midilib/measure.rb +80 -0
  271. data/lib/midilib/sequence.rb +50 -3
  272. data/test/test.mid +0 -0
  273. metadata +343 -38
data/ChangeLog CHANGED
@@ -1,3 +1,26 @@
1
+ 2007-12-11 Jim Menard <jim@iamplify.com>
2
+
3
+ * lib/midilib/io/seqreader.rb: Fixed text method and added default
4
+ implementation of key_signature.
5
+
6
+ 2007-12-09 Jim Menard <jim@iamplify.com>
7
+
8
+ * examples/measures_mbt.rb: Added.
9
+
10
+ 2007-12-09 Jim Menard <jim@iamplify.com>
11
+
12
+ * lib/midilib/event.rb: Added code that fixes bpm calculation
13
+ bugs, and his TimeSig and KeySig classes.
14
+
15
+ * lib/midilib/measure.rb: Added.
16
+
17
+ * lib/midilib/sequence.rb: Fixed clock. Added get_measures method.
18
+
19
+ 2007-12-09 Jim Menard <jim@iamplify.com>
20
+
21
+ * lib/midilib/event.rb: added program_change? and
22
+ print_channel_numbers_from_one to Event.
23
+
1
24
  2007-03-17 Jim Menard <jimm@io.com>
2
25
 
3
26
  * Version 1.0.0 released. I will no longer be maintaining this
data/Credits CHANGED
@@ -19,3 +19,9 @@ Emanuel Borsboom <emanuel.borsboom@gmail.com>
19
19
  Christopher Rose <cmr@synopsys.com>
20
20
 
21
21
  Found bug in Track#recalc_delta_from_times.
22
+
23
+ Jari Williamsson <jari.williamsson@mailbox.swipnet.se>
24
+
25
+ Contributed Measure and Measures, TimeSig and KeySig, and fixes to events.
26
+ Added get_measures to Sequence. Added default implementaiton of
27
+ key_signature in SeqReader. Contributed the measures_mbt.rb example.
data/README CHANGED
@@ -92,6 +92,24 @@ This bit mask is set when the track is read from the MIDI file by a SeqReader
92
92
  but is _not_ kept up to date by any other methods. Specifically, if you add
93
93
  events to a track at any other time, the bit mask will not be updated.
94
94
 
95
+ === MIDI::Measure
96
+
97
+ This class contains information about a measure from the sequence. Measure
98
+ data is based on the time signature information from the sequence and is not
99
+ stored in the sequence itself.
100
+
101
+ === MIDI::Measures
102
+
103
+ The class MIDI::Sequence method get_measures returns a MIDI::Measures object.
104
+ MIDI::Measures is a subclass of Array. It is a specialized container for
105
+ MIDI::Measure objects, which can be use to map event times to measure numbers.
106
+ Please note that this object has to be remade when events are deleted/added in
107
+ the sequence.
108
+
109
+ MIDI::Measure and MIDI::Measures are brought to us by Jari Williamsson
110
+ <jari.williamsson@mailbox.swipnet.se>, who also contributed some improvements
111
+ to the MIDI::Event and MIDI::Track classes.
112
+
95
113
  === MIDI::Event
96
114
 
97
115
  Each event holds not only its delta time but also its time from the start of
@@ -99,7 +117,12 @@ the track. The track is responsible for recalculating its events' start times.
99
117
  You can call MIDI::Track#recalc_times to do so.
100
118
 
101
119
  Events have a number of boolean methods that identify their types, like
102
- channel?, note?, note_on?, note_off?, meta?, system?, and realtime?.
120
+ channel?, note?, note_on?, note_off?, meta?, system?, realtime?, and
121
+ program_change?. Events know how to print themselves. By default, all numbers
122
+ are printed as hexidecimal and channel numbers are printed from 0-15. Setting
123
+ print_decimal_numbers to true will output decimal numbers and setting
124
+ print_channel_numbers_from_one will output channel numbers from 1-16.
125
+
103
126
 
104
127
  Subclasses of MIDI::Event implement the various MIDI messages such as note on
105
128
  and off, controller values, system exclusive data, and realtime bytes.
@@ -315,6 +338,15 @@ non-commercial purposes as long as the author is given credit.
315
338
 
316
339
  === Recent Changes
317
340
 
341
+ ==== Changes for 1.1.1:
342
+
343
+ * Mak MIDI::IO::MIDIFile.getc do the right thing for both Ruby 1.8 and 1.9.
344
+
345
+ ==== Changes for 1.1.0:
346
+
347
+ * Added test/test.mid to list of files to be included when packaging midifile
348
+ for distribution.
349
+
318
350
  ==== Changes for 1.0.0:
319
351
 
320
352
  * Fixed the bug in Track#recalc_delta_from_times found by Christopher Rose.
data/Rakefile CHANGED
@@ -14,7 +14,7 @@ PKG_FILES = FileList[ 'ChangeLog', 'Credits', 'README', 'Rakefile', 'TODO',
14
14
  'html/**/*',
15
15
  'install.rb',
16
16
  'lib/**/*.rb',
17
- 'test/**/*.rb']
17
+ 'test/**/*']
18
18
 
19
19
  task :default => [:package]
20
20
 
File without changes
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # usage: measure_mbt.rb midi_file
4
+ #
5
+ # This program loads a sequences and prints out all start-of-notes
6
+ # in a "sequencer-style" manner:
7
+ # Measure:Beat:Tick Channel: Note-name
8
+
9
+ # Start looking for MIDI module classes in the directory above this one.
10
+ # This forces us to use the local copy, even if there is a previously
11
+ # installed version out there somewhere.
12
+ $LOAD_PATH[0, 0] = File.join(File.dirname(__FILE__), '..', 'lib')
13
+
14
+ require 'midilib/sequence'
15
+
16
+ seq = MIDI::Sequence.new()
17
+ File.open(ARGV[0], 'rb') { | file | seq.read(file) }
18
+
19
+ # Get all measures, so events can be mapped to measures:
20
+ measures = seq.get_measures
21
+
22
+ seq.each { | track |
23
+ track.each { | e |
24
+ if e.note_on? then
25
+ # Print out start of notes
26
+ e.print_note_names = true
27
+ puts measures.to_mbt(e) + " ch #{e.channel}: #{e.note_to_s}"
28
+ end
29
+ }
30
+ }
@@ -0,0 +1,28 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ # Shows use of print_decimal_numbers and print_channel_numbers_from_one.
4
+
5
+ $LOAD_PATH[0, 0] = File.join(File.dirname(__FILE__), '..', 'lib')
6
+
7
+ require 'midilib/sequence'
8
+
9
+ DEFAULT_MIDI_TEST_FILE = 'NoFences.mid'
10
+
11
+ # Read from MIDI file
12
+ seq = MIDI::Sequence.new()
13
+
14
+ File.open(ARGV[0] || DEFAULT_MIDI_TEST_FILE, 'rb') { | file |
15
+ # The block we pass in to Sequence.read is called at the end of every
16
+ # track read. It is optional, but is useful for progress reports.
17
+ seq.read(file)
18
+ }
19
+
20
+ seq.each { | track |
21
+ puts
22
+ puts "*** track name \"#{track.name}\", \"#{track.instrument}\""
23
+ track.each { | e |
24
+ e.print_decimal_numbers = true
25
+ e.print_channel_numbers_from_one = true
26
+ puts e if e.program_change?
27
+ }
28
+ }
File without changes
data/examples/seq2text.rb CHANGED
File without changes
data/examples/split.rb CHANGED
File without changes
data/examples/strings.rb CHANGED
File without changes
File without changes
@@ -0,0 +1,156 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: MIDI::ActiveSense</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">MIDI::ActiveSense</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/midilib/event_rb.html">
59
+ lib/midilib/event.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Realtime.html">
69
+ Realtime
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+
84
+
85
+ </div>
86
+
87
+ <div id="method-list">
88
+ <h3 class="section-bar">Methods</h3>
89
+
90
+ <div class="name-list">
91
+ <a href="#M000157">new</a>&nbsp;&nbsp;
92
+ <a href="#M000158">to_s</a>&nbsp;&nbsp;
93
+ </div>
94
+ </div>
95
+
96
+ </div>
97
+
98
+
99
+ <!-- if includes -->
100
+
101
+ <div id="section">
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+ <!-- if method_list -->
111
+ <div id="methods">
112
+ <h3 class="section-bar">Public Class methods</h3>
113
+
114
+ <div id="method-M000157" class="method-detail">
115
+ <a name="M000157"></a>
116
+
117
+ <div class="method-heading">
118
+ <a href="ActiveSense.src/M000157.html" target="Code" class="method-signature"
119
+ onclick="popupCode('ActiveSense.src/M000157.html');return false;">
120
+ <span class="method-name">new</span><span class="method-args">(delta_time = 0)</span>
121
+ </a>
122
+ </div>
123
+
124
+ <div class="method-description">
125
+ </div>
126
+ </div>
127
+
128
+ <h3 class="section-bar">Public Instance methods</h3>
129
+
130
+ <div id="method-M000158" class="method-detail">
131
+ <a name="M000158"></a>
132
+
133
+ <div class="method-heading">
134
+ <a href="ActiveSense.src/M000158.html" target="Code" class="method-signature"
135
+ onclick="popupCode('ActiveSense.src/M000158.html');return false;">
136
+ <span class="method-name">to_s</span><span class="method-args">()</span>
137
+ </a>
138
+ </div>
139
+
140
+ <div class="method-description">
141
+ </div>
142
+ </div>
143
+
144
+
145
+ </div>
146
+
147
+
148
+ </div>
149
+
150
+
151
+ <div id="validator-badges">
152
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
153
+ </div>
154
+
155
+ </body>
156
+ </html>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>new (MIDI::ActiveSense)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/midilib/event.rb, line 464</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">delta_time</span> = <span class="ruby-value">0</span>)
15
+ <span class="ruby-keyword kw">super</span>(<span class="ruby-constant">ACTIVE_SENSE</span>, <span class="ruby-identifier">delta_time</span>)
16
+ <span class="ruby-keyword kw">end</span></pre>
17
+ </body>
18
+ </html>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>to_s (MIDI::ActiveSense)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/midilib/event.rb, line 467</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
15
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">super</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-value str">&quot;act sens&quot;</span>
16
+ <span class="ruby-keyword kw">end</span></pre>
17
+ </body>
18
+ </html>
@@ -0,0 +1,179 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: MIDI::ChannelEvent</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">MIDI::ChannelEvent</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/midilib/event_rb.html">
59
+ lib/midilib/event.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Event.html">
69
+ Event
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+ <div id="description">
84
+ <p>
85
+ The abstract superclass of all channel events (events that have a <a
86
+ href="../MIDI.html">MIDI</a> channel, like notes and program changes).
87
+ </p>
88
+
89
+ </div>
90
+
91
+
92
+ </div>
93
+
94
+ <div id="method-list">
95
+ <h3 class="section-bar">Methods</h3>
96
+
97
+ <div class="name-list">
98
+ <a href="#M000129">new</a>&nbsp;&nbsp;
99
+ <a href="#M000130">to_s</a>&nbsp;&nbsp;
100
+ </div>
101
+ </div>
102
+
103
+ </div>
104
+
105
+
106
+ <!-- if includes -->
107
+
108
+ <div id="section">
109
+
110
+
111
+
112
+
113
+
114
+ <div id="attribute-list">
115
+ <h3 class="section-bar">Attributes</h3>
116
+
117
+ <div class="name-list">
118
+ <table>
119
+ <tr class="top-aligned-row context-row">
120
+ <td class="context-item-name">channel</td>
121
+ <td class="context-item-value">&nbsp;[RW]&nbsp;</td>
122
+ <td class="context-item-desc">
123
+ <a href="../MIDI.html">MIDI</a> channel, 0-15.
124
+
125
+ </td>
126
+ </tr>
127
+ </table>
128
+ </div>
129
+ </div>
130
+
131
+
132
+
133
+ <!-- if method_list -->
134
+ <div id="methods">
135
+ <h3 class="section-bar">Public Class methods</h3>
136
+
137
+ <div id="method-M000129" class="method-detail">
138
+ <a name="M000129"></a>
139
+
140
+ <div class="method-heading">
141
+ <a href="ChannelEvent.src/M000129.html" target="Code" class="method-signature"
142
+ onclick="popupCode('ChannelEvent.src/M000129.html');return false;">
143
+ <span class="method-name">new</span><span class="method-args">(status, channel, delta_time)</span>
144
+ </a>
145
+ </div>
146
+
147
+ <div class="method-description">
148
+ </div>
149
+ </div>
150
+
151
+ <h3 class="section-bar">Public Instance methods</h3>
152
+
153
+ <div id="method-M000130" class="method-detail">
154
+ <a name="M000130"></a>
155
+
156
+ <div class="method-heading">
157
+ <a href="ChannelEvent.src/M000130.html" target="Code" class="method-signature"
158
+ onclick="popupCode('ChannelEvent.src/M000130.html');return false;">
159
+ <span class="method-name">to_s</span><span class="method-args">()</span>
160
+ </a>
161
+ </div>
162
+
163
+ <div class="method-description">
164
+ </div>
165
+ </div>
166
+
167
+
168
+ </div>
169
+
170
+
171
+ </div>
172
+
173
+
174
+ <div id="validator-badges">
175
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
176
+ </div>
177
+
178
+ </body>
179
+ </html>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>new (MIDI::ChannelEvent)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/midilib/event.rb, line 148</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">status</span>, <span class="ruby-identifier">channel</span>, <span class="ruby-identifier">delta_time</span>)
15
+ <span class="ruby-keyword kw">super</span>(<span class="ruby-identifier">status</span>, <span class="ruby-identifier">delta_time</span>)
16
+ <span class="ruby-ivar">@channel</span> = <span class="ruby-identifier">channel</span>
17
+ <span class="ruby-ivar">@is_channel</span> = <span class="ruby-keyword kw">true</span>
18
+ <span class="ruby-keyword kw">end</span></pre>
19
+ </body>
20
+ </html>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>to_s (MIDI::ChannelEvent)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/midilib/event.rb, line 155</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_s</span>
15
+ <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">super</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-node">&quot;ch #{channel_to_s(@channel)} &quot;</span>
16
+ <span class="ruby-keyword kw">end</span></pre>
17
+ </body>
18
+ </html>