beats 1.1.0 → 1.2.0

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 (158) hide show
  1. data/README.markdown +29 -4
  2. data/bin/beats +36 -71
  3. data/lib/beats.rb +57 -0
  4. data/lib/beatswavefile.rb +93 -0
  5. data/lib/kit.rb +67 -11
  6. data/lib/pattern.rb +131 -86
  7. data/lib/song.rb +145 -114
  8. data/lib/songoptimizer.rb +154 -0
  9. data/lib/songparser.rb +40 -28
  10. data/lib/songsplitter.rb +38 -0
  11. data/lib/track.rb +33 -31
  12. data/lib/wavefile.rb +475 -0
  13. data/test/examples/combined.wav +0 -0
  14. data/test/examples/split-agogo_high.wav +0 -0
  15. data/test/examples/split-bass.wav +0 -0
  16. data/test/examples/split-hh_closed.wav +0 -0
  17. data/test/examples/split-snare.wav +0 -0
  18. data/test/examples/split-tom2.wav +0 -0
  19. data/test/examples/split-tom4.wav +0 -0
  20. data/test/fixtures/expected_output/example_combined_mono_16.wav +0 -0
  21. data/test/fixtures/expected_output/example_combined_mono_8.wav +0 -0
  22. data/test/fixtures/expected_output/example_combined_stereo_16.wav +0 -0
  23. data/test/fixtures/expected_output/example_combined_stereo_8.wav +0 -0
  24. data/test/fixtures/expected_output/example_split_mono_16-agogo.wav +0 -0
  25. data/test/fixtures/expected_output/example_split_mono_16-bass.wav +0 -0
  26. data/test/fixtures/expected_output/example_split_mono_16-hh_closed.wav +0 -0
  27. data/test/fixtures/expected_output/example_split_mono_16-snare.wav +0 -0
  28. data/test/fixtures/expected_output/example_split_mono_16-tom2_mono_16.wav +0 -0
  29. data/test/fixtures/expected_output/example_split_mono_16-tom4_mono_16.wav +0 -0
  30. data/test/fixtures/expected_output/example_split_mono_8-agogo.wav +0 -0
  31. data/test/fixtures/expected_output/example_split_mono_8-bass.wav +0 -0
  32. data/test/fixtures/expected_output/example_split_mono_8-hh_closed.wav +0 -0
  33. data/test/fixtures/expected_output/example_split_mono_8-snare.wav +0 -0
  34. data/test/fixtures/expected_output/example_split_mono_8-tom2_mono_8.wav +0 -0
  35. data/test/fixtures/expected_output/example_split_mono_8-tom4_mono_8.wav +0 -0
  36. data/test/fixtures/expected_output/example_split_stereo_16-agogo.wav +0 -0
  37. data/test/fixtures/expected_output/example_split_stereo_16-bass.wav +0 -0
  38. data/test/fixtures/expected_output/example_split_stereo_16-hh_closed.wav +0 -0
  39. data/test/fixtures/expected_output/example_split_stereo_16-snare.wav +0 -0
  40. data/test/fixtures/expected_output/example_split_stereo_16-tom2_stereo_16.wav +0 -0
  41. data/test/fixtures/expected_output/example_split_stereo_16-tom4_stereo_16.wav +0 -0
  42. data/test/fixtures/expected_output/example_split_stereo_8-agogo.wav +0 -0
  43. data/test/fixtures/expected_output/example_split_stereo_8-bass.wav +0 -0
  44. data/test/fixtures/expected_output/example_split_stereo_8-hh_closed.wav +0 -0
  45. data/test/fixtures/expected_output/example_split_stereo_8-snare.wav +0 -0
  46. data/test/fixtures/expected_output/example_split_stereo_8-tom2_stereo_8.wav +0 -0
  47. data/test/fixtures/expected_output/example_split_stereo_8-tom4_stereo_8.wav +0 -0
  48. data/test/fixtures/invalid/bad_repeat_count.txt +8 -0
  49. data/test/fixtures/invalid/bad_rhythm.txt +9 -0
  50. data/test/fixtures/invalid/bad_structure.txt +9 -0
  51. data/test/fixtures/invalid/bad_tempo.txt +8 -0
  52. data/test/fixtures/invalid/no_header.txt +3 -0
  53. data/test/fixtures/invalid/no_structure.txt +6 -0
  54. data/test/fixtures/invalid/pattern_with_no_tracks.txt +12 -0
  55. data/test/fixtures/invalid/sound_in_kit_not_found.txt +10 -0
  56. data/test/fixtures/invalid/sound_in_track_not_found.txt +8 -0
  57. data/test/fixtures/invalid/template.txt +31 -0
  58. data/test/fixtures/valid/example_mono_16.txt +28 -0
  59. data/test/fixtures/valid/example_mono_8.txt +28 -0
  60. data/test/fixtures/valid/example_no_kit.txt +30 -0
  61. data/test/fixtures/valid/example_stereo_16.txt +28 -0
  62. data/test/fixtures/valid/example_stereo_8.txt +28 -0
  63. data/test/fixtures/valid/example_with_empty_track.txt +10 -0
  64. data/test/fixtures/valid/example_with_kit.txt +34 -0
  65. data/test/fixtures/valid/no_tempo.txt +8 -0
  66. data/test/fixtures/valid/pattern_with_overflow.txt +9 -0
  67. data/test/fixtures/valid/repeats_not_specified.txt +10 -0
  68. data/test/fixtures/yaml/song_yaml.txt +30 -0
  69. data/test/includes.rb +11 -4
  70. data/test/integration.rb +100 -0
  71. data/test/kit_test.rb +39 -39
  72. data/test/pattern_test.rb +119 -71
  73. data/test/song_test.rb +87 -62
  74. data/test/songoptimizer_test.rb +162 -0
  75. data/test/songparser_test.rb +36 -165
  76. data/test/sounds/agogo_high_mono_16.wav +0 -0
  77. data/test/sounds/agogo_high_mono_8.wav +0 -0
  78. data/test/sounds/agogo_high_stereo_16.wav +0 -0
  79. data/test/sounds/agogo_high_stereo_8.wav +0 -0
  80. data/test/sounds/agogo_low_mono_16.wav +0 -0
  81. data/test/sounds/agogo_low_mono_8.wav +0 -0
  82. data/test/sounds/agogo_low_stereo_16.wav +0 -0
  83. data/test/sounds/agogo_low_stereo_8.wav +0 -0
  84. data/test/sounds/bass2_mono_16.wav +0 -0
  85. data/test/sounds/bass2_mono_8.wav +0 -0
  86. data/test/sounds/bass2_stereo_16.wav +0 -0
  87. data/test/sounds/bass2_stereo_8.wav +0 -0
  88. data/test/sounds/bass_mono_8.wav +0 -0
  89. data/test/sounds/bass_stereo_16.wav +0 -0
  90. data/test/sounds/bass_stereo_8.wav +0 -0
  91. data/test/sounds/clave_high_mono_16.wav +0 -0
  92. data/test/sounds/clave_high_mono_8.wav +0 -0
  93. data/test/sounds/clave_high_stereo_16.wav +0 -0
  94. data/test/sounds/clave_high_stereo_8.wav +0 -0
  95. data/test/sounds/clave_low_mono_16.wav +0 -0
  96. data/test/sounds/clave_low_mono_8.wav +0 -0
  97. data/test/sounds/clave_low_stereo_16.wav +0 -0
  98. data/test/sounds/clave_low_stereo_8.wav +0 -0
  99. data/test/sounds/conga_high_mono_16.wav +0 -0
  100. data/test/sounds/conga_high_mono_8.wav +0 -0
  101. data/test/sounds/conga_high_stereo_16.wav +0 -0
  102. data/test/sounds/conga_high_stereo_8.wav +0 -0
  103. data/test/sounds/conga_low_mono_16.wav +0 -0
  104. data/test/sounds/conga_low_mono_8.wav +0 -0
  105. data/test/sounds/conga_low_stereo_16.wav +0 -0
  106. data/test/sounds/conga_low_stereo_8.wav +0 -0
  107. data/test/sounds/cowbell_high_mono_16.wav +0 -0
  108. data/test/sounds/cowbell_high_mono_8.wav +0 -0
  109. data/test/sounds/cowbell_high_stereo_16.wav +0 -0
  110. data/test/sounds/cowbell_high_stereo_8.wav +0 -0
  111. data/test/sounds/cowbell_low_mono_16.wav +0 -0
  112. data/test/sounds/cowbell_low_mono_8.wav +0 -0
  113. data/test/sounds/cowbell_low_stereo_16.wav +0 -0
  114. data/test/sounds/cowbell_low_stereo_8.wav +0 -0
  115. data/test/sounds/hh_closed_mono_16.wav +0 -0
  116. data/test/sounds/hh_closed_mono_8.wav +0 -0
  117. data/test/sounds/hh_closed_stereo_16.wav +0 -0
  118. data/test/sounds/hh_closed_stereo_8.wav +0 -0
  119. data/test/sounds/hh_open_mono_16.wav +0 -0
  120. data/test/sounds/hh_open_mono_8.wav +0 -0
  121. data/test/sounds/hh_open_stereo_16.wav +0 -0
  122. data/test/sounds/hh_open_stereo_8.wav +0 -0
  123. data/test/sounds/ride_mono_16.wav +0 -0
  124. data/test/sounds/ride_mono_8.wav +0 -0
  125. data/test/sounds/ride_stereo_16.wav +0 -0
  126. data/test/sounds/ride_stereo_8.wav +0 -0
  127. data/test/sounds/rim_mono_16.wav +0 -0
  128. data/test/sounds/rim_mono_8.wav +0 -0
  129. data/test/sounds/rim_stereo_16.wav +0 -0
  130. data/test/sounds/rim_stereo_8.wav +0 -0
  131. data/test/sounds/sine-mono-8bit.wav +0 -0
  132. data/test/sounds/snare2_mono_16.wav +0 -0
  133. data/test/sounds/snare2_mono_8.wav +0 -0
  134. data/test/sounds/snare2_stereo_16.wav +0 -0
  135. data/test/sounds/snare2_stereo_8.wav +0 -0
  136. data/test/sounds/snare_mono_16.wav +0 -0
  137. data/test/sounds/snare_mono_8.wav +0 -0
  138. data/test/sounds/snare_stereo_16.wav +0 -0
  139. data/test/sounds/snare_stereo_8.wav +0 -0
  140. data/test/sounds/tom1_mono_16.wav +0 -0
  141. data/test/sounds/tom1_mono_8.wav +0 -0
  142. data/test/sounds/tom1_stereo_16.wav +0 -0
  143. data/test/sounds/tom1_stereo_8.wav +0 -0
  144. data/test/sounds/tom2_mono_16.wav +0 -0
  145. data/test/sounds/tom2_mono_8.wav +0 -0
  146. data/test/sounds/tom2_stereo_16.wav +0 -0
  147. data/test/sounds/tom2_stereo_8.wav +0 -0
  148. data/test/sounds/tom3_mono_16.wav +0 -0
  149. data/test/sounds/tom3_mono_8.wav +0 -0
  150. data/test/sounds/tom3_stereo_16.wav +0 -0
  151. data/test/sounds/tom3_stereo_8.wav +0 -0
  152. data/test/sounds/tom4_mono_16.wav +0 -0
  153. data/test/sounds/tom4_mono_8.wav +0 -0
  154. data/test/sounds/tom4_stereo_16.wav +0 -0
  155. data/test/sounds/tom4_stereo_8.wav +0 -0
  156. data/test/sounds/tone.wav +0 -0
  157. data/test/track_test.rb +78 -72
  158. metadata +277 -15
