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
@@ -0,0 +1,8 @@
1
+ # Invalid song, since the number of repeats for pattern Verse is not a number
2
+ Song:
3
+ Tempo: 100
4
+ Structure:
5
+ - Verse: x2a
6
+
7
+ Verse:
8
+ - test/sounds/bass_mono_8.wav: X...X...X...XX..X...X...XX..X...
@@ -0,0 +1,9 @@
1
+ # Song with a track whose rhythm has an invalid character. (In this case, $).
2
+
3
+ Song:
4
+ Tempo: 100
5
+ Structure:
6
+ - Verse: x1
7
+
8
+ Verse:
9
+ - test/sounds/snare_mono_8.wav: ..$.X
@@ -0,0 +1,9 @@
1
+ # Invalid song, since the structure references a non-existent pattern
2
+ Song:
3
+ Tempo: 100
4
+ Structure:
5
+ - Verse: x2
6
+ - Chorus: x1
7
+
8
+ Verse:
9
+ - test/sounds/bass_mono_8.wav: X...X...X...XX..X...X...XX..X...
@@ -0,0 +1,8 @@
1
+ # Invalid song, since the tempo is not a number
2
+ Song:
3
+ Tempo: 100a
4
+ Structure:
5
+ - Verse: x2
6
+
7
+ Verse:
8
+ - test/sounds/bass_mono_8.wav: X...X...X...XX..X...X...XX..X...
@@ -0,0 +1,3 @@
1
+ # Invalid song, since it has no header
2
+ Verse:
3
+ - test/sounds/bass_mono_8.wav: X...X...X...XX..X...X...XX..X...
@@ -0,0 +1,6 @@
1
+ # Invalid song, since it doesn't have a structure section in the header
2
+ Song:
3
+ Tempo: 100
4
+
5
+ Verse:
6
+ - test/sounds/bass_mono_8.wav: X...X...X...XX..X...X...XX..X...
@@ -0,0 +1,12 @@
1
+ # Invalid song, since it contains a pattern with no tracks
2
+
3
+ Song:
4
+ Tempo: 100
5
+ Structure:
6
+ - Verse: x1
7
+ - Chorus: x1
8
+
9
+ Verse:
10
+
11
+ Chorus:
12
+ - ../../../test/sounds/snare_mono_8.wav: X...X...
@@ -0,0 +1,10 @@
1
+ # Invalid song, since the Kit references a non-existent sound
2
+ Song:
3
+ Tempo: 100
4
+ Structure:
5
+ - Verse: x1
6
+ Kit:
7
+ - bad: test/sounds/i_do_not_exist.wav
8
+
9
+ Verse:
10
+ - bad: X...X...
@@ -0,0 +1,8 @@
1
+ # Invalid song, since a track references a non-existent sound
2
+ Song:
3
+ Tempo: 100
4
+ Structure:
5
+ - Verse: x1
6
+
7
+ Verse:
8
+ - test/sounds/i_do_not_exist.wav: X...X...
@@ -0,0 +1,31 @@
1
+ # An example song using mono 8-bit sounds
2
+
3
+ Song:
4
+ Tempo: 120
5
+ Structure:
6
+ - Verse: x2
7
+ - Chorus: x4
8
+ - Verse: x2
9
+ - Chorus: x4
10
+ Kit:
11
+ - bass: ../../sounds/bass_mono_16.wav
12
+ - snare: ../../sounds/snare_mono_16.wav
13
+ - hh_closed: ../../sounds/hh_closed_mono_16.wav
14
+ - agogo: ../../sounds/agogo_high_mono_16.wav
15
+ - tom_high: ../../sounds/tom4_mono_16.wav
16
+ - tom_low: ../../sounds/tom2_mono_16.wav
17
+
18
+ Verse:
19
+ - bass: X...X
20
+ - snare: X.X.X
21
+ - hh_closed: X.XXX
22
+ - hh_closed: X....
23
+ - agogo: ....X
24
+
25
+ Chorus:
26
+ - bass: X...X...XX..X...
27
+ - snare: ....X.......X...
28
+ - hh_closed: X......
29
+ - hh_closed: X.XXX.XXX.XX..X.
30
+ - tom_high: ...........X....
31
+ - tom_low: X.............X.
@@ -0,0 +1,28 @@
1
+ # An example song using mono 16-bit sounds
2
+
3
+ Song:
4
+ Tempo: 120
5
+ Structure:
6
+ - Verse: x2
7
+ - Chorus: x4
8
+ - Verse: x2
9
+ - Chorus: x4
10
+ Kit:
11
+ - bass: ../../sounds/bass_mono_16.wav
12
+ - snare: ../../sounds/snare_mono_16.wav
13
+ - hh_closed: ../../sounds/hh_closed_mono_16.wav
14
+ - agogo: ../../sounds/agogo_high_mono_16.wav
15
+
16
+ Verse:
17
+ - bass: X...X...X...X...
18
+ - snare: ..............X.
19
+ - hh_closed: X.XXX.XXX.X.X.X.
20
+ - agogo: ..............XX
21
+
22
+ # Also including non-Kit sounds to test that they work as well:
23
+ Chorus:
24
+ - bass: X...X...XX..X...
25
+ - snare: ....X.......X...
26
+ - hh_closed: X.XXX.XXX.XX..X.
27
+ - ../../sounds/tom4_mono_16.wav: ...........X....
28
+ - ../../sounds/tom2_mono_16.wav: ..............X.
@@ -0,0 +1,28 @@
1
+ # An example song using mono 8-bit sounds
2
+
3
+ Song:
4
+ Tempo: 120
5
+ Structure:
6
+ - Verse: x2
7
+ - Chorus: x4
8
+ - Verse: x2
9
+ - Chorus: x4
10
+ Kit:
11
+ - bass: ../../sounds/bass_mono_8.wav
12
+ - snare: ../../sounds/snare_mono_8.wav
13
+ - hh_closed: ../../sounds/hh_closed_mono_8.wav
14
+ - agogo: ../../sounds/agogo_high_mono_8.wav
15
+
16
+ Verse:
17
+ - bass: X...X...X...X...
18
+ - snare: ..............X.
19
+ - hh_closed: X.XXX.XXX.X.X.X.
20
+ - agogo: ..............XX
21
+
22
+ # Also including non-Kit sounds to test that they work as well:
23
+ Chorus:
24
+ - bass: X...X...XX..X...
25
+ - snare: ....X.......X...
26
+ - hh_closed: X.XXX.XXX.XX..X.
27
+ - ../../sounds/tom4_mono_8.wav: ...........X....
28
+ - ../../sounds/tom2_mono_8.wav: ..............X.
@@ -0,0 +1,30 @@
1
+ # An example song, with no Kit section in the header.
2
+
3
+ Song:
4
+ Tempo: 99
5
+ Structure:
6
+ - Verse: x2
7
+ - Chorus: x2
8
+ - Verse: x2
9
+ - Chorus: x4
10
+ - Bridge: x1
11
+ - Undefined: x0 # Legal to reference undefined pattern as long as num repeats is 0.
12
+ - Chorus: x4
13
+
14
+ Verse:
15
+ - test/sounds/bass_mono_8.wav: X...X...X...XX..X...X...XX..X...
16
+ - test/sounds/snare_mono_8.wav: ..X...X...X...X.X...X...X...X...
17
+ # Here is a comment
18
+ - test/sounds/hh_closed_mono_8.wav: X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.
19
+ - test/sounds/hh_open_mono_8.wav: X...............X..............X
20
+ # Here is another comment
21
+ Chorus:
22
+ - test/sounds/bass_mono_8.wav: X...X...XXXXXXXXX...X...X...X...
23
+ - test/sounds/snare_mono_8.wav: ...................X...X...X...X
24
+ - test/sounds/hh_closed_mono_8.wav: X.X.XXX.X.X.XXX.X.X.XXX.X.X.XXX. # It's comment time
25
+ - test/sounds/hh_open_mono_8.wav: ........X.......X.......X.......
26
+ - test/sounds/ride_mono_8.wav: ....X...................X.......
27
+
28
+
29
+ Bridge:
30
+ - test/sounds/hh_closed_mono_8.wav: XX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.X
@@ -0,0 +1,28 @@
1
+ # An example song using stereo 16-bit sounds
2
+
3
+ Song:
4
+ Tempo: 120
5
+ Structure:
6
+ - Verse: x2
7
+ - Chorus: x4
8
+ - Verse: x2
9
+ - Chorus: x4
10
+ Kit:
11
+ - bass: ../../sounds/bass_stereo_16.wav
12
+ - snare: ../../sounds/snare_stereo_16.wav
13
+ - hh_closed: ../../sounds/hh_closed_stereo_16.wav
14
+ - agogo: ../../sounds/agogo_high_stereo_16.wav
15
+
16
+ Verse:
17
+ - bass: X...X...X...X...
18
+ - snare: ..............X.
19
+ - hh_closed: X.XXX.XXX.X.X.X.
20
+ - agogo: ..............XX
21
+
22
+ # Also including non-Kit sounds to test that they work as well:
23
+ Chorus:
24
+ - bass: X...X...XX..X...
25
+ - snare: ....X.......X...
26
+ - hh_closed: X.XXX.XXX.XX..X.
27
+ - ../../sounds/tom4_stereo_16.wav: ...........X....
28
+ - ../../sounds/tom2_stereo_16.wav: ..............X.
@@ -0,0 +1,28 @@
1
+ # An example song using stereo 8-bit sounds
2
+
3
+ Song:
4
+ Tempo: 120
5
+ Structure:
6
+ - Verse: x2
7
+ - Chorus: x4
8
+ - Verse: x2
9
+ - Chorus: x4
10
+ Kit:
11
+ - bass: ../../sounds/bass_stereo_8.wav
12
+ - snare: ../../sounds/snare_stereo_8.wav
13
+ - hh_closed: ../../sounds/hh_closed_stereo_8.wav
14
+ - agogo: ../../sounds/agogo_high_stereo_8.wav
15
+
16
+ Verse:
17
+ - bass: X...X...X...X...
18
+ - snare: ..............X.
19
+ - hh_closed: X.XXX.XXX.X.X.X.
20
+ - agogo: ..............XX
21
+
22
+ # Also including non-Kit sounds to test that they work as well:
23
+ Chorus:
24
+ - bass: X...X...XX..X...
25
+ - snare: ....X.......X...
26
+ - hh_closed: X.XXX.XXX.XX..X.
27
+ - ../../sounds/tom4_stereo_8.wav: ...........X....
28
+ - ../../sounds/tom2_stereo_8.wav: ..............X.
@@ -0,0 +1,10 @@
1
+ # An song which has a track with no rhythm. This is valid.
2
+
3
+ Song:
4
+ Tempo: 99
5
+ Structure:
6
+ - Verse: x1
7
+
8
+ Verse:
9
+ - test/sounds/bass_mono_8.wav:
10
+ - test/sounds/snare_mono_8.wav: X...X...
@@ -0,0 +1,34 @@
1
+ # An example song
2
+
3
+ Song:
4
+ Tempo: 99
5
+ Kit:
6
+ - bass: test/sounds/bass_mono_8.wav
7
+ - snare: test/sounds/snare_mono_8.wav
8
+ - hhclosed: test/sounds/hh_closed_mono_8.wav
9
+ - hhopen: test/sounds/hh_open_mono_8.wav
10
+ Structure:
11
+ - Verse: x2
12
+ - Chorus: x2
13
+ - Verse: x2
14
+ - Chorus: x4
15
+ - Bridge: x1
16
+ - Undefined: x0 # Legal to reference undefined pattern as long as num repeats is 0.
17
+ - Chorus: x4
18
+
19
+ Verse:
20
+ - bass: X...X...X...XX..X...X...XX..X...
21
+ - snare: ..X...X...X...X.X...X...X...X...
22
+ # Here is a comment
23
+ - hhclosed: X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.
24
+ - hhopen: X...............X..............X
25
+ # Here is another comment
26
+ Chorus:
27
+ - bass: X...X...XXXXXXXXX...X...X...X...
28
+ - snare: ...................X...X...X...X
29
+ - test/sounds/hh_closed_mono_8.wav: X.X.XXX.X.X.XXX.X.X.XXX.X.X.XXX. # It's comment time
30
+ - hhopen: ........X.......X.......X.......
31
+ - test/sounds/ride_mono_8.wav: ....X...................X.......
32
+
33
+ Bridge:
34
+ - hhclosed: XX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.X
@@ -0,0 +1,8 @@
1
+ # Valid song file, despite not having a tempo. Tempo will be set to a default value.
2
+
3
+ Song:
4
+ Structure:
5
+ - Verse: x1
6
+
7
+ Verse:
8
+ - test/sounds/bass_mono_8.wav: X
@@ -0,0 +1,9 @@
1
+ # Song with a pattern whose sound overflows past the end of it.
2
+
3
+ Song:
4
+ Tempo: 100
5
+ Structure:
6
+ - Verse: x2
7
+
8
+ Verse:
9
+ - test/sounds/snare_mono_8.wav: ...X
@@ -0,0 +1,10 @@
1
+ # The pattern Verse in the structure doesn't specify how many times it should repeat.
2
+ # This is valid, it causes it to default to 1 repeat.
3
+
4
+ Song:
5
+ Tempo: 100
6
+ Structure:
7
+ - Verse
8
+
9
+ Verse:
10
+ - test/sounds/bass_mono_8.wav: X
@@ -0,0 +1,30 @@
1
+ Song:
2
+ Tempo: 99
3
+ Structure:
4
+ - Verse: x2
5
+ - Chorus: x2
6
+ - Verse: x2
7
+ - Chorus: x4
8
+ - Bridge: x1
9
+ - Chorus: x4
10
+ Kit:
11
+ - bass: test/sounds/bass_mono_8.wav
12
+ - hhclosed: test/sounds/hh_closed_mono_8.wav
13
+ - hhopen: test/sounds/hh_open_mono_8.wav
14
+ - snare: test/sounds/snare_mono_8.wav
15
+
16
+ Bridge:
17
+ - hhclosed: XX.XXX.XXX.XXX.XXX.XXX.XXX.XXX.X
18
+
19
+ Chorus:
20
+ - bass: X...X...XXXXXXXXX...X...X...X...
21
+ - hhopen: ........X.......X.......X.......
22
+ - snare: ...................X...X...X...X
23
+ - test/sounds/hh_closed_mono_8.wav: X.X.XXX.X.X.XXX.X.X.XXX.X.X.XXX.
24
+ - test/sounds/ride_mono_8.wav: ....X...................X.......
25
+
26
+ Verse:
27
+ - bass: X...X...X...XX..X...X...XX..X...
28
+ - hhclosed: X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.
29
+ - hhopen: X...............X..............X
30
+ - snare: ..X...X...X...X.X...X...X...X...