beats 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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