Binary file
Binary file
Binary file
Binary file
@@ -27,55 +27,80 @@ class TrackTest < Test::Unit::TestCase
27
27
  def test_initialize
28
28
  test_tracks = generate_test_data()
29
29
 
30
- assert_equal(test_tracks[0].beats, [0])
31
- assert_equal(test_tracks[0].name, "bass")
30
+ assert_equal([0], test_tracks[0].beats)
31
+ assert_equal("bass", test_tracks[0].name)
32
32
 
33
- assert_equal(test_tracks[1].beats, [0, 1])
34
- assert_equal(test_tracks[1].name, "bass")
33
+ assert_equal([0, 1], test_tracks[1].beats)
34
+ assert_equal("bass", test_tracks[1].name)
35
35
 
36
- assert_equal(test_tracks[2].beats, [3, 1])
37
- assert_equal(test_tracks[3].beats, [0, 2, 2, 2, 2])
38
- assert_equal(test_tracks[4].beats, [4])
39
- assert_equal(test_tracks[5].beats, [2, 4, 4, 4, 2, 4, 4, 4, 4])
36
+ assert_equal([3, 1], test_tracks[2].beats)
37
+ assert_equal([0, 2, 2, 2, 2], test_tracks[3].beats)
38
+ assert_equal([4], test_tracks[4].beats)
39
+ assert_equal([2, 4, 4, 4, 2, 4, 4, 4, 4], test_tracks[5].beats)
40
40
  end
