midilib 0.8.4 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (234) hide show
  1. data/ChangeLog +2 -0
  2. data/Credits +4 -0
  3. data/README +23 -6
  4. data/install.rb +1 -1
  5. data/lib/midilib/consts.rb +3 -0
  6. data/lib/midilib/event.rb +2 -2
  7. data/lib/midilib/info.rb +1 -1
  8. data/lib/midilib/io/seqreader.rb +1 -1
  9. data/lib/midilib/track.rb +11 -5
  10. data/test/test_event.rb +50 -0
  11. data/test/test_track.rb +9 -0
  12. metadata +3 -263
  13. data/html/classes/MIDI.html +0 -738
  14. data/html/classes/MIDI/ActiveSense.html +0 -156
  15. data/html/classes/MIDI/ActiveSense.src/M000136.html +0 -18
  16. data/html/classes/MIDI/ActiveSense.src/M000137.html +0 -18
  17. data/html/classes/MIDI/ChannelEvent.html +0 -179
  18. data/html/classes/MIDI/ChannelEvent.src/M000124.html +0 -20
  19. data/html/classes/MIDI/ChannelEvent.src/M000125.html +0 -18
  20. data/html/classes/MIDI/ChannelPressure.html +0 -184
  21. data/html/classes/MIDI/ChannelPressure.src/M000088.html +0 -19
  22. data/html/classes/MIDI/ChannelPressure.src/M000089.html +0 -21
  23. data/html/classes/MIDI/ChannelPressure.src/M000090.html +0 -18
  24. data/html/classes/MIDI/Clock.html +0 -156
  25. data/html/classes/MIDI/Clock.src/M000134.html +0 -18
  26. data/html/classes/MIDI/Clock.src/M000135.html +0 -18
  27. data/html/classes/MIDI/Continue.html +0 -156
  28. data/html/classes/MIDI/Continue.src/M000132.html +0 -18
  29. data/html/classes/MIDI/Continue.src/M000133.html +0 -18
  30. data/html/classes/MIDI/Controller.html +0 -189
  31. data/html/classes/MIDI/Controller.src/M000129.html +0 -21
  32. data/html/classes/MIDI/Controller.src/M000130.html +0 -22
  33. data/html/classes/MIDI/Controller.src/M000131.html +0 -18
  34. data/html/classes/MIDI/Event.html +0 -424
  35. data/html/classes/MIDI/Event.src/M000145.html +0 -27
  36. data/html/classes/MIDI/Event.src/M000146.html +0 -18
  37. data/html/classes/MIDI/Event.src/M000147.html +0 -18
  38. data/html/classes/MIDI/Event.src/M000148.html +0 -18
  39. data/html/classes/MIDI/Event.src/M000149.html +0 -18
  40. data/html/classes/MIDI/Event.src/M000150.html +0 -18
  41. data/html/classes/MIDI/Event.src/M000151.html +0 -18
  42. data/html/classes/MIDI/Event.src/M000152.html +0 -18
  43. data/html/classes/MIDI/Event.src/M000153.html +0 -18
  44. data/html/classes/MIDI/Event.src/M000154.html +0 -22
  45. data/html/classes/MIDI/Event.src/M000155.html +0 -18
  46. data/html/classes/MIDI/Event.src/M000156.html +0 -18
  47. data/html/classes/MIDI/Event.src/M000157.html +0 -18
  48. data/html/classes/MIDI/IO.html +0 -121
  49. data/html/classes/MIDI/IO/MIDIFile.html +0 -925
  50. data/html/classes/MIDI/IO/MIDIFile.src/M000028.html +0 -22
  51. data/html/classes/MIDI/IO/MIDIFile.src/M000029.html +0 -24
  52. data/html/classes/MIDI/IO/MIDIFile.src/M000030.html +0 -19
  53. data/html/classes/MIDI/IO/MIDIFile.src/M000031.html +0 -19
  54. data/html/classes/MIDI/IO/MIDIFile.src/M000032.html +0 -17
  55. data/html/classes/MIDI/IO/MIDIFile.src/M000033.html +0 -17
  56. data/html/classes/MIDI/IO/MIDIFile.src/M000034.html +0 -17
  57. data/html/classes/MIDI/IO/MIDIFile.src/M000035.html +0 -17
  58. data/html/classes/MIDI/IO/MIDIFile.src/M000036.html +0 -17
  59. data/html/classes/MIDI/IO/MIDIFile.src/M000037.html +0 -17
  60. data/html/classes/MIDI/IO/MIDIFile.src/M000038.html +0 -17
  61. data/html/classes/MIDI/IO/MIDIFile.src/M000039.html +0 -17
  62. data/html/classes/MIDI/IO/MIDIFile.src/M000040.html +0 -17
  63. data/html/classes/MIDI/IO/MIDIFile.src/M000041.html +0 -17
  64. data/html/classes/MIDI/IO/MIDIFile.src/M000042.html +0 -17
  65. data/html/classes/MIDI/IO/MIDIFile.src/M000043.html +0 -17
  66. data/html/classes/MIDI/IO/MIDIFile.src/M000044.html +0 -17
  67. data/html/classes/MIDI/IO/MIDIFile.src/M000045.html +0 -17
  68. data/html/classes/MIDI/IO/MIDIFile.src/M000046.html +0 -17
  69. data/html/classes/MIDI/IO/MIDIFile.src/M000047.html +0 -17
  70. data/html/classes/MIDI/IO/MIDIFile.src/M000048.html +0 -17
  71. data/html/classes/MIDI/IO/MIDIFile.src/M000049.html +0 -17
  72. data/html/classes/MIDI/IO/MIDIFile.src/M000050.html +0 -17
  73. data/html/classes/MIDI/IO/MIDIFile.src/M000051.html +0 -17
  74. data/html/classes/MIDI/IO/MIDIFile.src/M000052.html +0 -17
  75. data/html/classes/MIDI/IO/MIDIFile.src/M000053.html +0 -43
  76. data/html/classes/MIDI/IO/MIDIFile.src/M000054.html +0 -34
  77. data/html/classes/MIDI/IO/MIDIFile.src/M000055.html +0 -96
  78. data/html/classes/MIDI/IO/MIDIFile.src/M000056.html +0 -18
  79. data/html/classes/MIDI/IO/MIDIFile.src/M000057.html +0 -48
  80. data/html/classes/MIDI/IO/MIDIFile.src/M000058.html +0 -42
  81. data/html/classes/MIDI/IO/MIDIFile.src/M000059.html +0 -19
  82. data/html/classes/MIDI/IO/MIDIFile.src/M000060.html +0 -19
  83. data/html/classes/MIDI/IO/MIDIFile.src/M000061.html +0 -20
  84. data/html/classes/MIDI/IO/MIDIFile.src/M000062.html +0 -21
  85. data/html/classes/MIDI/IO/MIDIFile.src/M000063.html +0 -31
  86. data/html/classes/MIDI/IO/MIDIFile.src/M000064.html +0 -20
  87. data/html/classes/MIDI/IO/MIDIFile.src/M000065.html +0 -22
  88. data/html/classes/MIDI/IO/MIDIFile.src/M000066.html +0 -30
  89. data/html/classes/MIDI/IO/MIDIFile.src/M000067.html +0 -18
  90. data/html/classes/MIDI/IO/MIDIFile.src/M000068.html +0 -20
  91. data/html/classes/MIDI/IO/MIDIFile.src/M000069.html +0 -18
  92. data/html/classes/MIDI/IO/MIDIFile.src/M000070.html +0 -18
  93. data/html/classes/MIDI/IO/SeqReader.html +0 -460
  94. data/html/classes/MIDI/IO/SeqReader.src/M000001.html +0 -22
  95. data/html/classes/MIDI/IO/SeqReader.src/M000002.html +0 -22
  96. data/html/classes/MIDI/IO/SeqReader.src/M000003.html +0 -21
  97. data/html/classes/MIDI/IO/SeqReader.src/M000004.html +0 -34
  98. data/html/classes/MIDI/IO/SeqReader.src/M000005.html +0 -26
  99. data/html/classes/MIDI/IO/SeqReader.src/M000006.html +0 -28
  100. data/html/classes/MIDI/IO/SeqReader.src/M000007.html +0 -21
  101. data/html/classes/MIDI/IO/SeqReader.src/M000008.html +0 -19
  102. data/html/classes/MIDI/IO/SeqReader.src/M000009.html +0 -19
  103. data/html/classes/MIDI/IO/SeqReader.src/M000010.html +0 -19
  104. data/html/classes/MIDI/IO/SeqReader.src/M000011.html +0 -19
  105. data/html/classes/MIDI/IO/SeqReader.src/M000012.html +0 -19
  106. data/html/classes/MIDI/IO/SeqReader.src/M000013.html +0 -18
  107. data/html/classes/MIDI/IO/SeqReader.src/M000014.html +0 -18
  108. data/html/classes/MIDI/IO/SeqReader.src/M000015.html +0 -27
  109. data/html/classes/MIDI/IO/SeqReader.src/M000016.html +0 -18
  110. data/html/classes/MIDI/IO/SeqReader.src/M000017.html +0 -18
  111. data/html/classes/MIDI/IO/SeqReader.src/M000018.html +0 -18
  112. data/html/classes/MIDI/IO/SeqWriter.html +0 -267
  113. data/html/classes/MIDI/IO/SeqWriter.src/M000019.html +0 -19
  114. data/html/classes/MIDI/IO/SeqWriter.src/M000020.html +0 -25
  115. data/html/classes/MIDI/IO/SeqWriter.src/M000021.html +0 -22
  116. data/html/classes/MIDI/IO/SeqWriter.src/M000022.html +0 -54
  117. data/html/classes/MIDI/IO/SeqWriter.src/M000023.html +0 -49
  118. data/html/classes/MIDI/IO/SeqWriter.src/M000024.html +0 -21
  119. data/html/classes/MIDI/IO/SeqWriter.src/M000025.html +0 -19
  120. data/html/classes/MIDI/IO/SeqWriter.src/M000026.html +0 -24
  121. data/html/classes/MIDI/IO/SeqWriter.src/M000027.html +0 -26
  122. data/html/classes/MIDI/Marker.html +0 -139
  123. data/html/classes/MIDI/Marker.src/M000107.html +0 -18
  124. data/html/classes/MIDI/MetaEvent.html +0 -189
  125. data/html/classes/MIDI/MetaEvent.src/M000167.html +0 -21
  126. data/html/classes/MIDI/MetaEvent.src/M000168.html +0 -23
  127. data/html/classes/MIDI/MetaEvent.src/M000169.html +0 -53
  128. data/html/classes/MIDI/NoteEvent.html +0 -233
  129. data/html/classes/MIDI/NoteEvent.src/M000091.html +0 -21
  130. data/html/classes/MIDI/NoteEvent.src/M000092.html +0 -20
  131. data/html/classes/MIDI/NoteEvent.src/M000093.html +0 -18
  132. data/html/classes/MIDI/NoteEvent.src/M000094.html +0 -22
  133. data/html/classes/MIDI/NoteOffEvent.html +0 -169
  134. data/html/classes/MIDI/NoteOffEvent.src/M000086.html +0 -19
  135. data/html/classes/MIDI/NoteOffEvent.src/M000087.html +0 -19
  136. data/html/classes/MIDI/NoteOnEvent.html +0 -169
  137. data/html/classes/MIDI/NoteOnEvent.src/M000102.html +0 -19
  138. data/html/classes/MIDI/NoteOnEvent.src/M000103.html +0 -19
  139. data/html/classes/MIDI/PitchBend.html +0 -184
  140. data/html/classes/MIDI/PitchBend.src/M000104.html +0 -19
  141. data/html/classes/MIDI/PitchBend.src/M000105.html +0 -22
  142. data/html/classes/MIDI/PitchBend.src/M000106.html +0 -18
  143. data/html/classes/MIDI/PolyPressure.html +0 -186
  144. data/html/classes/MIDI/PolyPressure.src/M000170.html +0 -18
  145. data/html/classes/MIDI/PolyPressure.src/M000171.html +0 -18
  146. data/html/classes/MIDI/PolyPressure.src/M000172.html +0 -18
  147. data/html/classes/MIDI/PolyPressure.src/M000173.html +0 -19
  148. data/html/classes/MIDI/ProgramChange.html +0 -184
  149. data/html/classes/MIDI/ProgramChange.src/M000099.html +0 -19
  150. data/html/classes/MIDI/ProgramChange.src/M000100.html +0 -21
  151. data/html/classes/MIDI/ProgramChange.src/M000101.html +0 -18
  152. data/html/classes/MIDI/Realtime.html +0 -171
  153. data/html/classes/MIDI/Realtime.src/M000083.html +0 -19
  154. data/html/classes/MIDI/Realtime.src/M000084.html +0 -20
  155. data/html/classes/MIDI/Realtime.src/M000085.html +0 -18
  156. data/html/classes/MIDI/Sequence.html +0 -469
  157. data/html/classes/MIDI/Sequence.src/M000108.html +0 -28
  158. data/html/classes/MIDI/Sequence.src/M000109.html +0 -21
  159. data/html/classes/MIDI/Sequence.src/M000110.html +0 -22
  160. data/html/classes/MIDI/Sequence.src/M000113.html +0 -18
  161. data/html/classes/MIDI/Sequence.src/M000114.html +0 -27
  162. data/html/classes/MIDI/Sequence.src/M000115.html +0 -18
  163. data/html/classes/MIDI/Sequence.src/M000116.html +0 -19
  164. data/html/classes/MIDI/Sequence.src/M000117.html +0 -19
  165. data/html/classes/MIDI/Sequence.src/M000118.html +0 -20
  166. data/html/classes/MIDI/Sequence.src/M000119.html +0 -19
  167. data/html/classes/MIDI/Sequence.src/M000120.html +0 -18
  168. data/html/classes/MIDI/SongPointer.html +0 -184
  169. data/html/classes/MIDI/SongPointer.src/M000138.html +0 -19
  170. data/html/classes/MIDI/SongPointer.src/M000139.html +0 -22
  171. data/html/classes/MIDI/SongPointer.src/M000140.html +0 -18
  172. data/html/classes/MIDI/SongSelect.html +0 -184
  173. data/html/classes/MIDI/SongSelect.src/M000126.html +0 -19
  174. data/html/classes/MIDI/SongSelect.src/M000127.html +0 -21
  175. data/html/classes/MIDI/SongSelect.src/M000128.html +0 -18
  176. data/html/classes/MIDI/Start.html +0 -156
  177. data/html/classes/MIDI/Start.src/M000097.html +0 -18
  178. data/html/classes/MIDI/Start.src/M000098.html +0 -18
  179. data/html/classes/MIDI/Stop.html +0 -156
  180. data/html/classes/MIDI/Stop.src/M000095.html +0 -18
  181. data/html/classes/MIDI/Stop.src/M000096.html +0 -18
  182. data/html/classes/MIDI/SystemCommon.html +0 -139
  183. data/html/classes/MIDI/SystemCommon.src/M000144.html +0 -19
  184. data/html/classes/MIDI/SystemExclusive.html +0 -184
  185. data/html/classes/MIDI/SystemExclusive.src/M000141.html +0 -19
  186. data/html/classes/MIDI/SystemExclusive.src/M000142.html +0 -23
  187. data/html/classes/MIDI/SystemExclusive.src/M000143.html +0 -18
  188. data/html/classes/MIDI/SystemReset.html +0 -156
  189. data/html/classes/MIDI/SystemReset.src/M000081.html +0 -18
  190. data/html/classes/MIDI/SystemReset.src/M000082.html +0 -18
  191. data/html/classes/MIDI/Tempo.html +0 -250
  192. data/html/classes/MIDI/Tempo.src/M000158.html +0 -18
  193. data/html/classes/MIDI/Tempo.src/M000159.html +0 -18
  194. data/html/classes/MIDI/Tempo.src/M000160.html +0 -18
  195. data/html/classes/MIDI/Tempo.src/M000161.html +0 -18
  196. data/html/classes/MIDI/Tempo.src/M000162.html +0 -18
  197. data/html/classes/MIDI/Tempo.src/M000163.html +0 -25
  198. data/html/classes/MIDI/Tempo.src/M000164.html +0 -18
  199. data/html/classes/MIDI/Track.html +0 -380
  200. data/html/classes/MIDI/Track.src/M000071.html +0 -23
  201. data/html/classes/MIDI/Track.src/M000072.html +0 -21
  202. data/html/classes/MIDI/Track.src/M000073.html +0 -26
  203. data/html/classes/MIDI/Track.src/M000074.html +0 -18
  204. data/html/classes/MIDI/Track.src/M000075.html +0 -22
  205. data/html/classes/MIDI/Track.src/M000076.html +0 -20
  206. data/html/classes/MIDI/Track.src/M000077.html +0 -22
  207. data/html/classes/MIDI/Track.src/M000078.html +0 -22
  208. data/html/classes/MIDI/Track.src/M000079.html +0 -18
  209. data/html/classes/MIDI/Track.src/M000080.html +0 -19
  210. data/html/classes/MIDI/TuneRequest.html +0 -171
  211. data/html/classes/MIDI/TuneRequest.src/M000121.html +0 -18
  212. data/html/classes/MIDI/TuneRequest.src/M000122.html +0 -20
  213. data/html/classes/MIDI/TuneRequest.src/M000123.html +0 -18
  214. data/html/classes/MIDI/Utils.html +0 -190
  215. data/html/classes/MIDI/Utils.src/M000165.html +0 -20
  216. data/html/classes/MIDI/Utils.src/M000166.html +0 -25
  217. data/html/created.rid +0 -1
  218. data/html/files/README.html +0 -599
  219. data/html/files/TODO.html +0 -142
  220. data/html/files/lib/midilib/consts_rb.html +0 -107
  221. data/html/files/lib/midilib/event_rb.html +0 -109
  222. data/html/files/lib/midilib/info_rb.html +0 -101
  223. data/html/files/lib/midilib/io/midifile_rb.html +0 -108
  224. data/html/files/lib/midilib/io/seqreader_rb.html +0 -110
  225. data/html/files/lib/midilib/io/seqwriter_rb.html +0 -115
  226. data/html/files/lib/midilib/sequence_rb.html +0 -109
  227. data/html/files/lib/midilib/track_rb.html +0 -108
  228. data/html/files/lib/midilib/utils_rb.html +0 -101
  229. data/html/files/lib/midilib_rb.html +0 -124
  230. data/html/fr_class_index.html +0 -59
  231. data/html/fr_file_index.html +0 -38
  232. data/html/fr_method_index.html +0 -199
  233. data/html/index.html +0 -24
  234. data/html/rdoc-style.css +0 -208