41
41
 
42
+ def test_tick_count
43
+ test_tracks = generate_test_data()
44
+
45
+ assert_equal(0, test_tracks[0].tick_count())
46
+ assert_equal(1, test_tracks[1].tick_count())
47
+ assert_equal(4, test_tracks[2].tick_count())
48
+ assert_equal(8, test_tracks[3].tick_count())
49
+ assert_equal(4, test_tracks[4].tick_count())
50
+ assert_equal(32, test_tracks[5].tick_count())
51
+ end
52
+
53
+ def test_intro_sample_length
54
+ # TODO: Add tests for when tick_sample_length has a non-zero remainder
55
+
56
+ test_tracks = generate_test_data()
57
+
58
+ tick_sample_length = W.sample_data.length # 6179.0
59
+ assert_equal(0, test_tracks[0].intro_sample_length(tick_sample_length))
60
+ assert_equal(0, test_tracks[1].intro_sample_length(tick_sample_length))
61
+ assert_equal(18537, test_tracks[2].intro_sample_length(tick_sample_length))
62
+ assert_equal(0, test_tracks[3].intro_sample_length(tick_sample_length))
63
+ assert_equal(24716, test_tracks[4].intro_sample_length(tick_sample_length))
64
+ assert_equal(12358, test_tracks[5].intro_sample_length(tick_sample_length))
65
+ end
66
+
42
67
  def test_sample_length
43
68
  tick_sample_lengths = [
44
- W.sample_data.length, # 13860.0
45
- (W.sample_rate * SECONDS_IN_MINUTE) / 99 / 4, # 6681.81818181818
46
- (W.sample_rate * SECONDS_IN_MINUTE) / 41 / 4 # 16134.1463414634
69
+ W.sample_data.length, # 13860.0 - FIXME, not correct
70
+ (W.sample_rate * SECONDS_IN_MINUTE) / 99 / 4, # 6681.81818181818 - FIXME, not correct
71
+ (W.sample_rate * SECONDS_IN_MINUTE) / 41 / 4 # 16134.1463414634 - FIXME, not correct
47
72
  ]
48
73
 
49
- tick_sample_lengths.each { |tick_sample_length| helper_test_sample_length(tick_sample_length) }
74
+ tick_sample_lengths.each {|tick_sample_length| helper_test_sample_length(tick_sample_length) }
50
75
  end
51
76
 
52
77
  def helper_test_sample_length(tick_sample_length)
53
78
  test_tracks = generate_test_data()
54
79
 
55
- assert_equal(test_tracks[0].sample_length(tick_sample_length), 0)
56
- assert_equal(test_tracks[0].sample_length(tick_sample_length), test_tracks[0].sample_data(tick_sample_length)[:primary].length)
80
+ assert_equal(0, test_tracks[0].sample_length(tick_sample_length))
81
+ assert_equal(test_tracks[0].sample_data(tick_sample_length)[:primary].length, test_tracks[0].sample_length(tick_sample_length))
57
82
 
58
- assert_equal(test_tracks[1].sample_length(tick_sample_length), tick_sample_length.floor)
59
- assert_equal(test_tracks[1].sample_length(tick_sample_length), test_tracks[1].sample_data(tick_sample_length)[:primary].length)
83
+ assert_equal(tick_sample_length.floor, test_tracks[1].sample_length(tick_sample_length))
84
+ assert_equal(test_tracks[1].sample_data(tick_sample_length)[:primary].length, test_tracks[1].sample_length(tick_sample_length))
60
85
 
61
- assert_equal(test_tracks[2].sample_length(tick_sample_length), (tick_sample_length * 4).floor)
62
- assert_equal(test_tracks[2].sample_length(tick_sample_length), test_tracks[2].sample_data(tick_sample_length)[:primary].length)
86
+ assert_equal((tick_sample_length * 4).floor, test_tracks[2].sample_length(tick_sample_length))
87
+ assert_equal(test_tracks[2].sample_data(tick_sample_length)[:primary].length, test_tracks[2].sample_length(tick_sample_length))
63
88
 
64
- assert_equal(test_tracks[3].sample_length(tick_sample_length), (tick_sample_length * 8).floor)
65
- assert_equal(test_tracks[3].sample_length(tick_sample_length), test_tracks[3].sample_data(tick_sample_length)[:primary].length)
89
+ assert_equal((tick_sample_length * 8).floor, test_tracks[3].sample_length(tick_sample_length))
90
+ assert_equal(test_tracks[3].sample_data(tick_sample_length)[:primary].length, test_tracks[3].sample_length(tick_sample_length))
66
91
 
67
- assert_equal(test_tracks[4].sample_length(tick_sample_length), (tick_sample_length * 4).floor)
68
- assert_equal(test_tracks[4].sample_length(tick_sample_length), test_tracks[4].sample_data(tick_sample_length)[:primary].length)
92
+ assert_equal((tick_sample_length * 4).floor, test_tracks[4].sample_length(tick_sample_length))
93
+ assert_equal(test_tracks[4].sample_data(tick_sample_length)[:primary].length, test_tracks[4].sample_length(tick_sample_length))
69
94
 
70
- assert_equal(test_tracks[5].sample_length(tick_sample_length), (tick_sample_length * 32).floor)
71
- assert_equal(test_tracks[5].sample_length(tick_sample_length), test_tracks[5].sample_data(tick_sample_length)[:primary].length)
95
+ assert_equal((tick_sample_length * 32).floor, test_tracks[5].sample_length(tick_sample_length))
96
+ assert_equal(test_tracks[5].sample_data(tick_sample_length)[:primary].length, test_tracks[5].sample_length(tick_sample_length))
72
97
  end
73
98
 
74
99
  def test_sample_length_with_overflow
75
100
  tick_sample_lengths = [
76
- W.sample_data.length, # 13860.0
77
- (W.sample_rate * SECONDS_IN_MINUTE) / 99 / 4, # 6681.81818181818
78
- (W.sample_rate * SECONDS_IN_MINUTE) / 41 / 4 # 16134.1463414634
101
+ W.sample_data.length, # 13860.0 - FIXME, not correct
102
+ (W.sample_rate * SECONDS_IN_MINUTE) / 99 / 4, # 6681.81818181818 - FIXME, not correct
103
+ (W.sample_rate * SECONDS_IN_MINUTE) / 41 / 4 # 16134.1463414634 - FIXME, not correct
79
104
  ]
80
105
 
81
106
  tick_sample_lengths.each { |tick_sample_length| helper_test_sample_length_with_overflow(tick_sample_length) }
@@ -86,69 +111,50 @@ class TrackTest < Test::Unit::TestCase
86
111
  test_tracks = generate_test_data()
87
112
 
88
113
  sample_data = test_tracks[0].sample_data(tick_sample_length)
89
- assert_equal(test_tracks[0].sample_length_with_overflow(tick_sample_length), 0)
90
- assert_equal(test_tracks[0].sample_length_with_overflow(tick_sample_length), sample_data[:primary].length + sample_data[:overflow].length)
114
+ assert_equal(0, test_tracks[0].sample_length_with_overflow(tick_sample_length))
115
+ assert_equal(sample_data[:primary].length + sample_data[:overflow].length, test_tracks[0].sample_length_with_overflow(tick_sample_length))
91
116
 
92
117
  sample_data = test_tracks[1].sample_data(tick_sample_length)
93
118
  if(wave_sample_length > tick_sample_length * test_tracks[1].beats.last)
94
- assert_equal(test_tracks[1].sample_length_with_overflow(tick_sample_length), wave_sample_length)
119
+ assert_equal(wave_sample_length, test_tracks[1].sample_length_with_overflow(tick_sample_length))
95
120
  else
96
- assert_equal(test_tracks[1].sample_length_with_overflow(tick_sample_length), tick_sample_length.floor)
97
- assert_equal(test_tracks[1].sample_length_with_overflow(tick_sample_length), sample_data[:primary].length + sample_data[:overflow].length)
121
+ assert_equal(tick_sample_length.floor, test_tracks[1].sample_length_with_overflow(tick_sample_length))
122
+ assert_equal(sample_data[:primary].length + sample_data[:overflow].length, test_tracks[1].sample_length_with_overflow(tick_sample_length))
98
123
  end
99
124
 
100
125
  sample_data = test_tracks[2].sample_data(tick_sample_length)
101
126
  if(wave_sample_length > tick_sample_length * test_tracks[2].beats.last)
102
- assert_equal(test_tracks[2].sample_length_with_overflow(tick_sample_length), (tick_sample_length * 4).floor + (wave_sample_length - tick_sample_length.floor))
103
- assert_equal(test_tracks[2].sample_length_with_overflow(tick_sample_length), sample_data[:primary].length + sample_data[:overflow].length)
127
+ assert_equal((tick_sample_length * 4).floor + (wave_sample_length - tick_sample_length.floor), test_tracks[2].sample_length_with_overflow(tick_sample_length))
128
+ assert_equal(sample_data[:primary].length + sample_data[:overflow].length, test_tracks[2].sample_length_with_overflow(tick_sample_length))
104
129
  else
105
- assert_equal(test_tracks[2].sample_length_with_overflow(tick_sample_length), (tick_sample_length * 4).floor)
106
- assert_equal(test_tracks[2].sample_length_with_overflow(tick_sample_length), sample_data[:primary].length + sample_data[:overflow].length)
130
+ assert_equal((tick_sample_length * 4).floor, test_tracks[2].sample_length_with_overflow(tick_sample_length))
131
+ assert_equal(sample_data[:primary].length + sample_data[:overflow].length, test_tracks[2].sample_length_with_overflow(tick_sample_length))
107
132
  end
108
133
 
109
134
  sample_data = test_tracks[3].sample_data(tick_sample_length)
110
135
  if(wave_sample_length > tick_sample_length * test_tracks[3].beats.last)
111
- assert_equal(test_tracks[3].sample_length_with_overflow(tick_sample_length), (tick_sample_length * 8).floor + (wave_sample_length - (tick_sample_length * 2).floor))
112
- assert_equal(test_tracks[3].sample_length_with_overflow(tick_sample_length), sample_data[:primary].length + sample_data[:overflow].length)
136
+ assert_equal((tick_sample_length * 8).floor + (wave_sample_length - (tick_sample_length * 2).floor), test_tracks[3].sample_length_with_overflow(tick_sample_length))
137
+ assert_equal(sample_data[:primary].length + sample_data[:overflow].length, test_tracks[3].sample_length_with_overflow(tick_sample_length))
113
138
  else
114
- assert_equal(test_tracks[3].sample_length_with_overflow(tick_sample_length), (tick_sample_length * 8).floor)
115
- assert_equal(test_tracks[3].sample_length_with_overflow(tick_sample_length), sample_data[:primary].length + sample_data[:overflow].length)
139
+ assert_equal((tick_sample_length * 8).floor, test_tracks[3].sample_length_with_overflow(tick_sample_length))
140
+ assert_equal(sample_data[:primary].length + sample_data[:overflow].length, test_tracks[3].sample_length_with_overflow(tick_sample_length))
116
141
  end
117
142
 
118
143
  sample_data = test_tracks[4].sample_data(tick_sample_length)
119
- assert_equal(test_tracks[4].sample_length_with_overflow(tick_sample_length), (tick_sample_length * 4).floor)
120
- assert_equal(test_tracks[4].sample_length_with_overflow(tick_sample_length), sample_data[:primary].length + sample_data[:overflow].length)
144
+ assert_equal((tick_sample_length * 4).floor, test_tracks[4].sample_length_with_overflow(tick_sample_length))
145
+ assert_equal(sample_data[:primary].length + sample_data[:overflow].length, test_tracks[4].sample_length_with_overflow(tick_sample_length))
121
146
 
122
147
  sample_data = test_tracks[5].sample_data(tick_sample_length)
123
- assert_equal(test_tracks[5].sample_length_with_overflow(tick_sample_length), (tick_sample_length * 32).floor)
124
- assert_equal(test_tracks[5].sample_length_with_overflow(tick_sample_length), sample_data[:primary].length + sample_data[:overflow].length)
148
+ assert_equal((tick_sample_length * 32).floor, test_tracks[5].sample_length_with_overflow(tick_sample_length))
149
+ assert_equal(sample_data[:primary].length + sample_data[:overflow].length, test_tracks[5].sample_length_with_overflow(tick_sample_length))
125
150
  end