data/ChangeLog CHANGED
@@ -1,5 +1,7 @@
1
1
  2005-03-21 Jim Menard <jimm@io.com>
2
2
 
3
+ * Version 0.8.4 released.
4
+
3
5
  * lib/midilib/event.rb (Realtime::initialize): set @is_realtime
4
6
  to true, not false.
5
7
  (SystemCommon::initialize): moved @is_system = true to here
data/Credits CHANGED
@@ -6,3 +6,7 @@ Mike Hall <m3ha11@rcn.com>
6
6
  Found errors in example scripts' $LOAD_PATH and a bug in sequence reading
7
7
  block callback arguments. Found a bug in meta events that caused
8
8
  "Object#type is deprecated" error messages.
9
+
10
+ Emanuel Borsboom <emanuel.borsboom@gmail.com>
11
+
12
+ Found and fixed an error in PitchBend data encoding.
data/README CHANGED
@@ -12,6 +12,19 @@ version of midilib may be downloaded. midilib is also available as a RubyGem.
12
12
 
13
13
  === Recent Changes
14
14
 
15
+ ==== Changes for 0.8.5:
16
+
17
+ * Fixed bugs in MIDI::PitchBend reading and writing, thanks to Emanuel
18
+ Borsboom.
19
+
20
+ * Fixed a bug in MIDI::Track#quantize.
21
+
22
+ * The argument to MIDI::Track#quantize has changed: it is now either a note
23
+ name ("sixteenth", "32nd", "8th triplet") or a length (1 = quarter, 0.25 =
24
+ sixteenth). This is a drastic change that will break all previous calls to
25
+ quantize. However, since that method was broken already, I don't feel it's
26
+ a burden to anybody to change the arguments.
27
+
15
28
  ==== Changes for 0.8.4:
16
29
 
17
30
  * Realtime status bytes now set @is_realtime to true and return true when
@@ -73,8 +86,11 @@ which requires Rake (http://rake.rubyforge.org).
73
86
  To install midilib as a gem, type
74
87
 
75
88
  % gem install midilib
89
+ or
90
+ % gem update midilib
76
91
 
77
- You may need root privileges to install the gem.
92
+ if you already have a previous version. You may need root privileges to
93
+ install or update the gem.
78
94
 
79
95
  === Manual Installation
80
96
 
@@ -263,14 +279,15 @@ note, 1.0/32.0 is a 32nd note (use floating-point numbers to avoid integer
263
279
  rounding), 1.5 is a dotted quarter, etc. See the documentation for that method
264
280
  for more information.
265
281
 
266
- MIDI::Sequence::note_to_length takes a note name and returns a length value
282
+ MIDI::Sequence#note_to_length takes a note name and returns a length value
267
283
  (again, as a multiple of a quarter note). Legal note names are those found in
268
284
  MIDI::Sequence::NOTE_TO_LENGTH, and may begin with "dotted" and/or end with
269
285
  "triplet". For example, "whole", "sixteenth", "32nd", "quarter triplet",
270
286
  "dotted 16th", and "dotted 8th triplet" are all legal note names.
271
287
 
272
- Finally, MIDI::Sequence::note_to_delta takes a note name and returns a
273
- delta time.
288
+ Finally, MIDI::Sequence#note_to_delta takes a note name and returns a delta
289
+ time. It does this by calling note_to_length, then passing the result to
290
+ length_to_delta.
274
291
 
275
292
 
276
293
  === Example Scripts
@@ -334,7 +351,7 @@ the format of MIDI commands.
334
351
  = Administrivia
335
352
 
336
353
  Author:: Jim Menard (mailto:jimm@io.com)
337
- Copyright:: Copyright (c) 2003-2004 Jim Menard
354
+ Copyright:: Copyright (c) 2003-2005 Jim Menard
338
355
  License:: Distributed under the same license as Ruby.
339
356
 
340
357
 
@@ -347,7 +364,7 @@ http://www.ruby-lang.org/en/LICENSE.txt.
347
364
  midilib may be freely copied in its entirety providing this notice, all
348
365
  source code, all documentation, and all other files are included.
349
366
 
350
- midilib is Copyright (c) 2003-2004 by Jim Menard.
367
+ midilib is Copyright (c) 2003-2005 by Jim Menard.
351
368
 
352
369
  The song "No Fences" contained in the MIDI file examples/NoFences.mid is
353
370
  Copyright (c) 1992 by Jim Menard (jimm@io.com). It may be freely used for
data/install.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  # This script installs midilib into the Ruby site-local library directory.
6
6
  #
7
7
  # Author:: Jim Menard (mailto:jimm@io.com)
8
- # Copyright:: Copyright (c) 2003-2004 by Jim Menard
8
+ # Copyright:: Copyright (c) 2003-2005 by Jim Menard
9
9
  # License:: Distributed under the same license as Ruby.
10
10
  #
11
11
 
@@ -90,7 +90,10 @@ module MIDI
90
90
  CC_GEN_PURPOSE_2 = 17
91
91
  CC_GEN_PURPOSE_3 = 18
92
92
  CC_GEN_PURPOSE_4 = 19
93
+
93
94
  # [32 - 63] are LSB for [0 - 31]
95
+ CC_DATA_ENTRY_LSB = 38
96
+
94
97
  #--
95
98
  # Momentaries:
96
99
  #++
data/lib/midilib/event.rb CHANGED
@@ -281,8 +281,8 @@ class PitchBend < ChannelEvent
281
281
  def data_as_bytes
282
282
  data = ''
283
283
  data << (@status + @channel)
284
- data << ((@value >> 8) & 0xff) # msb
285
- data << (@value & 0xff) # lsb
284
+ data << (@value & 0x7f) # lsb
285
+ data << ((@value >> 7) & 0x7f) # msb
286
286
  return data
287
287
  end
288
288
 
data/lib/midilib/info.rb CHANGED
@@ -2,7 +2,7 @@ module MIDI
2
2
 
3
3
  VERSION_MAJOR = 0
4
4
  VERSION_MINOR = 8
5
- VERSION_TWEAK = 4
5
+ VERSION_TWEAK = 5
6
6
  Version = "#{VERSION_MAJOR}.#{VERSION_MINOR}.#{VERSION_TWEAK}"
7
7
  Copyright = 'Copyright (c) 2003-2005 by Jim Menard <jimm@io.com>'
8
8
 
@@ -113,7 +113,7 @@ class SeqReader < MIDIFile
113
113
  end
114
114
 
115
115
  def pitch_bend(chan, msb, lsb)
116
- @track.events << PitchBend.new(chan, (msb << 8) + lsb, @curr_ticks)
116
+ @track.events << PitchBend.new(chan, (msb << 7) + lsb, @curr_ticks)
117
117
  track_uses_channel(chan)
118
118
  end
119
119
 
data/lib/midilib/track.rb CHANGED
@@ -66,14 +66,20 @@ class Track
66
66
  return list
67
67
  end
68
68
 
69
- # Quantize every event. +denom+ is the beat denominator. To quantize to
70
- # sixteenths pass in a +denom+ of 16.
69
+ # Quantize every event. length_or_note is either a length (1 = quarter,
70
+ # 0.25 = sixteenth, 4 = whole note) or a note name ("sixteenth", "32nd",
71
+ # "8th triplet", "dotted quarter").
71
72
  #
72
73
  # Since each event's time_from_start is modified, we call
73
74
  # recalc_delta_from_times after each event quantizes itself.
74
- def quantize(denom)
75
- boundary = @sequence.ppqn / denom
76
- @events.each { | event | event.quantize_to(boundary) }
75
+ def quantize(length_or_note)
76
+ delta = case length_or_note
77
+ when String
78
+ @sequence.note_to_delta(length_or_note)
79
+ else
80
+ @sequence.length_to_delta(length_or_note.to_i)
81
+ end
82
+ @events.each { | event | event.quantize_to(delta) }
77
83
  recalc_delta_from_times
78
84
  end
79
85
 
data/test/test_event.rb CHANGED
@@ -113,4 +113,54 @@ class EventTester < Test::Unit::TestCase
113
113
  assert(!e.realtime?)
114
114
  end
115
115
 
116
+ def test_pitch_bend
117
+ e = MIDI::PitchBend.new(0, 128)
118
+ b = e.data_as_bytes
119
+ assert_equal(0, b[1]) # lsb, 7 bits
120
+ assert_equal(1, b[2]) # msb, 7 bits
121
+
122
+ e.value = (3 << 7) + 42
123
+ b = e.data_as_bytes
124
+ assert_equal(42, b[1]) # lsb, 7 bits
125
+ assert_equal(3, b[2]) # msb, 7 bits
126
+ end
127
+
128
+ def test_quantize
129
+ e = MIDI::NoteOnEvent.new(0, 64, 64, 0)
130
+ e.quantize_to(80)
131
+ assert_equal(0, e.time_from_start)
132
+
133
+ e.time_from_start = 1
134
+ e.quantize_to(80)
135
+ assert_equal(0, e.time_from_start)
136
+
137
+ e.time_from_start = 70
138
+ e.quantize_to(80)
139
+ assert_equal(80, e.time_from_start)
140
+
141
+ e.time_from_start = 100
142
+ e.quantize_to(80)
143
+ assert_equal(80, e.time_from_start)
144
+
145
+ e.time_from_start = 398
146
+ e.quantize_to(80)
147
+ assert_equal(400, e.time_from_start)
148
+
149
+ e.time_from_start = 405
150
+ e.quantize_to(80)
151
+ assert_equal(400, e.time_from_start)
152
+
153
+ e.time_from_start = 439
154
+ e.quantize_to(80)
155
+ assert_equal(400, e.time_from_start)
156
+
157
+ e.time_from_start = 440
158
+ e.quantize_to(80)
159
+ assert_equal(480, e.time_from_start)
160
+
161
+ e.time_from_start = 441
162
+ e.quantize_to(80)
163
+ assert_equal(480, e.time_from_start)
164
+ end
165
+
116
166
  end
data/test/test_track.rb CHANGED
@@ -108,4 +108,13 @@ class TrackTester < Test::Unit::TestCase
108
108
  assert_equal(100, @track.events[2].delta_time)
109
109
  end
110
110
 
111
+ def test_quantize
112
+ @seq.ppqn = 80
113
+
114
+ @track.quantize(1) # Quantize to a quarter note
115
+ assert_equal(80, @track.events[0].time_from_start) # was 100
116
+ assert_equal(240, @track.events[1].time_from_start) # was 200
117
+ assert_equal(320, @track.events[2].time_from_start) # was 300
118
+ end
119
+
111
120
  end
metadata CHANGED
@@ -1,10 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.8.8
2
+ rubygems_version: 0.8.10
3
3
  specification_version: 1
4
4
  name: midilib
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.8.4
7
- date: 2005-03-21
6
+ version: 0.8.5
7
+ date: 2005-04-16
8
8
  summary: MIDI file and event manipulation library
9
9
  require_paths:
10
10
  - lib
@@ -39,266 +39,6 @@ files:
39
39
  - examples/seq2text.rb
40
40
  - examples/strings.rb
41
41
  - examples/transpose.rb
42
- - html/classes
43
- - html/created.rid
44
- - html/files
45
- - html/fr_class_index.html
46
- - html/fr_file_index.html
47
- - html/fr_method_index.html
48
- - html/index.html
49
- - html/rdoc-style.css
50
- - html/classes/MIDI
51
- - html/classes/MIDI.html
52
- - html/classes/MIDI/ActiveSense.html
53
- - html/classes/MIDI/ActiveSense.src
54
- - html/classes/MIDI/ChannelEvent.html
55
- - html/classes/MIDI/ChannelEvent.src
56
- - html/classes/MIDI/ChannelPressure.html
57
- - html/classes/MIDI/ChannelPressure.src
58
- - html/classes/MIDI/Clock.html
59
- - html/classes/MIDI/Clock.src
60
- - html/classes/MIDI/Continue.html
61
- - html/classes/MIDI/Continue.src
62
- - html/classes/MIDI/Controller.html
63
- - html/classes/MIDI/Controller.src
64
- - html/classes/MIDI/Event.html
65
- - html/classes/MIDI/Event.src
66
- - html/classes/MIDI/IO
67
- - html/classes/MIDI/IO.html
68
- - html/classes/MIDI/Marker.html
69
- - html/classes/MIDI/Marker.src
70
- - html/classes/MIDI/MetaEvent.html
71
- - html/classes/MIDI/MetaEvent.src
72
- - html/classes/MIDI/NoteEvent.html
73
- - html/classes/MIDI/NoteEvent.src
74
- - html/classes/MIDI/NoteOffEvent.html
75
- - html/classes/MIDI/NoteOffEvent.src
76
- - html/classes/MIDI/NoteOnEvent.html
77
- - html/classes/MIDI/NoteOnEvent.src
78
- - html/classes/MIDI/PitchBend.html
79
- - html/classes/MIDI/PitchBend.src
80
- - html/classes/MIDI/PolyPressure.html
81
- - html/classes/MIDI/PolyPressure.src
82
- - html/classes/MIDI/ProgramChange.html
83
- - html/classes/MIDI/ProgramChange.src
84
- - html/classes/MIDI/Realtime.html
85
- - html/classes/MIDI/Realtime.src
86
- - html/classes/MIDI/Sequence.html
87
- - html/classes/MIDI/Sequence.src
88
- - html/classes/MIDI/SongPointer.html
89
- - html/classes/MIDI/SongPointer.src
90
- - html/classes/MIDI/SongSelect.html
91
- - html/classes/MIDI/SongSelect.src
92
- - html/classes/MIDI/Start.html
93
- - html/classes/MIDI/Start.src
94
- - html/classes/MIDI/Stop.html
95
- - html/classes/MIDI/Stop.src
96
- - html/classes/MIDI/SystemCommon.html
97
- - html/classes/MIDI/SystemCommon.src
98
- - html/classes/MIDI/SystemExclusive.html
99
- - html/classes/MIDI/SystemExclusive.src
100
- - html/classes/MIDI/SystemReset.html
101
- - html/classes/MIDI/SystemReset.src
102
- - html/classes/MIDI/Tempo.html
103
- - html/classes/MIDI/Tempo.src
104
- - html/classes/MIDI/Track.html
105
- - html/classes/MIDI/Track.src
106
- - html/classes/MIDI/TuneRequest.html
107
- - html/classes/MIDI/TuneRequest.src
108
- - html/classes/MIDI/Utils.html
109
- - html/classes/MIDI/Utils.src
110
- - html/classes/MIDI/ActiveSense.src/M000136.html
111
- - html/classes/MIDI/ActiveSense.src/M000137.html
112
- - html/classes/MIDI/ChannelEvent.src/M000124.html
113
- - html/classes/MIDI/ChannelEvent.src/M000125.html
114
- - html/classes/MIDI/ChannelPressure.src/M000088.html
115
- - html/classes/MIDI/ChannelPressure.src/M000089.html
116
- - html/classes/MIDI/ChannelPressure.src/M000090.html
117
- - html/classes/MIDI/Clock.src/M000134.html
118
- - html/classes/MIDI/Clock.src/M000135.html
119
- - html/classes/MIDI/Continue.src/M000132.html
120
- - html/classes/MIDI/Continue.src/M000133.html
121
- - html/classes/MIDI/Controller.src/M000129.html
122
- - html/classes/MIDI/Controller.src/M000130.html
123
- - html/classes/MIDI/Controller.src/M000131.html
124
- - html/classes/MIDI/Event.src/M000145.html
125
- - html/classes/MIDI/Event.src/M000146.html
126
- - html/classes/MIDI/Event.src/M000147.html
127
- - html/classes/MIDI/Event.src/M000148.html
128
- - html/classes/MIDI/Event.src/M000149.html
129
- - html/classes/MIDI/Event.src/M000150.html
130
- - html/classes/MIDI/Event.src/M000151.html
131
- - html/classes/MIDI/Event.src/M000152.html
132
- - html/classes/MIDI/Event.src/M000153.html
133
- - html/classes/MIDI/Event.src/M000154.html
134
- - html/classes/MIDI/Event.src/M000155.html
135
- - html/classes/MIDI/Event.src/M000156.html
136
- - html/classes/MIDI/Event.src/M000157.html
137
- - html/classes/MIDI/IO/MIDIFile.html
138
- - html/classes/MIDI/IO/MIDIFile.src
139
- - html/classes/MIDI/IO/SeqReader.html
140
- - html/classes/MIDI/IO/SeqReader.src
141
- - html/classes/MIDI/IO/SeqWriter.html
142
- - html/classes/MIDI/IO/SeqWriter.src
143
- - html/classes/MIDI/IO/MIDIFile.src/M000028.html
144
- - html/classes/MIDI/IO/MIDIFile.src/M000029.html
145
- - html/classes/MIDI/IO/MIDIFile.src/M000030.html
146
- - html/classes/MIDI/IO/MIDIFile.src/M000031.html
147
- - html/classes/MIDI/IO/MIDIFile.src/M000032.html
148
- - html/classes/MIDI/IO/MIDIFile.src/M000033.html
149
- - html/classes/MIDI/IO/MIDIFile.src/M000034.html
150
- - html/classes/MIDI/IO/MIDIFile.src/M000035.html
151
- - html/classes/MIDI/IO/MIDIFile.src/M000036.html
152
- - html/classes/MIDI/IO/MIDIFile.src/M000037.html
153
- - html/classes/MIDI/IO/MIDIFile.src/M000038.html
154
- - html/classes/MIDI/IO/MIDIFile.src/M000039.html
155
- - html/classes/MIDI/IO/MIDIFile.src/M000040.html
156
- - html/classes/MIDI/IO/MIDIFile.src/M000041.html
157
- - html/classes/MIDI/IO/MIDIFile.src/M000042.html
158
- - html/classes/MIDI/IO/MIDIFile.src/M000043.html
159
- - html/classes/MIDI/IO/MIDIFile.src/M000044.html
160
- - html/classes/MIDI/IO/MIDIFile.src/M000045.html
161
- - html/classes/MIDI/IO/MIDIFile.src/M000046.html
162
- - html/classes/MIDI/IO/MIDIFile.src/M000047.html
163
- - html/classes/MIDI/IO/MIDIFile.src/M000048.html
164
- - html/classes/MIDI/IO/MIDIFile.src/M000049.html
165
- - html/classes/MIDI/IO/MIDIFile.src/M000050.html
166
- - html/classes/MIDI/IO/MIDIFile.src/M000051.html
167
- - html/classes/MIDI/IO/MIDIFile.src/M000052.html
168
- - html/classes/MIDI/IO/MIDIFile.src/M000053.html
169
- - html/classes/MIDI/IO/MIDIFile.src/M000054.html
170
- - html/classes/MIDI/IO/MIDIFile.src/M000055.html
171
- - html/classes/MIDI/IO/MIDIFile.src/M000056.html
172
- - html/classes/MIDI/IO/MIDIFile.src/M000057.html
173
- - html/classes/MIDI/IO/MIDIFile.src/M000058.html
174
- - html/classes/MIDI/IO/MIDIFile.src/M000059.html
175
- - html/classes/MIDI/IO/MIDIFile.src/M000060.html
176
- - html/classes/MIDI/IO/MIDIFile.src/M000061.html
177
- - html/classes/MIDI/IO/MIDIFile.src/M000062.html
178
- - html/classes/MIDI/IO/MIDIFile.src/M000063.html
179
- - html/classes/MIDI/IO/MIDIFile.src/M000064.html
180
- - html/classes/MIDI/IO/MIDIFile.src/M000065.html
181
- - html/classes/MIDI/IO/MIDIFile.src/M000066.html
182
- - html/classes/MIDI/IO/MIDIFile.src/M000067.html
183
- - html/classes/MIDI/IO/MIDIFile.src/M000068.html
184
- - html/classes/MIDI/IO/MIDIFile.src/M000069.html
185
- - html/classes/MIDI/IO/MIDIFile.src/M000070.html
186
- - html/classes/MIDI/IO/SeqReader.src/M000001.html
187
- - html/classes/MIDI/IO/SeqReader.src/M000002.html
188
- - html/classes/MIDI/IO/SeqReader.src/M000003.html
189
- - html/classes/MIDI/IO/SeqReader.src/M000004.html
190
- - html/classes/MIDI/IO/SeqReader.src/M000005.html
191
- - html/classes/MIDI/IO/SeqReader.src/M000006.html
192
- - html/classes/MIDI/IO/SeqReader.src/M000007.html
193
- - html/classes/MIDI/IO/SeqReader.src/M000008.html
194
- - html/classes/MIDI/IO/SeqReader.src/M000009.html
195
- - html/classes/MIDI/IO/SeqReader.src/M000010.html
196
- - html/classes/MIDI/IO/SeqReader.src/M000011.html
197
- - html/classes/MIDI/IO/SeqReader.src/M000012.html
198
- - html/classes/MIDI/IO/SeqReader.src/M000013.html
199
- - html/classes/MIDI/IO/SeqReader.src/M000014.html
200
- - html/classes/MIDI/IO/SeqReader.src/M000015.html
201
- - html/classes/MIDI/IO/SeqReader.src/M000016.html
202
- - html/classes/MIDI/IO/SeqReader.src/M000017.html
203
- - html/classes/MIDI/IO/SeqReader.src/M000018.html
204
- - html/classes/MIDI/IO/SeqWriter.src/M000019.html
205
- - html/classes/MIDI/IO/SeqWriter.src/M000020.html
206
- - html/classes/MIDI/IO/SeqWriter.src/M000021.html
207
- - html/classes/MIDI/IO/SeqWriter.src/M000022.html
208
- - html/classes/MIDI/IO/SeqWriter.src/M000023.html
209
- - html/classes/MIDI/IO/SeqWriter.src/M000024.html
210
- - html/classes/MIDI/IO/SeqWriter.src/M000025.html
211
- - html/classes/MIDI/IO/SeqWriter.src/M000026.html
212
- - html/classes/MIDI/IO/SeqWriter.src/M000027.html
213
- - html/classes/MIDI/Marker.src/M000107.html
214
- - html/classes/MIDI/MetaEvent.src/M000167.html
215
- - html/classes/MIDI/MetaEvent.src/M000168.html
216
- - html/classes/MIDI/MetaEvent.src/M000169.html
217
- - html/classes/MIDI/NoteEvent.src/M000091.html
218
- - html/classes/MIDI/NoteEvent.src/M000092.html
219
- - html/classes/MIDI/NoteEvent.src/M000093.html
220
- - html/classes/MIDI/NoteEvent.src/M000094.html
221
- - html/classes/MIDI/NoteOffEvent.src/M000086.html
222
- - html/classes/MIDI/NoteOffEvent.src/M000087.html
223
- - html/classes/MIDI/NoteOnEvent.src/M000102.html
224
- - html/classes/MIDI/NoteOnEvent.src/M000103.html
225
- - html/classes/MIDI/PitchBend.src/M000104.html
226
- - html/classes/MIDI/PitchBend.src/M000105.html
227
- - html/classes/MIDI/PitchBend.src/M000106.html
228
- - html/classes/MIDI/PolyPressure.src/M000170.html
229
- - html/classes/MIDI/PolyPressure.src/M000171.html
230
- - html/classes/MIDI/PolyPressure.src/M000172.html
231
- - html/classes/MIDI/PolyPressure.src/M000173.html
232
- - html/classes/MIDI/ProgramChange.src/M000099.html
233
- - html/classes/MIDI/ProgramChange.src/M000100.html
234
- - html/classes/MIDI/ProgramChange.src/M000101.html
235
- - html/classes/MIDI/Realtime.src/M000083.html
236
- - html/classes/MIDI/Realtime.src/M000084.html
237
- - html/classes/MIDI/Realtime.src/M000085.html
238
- - html/classes/MIDI/Sequence.src/M000108.html
239
- - html/classes/MIDI/Sequence.src/M000109.html
240
- - html/classes/MIDI/Sequence.src/M000110.html
241
- - html/classes/MIDI/Sequence.src/M000113.html
242
- - html/classes/MIDI/Sequence.src/M000114.html
243
- - html/classes/MIDI/Sequence.src/M000115.html
244
- - html/classes/MIDI/Sequence.src/M000116.html
245
- - html/classes/MIDI/Sequence.src/M000117.html
246
- - html/classes/MIDI/Sequence.src/M000118.html
247
- - html/classes/MIDI/Sequence.src/M000119.html
248
- - html/classes/MIDI/Sequence.src/M000120.html
249
- - html/classes/MIDI/SongPointer.src/M000138.html
250
- - html/classes/MIDI/SongPointer.src/M000139.html
251
- - html/classes/MIDI/SongPointer.src/M000140.html
252
- - html/classes/MIDI/SongSelect.src/M000126.html
253
- - html/classes/MIDI/SongSelect.src/M000127.html
254
- - html/classes/MIDI/SongSelect.src/M000128.html
255
- - html/classes/MIDI/Start.src/M000097.html
256
- - html/classes/MIDI/Start.src/M000098.html
257
- - html/classes/MIDI/Stop.src/M000095.html
258
- - html/classes/MIDI/Stop.src/M000096.html
259
- - html/classes/MIDI/SystemCommon.src/M000144.html
260
- - html/classes/MIDI/SystemExclusive.src/M000141.html
261
- - html/classes/MIDI/SystemExclusive.src/M000142.html
262
- - html/classes/MIDI/SystemExclusive.src/M000143.html
263
- - html/classes/MIDI/SystemReset.src/M000081.html
264
- - html/classes/MIDI/SystemReset.src/M000082.html
265
- - html/classes/MIDI/Tempo.src/M000158.html
266
- - html/classes/MIDI/Tempo.src/M000159.html
267
- - html/classes/MIDI/Tempo.src/M000160.html
268
- - html/classes/MIDI/Tempo.src/M000161.html
269
- - html/classes/MIDI/Tempo.src/M000162.html
270
- - html/classes/MIDI/Tempo.src/M000163.html
271
- - html/classes/MIDI/Tempo.src/M000164.html
272
- - html/classes/MIDI/Track.src/M000071.html
273
- - html/classes/MIDI/Track.src/M000072.html
274
- - html/classes/MIDI/Track.src/M000073.html
275
- - html/classes/MIDI/Track.src/M000074.html
276
- - html/classes/MIDI/Track.src/M000075.html
277
- - html/classes/MIDI/Track.src/M000076.html
278
- - html/classes/MIDI/Track.src/M000077.html
279
- - html/classes/MIDI/Track.src/M000078.html
280
- - html/classes/MIDI/Track.src/M000079.html
281
- - html/classes/MIDI/Track.src/M000080.html
282
- - html/classes/MIDI/TuneRequest.src/M000121.html
283
- - html/classes/MIDI/TuneRequest.src/M000122.html
284
- - html/classes/MIDI/TuneRequest.src/M000123.html
285
- - html/classes/MIDI/Utils.src/M000165.html
286
- - html/classes/MIDI/Utils.src/M000166.html
287
- - html/files/lib
288
- - html/files/README.html
289
- - html/files/TODO.html
290
- - html/files/lib/midilib
291
- - html/files/lib/midilib_rb.html
292
- - html/files/lib/midilib/consts_rb.html
293
- - html/files/lib/midilib/event_rb.html
294
- - html/files/lib/midilib/info_rb.html
295
- - html/files/lib/midilib/io
296
- - html/files/lib/midilib/sequence_rb.html
297
- - html/files/lib/midilib/track_rb.html
298
- - html/files/lib/midilib/utils_rb.html
299
- - html/files/lib/midilib/io/midifile_rb.html
300
- - html/files/lib/midilib/io/seqreader_rb.html
301
- - html/files/lib/midilib/io/seqwriter_rb.html
302
42
  - install.rb
303
43
  - lib/midilib.rb
304
44
  - lib/midilib/consts.rb