126
-
127
- def test_sample_data_overflow
128
- track = generate_test_data()[2]
129
- tick_sample_length = W.sample_data.length # 6179.0
130
151
 
131
- overflow = W.sample_data[(W.sample_data.length / 2)..W.sample_data.length]
132
- expected_sample_data = zeroes(tick_sample_length * 3) + W.sample_data
133
- expected_sample_data[0...overflow.length] = overflow
134
- actual_sample_data = track.sample_data(tick_sample_length, overflow)
135
- assert_equal(actual_sample_data[:primary], expected_sample_data)
136
-
137
- # Call sample_data() again with different overflow, to verify that cached
138
- # sample data only contains the primary sample data.
139
- overflow = W.sample_data[0..(W.sample_data.length / 2)]
140
- expected_sample_data = zeroes(tick_sample_length * 3) + W.sample_data
141
- expected_sample_data[0...overflow.length] = overflow
142
- actual_sample_data = track.sample_data(tick_sample_length, overflow)
143
- assert_equal(actual_sample_data[:primary], expected_sample_data)
144
- end
145
-
146
152
  def test_sample_data
147
153
  sample_data = W.sample_data
148
154
 
149
155
  tick_sample_length = W.sample_data.length # 6179.0
150
156
  test_tracks = generate_test_data()
151
- assert_equal(test_tracks[0].sample_data(tick_sample_length), {:primary => [], :overflow => []})
157
+ assert_equal({:primary => [], :overflow => []}, test_tracks[0].sample_data(tick_sample_length))
152
158
  helper_test_sample_data(test_tracks[1], tick_sample_length, sample_data[0...tick_sample_length], [])
153
159
  helper_test_sample_data(test_tracks[2], tick_sample_length, zeroes(tick_sample_length * 3) + sample_data, [])
154
160
  helper_test_sample_data(test_tracks[3], tick_sample_length, (sample_data + zeroes(tick_sample_length)) * 4, [])
@@ -158,7 +164,7 @@ class TrackTest < Test::Unit::TestCase
158
164
 
159
165
  tick_sample_length = (W.sample_rate * 60.0) / 220 / 4 # 3006.818181818181818
160
166
  test_tracks = generate_test_data()
161
- assert_equal(test_tracks[0].sample_data(tick_sample_length), {:primary => [], :overflow => []})
167
+ assert_equal({:primary => [], :overflow => []}, test_tracks[0].sample_data(tick_sample_length))
162
168
  helper_test_sample_data(test_tracks[1], tick_sample_length, sample_data[0...tick_sample_length.floor], sample_data[tick_sample_length.floor...sample_data.length])
163
169
  #helper_test_sample_data(test_tracks[2], tick_sample_length, zeroes(tick_sample_length * 3) + sample_data[0..tick_sample_length.floor], sample_data[(tick_sample_length.floor)...sample_data.length])
164
170
  #helper_test_sample_data(test_tracks[3], tick_sample_length,
@@ -172,7 +178,7 @@ class TrackTest < Test::Unit::TestCase
172
178
 
173
179
  tick_sample_length = (W.sample_rate * 60.0) / 99 / 4 # 6681.818181818181818
174
180
  test_tracks = generate_test_data()
175
- assert_equal(test_tracks[0].sample_data(tick_sample_length), {:primary => [], :overflow => []})
181
+ assert_equal({:primary => [], :overflow => []}, test_tracks[0].sample_data(tick_sample_length))
176
182
  helper_test_sample_data(test_tracks[1], tick_sample_length, sample_data + zeroes(tick_sample_length - W.sample_data.length), [])
177
183
  helper_test_sample_data(test_tracks[2], tick_sample_length, zeroes(tick_sample_length * 3) + sample_data + zeroes(tick_sample_length - sample_data.length + 1), [])
178
184
  helper_test_sample_data(test_tracks[3], tick_sample_length,
@@ -187,12 +193,12 @@ class TrackTest < Test::Unit::TestCase
187
193
  def helper_test_sample_data(track, tick_sample_length, expected_primary, expected_overflow)
188
194
  sample_data = track.sample_data(tick_sample_length)
189
195
 
190
- assert_equal(sample_data.class, Hash)
191
- assert_equal(sample_data.keys.map{|key| key.to_s}.sort, ["overflow", "primary"])
192
- assert_equal(sample_data[:primary].length, expected_primary.length)
193
- assert_equal(sample_data[:overflow].length, expected_overflow.length)
194
- assert_equal(sample_data[:primary], expected_primary)
195
- assert_equal(sample_data[:overflow], expected_overflow)
196
+ assert_equal(Hash, sample_data.class)
197
+ assert_equal(["overflow", "primary"], sample_data.keys.map{|key| key.to_s}.sort)
198
+ assert_equal(expected_primary.length, sample_data[:primary].length)
199
+ assert_equal(expected_overflow.length, sample_data[:overflow].length)
200
+ assert_equal(expected_primary, sample_data[:primary])
201
+ assert_equal(expected_overflow, sample_data[:overflow])
196
202
  end
197
203
 
198
204
  private
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beats
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Strait
@@ -9,20 +9,11 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-04-12 00:00:00 -04:00
12
+ date: 2010-07-13 00:00:00 -04:00
13
13
  default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: wavefile
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - "="
22
- - !ruby/object:Gem::Version
23
- version: 0.3.0
24
- version:
25
- description: A drum machine that uses text files. Feed it a YAML file, and it will produce a Wave file.
14
+ dependencies: []
15
+
16
+ description: A command-line drum machine. Feed it a song notated in YAML, and it will produce a precision-milled Wave file of impeccable timing and feel.
26
17
  email: ""
27
18
  executables:
28
19
  - beats
@@ -33,24 +24,162 @@ extra_rdoc_files: []
33
24
  files:
34
25
  - LICENSE
35
26
  - README.markdown
27
+ - lib/beats.rb
28
+ - lib/beatswavefile.rb
36
29
  - lib/kit.rb
37
30
  - lib/pattern.rb
38
31
  - lib/song.rb
32
+ - lib/songoptimizer.rb
39
33
  - lib/songparser.rb
34
+ - lib/songsplitter.rb
40
35
  - lib/track.rb
36
+ - lib/wavefile.rb
41
37
  - bin/beats
38
+ - test/examples/combined.wav
39
+ - test/examples/split-agogo_high.wav
40
+ - test/examples/split-bass.wav
41
+ - test/examples/split-hh_closed.wav
42
+ - test/examples/split-snare.wav
43
+ - test/examples/split-tom2.wav
44
+ - test/examples/split-tom4.wav
45
+ - test/fixtures/expected_output/example_combined_mono_16.wav
46
+ - test/fixtures/expected_output/example_combined_mono_8.wav
47
+ - test/fixtures/expected_output/example_combined_stereo_16.wav
48
+ - test/fixtures/expected_output/example_combined_stereo_8.wav
49
+ - test/fixtures/expected_output/example_split_mono_16-agogo.wav
50
+ - test/fixtures/expected_output/example_split_mono_16-bass.wav
51
+ - test/fixtures/expected_output/example_split_mono_16-hh_closed.wav
52
+ - test/fixtures/expected_output/example_split_mono_16-snare.wav
53
+ - test/fixtures/expected_output/example_split_mono_16-tom2_mono_16.wav
54
+ - test/fixtures/expected_output/example_split_mono_16-tom4_mono_16.wav
55
+ - test/fixtures/expected_output/example_split_mono_8-agogo.wav
56
+ - test/fixtures/expected_output/example_split_mono_8-bass.wav
57
+ - test/fixtures/expected_output/example_split_mono_8-hh_closed.wav
58
+ - test/fixtures/expected_output/example_split_mono_8-snare.wav
59
+ - test/fixtures/expected_output/example_split_mono_8-tom2_mono_8.wav
60
+ - test/fixtures/expected_output/example_split_mono_8-tom4_mono_8.wav
61
+ - test/fixtures/expected_output/example_split_stereo_16-agogo.wav
62
+ - test/fixtures/expected_output/example_split_stereo_16-bass.wav
63
+ - test/fixtures/expected_output/example_split_stereo_16-hh_closed.wav
64
+ - test/fixtures/expected_output/example_split_stereo_16-snare.wav
65
+ - test/fixtures/expected_output/example_split_stereo_16-tom2_stereo_16.wav
66
+ - test/fixtures/expected_output/example_split_stereo_16-tom4_stereo_16.wav
67
+ - test/fixtures/expected_output/example_split_stereo_8-agogo.wav
68
+ - test/fixtures/expected_output/example_split_stereo_8-bass.wav
69
+ - test/fixtures/expected_output/example_split_stereo_8-hh_closed.wav
70
+ - test/fixtures/expected_output/example_split_stereo_8-snare.wav
71
+ - test/fixtures/expected_output/example_split_stereo_8-tom2_stereo_8.wav
72
+ - test/fixtures/expected_output/example_split_stereo_8-tom4_stereo_8.wav
73
+ - test/fixtures/invalid/bad_repeat_count.txt
74
+ - test/fixtures/invalid/bad_rhythm.txt
75
+ - test/fixtures/invalid/bad_structure.txt
76
+ - test/fixtures/invalid/bad_tempo.txt
77
+ - test/fixtures/invalid/no_header.txt
78
+ - test/fixtures/invalid/no_structure.txt
79
+ - test/fixtures/invalid/pattern_with_no_tracks.txt
80
+ - test/fixtures/invalid/sound_in_kit_not_found.txt
81
+ - test/fixtures/invalid/sound_in_track_not_found.txt
82
+ - test/fixtures/invalid/template.txt
83
+ - test/fixtures/valid/example_mono_16.txt
84
+ - test/fixtures/valid/example_mono_8.txt
85
+ - test/fixtures/valid/example_no_kit.txt
86
+ - test/fixtures/valid/example_stereo_16.txt
87
+ - test/fixtures/valid/example_stereo_8.txt
88
+ - test/fixtures/valid/example_with_empty_track.txt
89
+ - test/fixtures/valid/example_with_kit.txt
90
+ - test/fixtures/valid/no_tempo.txt
91
+ - test/fixtures/valid/pattern_with_overflow.txt
92
+ - test/fixtures/valid/repeats_not_specified.txt
93
+ - test/fixtures/yaml/song_yaml.txt
42
94
  - test/includes.rb
95
+ - test/integration.rb
43
96
  - test/kit_test.rb
44
97
  - test/pattern_test.rb
45
98
  - test/song_test.rb
99
+ - test/songoptimizer_test.rb
46
100
  - test/songparser_test.rb
101
+ - test/sounds/agogo_high_mono_16.wav
102
+ - test/sounds/agogo_high_mono_8.wav
103
+ - test/sounds/agogo_high_stereo_16.wav
104
+ - test/sounds/agogo_high_stereo_8.wav
105
+ - test/sounds/agogo_low_mono_16.wav
106
+ - test/sounds/agogo_low_mono_8.wav
107
+ - test/sounds/agogo_low_stereo_16.wav
108
+ - test/sounds/agogo_low_stereo_8.wav
109
+ - test/sounds/bass2_mono_16.wav
110
+ - test/sounds/bass2_mono_8.wav
111
+ - test/sounds/bass2_stereo_16.wav
112
+ - test/sounds/bass2_stereo_8.wav
47
113
  - test/sounds/bass_mono_16.wav
48
114
  - test/sounds/bass_mono_8.wav
49
115
  - test/sounds/bass_stereo_16.wav
116
+ - test/sounds/bass_stereo_8.wav
117
+ - test/sounds/clave_high_mono_16.wav
118
+ - test/sounds/clave_high_mono_8.wav
119
+ - test/sounds/clave_high_stereo_16.wav
120
+ - test/sounds/clave_high_stereo_8.wav
121
+ - test/sounds/clave_low_mono_16.wav
122
+ - test/sounds/clave_low_mono_8.wav
123
+ - test/sounds/clave_low_stereo_16.wav
124
+ - test/sounds/clave_low_stereo_8.wav
125
+ - test/sounds/conga_high_mono_16.wav
126
+ - test/sounds/conga_high_mono_8.wav
127
+ - test/sounds/conga_high_stereo_16.wav
128
+ - test/sounds/conga_high_stereo_8.wav
129
+ - test/sounds/conga_low_mono_16.wav
130
+ - test/sounds/conga_low_mono_8.wav
131
+ - test/sounds/conga_low_stereo_16.wav
132
+ - test/sounds/conga_low_stereo_8.wav
133
+ - test/sounds/cowbell_high_mono_16.wav
134
+ - test/sounds/cowbell_high_mono_8.wav
135
+ - test/sounds/cowbell_high_stereo_16.wav
136
+ - test/sounds/cowbell_high_stereo_8.wav
137
+ - test/sounds/cowbell_low_mono_16.wav
138
+ - test/sounds/cowbell_low_mono_8.wav
139
+ - test/sounds/cowbell_low_stereo_16.wav
140
+ - test/sounds/cowbell_low_stereo_8.wav
141
+ - test/sounds/hh_closed_mono_16.wav
50
142
  - test/sounds/hh_closed_mono_8.wav
143
+ - test/sounds/hh_closed_stereo_16.wav
144
+ - test/sounds/hh_closed_stereo_8.wav
145
+ - test/sounds/hh_open_mono_16.wav
51
146
  - test/sounds/hh_open_mono_8.wav
147
+ - test/sounds/hh_open_stereo_16.wav
148
+ - test/sounds/hh_open_stereo_8.wav
149
+ - test/sounds/ride_mono_16.wav
52
150
  - test/sounds/ride_mono_8.wav
151
+ - test/sounds/ride_stereo_16.wav
152
+ - test/sounds/ride_stereo_8.wav
153
+ - test/sounds/rim_mono_16.wav
154
+ - test/sounds/rim_mono_8.wav
155
+ - test/sounds/rim_stereo_16.wav
156
+ - test/sounds/rim_stereo_8.wav
157
+ - test/sounds/sine-mono-8bit.wav
158
+ - test/sounds/snare2_mono_16.wav
159
+ - test/sounds/snare2_mono_8.wav
160
+ - test/sounds/snare2_stereo_16.wav
161
+ - test/sounds/snare2_stereo_8.wav
162
+ - test/sounds/snare_mono_16.wav
53
163
  - test/sounds/snare_mono_8.wav
164
+ - test/sounds/snare_stereo_16.wav
165
+ - test/sounds/snare_stereo_8.wav
166
+ - test/sounds/tom1_mono_16.wav
167
+ - test/sounds/tom1_mono_8.wav
168
+ - test/sounds/tom1_stereo_16.wav
169
+ - test/sounds/tom1_stereo_8.wav
170
+ - test/sounds/tom2_mono_16.wav
171
+ - test/sounds/tom2_mono_8.wav
172
+ - test/sounds/tom2_stereo_16.wav
173
+ - test/sounds/tom2_stereo_8.wav
174
+ - test/sounds/tom3_mono_16.wav
175
+ - test/sounds/tom3_mono_8.wav
176
+ - test/sounds/tom3_stereo_16.wav
177
+ - test/sounds/tom3_stereo_8.wav
178
+ - test/sounds/tom4_mono_16.wav
179
+ - test/sounds/tom4_mono_8.wav
180
+ - test/sounds/tom4_stereo_16.wav
181
+ - test/sounds/tom4_stereo_8.wav
182
+ - test/sounds/tone.wav
54
183
  - test/track_test.rb
55
184
  has_rdoc: true
56
185
  homepage: http://beatsdrummachine.com/
@@ -79,18 +208,151 @@ rubyforge_project:
79
208
  rubygems_version: 1.3.5
80
209
  signing_key:
81
210
  specification_version: 3
82
- summary: A drum machine that uses text files. Feed it a YAML file, and it will produce a Wave file.
211
+ summary: A command-line drum machine. Feed it a song notated in YAML, and it will produce a precision-milled Wave file of impeccable timing and feel.
83
212
  test_files:
213
+ - test/examples/combined.wav
214
+ - test/examples/split-agogo_high.wav
215
+ - test/examples/split-bass.wav
216
+ - test/examples/split-hh_closed.wav
217
+ - test/examples/split-snare.wav
218
+ - test/examples/split-tom2.wav
219
+ - test/examples/split-tom4.wav
220
+ - test/fixtures/expected_output/example_combined_mono_16.wav
221
+ - test/fixtures/expected_output/example_combined_mono_8.wav
222
+ - test/fixtures/expected_output/example_combined_stereo_16.wav
223
+ - test/fixtures/expected_output/example_combined_stereo_8.wav
224
+ - test/fixtures/expected_output/example_split_mono_16-agogo.wav
225
+ - test/fixtures/expected_output/example_split_mono_16-bass.wav
226
+ - test/fixtures/expected_output/example_split_mono_16-hh_closed.wav
227
+ - test/fixtures/expected_output/example_split_mono_16-snare.wav
228
+ - test/fixtures/expected_output/example_split_mono_16-tom2_mono_16.wav
229
+ - test/fixtures/expected_output/example_split_mono_16-tom4_mono_16.wav
230
+ - test/fixtures/expected_output/example_split_mono_8-agogo.wav
231
+ - test/fixtures/expected_output/example_split_mono_8-bass.wav
232
+ - test/fixtures/expected_output/example_split_mono_8-hh_closed.wav
233
+ - test/fixtures/expected_output/example_split_mono_8-snare.wav
234
+ - test/fixtures/expected_output/example_split_mono_8-tom2_mono_8.wav
235
+ - test/fixtures/expected_output/example_split_mono_8-tom4_mono_8.wav
236
+ - test/fixtures/expected_output/example_split_stereo_16-agogo.wav
237
+ - test/fixtures/expected_output/example_split_stereo_16-bass.wav
238
+ - test/fixtures/expected_output/example_split_stereo_16-hh_closed.wav
239
+ - test/fixtures/expected_output/example_split_stereo_16-snare.wav
240
+ - test/fixtures/expected_output/example_split_stereo_16-tom2_stereo_16.wav
241
+ - test/fixtures/expected_output/example_split_stereo_16-tom4_stereo_16.wav
242
+ - test/fixtures/expected_output/example_split_stereo_8-agogo.wav
243
+ - test/fixtures/expected_output/example_split_stereo_8-bass.wav
244
+ - test/fixtures/expected_output/example_split_stereo_8-hh_closed.wav
245
+ - test/fixtures/expected_output/example_split_stereo_8-snare.wav
246
+ - test/fixtures/expected_output/example_split_stereo_8-tom2_stereo_8.wav
247
+ - test/fixtures/expected_output/example_split_stereo_8-tom4_stereo_8.wav
248
+ - test/fixtures/invalid/bad_repeat_count.txt
249
+ - test/fixtures/invalid/bad_rhythm.txt
250
+ - test/fixtures/invalid/bad_structure.txt
251
+ - test/fixtures/invalid/bad_tempo.txt
252
+ - test/fixtures/invalid/no_header.txt
253
+ - test/fixtures/invalid/no_structure.txt
254
+ - test/fixtures/invalid/pattern_with_no_tracks.txt
255
+ - test/fixtures/invalid/sound_in_kit_not_found.txt
256
+ - test/fixtures/invalid/sound_in_track_not_found.txt
257
+ - test/fixtures/invalid/template.txt
258
+ - test/fixtures/valid/example_mono_16.txt
259
+ - test/fixtures/valid/example_mono_8.txt
260
+ - test/fixtures/valid/example_no_kit.txt
261
+ - test/fixtures/valid/example_stereo_16.txt
262
+ - test/fixtures/valid/example_stereo_8.txt
263
+ - test/fixtures/valid/example_with_empty_track.txt
264
+ - test/fixtures/valid/example_with_kit.txt
265
+ - test/fixtures/valid/no_tempo.txt
266
+ - test/fixtures/valid/pattern_with_overflow.txt
267
+ - test/fixtures/valid/repeats_not_specified.txt
268
+ - test/fixtures/yaml/song_yaml.txt
84
269
  - test/includes.rb
270
+ - test/integration.rb
85
271
  - test/kit_test.rb
86
272
  - test/pattern_test.rb
87
273
  - test/song_test.rb
274
+ - test/songoptimizer_test.rb
88
275
  - test/songparser_test.rb
276
+ - test/sounds/agogo_high_mono_16.wav
277
+ - test/sounds/agogo_high_mono_8.wav
278
+ - test/sounds/agogo_high_stereo_16.wav
279
+ - test/sounds/agogo_high_stereo_8.wav
280
+ - test/sounds/agogo_low_mono_16.wav
281
+ - test/sounds/agogo_low_mono_8.wav
282
+ - test/sounds/agogo_low_stereo_16.wav
283
+ - test/sounds/agogo_low_stereo_8.wav
284
+ - test/sounds/bass2_mono_16.wav
285
+ - test/sounds/bass2_mono_8.wav
286
+ - test/sounds/bass2_stereo_16.wav
287
+ - test/sounds/bass2_stereo_8.wav
89
288
  - test/sounds/bass_mono_16.wav
90
289
  - test/sounds/bass_mono_8.wav
91
290
  - test/sounds/bass_stereo_16.wav
291
+ - test/sounds/bass_stereo_8.wav
292
+ - test/sounds/clave_high_mono_16.wav
293
+ - test/sounds/clave_high_mono_8.wav
294
+ - test/sounds/clave_high_stereo_16.wav
295
+ - test/sounds/clave_high_stereo_8.wav
296
+ - test/sounds/clave_low_mono_16.wav
297
+ - test/sounds/clave_low_mono_8.wav
298
+ - test/sounds/clave_low_stereo_16.wav
299
+ - test/sounds/clave_low_stereo_8.wav
300
+ - test/sounds/conga_high_mono_16.wav
301
+ - test/sounds/conga_high_mono_8.wav
302
+ - test/sounds/conga_high_stereo_16.wav
303
+ - test/sounds/conga_high_stereo_8.wav
304
+ - test/sounds/conga_low_mono_16.wav
305
+ - test/sounds/conga_low_mono_8.wav
306
+ - test/sounds/conga_low_stereo_16.wav
307
+ - test/sounds/conga_low_stereo_8.wav
308
+ - test/sounds/cowbell_high_mono_16.wav
309
+ - test/sounds/cowbell_high_mono_8.wav
310
+ - test/sounds/cowbell_high_stereo_16.wav
311
+ - test/sounds/cowbell_high_stereo_8.wav
312
+ - test/sounds/cowbell_low_mono_16.wav
313
+ - test/sounds/cowbell_low_mono_8.wav
314
+ - test/sounds/cowbell_low_stereo_16.wav
315
+ - test/sounds/cowbell_low_stereo_8.wav
316
+ - test/sounds/hh_closed_mono_16.wav
92
317
  - test/sounds/hh_closed_mono_8.wav
318
+ - test/sounds/hh_closed_stereo_16.wav
319
+ - test/sounds/hh_closed_stereo_8.wav
320
+ - test/sounds/hh_open_mono_16.wav
93
321
  - test/sounds/hh_open_mono_8.wav
322
+ - test/sounds/hh_open_stereo_16.wav
323
+ - test/sounds/hh_open_stereo_8.wav
324
+ - test/sounds/ride_mono_16.wav
94
325
  - test/sounds/ride_mono_8.wav
326
+ - test/sounds/ride_stereo_16.wav
327
+ - test/sounds/ride_stereo_8.wav
328
+ - test/sounds/rim_mono_16.wav
329
+ - test/sounds/rim_mono_8.wav
330
+ - test/sounds/rim_stereo_16.wav
331
+ - test/sounds/rim_stereo_8.wav
332
+ - test/sounds/sine-mono-8bit.wav
333
+ - test/sounds/snare2_mono_16.wav
334
+ - test/sounds/snare2_mono_8.wav
335
+ - test/sounds/snare2_stereo_16.wav
336
+ - test/sounds/snare2_stereo_8.wav
337
+ - test/sounds/snare_mono_16.wav
95
338
  - test/sounds/snare_mono_8.wav
339
+ - test/sounds/snare_stereo_16.wav
340
+ - test/sounds/snare_stereo_8.wav
341
+ - test/sounds/tom1_mono_16.wav
342
+ - test/sounds/tom1_mono_8.wav
343
+ - test/sounds/tom1_stereo_16.wav
344
+ - test/sounds/tom1_stereo_8.wav
345
+ - test/sounds/tom2_mono_16.wav
346
+ - test/sounds/tom2_mono_8.wav
347
+ - test/sounds/tom2_stereo_16.wav
348
+ - test/sounds/tom2_stereo_8.wav
349
+ - test/sounds/tom3_mono_16.wav
350
+ - test/sounds/tom3_mono_8.wav
351
+ - test/sounds/tom3_stereo_16.wav
352
+ - test/sounds/tom3_stereo_8.wav
353
+ - test/sounds/tom4_mono_16.wav
354
+ - test/sounds/tom4_mono_8.wav
355
+ - test/sounds/tom4_stereo_16.wav
356
+ - test/sounds/tom4_stereo_8.wav
357
+ - test/sounds/tone.wav
96
358
  - test/track_test.rb