@hraness/dawg 0.6.1 → 0.7.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 (253) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/DAWG.md +343 -116
  3. package/README.md +27 -25
  4. package/core/autotune.ts +1119 -0
  5. package/core/chords.ts +271 -23
  6. package/core/clips.ts +499 -0
  7. package/core/diff.ts +182 -104
  8. package/core/expression.ts +15 -0
  9. package/core/fx.ts +99 -29
  10. package/core/instruments.ts +19 -0
  11. package/core/keys.ts +3 -3
  12. package/core/loop.ts +5 -0
  13. package/core/lyrics.ts +297 -0
  14. package/core/master.ts +3 -3
  15. package/core/resonators.ts +16 -2
  16. package/core/routing.ts +165 -0
  17. package/core/score.ts +832 -13
  18. package/core/sdk/eval-child.ts +7 -2
  19. package/core/sdk/eval.ts +35 -6
  20. package/core/sdk/print.ts +276 -3
  21. package/core/sdk/sync-lyrics.ts +49 -0
  22. package/core/sdk/v1.ts +1849 -42
  23. package/core/sections.ts +292 -26
  24. package/core/sing.ts +815 -0
  25. package/core/style-provenance.ts +80 -0
  26. package/core/styles/africa-mena-southasia.ts +2893 -0
  27. package/core/styles/americas.ts +3810 -0
  28. package/core/styles/art.ts +4993 -0
  29. package/core/styles/base.ts +123 -0
  30. package/core/styles/cycles.ts +106 -0
  31. package/core/styles/electronic.ts +2723 -0
  32. package/core/styles/europe-asia-pacific.ts +2838 -0
  33. package/core/styles/excerpt.ts +29 -0
  34. package/core/styles/gamelan.ts +283 -0
  35. package/core/styles/generate.ts +2199 -0
  36. package/core/styles/index.ts +515 -0
  37. package/core/styles/parts.ts +106 -0
  38. package/core/styles/pop.ts +3189 -0
  39. package/core/styles/rock.ts +2993 -0
  40. package/core/styles/roots.ts +4175 -0
  41. package/core/styles/schema.ts +429 -0
  42. package/core/styles/taxonomy.ts +940 -0
  43. package/core/styles/validate.ts +528 -0
  44. package/core/tempo.ts +32 -2
  45. package/core/tuning.ts +19 -3
  46. package/core/vocoder.ts +524 -0
  47. package/guides/agent.md +29 -0
  48. package/guides/arrange.md +30 -0
  49. package/guides/audition.md +20 -14
  50. package/guides/automation.md +12 -7
  51. package/guides/chords.md +15 -15
  52. package/guides/effects.md +17 -16
  53. package/guides/faders.md +20 -16
  54. package/guides/files.md +13 -9
  55. package/guides/getting-started.md +15 -11
  56. package/guides/keys.md +19 -15
  57. package/guides/media.md +17 -12
  58. package/guides/mix.md +12 -6
  59. package/guides/music.md +23 -8
  60. package/guides/notes.md +15 -9
  61. package/guides/performance.md +15 -13
  62. package/guides/play.md +21 -13
  63. package/guides/project.md +25 -8
  64. package/guides/providers.md +20 -14
  65. package/guides/resample.md +15 -9
  66. package/guides/rhythm.md +17 -13
  67. package/guides/sessions.md +17 -7
  68. package/guides/show-me.md +31 -0
  69. package/guides/sound.md +25 -9
  70. package/guides/sounds.md +15 -13
  71. package/guides/styles.md +31 -0
  72. package/guides/tempo.md +15 -10
  73. package/guides/tracks.md +15 -10
  74. package/guides/tuning.md +32 -0
  75. package/guides/voice.md +31 -0
  76. package/guides/web-search.md +18 -8
  77. package/native/prebuilt/darwin-arm64/libdawg_sink.dylib +0 -0
  78. package/native/prebuilt/darwin-x64/libdawg_sink.dylib +0 -0
  79. package/native/prebuilt/linux-arm64/libdawg_sink.so +0 -0
  80. package/native/prebuilt/linux-x64/libdawg_sink.so +0 -0
  81. package/native/prebuilt/manifest.json +21 -0
  82. package/package.json +5 -2
  83. package/src/agent/agent.ts +126 -14
  84. package/src/agent/calibration-tools.ts +53 -0
  85. package/src/agent/clip-tools.ts +453 -0
  86. package/src/agent/command-agent.ts +369 -0
  87. package/src/agent/drum-tools.ts +2 -2
  88. package/src/agent/expression-tools.ts +1 -1
  89. package/src/agent/gateway.ts +246 -60
  90. package/src/agent/models.ts +53 -12
  91. package/src/agent/ops.ts +12 -1
  92. package/src/agent/pack-tools.ts +1 -1
  93. package/src/agent/planner.ts +13 -0
  94. package/src/agent/portable-schema.ts +80 -0
  95. package/src/agent/preview-tool.ts +4 -1
  96. package/src/agent/provider.ts +22 -8
  97. package/src/agent/rhythm-tools.ts +1 -1
  98. package/src/agent/section-tools.ts +1 -1
  99. package/src/agent/show-me.ts +497 -0
  100. package/src/agent/steer.ts +15 -0
  101. package/src/agent/style-tools.ts +217 -0
  102. package/src/agent/tool-error.ts +12 -0
  103. package/src/agent/tools.ts +108 -23
  104. package/src/agent/usage.ts +2 -2
  105. package/src/agent/voice-tools.ts +925 -0
  106. package/src/agent/xcb-agent.ts +11 -7
  107. package/src/argv.ts +38 -0
  108. package/src/audio/analysis.ts +253 -0
  109. package/src/audio/arrange.ts +37 -3
  110. package/src/audio/autotune-engine.ts +101 -0
  111. package/src/audio/autotune.ts +640 -0
  112. package/src/audio/clips.ts +240 -0
  113. package/src/audio/doctor.ts +86 -0
  114. package/src/audio/dsp/bandbank.ts +138 -0
  115. package/src/audio/dsp/envelope.ts +10 -0
  116. package/src/audio/dsp/follow.ts +120 -0
  117. package/src/audio/dsp/formant.ts +427 -0
  118. package/src/audio/dsp/glottal.ts +243 -0
  119. package/src/audio/dsp/interp.ts +7 -2
  120. package/src/audio/dsp/lpc.ts +50 -0
  121. package/src/audio/dsp/periodicity.ts +59 -0
  122. package/src/audio/dsp/pitch.ts +995 -0
  123. package/src/audio/dsp/psola.ts +199 -0
  124. package/src/audio/effects/chain.ts +3 -1
  125. package/src/audio/effects/common.ts +43 -0
  126. package/src/audio/effects/convolution.ts +7 -4
  127. package/src/audio/effects/filter.ts +48 -69
  128. package/src/audio/effects/formant.ts +263 -0
  129. package/src/audio/engine.ts +160 -28
  130. package/src/audio/fit.ts +35 -3
  131. package/src/audio/instrument-check.ts +59 -43
  132. package/src/audio/instruments.ts +4 -0
  133. package/src/audio/keys/calibration.ts +56 -0
  134. package/src/audio/keys/electric.ts +8 -1
  135. package/src/audio/keys/engine.ts +13 -1
  136. package/src/audio/keys/piano.ts +22 -2
  137. package/src/audio/kits.ts +135 -6
  138. package/src/audio/live.ts +114 -20
  139. package/src/audio/native.ts +615 -0
  140. package/src/audio/preview.ts +30 -2
  141. package/src/audio/render-worker.ts +2 -0
  142. package/src/audio/renderer.ts +2 -0
  143. package/src/audio/resample.ts +2 -1
  144. package/src/audio/sampler.ts +85 -4
  145. package/src/audio/samples.ts +20 -2
  146. package/src/audio/sing/analysis.ts +193 -0
  147. package/src/audio/sing/engine.ts +949 -0
  148. package/src/audio/strings/bow.ts +48 -5
  149. package/src/audio/strings/engine.ts +8 -2
  150. package/src/audio/synth/oscillators.ts +31 -21
  151. package/src/audio/synth/voice.ts +34 -1
  152. package/src/audio/vocoder/bank.ts +314 -0
  153. package/src/audio/vocoder/carrier.ts +165 -0
  154. package/src/audio/vocoder/control.ts +68 -0
  155. package/src/audio/vocoder/detect.ts +50 -0
  156. package/src/audio/vocoder/index.ts +304 -0
  157. package/src/audio/vocoder/talkbox.ts +143 -0
  158. package/src/audio/wav.ts +500 -77
  159. package/src/audio/winds/engine.ts +5 -1
  160. package/src/audio/winds/trim.ts +28 -4
  161. package/src/audio/winds/trims1.ts +297 -0
  162. package/src/audio/winds/voice.ts +15 -2
  163. package/src/auth/cli.ts +38 -36
  164. package/src/auth/credentials.ts +30 -1
  165. package/src/auth/login.ts +15 -9
  166. package/src/auth/tui.ts +19 -10
  167. package/src/commands/arrange.ts +44 -29
  168. package/src/commands/autotune.ts +421 -0
  169. package/src/commands/calibration.ts +74 -0
  170. package/src/commands/clips.ts +887 -0
  171. package/src/commands/drums.ts +3 -2
  172. package/src/commands/edit.ts +11 -4
  173. package/src/commands/expression.ts +1 -1
  174. package/src/commands/formant.ts +221 -0
  175. package/src/commands/fx.ts +101 -32
  176. package/src/commands/grammar.ts +558 -0
  177. package/src/commands/help.ts +610 -380
  178. package/src/commands/history.ts +18 -0
  179. package/src/commands/keys.ts +8 -8
  180. package/src/commands/modal.ts +1 -1
  181. package/src/commands/music.ts +1 -1
  182. package/src/commands/nearest.ts +53 -0
  183. package/src/commands/pack.ts +9 -2
  184. package/src/commands/param-range.ts +56 -0
  185. package/src/commands/parses.ts +130 -0
  186. package/src/commands/progression.ts +170 -0
  187. package/src/commands/rhythm.ts +3 -0
  188. package/src/commands/rig.ts +3 -24
  189. package/src/commands/sing.ts +478 -0
  190. package/src/commands/strum.ts +13 -1
  191. package/src/commands/style.ts +415 -0
  192. package/src/commands/time.ts +6 -3
  193. package/src/commands/tuning.ts +3 -3
  194. package/src/commands/vocal-pitch.ts +616 -0
  195. package/src/commands/vocal.ts +147 -0
  196. package/src/commands/vocoder.ts +627 -0
  197. package/src/commands/wind.ts +2 -2
  198. package/src/fs/durable.ts +50 -0
  199. package/src/lang/glossary.ts +493 -0
  200. package/src/launch-args.ts +163 -0
  201. package/src/main.ts +1397 -253
  202. package/src/media/cli.ts +20 -3
  203. package/src/media/import.ts +3 -1
  204. package/src/project/check.ts +21 -2
  205. package/src/project/clip-pins.ts +72 -0
  206. package/src/project/init.ts +23 -8
  207. package/src/project/sync.ts +418 -86
  208. package/src/render.ts +20 -1
  209. package/src/session/daemon.ts +3 -0
  210. package/src/session/meta.ts +14 -0
  211. package/src/session/origin.ts +154 -0
  212. package/src/session/port.ts +22 -4
  213. package/src/session/presence.ts +34 -4
  214. package/src/session/protocol.ts +5 -1
  215. package/src/session/rebase.ts +18 -5
  216. package/src/session/receipt.ts +258 -0
  217. package/src/session/store.ts +65 -43
  218. package/src/tui/arrange-menu.ts +65 -31
  219. package/src/tui/audition.ts +1 -1
  220. package/src/tui/euclid.ts +18 -13
  221. package/src/tui/fader.ts +228 -41
  222. package/src/tui/granular-menu.ts +2 -4
  223. package/src/tui/menu-clips.ts +297 -0
  224. package/src/tui/menu-time.ts +20 -13
  225. package/src/tui/menu-voice.ts +405 -0
  226. package/src/tui/menu.ts +759 -177
  227. package/src/tui/modal-menu.ts +6 -6
  228. package/src/tui/performance-menu.ts +5 -2
  229. package/src/tui/play-chords.ts +4 -2
  230. package/src/tui/play-mode.ts +15 -1
  231. package/src/tui/play-session.ts +47 -7
  232. package/src/tui/sing-menu.ts +278 -0
  233. package/src/tui/style-menu.ts +104 -0
  234. package/src/tui/vocoder-menu.ts +244 -0
  235. package/src/tui/wind-menu.ts +3 -3
  236. package/src/version.ts +8 -0
  237. package/src/web/fetch.ts +115 -29
  238. package/tui/activity.ts +180 -9
  239. package/tui/app.ts +274 -40
  240. package/tui/clip-row.ts +132 -0
  241. package/tui/delight.ts +144 -0
  242. package/tui/drawer.ts +70 -22
  243. package/tui/frame-gate.ts +76 -0
  244. package/tui/grammar.ts +112 -63
  245. package/tui/guide.ts +42 -4
  246. package/tui/highway.ts +269 -25
  247. package/tui/hints.ts +192 -0
  248. package/tui/input.ts +60 -9
  249. package/tui/keys.ts +1 -1
  250. package/tui/play-strip.ts +68 -14
  251. package/tui/prompt.ts +1 -1
  252. package/tui/screen.ts +144 -14
  253. package/tui/theme.ts +27 -0
@@ -0,0 +1,3810 @@
1
+ /**
2
+ * Caribbean and Latin America (quality-08 family `americas`). Root and
3
+ * branch cards carry the shared patterns (the off-beat skank and one-drop,
4
+ * the clave and tumbao, the sesquialtera of the 3/4 and 6/8 traditions);
5
+ * leaves carry only their deltas. Each card's `summary` is its theory
6
+ * note: the concepts that define the style.
7
+ *
8
+ * Timelines (clave, cinquillo, tresillo, bembe bell) come from cycles.ts.
9
+ * Clave-based styles write one clave cycle (two cut-time bars) as one
10
+ * 16-step bar, so their BPM is the cut-time half note: salsa at 90 here is
11
+ * 180 in the usual quarter count. Samba and bossa write two 2/4 bars as
12
+ * one 16-step bar, so their BPM is the 2/4 quarter.
13
+ *
14
+ * Theory, not material: grids, distributions and functional grammars
15
+ * only; no melody, lyric or recording is transcribed.
16
+ */
17
+
18
+ import { TIMELINES, timelineCycle, type TimelineName } from "./cycles.ts";
19
+ import { grid, intervals, kit, maybe, role } from "./parts.ts";
20
+ import { card, type StyleCard } from "./schema.ts";
21
+
22
+ /** A timeline from cycles.ts as an onset grid. */
23
+ const tl = (name: TimelineName) => grid(TIMELINES[name]);
24
+
25
+ /** Mostly steps, few leaps: sung lines. */
26
+ const CONJUNCT = intervals(5, 2, 0.6, 0.6);
27
+ /** Chant: repeated notes and steps, call and response. */
28
+ const CHANT = intervals(4, 1.5, 0.3, 2);
29
+ /** Instrumental lines with arpeggiated leaps (choro, mambo brass). */
30
+ const LEAPY = intervals(3, 2.5, 1.2, 0.4);
31
+
32
+ /** Plain kit voices without a snare (the hand-drum traditions). */
33
+ const NO_KIT = Object.freeze({
34
+ kick: null,
35
+ snare: null,
36
+ hat: null,
37
+ rim: null,
38
+ clap: null,
39
+ });
40
+ const NO_KIT_ONSETS = Object.freeze({
41
+ kick: null,
42
+ snare: null,
43
+ hat: null,
44
+ rim: null,
45
+ clap: null,
46
+ });
47
+
48
+ export const AMERICAS_CARDS: readonly StyleCard[] = Object.freeze([
49
+ // =========================================================================
50
+ // Caribbean. References: Michael Veal, "Dub" (2007); Peter Manuel,
51
+ // "Caribbean Currents" (2006).
52
+ card({
53
+ id: "caribbean",
54
+ abstract: true,
55
+ summary:
56
+ "off-beat skank and one-drop: guitar and keys on the and, bass melodic and heavy",
57
+ tempo: { bpm: [65, 110], typical: 76 },
58
+ groove: { subdivision: 4, swingRatio: [1, 1.25] },
59
+ rhythm: {
60
+ onsets: {
61
+ kick: grid("........x......."),
62
+ rim: grid("........x......."),
63
+ hat: grid("x.x.x.x.x.x.x.x."),
64
+ chords: grid("..x...x...x...x."),
65
+ },
66
+ },
67
+ pitch: {
68
+ scales: [
69
+ ["minor", 0.4],
70
+ ["major", 0.4],
71
+ ["dorian", 0.2],
72
+ ],
73
+ },
74
+ harmony: {
75
+ presets: [
76
+ ["dorian-vamp", 0.4],
77
+ ["axis", 0.3],
78
+ ["aeolian", 0.3],
79
+ ],
80
+ rhythm: [
81
+ [1, 0.5],
82
+ [0.5, 0.5],
83
+ ],
84
+ },
85
+ bass: { behaviour: [["ostinato", 1]], onsets: grid("x..x..x...x.x...") },
86
+ texture: {
87
+ roles: {
88
+ snare: null,
89
+ rim: role("drums"),
90
+ chords: role("electric", "hammond:0.5"),
91
+ bass: role("ebass"),
92
+ },
93
+ },
94
+ }),
95
+ card({
96
+ id: "jamaican",
97
+ abstract: true,
98
+ summary:
99
+ "Jamaican: one-drop and steppers kicks, skank on the off-beat, dub space",
100
+ mix: { space: 0.5 },
101
+ }),
102
+ card({
103
+ id: "mento",
104
+ summary:
105
+ "mento: rural calypso cousin, light shuffle, banjo strum on the and, rumba-box bass on one and the and of two, I-IV-V7",
106
+ tempo: { bpm: [95, 130], typical: 112 },
107
+ groove: { swingRatio: [1.2, 1.45] },
108
+ pitch: { scales: [["major", 1]] },
109
+ harmony: {
110
+ presets: null,
111
+ forms: [
112
+ [["I", "IV", "V7", "I"], 0.6],
113
+ [["I", "I", "V7", "V7"], 0.4],
114
+ ],
115
+ rhythm: [[1, 1]],
116
+ },
117
+ rhythm: {
118
+ onsets: {
119
+ kick: null,
120
+ rim: null,
121
+ hat: null,
122
+ shaker: grid("x.x.x.x.x.x.x.x."),
123
+ chords: grid("x.x.x.x.x.x.x.x."),
124
+ },
125
+ },
126
+ bass: {
127
+ behaviour: [["root-fifth", 1]],
128
+ onsets: grid("x.....x.x......."),
129
+ },
130
+ texture: {
131
+ roles: {
132
+ kick: null,
133
+ rim: null,
134
+ hat: null,
135
+ shaker: role("drums"),
136
+ chords: role("banjo", "acoustic:0.5"),
137
+ bass: role("marimba"),
138
+ lead: role("sing", "clarinet:0.4", "flute:0.3"),
139
+ },
140
+ },
141
+ mix: { space: 0.25 },
142
+ }),
143
+ card({
144
+ id: "ska",
145
+ summary:
146
+ "ska: fast shuffle, guitar and piano chop every off-beat, walking bass on every beat, horn section lead, I-vi-IV-V",
147
+ tempo: { bpm: [110, 170], typical: 138 },
148
+ groove: { swingRatio: [1.2, 1.5] },
149
+ pitch: {
150
+ scales: [
151
+ ["major", 0.8],
152
+ ["minor", 0.2],
153
+ ],
154
+ },
155
+ harmony: {
156
+ presets: [
157
+ ["fifties", 0.6],
158
+ ["turnaround", 0.4],
159
+ ],
160
+ rhythm: [[1, 1]],
161
+ },
162
+ rhythm: {
163
+ onsets: {
164
+ kick: grid("x...x...x...x..."),
165
+ rim: null,
166
+ snare: grid("....x.......x..."),
167
+ hat: grid("x.x.x.x.x.x.x.x."),
168
+ },
169
+ },
170
+ bass: {
171
+ behaviour: [["walking", 1]],
172
+ walk: { chordToneOnOne: 0.95, chromaticApproach: 0.3 },
173
+ },
174
+ texture: {
175
+ roles: {
176
+ rim: null,
177
+ snare: role("drums"),
178
+ chords: role("electric", "piano:0.6"),
179
+ bass: role("doublebass", "ebass:0.6"),
180
+ lead: role("trumpet", "trombone:0.6", "tenorsax:0.5"),
181
+ },
182
+ },
183
+ }),
184
+ card({
185
+ id: "rocksteady",
186
+ summary:
187
+ "rocksteady: ska slowed to a straight one-drop, the melodic bass ostinato with rests leads, guitar skank on two and four",
188
+ tempo: { bpm: [70, 92], typical: 80 },
189
+ groove: { swingRatio: [1, 1.15] },
190
+ rhythm: {
191
+ onsets: {
192
+ chords: grid("....x.......x..."),
193
+ hat: grid("x.x.x.x.x.x.x.x."),
194
+ },
195
+ },
196
+ bass: {
197
+ behaviour: [
198
+ ["ostinato", 0.7],
199
+ ["arpeggio", 0.3],
200
+ ],
201
+ onsets: grid("x..x..x.....x.x."),
202
+ },
203
+ texture: { roles: { lead: role("sing", "hammond:0.4") } },
204
+ }),
205
+ card({
206
+ id: "roots-reggae",
207
+ summary:
208
+ "roots reggae: one drop (kick and rim only on three), off-beat skank, organ bubble, dorian i-IV and i-bVII vamps, heavy bass",
209
+ tempo: { bpm: [62, 82], typical: 72 },
210
+ groove: { swingRatio: [1.1, 1.35] },
211
+ pitch: {
212
+ scales: [
213
+ ["dorian", 0.5],
214
+ ["minor", 0.4],
215
+ ["major", 0.1],
216
+ ],
217
+ },
218
+ harmony: {
219
+ presets: [
220
+ ["dorian-vamp", 0.7],
221
+ ["aeolian", 0.3],
222
+ ],
223
+ },
224
+ // organ bubble: every sixteenth but the beat, the and doubling the skank
225
+ rhythm: { onsets: { counter: grid(".xxx.xxx.xxx.xxx") } },
226
+ texture: {
227
+ roles: {
228
+ counter: maybe("hammond"),
229
+ lead: role("sing", "trombone:0.3"),
230
+ },
231
+ },
232
+ }),
233
+ card({
234
+ id: "lovers-rock",
235
+ summary:
236
+ "lovers rock: London reggae with soul harmony, major key (never dorian), Imaj7-vi7-ii7-V7 and IVmaj7-iii7 turns, rockers kick on one and three under the rim on three, eighth hats, sweet sung lead",
237
+ tempo: { bpm: [70, 88], typical: 78 },
238
+ pitch: { scales: [["major", 1]] },
239
+ harmony: {
240
+ presets: null,
241
+ forms: [
242
+ [["Imaj7", "vi7", "ii7", "V7"], 0.4],
243
+ [["IVmaj7", "iii7", "ii7", "V7"], 0.3],
244
+ [["Imaj7", "IVmaj7", "Imaj7", "V7"], 0.3],
245
+ ],
246
+ sevenths: 0.85,
247
+ },
248
+ rhythm: {
249
+ onsets: {
250
+ kick: grid("x.......x......."),
251
+ hat: grid("x.x.x.x.x.x.x.x."),
252
+ },
253
+ },
254
+ texture: {
255
+ roles: { chords: role("epiano", "electric:0.5"), lead: role("sing") },
256
+ },
257
+ expression: { dynamics: [0.35, 0.75] },
258
+ }),
259
+ card({
260
+ id: "dub",
261
+ summary:
262
+ "dub: the riddim stripped to drum and bass, one-chord modal vamp, echo and reverb as instruments, parts dropping in and out",
263
+ tempo: { bpm: [62, 80], typical: 70 },
264
+ pitch: {
265
+ scales: [
266
+ ["minor", 0.6],
267
+ ["dorian", 0.4],
268
+ ],
269
+ },
270
+ harmony: { model: "modal", presets: null, rhythm: [[2, 1]] },
271
+ rhythm: { onsets: { chords: grid("..2...x...2...x.") } },
272
+ form: {
273
+ plans: [
274
+ [["intro", "verse", "breakdown", "verse", "breakdown", "outro"], 1],
275
+ ],
276
+ roleMap: { breakdown: ["kick", "rim", "bass", "chords"] },
277
+ },
278
+ texture: {
279
+ roles: {
280
+ chords: role("electric", "hammond:0.6"),
281
+ lead: maybe("trombone", "flute:0.5"),
282
+ },
283
+ },
284
+ mix: {
285
+ fx: {
286
+ chords: { tremolo: "eighth-chop" },
287
+ bass: { compressor: "gentle" },
288
+ },
289
+ space: 0.85,
290
+ },
291
+ }),
292
+ card({
293
+ id: "early-dancehall",
294
+ summary:
295
+ "early dancehall (rub-a-dub): one-chord riddim, kick on one and three, deejay chant on repeated notes, sparse skank",
296
+ tempo: { bpm: [80, 98], typical: 88 },
297
+ harmony: { model: "modal", presets: null, rhythm: [[4, 1]] },
298
+ rhythm: {
299
+ onsets: {
300
+ kick: grid("x.......x......."),
301
+ rim: grid("....x.......x..."),
302
+ chords: grid("..x.......x....."),
303
+ },
304
+ },
305
+ melody: {
306
+ intervals: CHANT,
307
+ ambitus: [3, 7],
308
+ repetition: 0.75,
309
+ density: [2, 3],
310
+ },
311
+ texture: { roles: { lead: role("sing") } },
312
+ }),
313
+ card({
314
+ id: "ragga",
315
+ summary:
316
+ "ragga and digital dancehall: drum machine riddim on the tresillo (3+3+2), snare on the dembow off-beats, minor one-chord, toasting",
317
+ tempo: { bpm: [88, 106], typical: 96 },
318
+ pitch: {
319
+ scales: [
320
+ ["minor", 0.7],
321
+ ["phrygian", 0.3],
322
+ ],
323
+ },
324
+ harmony: { model: "modal", presets: null, rhythm: [[4, 1]] },
325
+ rhythm: {
326
+ onsets: {
327
+ kick: tl("tresillo"),
328
+ rim: null,
329
+ snare: tl("dembowSnare"),
330
+ hat: grid("x.x.x.x.x.x.x.x."),
331
+ chords: grid("...x......x....."),
332
+ },
333
+ },
334
+ bass: {
335
+ behaviour: [["ostinato", 1]],
336
+ onsets: tl("tresillo"),
337
+ kickLock: 0.8,
338
+ },
339
+ melody: { intervals: CHANT, ambitus: [3, 7], repetition: 0.7 },
340
+ texture: {
341
+ roles: {
342
+ rim: null,
343
+ kick: { required: true, voices: [kit("syn808")] },
344
+ snare: { required: true, voices: [kit("syn808")] },
345
+ hat: { required: false, voices: [kit("syn808")] },
346
+ chords: role("square", "saw:0.5"),
347
+ bass: role("bass"),
348
+ lead: role("sing"),
349
+ },
350
+ },
351
+ }),
352
+ card({
353
+ id: "reggae-pop",
354
+ summary:
355
+ "reggae-pop: off-beat skank and one-drop under a verse-chorus pop form, I-V-vi-IV, bright major",
356
+ tempo: { bpm: [80, 110], typical: 94 },
357
+ pitch: {
358
+ scales: [
359
+ ["major", 0.8],
360
+ ["minor", 0.2],
361
+ ],
362
+ },
363
+ harmony: {
364
+ presets: [
365
+ ["axis", 0.7],
366
+ ["canon", 0.3],
367
+ ],
368
+ },
369
+ rhythm: { onsets: { kick: grid("x.......x.......") } },
370
+ form: {
371
+ plans: [
372
+ [
373
+ [
374
+ "intro",
375
+ "verse",
376
+ "chorus",
377
+ "verse",
378
+ "chorus",
379
+ "bridge",
380
+ "chorus",
381
+ "outro",
382
+ ],
383
+ 1,
384
+ ],
385
+ ],
386
+ },
387
+ texture: { roles: { lead: role("sing") } },
388
+ }),
389
+ card({
390
+ id: "nyabinghi",
391
+ summary:
392
+ "nyabinghi: Rasta drumming, bass drum on one and three, funde heartbeat on every beat, repeater improvising, slow minor chant",
393
+ tempo: { bpm: [55, 75], typical: 64 },
394
+ pitch: {
395
+ scales: [
396
+ ["minor", 0.6],
397
+ ["dorian", 0.4],
398
+ ],
399
+ },
400
+ harmony: { model: "modal", presets: null, rhythm: [[4, 1]] },
401
+ rhythm: {
402
+ onsets: {
403
+ ...NO_KIT_ONSETS,
404
+ perc: grid("x...x...x...x..."),
405
+ bell: grid("..5...5...5...5."),
406
+ chords: null,
407
+ },
408
+ },
409
+ bass: {
410
+ behaviour: [["pedal", 1]],
411
+ onsets: grid("x.......x......."),
412
+ },
413
+ melody: { intervals: CHANT, ambitus: [5, 9], repetition: 0.7 },
414
+ texture: {
415
+ kind: "monophonic",
416
+ roles: {
417
+ ...NO_KIT,
418
+ perc: role("framedrum"),
419
+ bell: maybe("framedrum"),
420
+ chords: null,
421
+ bass: role("timpani"),
422
+ lead: role("sing", "choir:0.5"),
423
+ },
424
+ },
425
+ }),
426
+ card({
427
+ id: "kumina",
428
+ summary:
429
+ "kumina: Afro-Jamaican kbandu and playing cast drums in 12/8, the seven-stroke bell, call-and-response chant over a drone",
430
+ meter: { signatures: [["12/8", 1]] },
431
+ tempo: { bpm: [90, 120], typical: 104 },
432
+ groove: { subdivision: 2, swingRatio: [1, 1] },
433
+ pitch: {
434
+ scales: [
435
+ ["major-pentatonic", 0.5],
436
+ ["minor-pentatonic", 0.5],
437
+ ],
438
+ },
439
+ harmony: { model: "drone", presets: null },
440
+ rhythm: {
441
+ onsets: {
442
+ ...NO_KIT_ONSETS,
443
+ bell: tl("bembe12"),
444
+ perc: grid("x..x..x..x.."),
445
+ chords: null,
446
+ },
447
+ },
448
+ bass: { behaviour: [["none", 1]] },
449
+ melody: { intervals: CHANT, ambitus: [5, 9], repetition: 0.7 },
450
+ texture: {
451
+ kind: "monophonic",
452
+ roles: {
453
+ ...NO_KIT,
454
+ bell: role("bell"),
455
+ perc: role("framedrum"),
456
+ chords: null,
457
+ bass: null,
458
+ lead: role("sing", "choir:0.5"),
459
+ },
460
+ },
461
+ }),
462
+
463
+ // --- Trinidad and the Eastern Caribbean
464
+ card({
465
+ id: "trinidad",
466
+ abstract: true,
467
+ summary: "calypso and soca: 2/4 drive, major I-IV-V, steelpan and brass",
468
+ tempo: { bpm: [100, 160], typical: 125 },
469
+ pitch: { scales: [["major", 1]] },
470
+ harmony: {
471
+ presets: [
472
+ ["fifties", 0.5],
473
+ ["axis", 0.5],
474
+ ],
475
+ },
476
+ rhythm: {
477
+ onsets: {
478
+ kick: grid("x...x...x...x..."),
479
+ snare: grid("...x..x....x..x."),
480
+ },
481
+ },
482
+ texture: {
483
+ roles: { snare: role("drums"), lead: role("steelpan", "trumpet:0.5") },
484
+ },
485
+ }),
486
+ card({
487
+ id: "calypso",
488
+ summary:
489
+ "calypso: 2/4 strum with the tresillo bass (3+3+2), I-IV-V7-I verses, narrative sung lead, brass answers",
490
+ tempo: { bpm: [100, 130], typical: 114 },
491
+ harmony: {
492
+ presets: null,
493
+ forms: [
494
+ [["I", "IV", "V7", "I"], 0.6],
495
+ [["I", "V7", "V7", "I"], 0.4],
496
+ ],
497
+ },
498
+ rhythm: { onsets: { chords: grid("x.xx.xx.x.xx.xx.") } },
499
+ bass: { behaviour: [["root-fifth", 1]], onsets: tl("tresillo") },
500
+ form: {
501
+ plans: [
502
+ [
503
+ [
504
+ "intro",
505
+ "verse",
506
+ "chorus",
507
+ "verse",
508
+ "chorus",
509
+ "verse",
510
+ "chorus",
511
+ "outro",
512
+ ],
513
+ 1,
514
+ ],
515
+ ],
516
+ },
517
+ texture: {
518
+ roles: {
519
+ chords: role("acoustic", "steel:0.5"),
520
+ lead: role("sing"),
521
+ counter: maybe("trumpet", "trombone:0.5"),
522
+ },
523
+ },
524
+ }),
525
+ card({
526
+ id: "soca",
527
+ summary:
528
+ "soca: four-on-the-floor kick with calypso snare syncopation, off-beat open hats, driving syncopated bass, major anthem hooks",
529
+ tempo: { bpm: [115, 165], typical: 150 },
530
+ rhythm: {
531
+ onsets: {
532
+ kick: tl("fourFloor"),
533
+ openhat: tl("offbeats"),
534
+ hat: grid("x.x.x.x.x.x.x.x."),
535
+ },
536
+ },
537
+ bass: {
538
+ behaviour: [
539
+ ["octave", 0.6],
540
+ ["root-fifth", 0.4],
541
+ ],
542
+ onsets: grid("x..x..x.x..x..x."),
543
+ },
544
+ texture: {
545
+ roles: {
546
+ openhat: role("drums"),
547
+ hat: maybe("drums"),
548
+ chords: role("square", "electric:0.5"),
549
+ bass: role("bass"),
550
+ lead: role("sing", "trumpet:0.4"),
551
+ },
552
+ },
553
+ mix: { loudness: "loud" },
554
+ }),
555
+ card({
556
+ id: "steelband",
557
+ summary:
558
+ "steelband: pans voice lead, strum and bass, engine room of iron (brake drum) and scratcher, major I-IV-V with secondary dominants",
559
+ tempo: { bpm: [100, 140], typical: 120 },
560
+ harmony: {
561
+ presets: null,
562
+ forms: [
563
+ [["I", "VI7", "ii", "V7"], 0.5],
564
+ [["I", "IV", "V7", "I"], 0.5],
565
+ ],
566
+ },
567
+ rhythm: {
568
+ onsets: {
569
+ bell: grid("x.xxx.xxx.xxx.xx"),
570
+ shaker: grid("xxxxxxxxxxxxxxxx"),
571
+ chords: grid("..x...x...x...x."),
572
+ },
573
+ },
574
+ texture: {
575
+ roles: {
576
+ bell: role("bell"),
577
+ shaker: maybe("drums"),
578
+ chords: role("steelpan"),
579
+ bass: role("steelpan"),
580
+ lead: role("steelpan"),
581
+ },
582
+ },
583
+ }),
584
+ card({
585
+ id: "rapso",
586
+ summary:
587
+ "rapso: spoken calypso poetry over a soca and hip-hop beat, chant on two or three notes, one-chord vamp",
588
+ tempo: { bpm: [92, 115], typical: 104 },
589
+ harmony: { model: "modal", presets: null, rhythm: [[4, 1]] },
590
+ pitch: {
591
+ scales: [
592
+ ["minor", 0.5],
593
+ ["mixolydian", 0.5],
594
+ ],
595
+ },
596
+ rhythm: {
597
+ onsets: {
598
+ kick: grid("x.....x...x....."),
599
+ snare: grid("....x.......x..."),
600
+ },
601
+ },
602
+ melody: {
603
+ intervals: CHANT,
604
+ ambitus: [2, 5],
605
+ repetition: 0.8,
606
+ density: [2, 3],
607
+ },
608
+ texture: { roles: { lead: role("sing"), chords: role("epiano") } },
609
+ }),
610
+ card({
611
+ id: "chutney",
612
+ summary:
613
+ "chutney: Indo-Caribbean dholak on the 3+3+2 kaherva, dhantal iron rod on the beats, harmonium and mixolydian hooks",
614
+ tempo: { bpm: [120, 155], typical: 138 },
615
+ pitch: {
616
+ scales: [
617
+ ["mixolydian", 0.5],
618
+ ["major", 0.5],
619
+ ],
620
+ },
621
+ harmony: {
622
+ presets: null,
623
+ forms: [
624
+ [["I", "bVII", "I", "V"], 0.5],
625
+ [["I", "IV", "V", "I"], 0.5],
626
+ ],
627
+ },
628
+ rhythm: {
629
+ onsets: {
630
+ kick: null,
631
+ snare: null,
632
+ perc: tl("tresillo"),
633
+ bell: grid("x...x...x...x..."),
634
+ },
635
+ },
636
+ texture: {
637
+ roles: {
638
+ kick: null,
639
+ snare: null,
640
+ perc: role("tabla"),
641
+ bell: role("bell"),
642
+ chords: role("reeds"),
643
+ lead: role("sing", "reeds:0.4"),
644
+ },
645
+ },
646
+ }),
647
+ card({
648
+ id: "junkanoo",
649
+ summary:
650
+ "junkanoo: Bahamian street parade, goatskin bass drum on the beats, cowbells on every eighth, whistles and brass riffs, I-V7",
651
+ tempo: { bpm: [120, 145], typical: 132 },
652
+ harmony: {
653
+ presets: null,
654
+ forms: [
655
+ [["I", "V7"], 0.6],
656
+ [["I", "IV", "V7", "I"], 0.4],
657
+ ],
658
+ },
659
+ rhythm: {
660
+ onsets: {
661
+ kick: grid("x...x...x...x..."),
662
+ snare: null,
663
+ bell: grid("x.x.x.x.x.x.x.x."),
664
+ perc: grid("x..x..x.x..x..x."),
665
+ },
666
+ },
667
+ texture: {
668
+ roles: {
669
+ snare: null,
670
+ bell: role("bell"),
671
+ perc: role("framedrum"),
672
+ chords: role("trombone", "horn:0.5"),
673
+ lead: role("trumpet", "whistle:0.4"),
674
+ },
675
+ },
676
+ }),
677
+ card({
678
+ id: "bouyon",
679
+ summary:
680
+ "bouyon: Dominican jing ping sped up, four-on-the-floor at 160, keyboard riffs on the off-beat, accordion hook, one-to-two chord vamp",
681
+ tempo: { bpm: [150, 175], typical: 160 },
682
+ harmony: {
683
+ presets: null,
684
+ forms: [
685
+ [["I", "IV"], 0.5],
686
+ [["I", "V"], 0.5],
687
+ ],
688
+ },
689
+ rhythm: {
690
+ onsets: {
691
+ kick: tl("fourFloor"),
692
+ snare: grid("....x.......x..."),
693
+ hat: tl("offbeats"),
694
+ chords: grid("..x...x...x...x."),
695
+ },
696
+ },
697
+ texture: {
698
+ roles: {
699
+ hat: role("drums"),
700
+ chords: role("square"),
701
+ bass: role("bass"),
702
+ lead: role("reeds", "saw:0.5"),
703
+ },
704
+ },
705
+ }),
706
+ card({
707
+ id: "bubbling",
708
+ summary:
709
+ "bubbling: Antillean dancehall riddims pitched up to 140, tresillo kick and dembow snare, minor synth vamp",
710
+ tempo: { bpm: [130, 150], typical: 140 },
711
+ pitch: { scales: [["minor", 1]] },
712
+ harmony: { model: "modal", presets: null, rhythm: [[4, 1]] },
713
+ rhythm: {
714
+ onsets: {
715
+ kick: tl("tresillo"),
716
+ snare: tl("dembowSnare"),
717
+ hat: grid("x.x.x.x.x.x.x.x."),
718
+ },
719
+ },
720
+ texture: {
721
+ roles: {
722
+ kick: { required: true, voices: [kit("electro")] },
723
+ snare: { required: true, voices: [kit("electro")] },
724
+ hat: { required: false, voices: [kit("electro")] },
725
+ chords: role("saw"),
726
+ bass: role("bass"),
727
+ lead: role("sing", "square:0.5"),
728
+ },
729
+ },
730
+ }),
731
+
732
+ // --- French and Creole Caribbean
733
+ card({
734
+ id: "french-caribbean",
735
+ abstract: true,
736
+ summary: "kompa and zouk: rolling mid-tempo, tanbou and guitar arpeggios",
737
+ tempo: { bpm: [90, 130], typical: 110 },
738
+ pitch: {
739
+ scales: [
740
+ ["major", 0.6],
741
+ ["minor", 0.4],
742
+ ],
743
+ },
744
+ }),
745
+ card({
746
+ id: "zouk",
747
+ summary:
748
+ "zouk: gwo ka rooted kick on the 3+3+2, tom answers, lush major-seventh keyboards and ii-V-I, sung lead",
749
+ tempo: { bpm: [110, 135], typical: 122 },
750
+ harmony: {
751
+ presets: [
752
+ ["ii-v-i", 0.6],
753
+ ["axis", 0.4],
754
+ ],
755
+ sevenths: 0.6,
756
+ },
757
+ rhythm: {
758
+ onsets: {
759
+ kick: tl("tresillo"),
760
+ snare: grid("....x.......x..."),
761
+ tom: grid("......x.......x."),
762
+ hat: grid("x.x.x.x.x.x.x.x."),
763
+ },
764
+ },
765
+ bass: { behaviour: [["root-fifth", 1]], onsets: tl("tresillo") },
766
+ texture: {
767
+ roles: {
768
+ tom: maybe("drums"),
769
+ chords: role("epiano", "square:0.4"),
770
+ bass: role("bass"),
771
+ lead: role("sing"),
772
+ },
773
+ },
774
+ }),
775
+ card({
776
+ id: "kompa",
777
+ summary:
778
+ "kompa: Haitian konpa direk, cowbell on the cinquillo, steady hi-hat, arpeggiated guitar in thirds, ii-V-I with sevenths",
779
+ tempo: { bpm: [100, 125], typical: 114 },
780
+ harmony: {
781
+ presets: [
782
+ ["ii-v-i", 0.5],
783
+ ["turnaround", 0.5],
784
+ ],
785
+ sevenths: 0.5,
786
+ },
787
+ rhythm: {
788
+ onsets: {
789
+ kick: grid("x...x...x...x..."),
790
+ snare: grid("....x.......x..."),
791
+ hat: grid("x.x.x.x.x.x.x.x."),
792
+ bell: tl("cinquillo"),
793
+ chords: grid("x.xx.xx.x.xx.xx."),
794
+ },
795
+ },
796
+ bass: { behaviour: [["root-fifth", 1]], onsets: grid("x..x..x.x.......") },
797
+ texture: {
798
+ roles: {
799
+ bell: role("bell"),
800
+ chords: role("electric", "epiano:0.5"),
801
+ bass: role("ebass"),
802
+ lead: role("sing", "altosax:0.4"),
803
+ },
804
+ },
805
+ }),
806
+ card({
807
+ id: "rara",
808
+ summary:
809
+ "rara: Haitian processional, vaksen bamboo trumpets in hocket (each one note, interlocking), tanbou and kata, drone pentatonic",
810
+ tempo: { bpm: [115, 140], typical: 126 },
811
+ pitch: {
812
+ scales: [
813
+ ["minor-pentatonic", 0.6],
814
+ ["major-pentatonic", 0.4],
815
+ ],
816
+ },
817
+ harmony: { model: "drone", presets: null },
818
+ rhythm: {
819
+ onsets: {
820
+ ...NO_KIT_ONSETS,
821
+ bell: grid("x.xx.x.xx.xx.x.x"),
822
+ perc: grid("x..x..x...x.x..."),
823
+ chords: null,
824
+ },
825
+ },
826
+ bass: { behaviour: [["pedal", 1]], onsets: grid("x.......x.......") },
827
+ melody: { intervals: CHANT, ambitus: [5, 9], repetition: 0.8 },
828
+ texture: {
829
+ kind: "interlocking",
830
+ roles: {
831
+ ...NO_KIT,
832
+ bell: role("bell"),
833
+ perc: role("framedrum"),
834
+ chords: null,
835
+ bass: role("tuba"),
836
+ lead: role("horn", "trumpet:0.5"),
837
+ counter: role("horn"),
838
+ },
839
+ },
840
+ }),
841
+ card({
842
+ id: "twoubadou",
843
+ summary:
844
+ "twoubadou: Haitian troubadour son, 2-3 son clave on claves, guitar and banjo strum, manouba lamellophone bass anticipations",
845
+ tempo: { bpm: [90, 115], typical: 100 },
846
+ harmony: {
847
+ presets: null,
848
+ forms: [
849
+ [["I", "IV", "V7", "I"], 0.6],
850
+ [["I", "V7"], 0.4],
851
+ ],
852
+ },
853
+ rhythm: {
854
+ onsets: {
855
+ kick: null,
856
+ snare: null,
857
+ bell: tl("sonClave23"),
858
+ shaker: grid("x.xxx.xxx.xxx.xx"),
859
+ chords: grid("x.x.x.x.x.x.x.x."),
860
+ },
861
+ },
862
+ bass: { behaviour: [["root-fifth", 1]], onsets: tl("tumbao") },
863
+ texture: {
864
+ roles: {
865
+ kick: null,
866
+ snare: null,
867
+ bell: role("bell"),
868
+ shaker: role("drums"),
869
+ chords: role("acoustic", "banjo:0.4"),
870
+ bass: role("marimba"),
871
+ lead: role("sing"),
872
+ },
873
+ },
874
+ }),
875
+ card({
876
+ id: "gwo-ka",
877
+ summary:
878
+ "gwo ka: Guadeloupe boula drums keep the steady 3+3+2, makè lead drum improvises, leader-chorus call and response, no harmony",
879
+ tempo: { bpm: [100, 130], typical: 116 },
880
+ pitch: {
881
+ scales: [
882
+ ["major", 0.5],
883
+ ["minor", 0.5],
884
+ ],
885
+ },
886
+ harmony: { model: "drone", presets: null },
887
+ rhythm: {
888
+ onsets: {
889
+ ...NO_KIT_ONSETS,
890
+ perc: tl("tresillo"),
891
+ bell: grid("..5..5.5..5..5.5"),
892
+ chords: null,
893
+ },
894
+ },
895
+ bass: { behaviour: [["none", 1]] },
896
+ melody: { intervals: CHANT, ambitus: [5, 9], repetition: 0.75 },
897
+ texture: {
898
+ kind: "monophonic",
899
+ roles: {
900
+ ...NO_KIT,
901
+ perc: role("framedrum"),
902
+ bell: maybe("framedrum"),
903
+ chords: null,
904
+ bass: null,
905
+ lead: role("sing", "choir:0.5"),
906
+ },
907
+ },
908
+ }),
909
+ card({
910
+ id: "bele",
911
+ summary:
912
+ "bele and chouval bwa: Martinique bele drum with tibwa sticks on bamboo, carousel accordion and flute, fast major dance",
913
+ tempo: { bpm: [115, 145], typical: 128 },
914
+ pitch: { scales: [["major", 1]] },
915
+ harmony: {
916
+ presets: null,
917
+ forms: [
918
+ [["I", "V7"], 0.5],
919
+ [["I", "IV", "V7", "I"], 0.5],
920
+ ],
921
+ },
922
+ rhythm: {
923
+ onsets: {
924
+ kick: null,
925
+ snare: null,
926
+ bell: grid("x.xx.x.xx.xx.x.x"),
927
+ perc: grid("x...x.x.x...x.x."),
928
+ },
929
+ },
930
+ texture: {
931
+ roles: {
932
+ kick: null,
933
+ snare: null,
934
+ bell: role("bell"),
935
+ perc: role("framedrum"),
936
+ chords: role("reeds"),
937
+ lead: role("flute", "reeds:0.5"),
938
+ },
939
+ },
940
+ }),
941
+ card({
942
+ id: "beguine",
943
+ summary:
944
+ "biguine: Martinique 2/4 jazz-band, habanera-derived bass, clarinet lead with trombone counter-line, ii-V and secondary dominants",
945
+ tempo: { bpm: [105, 130], typical: 118 },
946
+ groove: { swingRatio: [1.1, 1.3] },
947
+ pitch: {
948
+ scales: [
949
+ ["major", 0.7],
950
+ ["minor", 0.3],
951
+ ],
952
+ },
953
+ harmony: {
954
+ presets: [
955
+ ["turnaround", 0.5],
956
+ ["ii-v-i", 0.5],
957
+ ],
958
+ sevenths: 0.6,
959
+ },
960
+ rhythm: {
961
+ onsets: {
962
+ kick: grid("x.......x......."),
963
+ snare: tl("habanera"),
964
+ chords: grid("..x...x...x...x."),
965
+ },
966
+ },
967
+ bass: { behaviour: [["root-fifth", 1]], onsets: grid("x..x....x..x....") },
968
+ texture: {
969
+ kind: "polyphonic",
970
+ roles: {
971
+ chords: role("banjo", "piano:0.6"),
972
+ bass: role("doublebass"),
973
+ lead: role("clarinet"),
974
+ counter: maybe("trombone"),
975
+ },
976
+ },
977
+ melody: { intervals: LEAPY },
978
+ }),
979
+ card({
980
+ id: "kaseko",
981
+ summary:
982
+ "kaseko: Surinamese street band, skratji bass drum on every beat, snare rolls on the off-beat, brass call and response, major",
983
+ tempo: { bpm: [130, 165], typical: 146 },
984
+ harmony: {
985
+ presets: null,
986
+ forms: [
987
+ [["I", "V7"], 0.6],
988
+ [["I", "IV", "V7", "I"], 0.4],
989
+ ],
990
+ },
991
+ rhythm: {
992
+ onsets: {
993
+ kick: tl("fourFloor"),
994
+ snare: grid("..x.x.x...x.x.xx"),
995
+ hat: null,
996
+ },
997
+ },
998
+ texture: {
999
+ roles: {
1000
+ hat: null,
1001
+ chords: role("trombone", "electric:0.5"),
1002
+ bass: role("bass", "tuba:0.4"),
1003
+ lead: role("trumpet", "sing:0.6"),
1004
+ },
1005
+ },
1006
+ }),
1007
+ card({
1008
+ id: "punta",
1009
+ summary:
1010
+ "punta and paranda: Garifuna segunda drum ostinato and primero improvising, turtle-shell and shaker, call and response; paranda adds guitar",
1011
+ tempo: { bpm: [120, 160], typical: 140 },
1012
+ pitch: {
1013
+ scales: [
1014
+ ["major", 0.6],
1015
+ ["minor", 0.4],
1016
+ ],
1017
+ },
1018
+ harmony: {
1019
+ presets: null,
1020
+ forms: [
1021
+ [["I", "V7"], 0.6],
1022
+ [["i", "V7"], 0.4],
1023
+ ],
1024
+ },
1025
+ rhythm: {
1026
+ onsets: {
1027
+ kick: null,
1028
+ snare: null,
1029
+ perc: grid("x..x.x.xx..x.x.x"),
1030
+ shaker: grid("x.x.x.x.x.x.x.x."),
1031
+ chords: grid("x..x..x.x..x..x."),
1032
+ },
1033
+ },
1034
+ texture: {
1035
+ roles: {
1036
+ kick: null,
1037
+ snare: null,
1038
+ perc: role("framedrum"),
1039
+ shaker: role("drums"),
1040
+ chords: maybe("acoustic"),
1041
+ lead: role("sing", "choir:0.4"),
1042
+ },
1043
+ },
1044
+ }),
1045
+
1046
+ // =========================================================================
1047
+ // Latin America. References: Peñalosa, "The Clave Matrix" (2009); Chris
1048
+ // Washburne, "Sounding Salsa" (2008); Carlos Sandroni, "Feitiço Decente"
1049
+ // (2001).
1050
+ card({
1051
+ id: "latin-america",
1052
+ abstract: true,
1053
+ summary:
1054
+ "clave-led: the 3-2 or 2-3 clave, tumbao bass anticipations, montuno piano",
1055
+ tempo: { bpm: [90, 200], typical: 120 },
1056
+ groove: { subdivision: 4 },
1057
+ rhythm: {
1058
+ onsets: {
1059
+ bell: tl("sonClave32"),
1060
+ perc: tl("dembowSnare"),
1061
+ kick: grid("...x.......x...."),
1062
+ snare: null,
1063
+ hat: null,
1064
+ chords: grid("x.xx.xx.x.xx.xx."),
1065
+ },
1066
+ },
1067
+ pitch: {
1068
+ scales: [
1069
+ ["minor", 0.4],
1070
+ ["major", 0.4],
1071
+ ["harmonic-minor", 0.2],
1072
+ ],
1073
+ },
1074
+ harmony: {
1075
+ presets: [
1076
+ ["andalusian", 0.3],
1077
+ ["fifties", 0.3],
1078
+ ["minor-ii-v", 0.4],
1079
+ ],
1080
+ rhythm: [
1081
+ [2, 0.5],
1082
+ [1, 0.5],
1083
+ ],
1084
+ sevenths: 0.3,
1085
+ },
1086
+ bass: { behaviour: [["root-fifth", 1]], onsets: tl("dembowSnare") },
1087
+ texture: {
1088
+ roles: {
1089
+ snare: null,
1090
+ hat: null,
1091
+ kick: role("drums"),
1092
+ bell: role("bell"),
1093
+ perc: role("drums"),
1094
+ chords: role("piano", "tres:0.5"),
1095
+ lead: role("trumpet", "sing:0.6", "flute:0.3"),
1096
+ },
1097
+ },
1098
+ }),
1099
+
1100
+ // --- Cuba
1101
+ card({
1102
+ id: "cuban",
1103
+ abstract: true,
1104
+ summary:
1105
+ "Cuban son and its heirs: son clave, tres guajeo, anticipated tumbao bass on the and of two and on four, conga tumbao",
1106
+ tempo: { bpm: [80, 110], typical: 92 },
1107
+ rhythm: {
1108
+ onsets: {
1109
+ bell: tl("sonClave32"),
1110
+ perc: tl("congaTumbao"),
1111
+ kick: null,
1112
+ chords: grid("x.xx.xx.x.xx.xx."),
1113
+ },
1114
+ },
1115
+ harmony: {
1116
+ presets: null,
1117
+ forms: [
1118
+ [["I", "IV", "V7", "IV"], 0.4],
1119
+ [["ii", "V7", "I", "I"], 0.3],
1120
+ [["i", "iv", "V7", "i"], 0.3],
1121
+ ],
1122
+ },
1123
+ bass: { behaviour: [["root-fifth", 1]], onsets: tl("tumbao") },
1124
+ texture: { roles: { kick: null, bass: role("doublebass", "ebass:0.5") } },
1125
+ }),
1126
+ card({
1127
+ id: "son-cubano",
1128
+ summary:
1129
+ "son: 2-3 or 3-2 son clave (onsets 0 3 6 10 12), tres guajeo, bongo martillo, anticipated bass, largo then montuno call and response",
1130
+ tempo: { bpm: [75, 105], typical: 88 },
1131
+ rhythm: {
1132
+ onsets: {
1133
+ shaker: tl("scrape"),
1134
+ // bongo martillo: every eighth, no congas in the classic septeto
1135
+ perc: grid("x5x5x5x5x5x5x5x5"),
1136
+ },
1137
+ },
1138
+ form: {
1139
+ plans: [[["intro", "verse", "verse", "chorus", "chorus", "outro"], 1]],
1140
+ },
1141
+ texture: {
1142
+ roles: {
1143
+ shaker: maybe("drums"),
1144
+ chords: role("tres"),
1145
+ lead: role("sing", "trumpet:0.5"),
1146
+ },
1147
+ },
1148
+ }),
1149
+ card({
1150
+ id: "danzon",
1151
+ summary:
1152
+ "danzon: cut-time rondo, timbal baqueteo on the cinquillo, guiro, charanga flute and violins, bass on one and the and of two",
1153
+ tempo: { bpm: [55, 70], typical: 62 },
1154
+ pitch: {
1155
+ scales: [
1156
+ ["major", 0.7],
1157
+ ["minor", 0.3],
1158
+ ],
1159
+ },
1160
+ rhythm: {
1161
+ onsets: {
1162
+ bell: tl("baqueteo"),
1163
+ perc: null,
1164
+ shaker: grid("x..xx.x.x..xx.x."),
1165
+ chords: grid("x...x.x.x...x.x."),
1166
+ },
1167
+ },
1168
+ bass: { onsets: grid("x.....x.x.......") },
1169
+ form: {
1170
+ plans: [
1171
+ [["intro", "verse", "intro", "bridge", "intro", "chorus", "outro"], 1],
1172
+ ],
1173
+ archetype: "rondo",
1174
+ },
1175
+ texture: {
1176
+ roles: {
1177
+ perc: null,
1178
+ shaker: role("drums"),
1179
+ chords: role("piano", "violins:0.6"),
1180
+ lead: role("flute"),
1181
+ counter: maybe("violin"),
1182
+ },
1183
+ },
1184
+ }),
1185
+ card({
1186
+ id: "bolero",
1187
+ summary:
1188
+ "bolero: slow 4/4, bongo bolero cell and soft 2-3 clave, requinto guitar fills, secondary dominants and borrowed iv, romantic sung lead",
1189
+ tempo: { bpm: [62, 88], typical: 74 },
1190
+ pitch: {
1191
+ scales: [
1192
+ ["major", 0.5],
1193
+ ["minor", 0.3],
1194
+ ["harmonic-minor", 0.2],
1195
+ ],
1196
+ },
1197
+ harmony: {
1198
+ forms: [
1199
+ [["I", "vi", "ii7", "V7"], 0.35],
1200
+ [["I", "I7", "IV", "iv"], 0.35],
1201
+ [["i", "iv", "V7", "i"], 0.3],
1202
+ ],
1203
+ sevenths: 0.6,
1204
+ rhythm: [
1205
+ [1, 0.6],
1206
+ [0.5, 0.4],
1207
+ ],
1208
+ },
1209
+ rhythm: {
1210
+ onsets: {
1211
+ bell: tl("sonClave23"),
1212
+ perc: grid("x.xxx.x.x.xxx.x."),
1213
+ chords: grid("x...x.x.x...x.x."),
1214
+ },
1215
+ },
1216
+ bass: { onsets: grid("x.......x.x.....") },
1217
+ texture: {
1218
+ roles: {
1219
+ chords: role("nylon"),
1220
+ bass: role("doublebass"),
1221
+ lead: role("sing", "requinto:0.4"),
1222
+ },
1223
+ },
1224
+ expression: { dynamics: [0.3, 0.75] },
1225
+ }),
1226
+ card({
1227
+ id: "rumba-cubana",
1228
+ summary:
1229
+ "rumba: rumba clave (third stroke delayed to 7), palitos on the cascara, tumba and salidor congas with the quinto improvising, voices only",
1230
+ tempo: { bpm: [90, 120], typical: 104 },
1231
+ harmony: { model: "drone", presets: null, forms: null },
1232
+ rhythm: {
1233
+ onsets: {
1234
+ bell: tl("rumbaClave32"),
1235
+ perc: tl("congaTumbao"),
1236
+ shaker: tl("cascara32"),
1237
+ chords: null,
1238
+ },
1239
+ },
1240
+ bass: { behaviour: [["none", 1]] },
1241
+ melody: { intervals: CHANT, ambitus: [5, 10], repetition: 0.65 },
1242
+ texture: {
1243
+ kind: "monophonic",
1244
+ roles: {
1245
+ bell: role("bell"),
1246
+ perc: role("drums"),
1247
+ shaker: role("drums"),
1248
+ chords: null,
1249
+ bass: null,
1250
+ lead: role("sing", "choir:0.4"),
1251
+ },
1252
+ },
1253
+ }),
1254
+ card({
1255
+ id: "mambo",
1256
+ summary:
1257
+ "mambo: big band montuno at a run, campana bell on every quarter over the 2-3 clave, timbal ponche on four, trumpets against saxes in riffs, tumbao bass, ii-V vamps",
1258
+ tempo: { bpm: [92, 112], typical: 102 },
1259
+ harmony: {
1260
+ forms: [
1261
+ [["ii7", "V7", "ii7", "V7"], 0.5],
1262
+ [["I", "IV", "V7", "IV"], 0.5],
1263
+ ],
1264
+ sevenths: 0.6,
1265
+ },
1266
+ rhythm: {
1267
+ onsets: {
1268
+ // the bongocero's campana on every quarter; the clave moves to sticks
1269
+ bell: grid("x.x.x.x.x.x.x.x."),
1270
+ shaker: tl("sonClave23"),
1271
+ kick: grid("......x.......x."),
1272
+ },
1273
+ },
1274
+ melody: { intervals: LEAPY, density: [2, 3] },
1275
+ texture: {
1276
+ kind: "polyphonic",
1277
+ roles: {
1278
+ shaker: role("drums"),
1279
+ kick: role("drums"),
1280
+ chords: role("piano"),
1281
+ lead: role("trumpet"),
1282
+ counter: role("tenorsax", "barisax:0.5"),
1283
+ },
1284
+ },
1285
+ }),
1286
+ card({
1287
+ id: "cha-cha",
1288
+ summary:
1289
+ "cha-cha-cha: guiro long-short-short, cencerro on each beat, the cha-cha-cha on four-and-one, unison flute and violins, I-V7",
1290
+ tempo: { bpm: [110, 130], typical: 120 },
1291
+ harmony: {
1292
+ forms: [
1293
+ [["I", "V7", "V7", "I"], 0.5],
1294
+ [["ii7", "V7", "I", "I"], 0.5],
1295
+ ],
1296
+ },
1297
+ rhythm: {
1298
+ onsets: {
1299
+ bell: grid("x...x...x...x..."),
1300
+ perc: grid("......x.....x.x."),
1301
+ shaker: grid("x.xxx.xxx.xxx.xx"),
1302
+ chords: grid("x...x...x...x.x."),
1303
+ },
1304
+ },
1305
+ bass: { onsets: grid("x.....x.....x.x.") },
1306
+ texture: {
1307
+ roles: {
1308
+ shaker: role("drums"),
1309
+ chords: role("piano"),
1310
+ lead: role("flute", "violins:0.6"),
1311
+ },
1312
+ },
1313
+ }),
1314
+ card({
1315
+ id: "charanga",
1316
+ summary:
1317
+ "charanga and pachanga: flute and violins over piano montuno, timbal cascara, guiro, bouncy pachanga 2/4 feel",
1318
+ tempo: { bpm: [95, 115], typical: 104 },
1319
+ pitch: {
1320
+ scales: [
1321
+ ["major", 0.6],
1322
+ ["minor", 0.4],
1323
+ ],
1324
+ },
1325
+ rhythm: {
1326
+ onsets: {
1327
+ bell: tl("cascara"),
1328
+ shaker: tl("scrape"),
1329
+ },
1330
+ },
1331
+ texture: {
1332
+ roles: {
1333
+ shaker: role("drums"),
1334
+ chords: role("piano"),
1335
+ lead: role("flute"),
1336
+ counter: role("violins"),
1337
+ },
1338
+ },
1339
+ }),
1340
+ card({
1341
+ id: "guajira",
1342
+ summary:
1343
+ "guajira and punto: 6/8 against 3/4 sesquialtera (dotted pulse 0 6 against 0 4 8), laud and tres, decima verse, major I-IV-V7",
1344
+ meter: { signatures: [["6/8", 1]] },
1345
+ tempo: { bpm: [90, 120], typical: 104 },
1346
+ pitch: { scales: [["major", 1]] },
1347
+ harmony: {
1348
+ forms: [
1349
+ [["I", "IV", "V7", "I"], 0.6],
1350
+ [["I", "V7", "V7", "I"], 0.4],
1351
+ ],
1352
+ },
1353
+ rhythm: {
1354
+ onsets: {
1355
+ bell: tl("sixEight12"),
1356
+ perc: tl("threeFour12"),
1357
+ shaker: grid("x.x.x.x.x.x."),
1358
+ chords: grid("x.x...x.x.x."),
1359
+ },
1360
+ },
1361
+ bass: { onsets: tl("sixEight12") },
1362
+ form: {
1363
+ plans: [[["intro", "verse", "verse", "verse", "outro"], 1]],
1364
+ archetype: "strophic",
1365
+ },
1366
+ texture: {
1367
+ roles: {
1368
+ shaker: maybe("drums"),
1369
+ chords: role("tres", "lute:0.5"),
1370
+ lead: role("sing"),
1371
+ },
1372
+ },
1373
+ }),
1374
+ card({
1375
+ id: "descarga",
1376
+ summary:
1377
+ "descarga: Cuban jam on a ii-V montuno vamp, extended sevenths, mambo bell, long improvised solos over clave",
1378
+ tempo: { bpm: [90, 110], typical: 100 },
1379
+ harmony: {
1380
+ presets: [
1381
+ ["ii-v-i", 0.6],
1382
+ ["minor-ii-v", 0.4],
1383
+ ],
1384
+ forms: null,
1385
+ sevenths: 0.85,
1386
+ },
1387
+ rhythm: { onsets: { shaker: grid("x.x.x.x.x.x.x.x.") } },
1388
+ melody: { intervals: LEAPY, density: [3, 4], repetition: 0.2 },
1389
+ form: {
1390
+ plans: [[["intro", "verse", "bridge", "bridge", "verse", "outro"], 1]],
1391
+ },
1392
+ texture: {
1393
+ roles: {
1394
+ shaker: maybe("drums"),
1395
+ chords: role("piano"),
1396
+ lead: role("trumpet", "tenorsax:0.6", "flute:0.4"),
1397
+ },
1398
+ },
1399
+ }),
1400
+ card({
1401
+ id: "timba",
1402
+ summary:
1403
+ "timba: Havana dance band, kick (bombo) on the clave, gears shifting between bass patterns, minor vamps, piano tumbao, coro and call",
1404
+ tempo: { bpm: [92, 110], typical: 100 },
1405
+ pitch: {
1406
+ scales: [
1407
+ ["minor", 0.6],
1408
+ ["dorian", 0.4],
1409
+ ],
1410
+ },
1411
+ harmony: {
1412
+ forms: [
1413
+ [["i", "iv", "V7", "iv"], 0.5],
1414
+ [["i", "bVII", "bVI", "V7"], 0.5],
1415
+ ],
1416
+ },
1417
+ rhythm: {
1418
+ onsets: {
1419
+ bell: tl("sonClave23"),
1420
+ kick: grid("...x......x....."),
1421
+ snare: grid("....x.......x..."),
1422
+ hat: grid("x.x.x.x.x.x.x.x."),
1423
+ },
1424
+ },
1425
+ bass: {
1426
+ behaviour: [
1427
+ ["octave", 0.5],
1428
+ ["root-fifth", 0.5],
1429
+ ],
1430
+ onsets: grid("x...x.x...x..x.."),
1431
+ },
1432
+ texture: {
1433
+ roles: {
1434
+ kick: role("drums"),
1435
+ snare: role("drums"),
1436
+ hat: maybe("drums"),
1437
+ chords: role("piano", "epiano:0.4"),
1438
+ bass: role("ebass"),
1439
+ lead: role("sing", "trumpet:0.5"),
1440
+ },
1441
+ },
1442
+ }),
1443
+ card({
1444
+ id: "songo",
1445
+ summary:
1446
+ "songo: Los Van Van's 1970s Havana groove, kit and timbales together, cowbell on every quarter, rim accents on the rumba clave, bombo on the and of two and ponche on four, dorian vamps",
1447
+ tempo: { bpm: [100, 125], typical: 112 },
1448
+ pitch: { scales: [["dorian", 1]] },
1449
+ harmony: {
1450
+ presets: null,
1451
+ forms: [
1452
+ [["i7", "IV7"], 0.6],
1453
+ [["i7", "bVII", "IV7", "i7"], 0.4],
1454
+ ],
1455
+ rhythm: [[2, 1]],
1456
+ },
1457
+ rhythm: {
1458
+ onsets: {
1459
+ bell: grid("x.x.x.x.x.x.x.x."),
1460
+ rim: tl("rumbaClave32"),
1461
+ kick: grid("...x..x....x..x."),
1462
+ snare: grid("..5...x5..5...x5"),
1463
+ perc: tl("congaTumbao"),
1464
+ shaker: null,
1465
+ },
1466
+ },
1467
+ bass: {
1468
+ behaviour: [["root-fifth", 1]],
1469
+ onsets: grid("x..x..x...x..x.."),
1470
+ },
1471
+ texture: {
1472
+ roles: {
1473
+ bell: role("bell"),
1474
+ rim: role("drums"),
1475
+ kick: role("drums"),
1476
+ snare: role("drums"),
1477
+ shaker: null,
1478
+ chords: role("piano", "epiano:0.4"),
1479
+ bass: role("ebass"),
1480
+ lead: role("sing", "violin:0.5"),
1481
+ },
1482
+ },
1483
+ }),
1484
+ card({
1485
+ id: "conga",
1486
+ summary:
1487
+ "conga de comparsa: Santiago and Havana carnival street band, bombo stroke on the and of four, campana and frying-pan bells, corneta china reed hook, chanted coro, major I-V7",
1488
+ tempo: { bpm: [120, 140], typical: 128 },
1489
+ pitch: { scales: [["major", 1]] },
1490
+ harmony: {
1491
+ presets: null,
1492
+ forms: [
1493
+ [["I", "V7", "V7", "I"], 0.6],
1494
+ [["I", "I", "V7", "I"], 0.4],
1495
+ ],
1496
+ rhythm: [[1, 1]],
1497
+ },
1498
+ rhythm: {
1499
+ onsets: {
1500
+ kick: grid(".......x.......x"),
1501
+ bell: grid("x.xxx.x.x.xxx.x."),
1502
+ perc: grid("x.x.x.xxx.x.x.xx"),
1503
+ shaker: null,
1504
+ snare: null,
1505
+ hat: null,
1506
+ chords: null,
1507
+ },
1508
+ },
1509
+ bass: { behaviour: [["none", 1]] },
1510
+ melody: { intervals: CHANT, ambitus: [4, 7], repetition: 0.6 },
1511
+ texture: {
1512
+ roles: {
1513
+ kick: role("drums"),
1514
+ bell: role("bell"),
1515
+ perc: role("framedrum"),
1516
+ shaker: null,
1517
+ snare: null,
1518
+ hat: null,
1519
+ chords: null,
1520
+ bass: null,
1521
+ lead: role("reeds"),
1522
+ counter: role("choir"),
1523
+ },
1524
+ },
1525
+ }),
1526
+ card({
1527
+ id: "nueva-trova",
1528
+ summary:
1529
+ "trova and nueva trova: singer with guitar, bolero and son roots, extended chords and secondary dominants, strophic poetic form",
1530
+ tempo: { bpm: [70, 105], typical: 86 },
1531
+ pitch: {
1532
+ scales: [
1533
+ ["major", 0.5],
1534
+ ["minor", 0.5],
1535
+ ],
1536
+ },
1537
+ harmony: {
1538
+ forms: [
1539
+ [["I", "iii7", "vi7", "ii7", "V7"], 0.4],
1540
+ [["i", "VI", "ii", "V7"], 0.3],
1541
+ [["I", "IV", "iv", "I"], 0.3],
1542
+ ],
1543
+ sevenths: 0.5,
1544
+ },
1545
+ rhythm: {
1546
+ onsets: {
1547
+ bell: null,
1548
+ perc: null,
1549
+ chords: grid("x.xxx.xxx.xxx.xx"),
1550
+ },
1551
+ },
1552
+ bass: {
1553
+ behaviour: [
1554
+ ["arpeggio", 0.6],
1555
+ ["root-fifth", 0.4],
1556
+ ],
1557
+ onsets: grid("x.......x......."),
1558
+ },
1559
+ form: {
1560
+ plans: [[["intro", "verse", "verse", "bridge", "verse", "outro"], 1]],
1561
+ archetype: "strophic",
1562
+ },
1563
+ texture: {
1564
+ roles: {
1565
+ bell: null,
1566
+ perc: null,
1567
+ chords: role("nylon"),
1568
+ bass: role("nylon"),
1569
+ lead: role("sing"),
1570
+ },
1571
+ },
1572
+ expression: { dynamics: [0.3, 0.75] },
1573
+ }),
1574
+ card({
1575
+ id: "santeria",
1576
+ summary:
1577
+ "bata and santeria: iya, itotele and okonkolo bata drums in 12/8 over the seven-stroke bembe bell, akpwon calls and coro answers, no harmony",
1578
+ meter: {
1579
+ signatures: [["12/8", 1]],
1580
+ cycle: timelineCycle("bembe", TIMELINES.bembe12, [0, 7], [1, 8]),
1581
+ },
1582
+ tempo: { bpm: [95, 130], typical: 110 },
1583
+ groove: { subdivision: 2, swingRatio: [1, 1] },
1584
+ pitch: {
1585
+ scales: [
1586
+ ["major-pentatonic", 0.5],
1587
+ ["minor-pentatonic", 0.5],
1588
+ ],
1589
+ },
1590
+ harmony: { model: "drone", presets: null, forms: null },
1591
+ rhythm: {
1592
+ onsets: {
1593
+ bell: null,
1594
+ perc: null,
1595
+ shaker: grid("x..x..x..x.."),
1596
+ chords: null,
1597
+ },
1598
+ },
1599
+ bass: { behaviour: [["none", 1]] },
1600
+ melody: { intervals: CHANT, ambitus: [5, 9], repetition: 0.75 },
1601
+ texture: {
1602
+ kind: "monophonic",
1603
+ roles: {
1604
+ bell: null,
1605
+ perc: role("framedrum"),
1606
+ shaker: role("drums"),
1607
+ chords: null,
1608
+ bass: null,
1609
+ lead: role("sing", "choir:0.5"),
1610
+ },
1611
+ },
1612
+ }),
1613
+ card({
1614
+ id: "changui",
1615
+ summary:
1616
+ "changui: Guantanamo son ancestor, tres guajeo, marimbula bass anticipating the beat, bongo slapping off-beats, guiro and maracas, I-V7",
1617
+ tempo: { bpm: [100, 125], typical: 112 },
1618
+ pitch: { scales: [["major", 1]] },
1619
+ harmony: {
1620
+ forms: [
1621
+ [["I", "V7"], 0.6],
1622
+ [["I", "IV", "V7", "V7"], 0.4],
1623
+ ],
1624
+ },
1625
+ rhythm: {
1626
+ onsets: {
1627
+ bell: null,
1628
+ perc: tl("offbeats"),
1629
+ shaker: grid("x.x.x.x.x.x.x.x."),
1630
+ },
1631
+ },
1632
+ texture: {
1633
+ roles: {
1634
+ bell: null,
1635
+ shaker: role("drums"),
1636
+ chords: role("tres"),
1637
+ bass: role("marimba"),
1638
+ lead: role("sing"),
1639
+ },
1640
+ },
1641
+ }),
1642
+
1643
+ // --- Puerto Rico and the Dominican Republic
1644
+ card({
1645
+ id: "puerto-rico-dr",
1646
+ abstract: true,
1647
+ summary: "salsa, bomba, merengue and bachata: clave, tumbao, guira drive",
1648
+ }),
1649
+ card({
1650
+ id: "salsa",
1651
+ summary:
1652
+ "salsa: 2-3 son clave, cascara in the verse and campana in the montuno, piano montuno, tumbao bass, trombone and trumpet mambos",
1653
+ tempo: { bpm: [85, 108], typical: 96 },
1654
+ pitch: {
1655
+ scales: [
1656
+ ["minor", 0.6],
1657
+ ["major", 0.4],
1658
+ ],
1659
+ },
1660
+ harmony: {
1661
+ presets: null,
1662
+ forms: [
1663
+ [["i", "iv", "V7", "i"], 0.4],
1664
+ [["ii7", "V7", "I", "I"], 0.3],
1665
+ [["i", "bVII", "bVI", "V7"], 0.3],
1666
+ ],
1667
+ },
1668
+ rhythm: {
1669
+ onsets: {
1670
+ bell: tl("sonClave23"),
1671
+ perc: tl("congaTumbao"),
1672
+ shaker: tl("cascara"),
1673
+ kick: null,
1674
+ },
1675
+ },
1676
+ bass: { onsets: tl("tumbao") },
1677
+ form: {
1678
+ plans: [[["intro", "verse", "chorus", "bridge", "chorus", "outro"], 1]],
1679
+ },
1680
+ texture: {
1681
+ roles: {
1682
+ kick: null,
1683
+ shaker: role("drums"),
1684
+ chords: role("piano"),
1685
+ bass: role("bassguitar", "doublebass:0.5"),
1686
+ lead: role("sing", "trombone:0.5"),
1687
+ counter: maybe("trumpet", "trombone:0.6"),
1688
+ },
1689
+ },
1690
+ }),
1691
+ card({
1692
+ id: "boogaloo",
1693
+ summary:
1694
+ "boogaloo: New York Latin soul, R&B backbeat claps on two and four, cowbell and congas, piano montuno over a mixolydian I-IV vamp",
1695
+ tempo: { bpm: [100, 125], typical: 112 },
1696
+ groove: { swingRatio: [1, 1.2] },
1697
+ pitch: {
1698
+ scales: [
1699
+ ["mixolydian", 0.5],
1700
+ ["dorian", 0.5],
1701
+ ],
1702
+ },
1703
+ harmony: {
1704
+ presets: [
1705
+ ["mixolydian-rock", 0.5],
1706
+ ["dorian-vamp", 0.5],
1707
+ ],
1708
+ forms: null,
1709
+ },
1710
+ rhythm: {
1711
+ onsets: {
1712
+ bell: grid("x...x...x...x..."),
1713
+ clap: grid("....x.......x..."),
1714
+ kick: grid("x.....x.x......."),
1715
+ },
1716
+ },
1717
+ bass: { onsets: grid("x.....x.x...x...") },
1718
+ texture: {
1719
+ roles: {
1720
+ clap: role("drums"),
1721
+ chords: role("piano", "hammond:0.4"),
1722
+ bass: role("ebass"),
1723
+ lead: role("sing", "trumpet:0.5"),
1724
+ },
1725
+ },
1726
+ }),
1727
+ card({
1728
+ id: "plena",
1729
+ summary:
1730
+ "plena: three panderetas (seguidor on the beats, punteador and requinto interlocking), guiro, news-song call and response, I-V7",
1731
+ tempo: { bpm: [100, 130], typical: 116 },
1732
+ pitch: {
1733
+ scales: [
1734
+ ["major", 0.6],
1735
+ ["minor", 0.4],
1736
+ ],
1737
+ },
1738
+ harmony: {
1739
+ presets: null,
1740
+ forms: [
1741
+ [["I", "V7"], 0.6],
1742
+ [["i", "V7"], 0.4],
1743
+ ],
1744
+ },
1745
+ rhythm: {
1746
+ onsets: {
1747
+ bell: null,
1748
+ perc: grid("x...x.x.x...x.x."),
1749
+ shaker: grid("x.xxx.xxx.xxx.xx"),
1750
+ chords: grid("x...x...x...x..."),
1751
+ },
1752
+ },
1753
+ texture: {
1754
+ kind: "interlocking",
1755
+ roles: {
1756
+ bell: null,
1757
+ perc: role("framedrum"),
1758
+ shaker: role("drums"),
1759
+ chords: role("tres", "acoustic:0.5"),
1760
+ lead: role("sing", "choir:0.4"),
1761
+ },
1762
+ },
1763
+ }),
1764
+ card({
1765
+ id: "bomba",
1766
+ summary:
1767
+ "bomba: buleador barril holds the sica pattern, subidor answers the dancer, cua sticks on the cinquillo, maraca, sung call and response",
1768
+ tempo: { bpm: [100, 135], typical: 118 },
1769
+ harmony: { model: "drone", presets: null, forms: null },
1770
+ rhythm: {
1771
+ onsets: {
1772
+ bell: tl("cinquillo"),
1773
+ perc: grid("x..x..x.x..x..x."),
1774
+ shaker: grid("x.x.x.x.x.x.x.x."),
1775
+ chords: null,
1776
+ },
1777
+ },
1778
+ bass: { behaviour: [["none", 1]] },
1779
+ melody: { intervals: CHANT, ambitus: [5, 9], repetition: 0.75 },
1780
+ texture: {
1781
+ kind: "monophonic",
1782
+ roles: {
1783
+ bell: role("bell"),
1784
+ perc: role("framedrum"),
1785
+ shaker: role("drums"),
1786
+ chords: null,
1787
+ bass: null,
1788
+ lead: role("sing", "choir:0.5"),
1789
+ },
1790
+ },
1791
+ }),
1792
+ card({
1793
+ id: "jibaro",
1794
+ summary:
1795
+ "jibaro and aguinaldo: cuatro puertorriqueno lead, guitar and guiro, 2/4 seis in decima verse, major I-IV-V7",
1796
+ meter: { signatures: [["2/4", 1]] },
1797
+ tempo: { bpm: [100, 135], typical: 116 },
1798
+ pitch: {
1799
+ scales: [
1800
+ ["major", 0.7],
1801
+ ["minor", 0.3],
1802
+ ],
1803
+ },
1804
+ harmony: {
1805
+ presets: null,
1806
+ forms: [
1807
+ [["I", "IV", "V7", "I"], 0.6],
1808
+ [["i", "iv", "V7", "i"], 0.4],
1809
+ ],
1810
+ rhythm: [[1, 1]],
1811
+ },
1812
+ rhythm: {
1813
+ onsets: {
1814
+ bell: null,
1815
+ perc: null,
1816
+ shaker: grid("x.xxx.xx"),
1817
+ chords: grid("x.x.x.x."),
1818
+ },
1819
+ },
1820
+ bass: { onsets: grid("x...x...") },
1821
+ form: {
1822
+ plans: [[["intro", "verse", "verse", "verse", "outro"], 1]],
1823
+ archetype: "strophic",
1824
+ },
1825
+ texture: {
1826
+ roles: {
1827
+ bell: null,
1828
+ perc: null,
1829
+ shaker: role("drums"),
1830
+ chords: role("acoustic"),
1831
+ bass: role("acoustic"),
1832
+ lead: role("sing", "tres:0.6"),
1833
+ },
1834
+ },
1835
+ }),
1836
+ card({
1837
+ id: "reggaeton",
1838
+ summary:
1839
+ "reggaeton: the dembow (kick on every beat, snare on 3 6 11 14 of the tresillo), minor i-VI-III-VII loop, synth and sung hooks",
1840
+ tempo: { bpm: [86, 102], typical: 94 },
1841
+ pitch: { scales: [["minor", 1]] },
1842
+ harmony: {
1843
+ presets: [
1844
+ ["sad-pop", 0.6],
1845
+ ["aeolian", 0.4],
1846
+ ],
1847
+ forms: null,
1848
+ },
1849
+ rhythm: {
1850
+ onsets: {
1851
+ bell: null,
1852
+ perc: null,
1853
+ kick: tl("fourFloor"),
1854
+ snare: tl("dembowSnare"),
1855
+ hat: grid("x.x.x.x.x.x.x.x."),
1856
+ },
1857
+ },
1858
+ bass: { behaviour: [["root", 1]], onsets: tl("fourFloor"), kickLock: 0.9 },
1859
+ texture: {
1860
+ roles: {
1861
+ bell: null,
1862
+ perc: null,
1863
+ kick: { required: true, voices: [kit("syn808")] },
1864
+ snare: { required: true, voices: [kit("syn808")] },
1865
+ hat: { required: false, voices: [kit("syn808")] },
1866
+ chords: role("saw", "square:0.5"),
1867
+ bass: role("bass"),
1868
+ lead: role("sing"),
1869
+ },
1870
+ },
1871
+ mix: { loudness: "loud" },
1872
+ }),
1873
+ card({
1874
+ id: "dembow",
1875
+ summary:
1876
+ "dembow dominicano: Santo Domingo street dembow, faster and drier than reggaeton (118-132), kick on every beat, snare and clap on the 3 6 11 14 dembow, sixteenth hats and rolls, one-bar minor loop, chanted repeated-note hooks",
1877
+ tempo: { bpm: [116, 134], typical: 124 },
1878
+ pitch: { scales: [["minor", 1]] },
1879
+ harmony: { model: "modal", presets: null, forms: null, rhythm: [[4, 1]] },
1880
+ rhythm: {
1881
+ onsets: {
1882
+ bell: null,
1883
+ perc: null,
1884
+ kick: tl("fourFloor"),
1885
+ snare: tl("dembowSnare"),
1886
+ clap: tl("dembowSnare"),
1887
+ hat: grid("xxxxxxxxxxxxxxxx"),
1888
+ },
1889
+ },
1890
+ bass: { behaviour: [["root", 1]], onsets: tl("fourFloor"), kickLock: 1 },
1891
+ melody: { intervals: CHANT, ambitus: [3, 6], repetition: 0.7 },
1892
+ texture: {
1893
+ roles: {
1894
+ bell: null,
1895
+ perc: null,
1896
+ kick: { required: true, voices: [kit("syn808")] },
1897
+ snare: { required: true, voices: [kit("syn808")] },
1898
+ clap: { required: true, voices: [kit("syn808")] },
1899
+ hat: { required: true, voices: [kit("syn808")] },
1900
+ chords: role("square"),
1901
+ bass: role("bass"),
1902
+ lead: role("sing"),
1903
+ },
1904
+ },
1905
+ mix: { loudness: "loud" },
1906
+ }),
1907
+ card({
1908
+ id: "merengue",
1909
+ summary:
1910
+ "merengue: tambora on the 2/4 with its slap on the and, guira scraping long-short-short, accordion lead, jaleo section, I-V7 alternation",
1911
+ tempo: { bpm: [120, 160], typical: 140 },
1912
+ pitch: {
1913
+ scales: [
1914
+ ["major", 0.8],
1915
+ ["minor", 0.2],
1916
+ ],
1917
+ },
1918
+ harmony: {
1919
+ presets: null,
1920
+ forms: [
1921
+ [["I", "V7"], 0.7],
1922
+ [["I", "IV", "V7", "I"], 0.3],
1923
+ ],
1924
+ },
1925
+ rhythm: {
1926
+ onsets: {
1927
+ bell: null,
1928
+ perc: grid("x..xx.x.x..xx.xx"),
1929
+ shaker: tl("scrape"),
1930
+ chords: grid("..x...x...x...x."),
1931
+ },
1932
+ },
1933
+ bass: { behaviour: [["root-fifth", 1]], onsets: grid("x...x.x.x...x.x.") },
1934
+ form: {
1935
+ plans: [
1936
+ [["intro", "verse", "chorus", "breakdown", "chorus", "outro"], 1],
1937
+ ],
1938
+ },
1939
+ texture: {
1940
+ roles: {
1941
+ bell: null,
1942
+ perc: role("framedrum"),
1943
+ shaker: role("drums"),
1944
+ chords: role("reeds", "piano:0.4"),
1945
+ lead: role("reeds", "sing:0.6", "altosax:0.4"),
1946
+ },
1947
+ },
1948
+ }),
1949
+ card({
1950
+ id: "bachata",
1951
+ summary:
1952
+ "bachata: requinto guitar arpeggios, bongo martillo, guira, bass on one-two-three and the four-and, minor bolero changes",
1953
+ tempo: { bpm: [118, 140], typical: 128 },
1954
+ pitch: {
1955
+ scales: [
1956
+ ["minor", 0.6],
1957
+ ["harmonic-minor", 0.4],
1958
+ ],
1959
+ },
1960
+ harmony: {
1961
+ presets: null,
1962
+ forms: [
1963
+ [["i", "iv", "V7", "i"], 0.5],
1964
+ [["i", "VI", "iv", "V7"], 0.5],
1965
+ ],
1966
+ },
1967
+ rhythm: {
1968
+ onsets: {
1969
+ bell: null,
1970
+ perc: grid("x.xxx.xxx.xxx.xx"),
1971
+ shaker: grid("x.x.x.x.x.x.x.x."),
1972
+ chords: grid("x.x.x.x.x.x.x.x."),
1973
+ },
1974
+ },
1975
+ bass: { behaviour: [["root-fifth", 1]], onsets: grid("x...x...x....xx.") },
1976
+ texture: {
1977
+ roles: {
1978
+ bell: null,
1979
+ perc: role("drums"),
1980
+ shaker: role("drums"),
1981
+ chords: role("bachata"),
1982
+ bass: role("ebass"),
1983
+ lead: role("sing", "requinto:0.5"),
1984
+ },
1985
+ },
1986
+ }),
1987
+
1988
+ // --- Mexico. Reference: Daniel Sheehy, "Mariachi Music in America"
1989
+ // (2006).
1990
+ card({
1991
+ id: "mexican",
1992
+ abstract: true,
1993
+ summary:
1994
+ "Mexican: 3/4 and 6/8 sesquialtera, I-V7 polka bass, brass and accordion",
1995
+ meter: {
1996
+ signatures: [
1997
+ ["3/4", 0.5],
1998
+ ["6/8", 0.3],
1999
+ ["2/4", 0.2],
2000
+ ],
2001
+ },
2002
+ pitch: {
2003
+ scales: [
2004
+ ["major", 0.7],
2005
+ ["minor", 0.3],
2006
+ ],
2007
+ },
2008
+ harmony: { presets: [["fifties", 1]] },
2009
+ bass: { behaviour: [["root-fifth", 1]] },
2010
+ texture: {
2011
+ roles: {
2012
+ chords: role("nylon", "acoustic:0.5"),
2013
+ lead: role("trumpet", "violin:0.6"),
2014
+ },
2015
+ },
2016
+ }),
2017
+ card({
2018
+ id: "mariachi",
2019
+ summary:
2020
+ "mariachi and son jalisciense: 6/8 sesquialtera, vihuela strum, guitarron bass on the dotted pulse, trumpets and violins in thirds, I-IV-V7",
2021
+ meter: { signatures: [["6/8", 1]] },
2022
+ tempo: { bpm: [110, 145], typical: 128 },
2023
+ pitch: { scales: [["major", 1]] },
2024
+ harmony: {
2025
+ presets: null,
2026
+ forms: [
2027
+ [["I", "IV", "V7", "I"], 0.5],
2028
+ [["I", "V7", "V7", "I"], 0.5],
2029
+ ],
2030
+ rhythm: [[1, 1]],
2031
+ },
2032
+ rhythm: {
2033
+ onsets: {
2034
+ bell: null,
2035
+ perc: null,
2036
+ kick: null,
2037
+ chords: grid("x.x.x.x.x.x."),
2038
+ },
2039
+ },
2040
+ bass: { onsets: tl("sixEight12") },
2041
+ texture: {
2042
+ kind: "homophonic",
2043
+ roles: {
2044
+ bell: null,
2045
+ perc: null,
2046
+ kick: null,
2047
+ snare: null,
2048
+ hat: null,
2049
+ chords: role("acoustic"),
2050
+ bass: role("doublebass"),
2051
+ lead: role("violins", "trumpet:0.7"),
2052
+ counter: role("trumpet"),
2053
+ },
2054
+ },
2055
+ }),
2056
+ card({
2057
+ id: "ranchera",
2058
+ summary:
2059
+ "ranchera: vals ranchero 3/4 oom-pah-pah (bass on one, chords on two and three) at a stately tempo, sung lead with held fermata cadences, mariachi trumpet answers, I-IV-V7",
2060
+ meter: { signatures: [["3/4", 1]] },
2061
+ tempo: { bpm: [80, 120], typical: 96 },
2062
+ pitch: {
2063
+ scales: [
2064
+ ["major", 0.8],
2065
+ ["minor", 0.2],
2066
+ ],
2067
+ },
2068
+ harmony: {
2069
+ presets: null,
2070
+ forms: [
2071
+ [["I", "I", "V7", "V7"], 0.5],
2072
+ [["I", "IV", "V7", "I"], 0.5],
2073
+ ],
2074
+ rhythm: [[1, 1]],
2075
+ },
2076
+ rhythm: {
2077
+ onsets: {
2078
+ bell: null,
2079
+ perc: null,
2080
+ kick: null,
2081
+ chords: grid("....x...x..."),
2082
+ },
2083
+ },
2084
+ bass: { onsets: grid("x...........") },
2085
+ texture: {
2086
+ roles: {
2087
+ bell: null,
2088
+ perc: null,
2089
+ kick: null,
2090
+ snare: null,
2091
+ hat: null,
2092
+ chords: role("acoustic", "violins:0.4"),
2093
+ bass: role("doublebass"),
2094
+ lead: role("sing"),
2095
+ counter: maybe("trumpet", "violins:0.6"),
2096
+ },
2097
+ },
2098
+ }),
2099
+ card({
2100
+ id: "son-jarocho",
2101
+ summary:
2102
+ "son jarocho: Veracruz 6/8 sesquialtera, jarana strum, requinto jarocho melody, arpa jarocha, zapateado on the tarima, fast I-IV-V7",
2103
+ meter: { signatures: [["6/8", 1]] },
2104
+ tempo: { bpm: [140, 180], typical: 160 },
2105
+ pitch: {
2106
+ scales: [
2107
+ ["major", 0.7],
2108
+ ["minor", 0.3],
2109
+ ],
2110
+ },
2111
+ harmony: {
2112
+ presets: null,
2113
+ forms: [
2114
+ [["I", "IV", "V7", "V7"], 0.5],
2115
+ [["i", "iv", "V7", "i"], 0.5],
2116
+ ],
2117
+ rhythm: [[1, 1]],
2118
+ },
2119
+ rhythm: {
2120
+ onsets: {
2121
+ bell: null,
2122
+ kick: null,
2123
+ perc: grid("x.xx.xx.x.x."),
2124
+ chords: grid("x.x.xxx.x.x."),
2125
+ },
2126
+ },
2127
+ bass: { onsets: tl("threeFour12") },
2128
+ texture: {
2129
+ roles: {
2130
+ bell: null,
2131
+ kick: null,
2132
+ snare: null,
2133
+ hat: null,
2134
+ perc: role("framedrum"),
2135
+ chords: role("requinto", "acoustic:0.5"),
2136
+ bass: role("harp"),
2137
+ lead: role("harp", "requinto:0.6", "sing:0.6"),
2138
+ },
2139
+ },
2140
+ }),
2141
+ card({
2142
+ id: "son-huasteco",
2143
+ summary:
2144
+ "son huasteco (huapango): trio of violin, jarana huasteca and quinta huapanguera, 6/8 against 3/4 with the quinta's strummed bass, florid violin lead and falsetto breaks, slower and darker than son jarocho, I-IV-V7",
2145
+ meter: { signatures: [["6/8", 1]] },
2146
+ tempo: { bpm: [110, 140], typical: 124 },
2147
+ pitch: { scales: [["major", 1]] },
2148
+ harmony: {
2149
+ presets: null,
2150
+ forms: [
2151
+ [["I", "IV", "V7", "I"], 0.6],
2152
+ [["I", "V7", "V7", "I"], 0.4],
2153
+ ],
2154
+ rhythm: [[1, 1]],
2155
+ },
2156
+ rhythm: {
2157
+ onsets: {
2158
+ bell: null,
2159
+ kick: null,
2160
+ perc: tl("sixEight12"),
2161
+ chords: grid("x.xxx.x.xxx."),
2162
+ },
2163
+ },
2164
+ bass: { onsets: grid("x.....x...x.") },
2165
+ melody: { intervals: LEAPY, density: [3, 4] },
2166
+ texture: {
2167
+ roles: {
2168
+ bell: null,
2169
+ kick: null,
2170
+ snare: null,
2171
+ hat: null,
2172
+ perc: maybe("framedrum"),
2173
+ chords: role("acoustic", "requinto:0.4"),
2174
+ bass: role("acoustic"),
2175
+ lead: role("violin"),
2176
+ },
2177
+ },
2178
+ }),
2179
+ card({
2180
+ id: "norteno",
2181
+ summary:
2182
+ "norteno and conjunto: button accordion lead with bajo sexto, 2/4 polka (bass on the beats, chords on the off-beats), I-V7",
2183
+ meter: { signatures: [["2/4", 1]] },
2184
+ tempo: { bpm: [100, 135], typical: 118 },
2185
+ pitch: { scales: [["major", 1]] },
2186
+ harmony: {
2187
+ presets: null,
2188
+ forms: [
2189
+ [["I", "V7", "V7", "I"], 0.6],
2190
+ [["I", "IV", "V7", "I"], 0.4],
2191
+ ],
2192
+ rhythm: [[1, 1]],
2193
+ },
2194
+ rhythm: {
2195
+ onsets: {
2196
+ bell: null,
2197
+ perc: null,
2198
+ kick: grid("x...x..."),
2199
+ snare: grid("..x...x."),
2200
+ chords: grid("..x...x."),
2201
+ },
2202
+ },
2203
+ bass: { onsets: grid("x...x...") },
2204
+ texture: {
2205
+ roles: {
2206
+ bell: null,
2207
+ perc: null,
2208
+ snare: role("drums"),
2209
+ chords: role("steel", "acoustic:0.5"),
2210
+ bass: role("bassguitar"),
2211
+ lead: role("reeds"),
2212
+ },
2213
+ },
2214
+ }),
2215
+ card({
2216
+ id: "corrido",
2217
+ summary:
2218
+ "corrido: strophic narrative ballad, no chorus, brisk 3/4 with the guitar strumming every eighth over tololoche on every beat, requinto runs between lines, recitation-like lead on few notes, I-V7",
2219
+ meter: { signatures: [["3/4", 1]] },
2220
+ tempo: { bpm: [120, 160], typical: 138 },
2221
+ pitch: {
2222
+ scales: [
2223
+ ["major", 0.7],
2224
+ ["minor", 0.3],
2225
+ ],
2226
+ },
2227
+ harmony: {
2228
+ presets: null,
2229
+ forms: [
2230
+ [["I", "V7", "V7", "I"], 0.6],
2231
+ [["I", "IV", "V7", "I"], 0.4],
2232
+ ],
2233
+ rhythm: [[1, 1]],
2234
+ },
2235
+ rhythm: {
2236
+ onsets: {
2237
+ bell: null,
2238
+ perc: null,
2239
+ kick: null,
2240
+ chords: grid("x.x.x.x.x.x."),
2241
+ counter: grid("..xxxxxx..xx"),
2242
+ },
2243
+ },
2244
+ bass: { onsets: grid("x...x...x...") },
2245
+ melody: { intervals: CHANT, ambitus: [5, 9], repetition: 0.6 },
2246
+ form: {
2247
+ plans: [[["intro", "verse", "verse", "verse", "verse", "outro"], 1]],
2248
+ archetype: "strophic",
2249
+ },
2250
+ texture: {
2251
+ roles: {
2252
+ bell: null,
2253
+ perc: null,
2254
+ kick: null,
2255
+ snare: null,
2256
+ hat: null,
2257
+ chords: role("steel", "acoustic:0.5"),
2258
+ bass: role("doublebass", "tuba:0.4"),
2259
+ lead: role("sing"),
2260
+ counter: role("requinto"),
2261
+ },
2262
+ },
2263
+ }),
2264
+ card({
2265
+ id: "banda",
2266
+ summary:
2267
+ "banda sinaloense: brass band, the tuba walking every eighth (not the norteno oom-pah), charcheta horns on the off-beats, clarinets and trumpets in thirds, tambora bass drum on the beats with its cymbal on the off-beats, tarola rolls, 2/4 drive",
2268
+ meter: { signatures: [["2/4", 1]] },
2269
+ tempo: { bpm: [120, 160], typical: 138 },
2270
+ pitch: {
2271
+ scales: [
2272
+ ["major", 0.8],
2273
+ ["minor", 0.2],
2274
+ ],
2275
+ },
2276
+ harmony: {
2277
+ presets: null,
2278
+ forms: [
2279
+ [["I", "V7", "V7", "I"], 0.5],
2280
+ [["I", "IV", "V7", "I"], 0.5],
2281
+ ],
2282
+ rhythm: [[1, 1]],
2283
+ },
2284
+ rhythm: {
2285
+ onsets: {
2286
+ bell: null,
2287
+ perc: null,
2288
+ kick: grid("x...x..."),
2289
+ openhat: grid("..x...x."),
2290
+ snare: grid("5.5.x.x5"),
2291
+ chords: grid("..x...x."),
2292
+ },
2293
+ },
2294
+ bass: {
2295
+ behaviour: [["arpeggio", 1]],
2296
+ onsets: grid("x.x.x.x."),
2297
+ },
2298
+ texture: {
2299
+ roles: {
2300
+ bell: null,
2301
+ perc: null,
2302
+ snare: role("drums"),
2303
+ openhat: role("drums"),
2304
+ chords: role("horn", "trombone:0.5"),
2305
+ bass: role("tuba"),
2306
+ lead: role("clarinet", "trumpet:0.7"),
2307
+ counter: maybe("trumpet"),
2308
+ },
2309
+ },
2310
+ }),
2311
+ card({
2312
+ id: "tejano",
2313
+ summary:
2314
+ "tejano: Texas conjunto meets cumbia and pop, accordion and synth, cumbia off-beat scrape, 4/4 I-IV-V7 with pop chorus",
2315
+ meter: { signatures: [["4/4", 1]] },
2316
+ tempo: { bpm: [92, 120], typical: 104 },
2317
+ harmony: {
2318
+ presets: [
2319
+ ["fifties", 0.5],
2320
+ ["axis", 0.5],
2321
+ ],
2322
+ rhythm: [[1, 1]],
2323
+ },
2324
+ rhythm: {
2325
+ onsets: {
2326
+ bell: null,
2327
+ perc: tl("offbeats"),
2328
+ kick: grid("x.......x......."),
2329
+ snare: grid("....x.......x..."),
2330
+ shaker: tl("scrape"),
2331
+ chords: grid("..x...x...x...x."),
2332
+ },
2333
+ },
2334
+ bass: { onsets: grid("x...x.x.x...x.x.") },
2335
+ texture: {
2336
+ roles: {
2337
+ bell: null,
2338
+ snare: role("drums"),
2339
+ shaker: maybe("drums"),
2340
+ chords: role("square", "reeds:0.5"),
2341
+ bass: role("ebass"),
2342
+ lead: role("sing", "reeds:0.5"),
2343
+ },
2344
+ },
2345
+ }),
2346
+ card({
2347
+ id: "marimba-orquesta",
2348
+ summary:
2349
+ "marimba orquesta: Chiapas and Guatemala marimba playing melody in octaves and tremolo chords, 3/4 against 6/8, saxes and brass",
2350
+ meter: { signatures: [["3/4", 1]] },
2351
+ tempo: { bpm: [110, 150], typical: 128 },
2352
+ pitch: { scales: [["major", 1]] },
2353
+ harmony: {
2354
+ presets: null,
2355
+ forms: [
2356
+ [["I", "IV", "V7", "I"], 0.6],
2357
+ [["I", "V7"], 0.4],
2358
+ ],
2359
+ rhythm: [[1, 1]],
2360
+ },
2361
+ rhythm: {
2362
+ onsets: {
2363
+ bell: null,
2364
+ perc: tl("sixEight12"),
2365
+ kick: null,
2366
+ chords: tl("threeFour12"),
2367
+ },
2368
+ },
2369
+ bass: { onsets: tl("sixEight12") },
2370
+ texture: {
2371
+ roles: {
2372
+ bell: null,
2373
+ kick: null,
2374
+ snare: null,
2375
+ hat: null,
2376
+ perc: maybe("drums"),
2377
+ chords: role("marimba"),
2378
+ bass: role("marimba"),
2379
+ lead: role("marimba", "altosax:0.5"),
2380
+ },
2381
+ },
2382
+ }),
2383
+
2384
+ // --- Colombia and Venezuela. Reference: Peter Wade, "Music, Race and
2385
+ // Nation" (2000).
2386
+ card({
2387
+ id: "colombia-venezuela",
2388
+ abstract: true,
2389
+ summary: "cumbia and joropo: 2/4 cumbia shuffle, 6/8 joropo hemiola",
2390
+ rhythm: { onsets: { perc: tl("offbeats") } },
2391
+ }),
2392
+ card({
2393
+ id: "cumbia",
2394
+ summary:
2395
+ "cumbia: llamador on the off-beats, tambor alegre improvising, guacharaca scrape, bass on one and the and of two, accordion or gaita, i-iv-V7",
2396
+ tempo: { bpm: [84, 104], typical: 94 },
2397
+ harmony: {
2398
+ presets: null,
2399
+ forms: [
2400
+ [["i", "iv", "V7", "i"], 0.5],
2401
+ [["I", "IV", "V7", "I"], 0.5],
2402
+ ],
2403
+ rhythm: [[1, 1]],
2404
+ },
2405
+ rhythm: {
2406
+ onsets: {
2407
+ bell: null,
2408
+ kick: grid("x.......x......."),
2409
+ shaker: tl("scrape"),
2410
+ chords: tl("offbeats"),
2411
+ },
2412
+ },
2413
+ bass: { onsets: grid("x.....x.x.....x.") },
2414
+ texture: {
2415
+ roles: {
2416
+ bell: null,
2417
+ shaker: role("drums"),
2418
+ chords: role("reeds", "electric:0.5"),
2419
+ bass: role("ebass"),
2420
+ lead: role("reeds", "flute:0.5", "sing:0.6"),
2421
+ },
2422
+ },
2423
+ }),
2424
+ card({
2425
+ id: "vallenato",
2426
+ summary:
2427
+ "vallenato: accordion, caja and guacharaca; paseo 2/4 with bass on the beat and its anticipation, I-IV-V7 in major",
2428
+ tempo: { bpm: [92, 130], typical: 110 },
2429
+ pitch: {
2430
+ scales: [
2431
+ ["major", 0.8],
2432
+ ["minor", 0.2],
2433
+ ],
2434
+ },
2435
+ harmony: {
2436
+ presets: null,
2437
+ forms: [
2438
+ [["I", "IV", "V7", "I"], 0.6],
2439
+ [["I", "V7"], 0.4],
2440
+ ],
2441
+ rhythm: [[1, 1]],
2442
+ },
2443
+ rhythm: {
2444
+ onsets: {
2445
+ bell: null,
2446
+ kick: null,
2447
+ perc: grid("x..x..x.x..x..x."),
2448
+ shaker: tl("scrape"),
2449
+ chords: grid("..x...x...x...x."),
2450
+ },
2451
+ },
2452
+ bass: { onsets: grid("x...x..xx...x..x") },
2453
+ texture: {
2454
+ roles: {
2455
+ bell: null,
2456
+ kick: null,
2457
+ perc: role("framedrum"),
2458
+ shaker: role("drums"),
2459
+ chords: role("acoustic"),
2460
+ bass: role("ebass"),
2461
+ lead: role("reeds"),
2462
+ },
2463
+ },
2464
+ }),
2465
+ card({
2466
+ id: "porro",
2467
+ summary:
2468
+ "porro and gaita: banda pelayera brass with bombo on the cut-time beats, clarinet tunes; gaita flutes in minor pentatonic",
2469
+ tempo: { bpm: [110, 150], typical: 128 },
2470
+ pitch: {
2471
+ scales: [
2472
+ ["major", 0.5],
2473
+ ["minor-pentatonic", 0.5],
2474
+ ],
2475
+ },
2476
+ harmony: {
2477
+ presets: null,
2478
+ forms: [
2479
+ [["I", "V7"], 0.5],
2480
+ [["I", "IV", "V7", "I"], 0.5],
2481
+ ],
2482
+ rhythm: [[1, 1]],
2483
+ },
2484
+ rhythm: {
2485
+ onsets: {
2486
+ bell: null,
2487
+ kick: grid("x...x...x...x..."),
2488
+ snare: grid("..x...x...x...x."),
2489
+ },
2490
+ },
2491
+ texture: {
2492
+ roles: {
2493
+ bell: null,
2494
+ snare: role("drums"),
2495
+ chords: role("trombone", "horn:0.5"),
2496
+ bass: role("tuba"),
2497
+ lead: role("clarinet", "flute:0.5"),
2498
+ },
2499
+ },
2500
+ }),
2501
+ card({
2502
+ id: "champeta",
2503
+ summary:
2504
+ "champeta: Cartagena picos, soukous-style looping electric guitar riffs, electronic kick on the beat, snare on the off-beats, major",
2505
+ tempo: { bpm: [100, 125], typical: 112 },
2506
+ pitch: { scales: [["major", 1]] },
2507
+ harmony: {
2508
+ presets: null,
2509
+ forms: [
2510
+ [["I", "IV", "V", "IV"], 0.5],
2511
+ [["I", "V"], 0.5],
2512
+ ],
2513
+ rhythm: [[1, 1]],
2514
+ },
2515
+ rhythm: {
2516
+ onsets: {
2517
+ bell: null,
2518
+ kick: tl("fourFloor"),
2519
+ snare: grid("..x...x...x...x."),
2520
+ hat: grid("x.x.x.x.x.x.x.x."),
2521
+ },
2522
+ },
2523
+ melody: { intervals: LEAPY, density: [2, 4] },
2524
+ texture: {
2525
+ roles: {
2526
+ bell: null,
2527
+ kick: { required: true, voices: [kit("electro")] },
2528
+ snare: { required: true, voices: [kit("electro")] },
2529
+ hat: { required: false, voices: [kit("electro")] },
2530
+ chords: role("electric"),
2531
+ bass: role("bass"),
2532
+ lead: role("electric", "sing:0.6"),
2533
+ },
2534
+ },
2535
+ }),
2536
+ card({
2537
+ id: "currulao",
2538
+ summary:
2539
+ "currulao: Pacific marimba de chonta in 6/8 with 3:2 hemiola, bombo on the dotted pulse, cununo on the 3/4, guasa shaker, minor",
2540
+ meter: { signatures: [["6/8", 1]] },
2541
+ tempo: { bpm: [110, 140], typical: 124 },
2542
+ pitch: {
2543
+ scales: [
2544
+ ["minor", 0.5],
2545
+ ["minor-pentatonic", 0.5],
2546
+ ],
2547
+ },
2548
+ harmony: { model: "modal", presets: null, rhythm: [[2, 1]] },
2549
+ rhythm: {
2550
+ onsets: {
2551
+ bell: null,
2552
+ kick: tl("sixEight12"),
2553
+ perc: tl("threeFour12"),
2554
+ shaker: grid("x.x.x.x.x.x."),
2555
+ chords: grid("x.xx.xx.xx.x"),
2556
+ },
2557
+ },
2558
+ bass: { behaviour: [["ostinato", 1]], onsets: tl("sixEight12") },
2559
+ texture: {
2560
+ kind: "interlocking",
2561
+ roles: {
2562
+ bell: null,
2563
+ snare: null,
2564
+ hat: null,
2565
+ kick: role("drums"),
2566
+ perc: role("framedrum"),
2567
+ shaker: role("drums"),
2568
+ chords: role("marimba"),
2569
+ bass: role("marimba"),
2570
+ lead: role("marimba", "sing:0.6"),
2571
+ },
2572
+ },
2573
+ }),
2574
+ card({
2575
+ id: "bambuco",
2576
+ summary:
2577
+ "bambuco and pasillo: Andean Colombian 3/4 with 6/8 hemiola, tiple and bandola, harmonic minor with relative-major turns",
2578
+ meter: { signatures: [["3/4", 1]] },
2579
+ tempo: { bpm: [100, 140], typical: 118 },
2580
+ pitch: {
2581
+ scales: [
2582
+ ["harmonic-minor", 0.5],
2583
+ ["major", 0.5],
2584
+ ],
2585
+ },
2586
+ harmony: {
2587
+ presets: null,
2588
+ forms: [
2589
+ [["i", "iv", "V7", "i"], 0.5],
2590
+ [["I", "IV", "V7", "I"], 0.5],
2591
+ ],
2592
+ rhythm: [[1, 1]],
2593
+ },
2594
+ rhythm: {
2595
+ onsets: {
2596
+ bell: null,
2597
+ kick: null,
2598
+ perc: null,
2599
+ chords: tl("threeFour12"),
2600
+ },
2601
+ },
2602
+ bass: { onsets: tl("sixEight12") },
2603
+ texture: {
2604
+ roles: {
2605
+ bell: null,
2606
+ kick: null,
2607
+ snare: null,
2608
+ hat: null,
2609
+ perc: null,
2610
+ chords: role("steel", "tres:0.5"),
2611
+ bass: role("acoustic"),
2612
+ lead: role("requinto", "sing:0.6"),
2613
+ },
2614
+ },
2615
+ }),
2616
+ card({
2617
+ id: "joropo",
2618
+ summary:
2619
+ "joropo: Venezuelan llanero, arpa llanera and cuatro, maracas on every eighth, bass marking 6/8 against the harp's 3/4, fast I-IV-V7",
2620
+ meter: { signatures: [["3/4", 1]] },
2621
+ tempo: { bpm: [160, 210], typical: 184 },
2622
+ pitch: {
2623
+ scales: [
2624
+ ["major", 0.6],
2625
+ ["minor", 0.4],
2626
+ ],
2627
+ },
2628
+ harmony: {
2629
+ presets: null,
2630
+ forms: [
2631
+ [["I", "IV", "V7", "I"], 0.6],
2632
+ [["i", "iv", "V7", "i"], 0.4],
2633
+ ],
2634
+ rhythm: [[1, 1]],
2635
+ },
2636
+ rhythm: {
2637
+ onsets: {
2638
+ bell: null,
2639
+ kick: null,
2640
+ perc: null,
2641
+ shaker: grid("x.x.x.x.x.x."),
2642
+ chords: tl("threeFour12"),
2643
+ },
2644
+ },
2645
+ bass: { onsets: tl("sixEight12") },
2646
+ texture: {
2647
+ roles: {
2648
+ bell: null,
2649
+ kick: null,
2650
+ snare: null,
2651
+ hat: null,
2652
+ perc: null,
2653
+ shaker: role("drums"),
2654
+ chords: role("tres"),
2655
+ bass: role("harp"),
2656
+ lead: role("harp", "sing:0.5"),
2657
+ },
2658
+ },
2659
+ }),
2660
+
2661
+ // --- Andes. Reference: Thomas Turino, "Moving Away from Silence"
2662
+ // (1993).
2663
+ card({
2664
+ id: "andean",
2665
+ abstract: true,
2666
+ summary:
2667
+ "Andean: pentatonic minor, huayno short-long rhythm, charango and quena",
2668
+ pitch: {
2669
+ scales: [
2670
+ ["minor-pentatonic", 0.6],
2671
+ ["minor", 0.4],
2672
+ ],
2673
+ },
2674
+ texture: {
2675
+ roles: { chords: role("nylon"), lead: role("panpipe", "flute:0.6") },
2676
+ },
2677
+ }),
2678
+ card({
2679
+ id: "huayno",
2680
+ summary:
2681
+ "huayno: 2/4 short-long (sixteenth then dotted eighth) on every beat, minor pentatonic with the relative-major double tonic, quena and charango",
2682
+ meter: { signatures: [["2/4", 1]] },
2683
+ tempo: { bpm: [100, 135], typical: 116 },
2684
+ harmony: {
2685
+ presets: null,
2686
+ forms: [
2687
+ [["i", "III", "VII", "III", "i", "V", "i", "i"], 0.6],
2688
+ [["i", "III", "i", "V"], 0.4],
2689
+ ],
2690
+ rhythm: [[1, 1]],
2691
+ },
2692
+ rhythm: {
2693
+ onsets: {
2694
+ bell: null,
2695
+ kick: grid("x...x..."),
2696
+ perc: null,
2697
+ chords: grid("xx..xx.."),
2698
+ },
2699
+ },
2700
+ bass: { onsets: grid("x...x...") },
2701
+ texture: {
2702
+ roles: {
2703
+ bell: null,
2704
+ snare: null,
2705
+ hat: null,
2706
+ perc: null,
2707
+ kick: role("drums"),
2708
+ chords: role("tres", "nylon:0.5"),
2709
+ bass: role("nylon"),
2710
+ lead: role("flute", "sing:0.6"),
2711
+ },
2712
+ },
2713
+ }),
2714
+ card({
2715
+ id: "andean-folk",
2716
+ summary:
2717
+ "Andean folk ensemble: sikuri panpipes in hocket (ira and arca halves interlocking), bombo on the beats, charango strum, pentatonic",
2718
+ tempo: { bpm: [80, 110], typical: 94 },
2719
+ harmony: {
2720
+ presets: null,
2721
+ forms: [
2722
+ [["i", "III", "VII", "i"], 0.5],
2723
+ [["i", "VII", "III", "i"], 0.5],
2724
+ ],
2725
+ rhythm: [[1, 1]],
2726
+ },
2727
+ rhythm: {
2728
+ onsets: {
2729
+ bell: null,
2730
+ kick: grid("x...x...x...x..."),
2731
+ perc: null,
2732
+ chords: grid("x.x.x.x.x.x.x.x."),
2733
+ },
2734
+ },
2735
+ texture: {
2736
+ kind: "interlocking",
2737
+ roles: {
2738
+ bell: null,
2739
+ snare: null,
2740
+ hat: null,
2741
+ perc: null,
2742
+ kick: role("drums"),
2743
+ chords: role("tres"),
2744
+ bass: role("nylon"),
2745
+ lead: role("panpipe"),
2746
+ counter: role("panpipe"),
2747
+ },
2748
+ },
2749
+ }),
2750
+ card({
2751
+ id: "musica-criolla",
2752
+ summary:
2753
+ "musica criolla and vals peruano: fast 3/4 waltz, guitar bass runs, cajon, minor-major alternation with secondary dominants",
2754
+ meter: { signatures: [["3/4", 1]] },
2755
+ tempo: { bpm: [150, 190], typical: 168 },
2756
+ pitch: {
2757
+ scales: [
2758
+ ["harmonic-minor", 0.5],
2759
+ ["major", 0.5],
2760
+ ],
2761
+ },
2762
+ harmony: {
2763
+ presets: null,
2764
+ forms: [
2765
+ [["i", "iv", "V7", "i"], 0.5],
2766
+ [["I", "VI7", "ii", "V7"], 0.5],
2767
+ ],
2768
+ rhythm: [[1, 1]],
2769
+ },
2770
+ rhythm: {
2771
+ onsets: {
2772
+ bell: null,
2773
+ kick: null,
2774
+ perc: grid("x...x.x.x..."),
2775
+ chords: grid("....x...x..."),
2776
+ },
2777
+ },
2778
+ bass: {
2779
+ behaviour: [
2780
+ ["arpeggio", 0.5],
2781
+ ["root-fifth", 0.5],
2782
+ ],
2783
+ onsets: grid("x.......x.x."),
2784
+ },
2785
+ texture: {
2786
+ roles: {
2787
+ bell: null,
2788
+ kick: null,
2789
+ snare: null,
2790
+ hat: null,
2791
+ perc: role("drums"),
2792
+ chords: role("nylon"),
2793
+ bass: role("nylon"),
2794
+ lead: role("sing"),
2795
+ },
2796
+ },
2797
+ }),
2798
+ card({
2799
+ id: "afro-peruvian",
2800
+ summary:
2801
+ "Afro-Peruvian festejo and lando: 12/8 cajon patterns, quijada jawbone and cajita, minor with call and response",
2802
+ meter: { signatures: [["12/8", 1]] },
2803
+ tempo: { bpm: [90, 125], typical: 106 },
2804
+ groove: { subdivision: 2 },
2805
+ pitch: {
2806
+ scales: [
2807
+ ["minor", 0.6],
2808
+ ["dorian", 0.4],
2809
+ ],
2810
+ },
2811
+ harmony: {
2812
+ presets: null,
2813
+ forms: [
2814
+ [["i", "iv", "V7", "i"], 0.5],
2815
+ [["i", "VII", "VI", "V7"], 0.5],
2816
+ ],
2817
+ rhythm: [[1, 1]],
2818
+ },
2819
+ rhythm: {
2820
+ onsets: {
2821
+ bell: tl("bembe12"),
2822
+ kick: null,
2823
+ perc: grid("x..x.xx..x.x"),
2824
+ chords: grid("x..x..x..x.."),
2825
+ },
2826
+ },
2827
+ bass: { onsets: grid("x.....x.....") },
2828
+ texture: {
2829
+ roles: {
2830
+ bell: role("bell"),
2831
+ kick: null,
2832
+ snare: null,
2833
+ hat: null,
2834
+ perc: role("drums"),
2835
+ chords: role("nylon"),
2836
+ bass: role("ebass"),
2837
+ lead: role("sing"),
2838
+ },
2839
+ },
2840
+ }),
2841
+ card({
2842
+ id: "saya",
2843
+ summary:
2844
+ "saya and caporales: Afro-Bolivian saya call and response; caporales brass band with heavy bombo on every beat, minor pentatonic",
2845
+ tempo: { bpm: [100, 130], typical: 114 },
2846
+ harmony: {
2847
+ presets: null,
2848
+ forms: [
2849
+ [["i", "VII", "III", "i"], 0.5],
2850
+ [["i", "iv", "V7", "i"], 0.5],
2851
+ ],
2852
+ rhythm: [[1, 1]],
2853
+ },
2854
+ rhythm: {
2855
+ onsets: {
2856
+ bell: grid("x.x.x.x.x.x.x.x."),
2857
+ kick: grid("x...x...x...x..."),
2858
+ snare: grid("..x...x...x...xx"),
2859
+ perc: null,
2860
+ },
2861
+ },
2862
+ texture: {
2863
+ roles: {
2864
+ snare: role("drums"),
2865
+ perc: null,
2866
+ kick: role("drums"),
2867
+ bell: maybe("bell"),
2868
+ chords: role("trombone", "horn:0.5"),
2869
+ bass: role("tuba"),
2870
+ lead: role("trumpet", "sing:0.5"),
2871
+ },
2872
+ },
2873
+ }),
2874
+
2875
+ // --- Southern Cone. References: Ricardo Salton and others on tango
2876
+ // rhythm; Ruben Pérez Bugallo, "Folklore musical argentino" (1996).
2877
+ card({
2878
+ id: "southern-cone",
2879
+ abstract: true,
2880
+ summary: "tango and milonga: 3+3+2, harmonic minor, bandoneon marcato",
2881
+ pitch: {
2882
+ scales: [
2883
+ ["harmonic-minor", 0.6],
2884
+ ["minor", 0.4],
2885
+ ],
2886
+ },
2887
+ meter: { grouping: [[[3, 3, 2], 1]] },
2888
+ rhythm: { onsets: { chords: tl("tresillo") } },
2889
+ harmony: {
2890
+ presets: [
2891
+ ["andalusian", 0.5],
2892
+ ["minor-ii-v", 0.5],
2893
+ ],
2894
+ },
2895
+ texture: {
2896
+ roles: {
2897
+ bell: null,
2898
+ perc: null,
2899
+ kick: null,
2900
+ chords: role("piano"),
2901
+ lead: role("violin", "clarinet:0.3"),
2902
+ },
2903
+ },
2904
+ }),
2905
+ card({
2906
+ id: "tango",
2907
+ summary:
2908
+ "tango: marcato in four (every beat accented) alternating with the 3+3+2 sincopa, bandoneon and violins, harmonic minor i-iv-V7, arrastre",
2909
+ meter: { grouping: null },
2910
+ tempo: { bpm: [100, 128], typical: 116 },
2911
+ harmony: {
2912
+ presets: null,
2913
+ forms: [
2914
+ [["i", "iv", "V7", "i"], 0.5],
2915
+ [["i", "V7", "V7", "i"], 0.25],
2916
+ [["iv", "i", "V7", "i"], 0.25],
2917
+ ],
2918
+ rhythm: [[1, 1]],
2919
+ },
2920
+ rhythm: { onsets: { chords: grid("x...x...x...x...") } },
2921
+ bass: { behaviour: [["root-fifth", 1]], onsets: grid("x...x...x...x...") },
2922
+ texture: {
2923
+ roles: {
2924
+ chords: role("reeds", "piano:0.6"),
2925
+ bass: role("doublebass"),
2926
+ lead: role("reeds", "violin:0.7"),
2927
+ },
2928
+ },
2929
+ expression: { dynamics: [0.35, 1] },
2930
+ }),
2931
+ card({
2932
+ id: "milonga",
2933
+ summary:
2934
+ "milonga: habanera-derived 3+3+2 in 2/4, guitar or bandoneon on the tresillo, quick major and minor I-V7",
2935
+ tempo: { bpm: [100, 140], typical: 120 },
2936
+ pitch: {
2937
+ scales: [
2938
+ ["major", 0.5],
2939
+ ["harmonic-minor", 0.5],
2940
+ ],
2941
+ },
2942
+ harmony: {
2943
+ presets: null,
2944
+ forms: [
2945
+ [["I", "V7", "V7", "I"], 0.5],
2946
+ [["i", "V7", "V7", "i"], 0.5],
2947
+ ],
2948
+ rhythm: [[1, 1]],
2949
+ },
2950
+ bass: { onsets: tl("tresillo") },
2951
+ texture: {
2952
+ roles: {
2953
+ chords: role("nylon", "reeds:0.5"),
2954
+ bass: role("doublebass"),
2955
+ lead: role("reeds", "sing:0.5"),
2956
+ },
2957
+ },
2958
+ }),
2959
+ card({
2960
+ id: "nuevo-tango",
2961
+ summary:
2962
+ "nuevo tango: 3+3+2 ostinatos, fugal counterpoint between bandoneon and violin, extended and chromatic harmony, jazz-like sevenths",
2963
+ tempo: { bpm: [110, 150], typical: 128 },
2964
+ harmony: {
2965
+ presets: [
2966
+ ["minor-ii-v", 0.6],
2967
+ ["andalusian", 0.4],
2968
+ ],
2969
+ sevenths: 0.7,
2970
+ rhythm: [
2971
+ [1, 0.5],
2972
+ [0.5, 0.5],
2973
+ ],
2974
+ },
2975
+ bass: { behaviour: [["ostinato", 1]], onsets: tl("tresillo") },
2976
+ melody: { intervals: LEAPY, density: [2, 3] },
2977
+ texture: {
2978
+ kind: "polyphonic",
2979
+ roles: {
2980
+ chords: role("piano"),
2981
+ bass: role("doublebass"),
2982
+ lead: role("reeds"),
2983
+ counter: role("violin", "cello:0.5"),
2984
+ },
2985
+ },
2986
+ }),
2987
+ card({
2988
+ id: "electrotango",
2989
+ summary:
2990
+ "electrotango: tango harmonic minor over a four-on-the-floor kick and off-beat hats, bandoneon hooks, synth pad",
2991
+ tempo: { bpm: [110, 126], typical: 118 },
2992
+ meter: { grouping: null },
2993
+ rhythm: {
2994
+ onsets: {
2995
+ kick: tl("fourFloor"),
2996
+ hat: tl("offbeats"),
2997
+ snare: grid("....x.......x..."),
2998
+ pad: grid("x..............."),
2999
+ },
3000
+ },
3001
+ bass: { behaviour: [["root", 1]], onsets: tl("tresillo") },
3002
+ texture: {
3003
+ roles: {
3004
+ kick: { required: true, voices: [kit("syn909")] },
3005
+ hat: { required: false, voices: [kit("syn909")] },
3006
+ snare: { required: true, voices: [kit("syn909")] },
3007
+ pad: maybe("saw"),
3008
+ chords: role("piano"),
3009
+ bass: role("bass"),
3010
+ lead: role("reeds"),
3011
+ },
3012
+ },
3013
+ }),
3014
+ card({
3015
+ id: "chacarera",
3016
+ summary:
3017
+ "chacarera and zamba: 6/8 against 3/4 alternation, bombo legüero on the dotted beats with rim answers, guitar strum, major and minor",
3018
+ meter: { signatures: [["6/8", 1]], grouping: null },
3019
+ tempo: { bpm: [90, 115], typical: 100 },
3020
+ pitch: {
3021
+ scales: [
3022
+ ["minor", 0.5],
3023
+ ["major", 0.5],
3024
+ ],
3025
+ },
3026
+ harmony: {
3027
+ presets: null,
3028
+ forms: [
3029
+ [["i", "iv", "V7", "i"], 0.5],
3030
+ [["I", "IV", "V7", "I"], 0.5],
3031
+ ],
3032
+ rhythm: [[1, 1]],
3033
+ },
3034
+ rhythm: {
3035
+ onsets: {
3036
+ kick: tl("sixEight12"),
3037
+ rim: grid("..x.x...x.x."),
3038
+ chords: tl("threeFour12"),
3039
+ },
3040
+ },
3041
+ bass: { onsets: tl("sixEight12") },
3042
+ texture: {
3043
+ roles: {
3044
+ kick: role("drums"),
3045
+ rim: role("drums"),
3046
+ snare: null,
3047
+ hat: null,
3048
+ chords: role("acoustic"),
3049
+ bass: role("acoustic"),
3050
+ lead: role("sing", "violin:0.5"),
3051
+ },
3052
+ },
3053
+ }),
3054
+ card({
3055
+ id: "chamame",
3056
+ summary:
3057
+ "chamame: Litoral accordion and guitar in ternary 6/8 with 3/4 superimposed, melody doubled in parallel thirds, major",
3058
+ meter: { signatures: [["6/8", 1]], grouping: null },
3059
+ tempo: { bpm: [95, 125], typical: 108 },
3060
+ pitch: {
3061
+ scales: [
3062
+ ["major", 0.7],
3063
+ ["minor", 0.3],
3064
+ ],
3065
+ },
3066
+ harmony: {
3067
+ presets: null,
3068
+ forms: [
3069
+ [["I", "IV", "V7", "I"], 0.6],
3070
+ [["I", "V7"], 0.4],
3071
+ ],
3072
+ rhythm: [[1, 1]],
3073
+ },
3074
+ rhythm: { onsets: { chords: grid("x.x.x.x.x.x.") } },
3075
+ bass: { onsets: tl("threeFour12") },
3076
+ texture: {
3077
+ roles: {
3078
+ chords: role("acoustic"),
3079
+ bass: role("acoustic"),
3080
+ lead: role("reeds"),
3081
+ counter: maybe("reeds"),
3082
+ },
3083
+ },
3084
+ }),
3085
+ card({
3086
+ id: "guarania",
3087
+ summary:
3088
+ "guarania and polca paraguaya: slow 3/4 guarania with Paraguayan harp arpeggios, minor and plaintive; polca adds 6/8 hemiola",
3089
+ meter: { signatures: [["3/4", 1]], grouping: null },
3090
+ tempo: { bpm: [60, 90], typical: 74 },
3091
+ pitch: {
3092
+ scales: [
3093
+ ["minor", 0.6],
3094
+ ["major", 0.4],
3095
+ ],
3096
+ },
3097
+ harmony: {
3098
+ presets: null,
3099
+ forms: [
3100
+ [["i", "iv", "V7", "i"], 0.6],
3101
+ [["i", "VI", "V7", "i"], 0.4],
3102
+ ],
3103
+ rhythm: [[1, 1]],
3104
+ },
3105
+ rhythm: { onsets: { chords: grid("x.x.x.x.x.x.") } },
3106
+ bass: { onsets: grid("x.......x...") },
3107
+ texture: {
3108
+ roles: {
3109
+ chords: role("harp"),
3110
+ bass: role("acoustic"),
3111
+ lead: role("sing", "harp:0.5"),
3112
+ },
3113
+ },
3114
+ expression: { dynamics: [0.3, 0.7] },
3115
+ }),
3116
+ card({
3117
+ id: "candombe",
3118
+ summary:
3119
+ "candombe: Montevideo drum line, chico on a fixed 16th cell, repique, piano drum bass, sticks on the shell playing the 3-2 madera clave",
3120
+ tempo: { bpm: [100, 130], typical: 114 },
3121
+ meter: { grouping: null },
3122
+ pitch: {
3123
+ scales: [
3124
+ ["minor", 0.5],
3125
+ ["major", 0.5],
3126
+ ],
3127
+ },
3128
+ harmony: { model: "modal", presets: null, rhythm: [[2, 1]] },
3129
+ rhythm: {
3130
+ onsets: {
3131
+ bell: tl("sonClave32"),
3132
+ perc: grid(".xx..xx..xx..xx."),
3133
+ kick: grid("x.....x.x.....x."),
3134
+ chords: null,
3135
+ },
3136
+ },
3137
+ bass: { behaviour: [["pedal", 1]], onsets: grid("x.....x.x.....x.") },
3138
+ melody: { intervals: CHANT, repetition: 0.6 },
3139
+ texture: {
3140
+ kind: "interlocking",
3141
+ roles: {
3142
+ bell: role("bell"),
3143
+ perc: role("framedrum"),
3144
+ kick: role("drums"),
3145
+ chords: null,
3146
+ bass: role("timpani"),
3147
+ lead: role("sing", "choir:0.4"),
3148
+ },
3149
+ },
3150
+ }),
3151
+ card({
3152
+ id: "murga",
3153
+ summary:
3154
+ "murga: Uruguayan carnival chorus over bombo, platillo and redoblante in a marcha camion, choral lead, major",
3155
+ tempo: { bpm: [100, 130], typical: 116 },
3156
+ meter: { grouping: null },
3157
+ pitch: {
3158
+ scales: [
3159
+ ["major", 0.7],
3160
+ ["minor", 0.3],
3161
+ ],
3162
+ },
3163
+ harmony: {
3164
+ presets: [
3165
+ ["fifties", 0.5],
3166
+ ["axis", 0.5],
3167
+ ],
3168
+ rhythm: [[1, 1]],
3169
+ },
3170
+ rhythm: {
3171
+ onsets: {
3172
+ kick: grid("x.....x.x......."),
3173
+ snare: grid("..x.x.x...x.x.xx"),
3174
+ hat: grid("....x.......x..."),
3175
+ },
3176
+ },
3177
+ texture: {
3178
+ kind: "homophonic",
3179
+ roles: {
3180
+ kick: role("drums"),
3181
+ snare: role("drums"),
3182
+ hat: role("drums"),
3183
+ chords: role("acoustic"),
3184
+ lead: role("choir"),
3185
+ },
3186
+ },
3187
+ }),
3188
+ card({
3189
+ id: "cueca",
3190
+ summary:
3191
+ "cueca and tonada: Chilean 6/8 sesquialtera with handclaps on the dotted beats, guitar, harp and accordion; tonada slower and strophic",
3192
+ meter: { signatures: [["6/8", 1]], grouping: null },
3193
+ tempo: { bpm: [120, 160], typical: 138 },
3194
+ pitch: {
3195
+ scales: [
3196
+ ["major", 0.7],
3197
+ ["minor", 0.3],
3198
+ ],
3199
+ },
3200
+ harmony: {
3201
+ presets: null,
3202
+ forms: [
3203
+ [["I", "IV", "V7", "I"], 0.6],
3204
+ [["I", "V7"], 0.4],
3205
+ ],
3206
+ rhythm: [[1, 1]],
3207
+ },
3208
+ rhythm: {
3209
+ onsets: {
3210
+ clap: tl("sixEight12"),
3211
+ chords: tl("threeFour12"),
3212
+ },
3213
+ },
3214
+ bass: { onsets: tl("sixEight12") },
3215
+ texture: {
3216
+ roles: {
3217
+ clap: role("drums"),
3218
+ chords: role("acoustic", "harp:0.4"),
3219
+ bass: role("acoustic"),
3220
+ lead: role("sing", "reeds:0.4"),
3221
+ },
3222
+ },
3223
+ }),
3224
+ card({
3225
+ id: "nueva-cancion",
3226
+ summary:
3227
+ "nueva cancion: protest song, guitar, charango and quena, Andean pentatonic color on folk forms, strophic verses, minor",
3228
+ tempo: { bpm: [80, 112], typical: 94 },
3229
+ meter: { grouping: null },
3230
+ pitch: {
3231
+ scales: [
3232
+ ["minor", 0.6],
3233
+ ["minor-pentatonic", 0.4],
3234
+ ],
3235
+ },
3236
+ harmony: {
3237
+ presets: [
3238
+ ["aeolian", 0.5],
3239
+ ["andalusian", 0.5],
3240
+ ],
3241
+ rhythm: [[1, 1]],
3242
+ },
3243
+ rhythm: {
3244
+ onsets: {
3245
+ kick: grid("x.......x......."),
3246
+ chords: grid("x.xxx.xxx.xxx.xx"),
3247
+ },
3248
+ },
3249
+ form: {
3250
+ plans: [[["intro", "verse", "chorus", "verse", "chorus", "outro"], 1]],
3251
+ },
3252
+ texture: {
3253
+ roles: {
3254
+ kick: maybe("drums"),
3255
+ chords: role("nylon", "tres:0.5"),
3256
+ bass: role("nylon"),
3257
+ lead: role("sing", "flute:0.4"),
3258
+ },
3259
+ },
3260
+ }),
3261
+
3262
+ // --- Brazil. References: Sandroni (2001); Chris McGowan and Ricardo
3263
+ // Pessanha, "The Brazilian Sound" (2009).
3264
+ card({
3265
+ id: "brazil",
3266
+ abstract: true,
3267
+ summary:
3268
+ "Brazilian: samba 2/4 surdo on two, partido-alto syncopation, bossa harmony",
3269
+ groove: { swingRatio: [1, 1.15] },
3270
+ rhythm: {
3271
+ onsets: {
3272
+ kick: grid("....x.......x..."),
3273
+ perc: grid("x.xx.x.x..xx.x.x"),
3274
+ shaker: grid("xxxxxxxxxxxxxxxx"),
3275
+ },
3276
+ },
3277
+ harmony: { sevenths: 0.7 },
3278
+ texture: {
3279
+ roles: {
3280
+ bell: null,
3281
+ shaker: maybe("drums"),
3282
+ chords: role("nylon", "piano:0.4"),
3283
+ lead: role("flute", "sing:0.6"),
3284
+ },
3285
+ },
3286
+ }),
3287
+ card({
3288
+ id: "samba",
3289
+ summary:
3290
+ "samba: 2/4 with surdo accent on two, tamborim teleco-teco on the partido alto, pandeiro sixteenths, cavaquinho comp, major ii-V and secondary dominants",
3291
+ tempo: { bpm: [92, 130], typical: 104 },
3292
+ pitch: {
3293
+ scales: [
3294
+ ["major", 0.7],
3295
+ ["minor", 0.3],
3296
+ ],
3297
+ },
3298
+ harmony: {
3299
+ presets: null,
3300
+ forms: [
3301
+ [["I", "VI7", "ii7", "V7"], 0.5],
3302
+ [["ii7", "V7", "I", "I"], 0.5],
3303
+ ],
3304
+ },
3305
+ rhythm: {
3306
+ onsets: {
3307
+ bell: tl("partidoAlto"),
3308
+ chords: tl("partidoAlto"),
3309
+ },
3310
+ },
3311
+ bass: { onsets: grid("x...x...x...x...") },
3312
+ texture: {
3313
+ roles: {
3314
+ bell: role("bell"),
3315
+ chords: role("requinto", "nylon:0.6"),
3316
+ bass: role("nylon"),
3317
+ lead: role("sing"),
3318
+ },
3319
+ },
3320
+ }),
3321
+ card({
3322
+ id: "pagode",
3323
+ summary:
3324
+ "pagode: backyard samba with banjo and tanta, repique de mao, relaxed tempo, romantic ii-V-I harmony with major sevenths",
3325
+ tempo: { bpm: [84, 104], typical: 94 },
3326
+ pitch: {
3327
+ scales: [
3328
+ ["major", 0.8],
3329
+ ["minor", 0.2],
3330
+ ],
3331
+ },
3332
+ harmony: {
3333
+ presets: [
3334
+ ["ii-v-i", 0.6],
3335
+ ["turnaround", 0.4],
3336
+ ],
3337
+ sevenths: 0.8,
3338
+ },
3339
+ rhythm: {
3340
+ onsets: { chords: tl("partidoAlto"), perc: grid("x.xxx.x.x.xxx.x.") },
3341
+ },
3342
+ texture: {
3343
+ roles: {
3344
+ chords: role("banjo", "requinto:0.5"),
3345
+ bass: role("ebass"),
3346
+ lead: role("sing"),
3347
+ },
3348
+ },
3349
+ }),
3350
+ card({
3351
+ id: "choro",
3352
+ summary:
3353
+ "choro: instrumental rondo, flute or bandolim in running sixteenths, seven-string guitar baixaria counter-lines, chromatic secondary dominants",
3354
+ tempo: { bpm: [80, 120], typical: 100 },
3355
+ groove: { swingRatio: [1, 1.1] },
3356
+ pitch: {
3357
+ scales: [
3358
+ ["major", 0.6],
3359
+ ["harmonic-minor", 0.4],
3360
+ ],
3361
+ },
3362
+ harmony: {
3363
+ forms: [
3364
+ [["I", "III7", "vi", "II7", "ii", "V7", "I", "I"], 0.5],
3365
+ [["i", "V7", "V7", "i", "IV7", "iv", "V7", "i"], 0.5],
3366
+ ],
3367
+ sevenths: 0.5,
3368
+ },
3369
+ rhythm: { onsets: { kick: null, chords: grid("x.xx.x.xx.xx.x.x") } },
3370
+ bass: {
3371
+ behaviour: [["walking", 1]],
3372
+ walk: { chordToneOnOne: 0.9, chromaticApproach: 0.4 },
3373
+ },
3374
+ melody: {
3375
+ intervals: LEAPY,
3376
+ density: [3, 4],
3377
+ phraseBars: [
3378
+ [4, 0.6],
3379
+ [8, 0.4],
3380
+ ],
3381
+ },
3382
+ form: {
3383
+ plans: [[["verse", "verse", "chorus", "verse", "bridge", "verse"], 1]],
3384
+ archetype: "rondo",
3385
+ },
3386
+ texture: {
3387
+ kind: "polyphonic",
3388
+ roles: {
3389
+ kick: null,
3390
+ chords: role("requinto", "nylon:0.5"),
3391
+ bass: role("nylon"),
3392
+ lead: role("flute", "clarinet:0.4"),
3393
+ counter: maybe("nylon"),
3394
+ },
3395
+ },
3396
+ }),
3397
+ card({
3398
+ id: "bossa-nova",
3399
+ summary:
3400
+ "bossa nova: violao thumb on the beats against the bossa clave (son clave with its last stroke on 13), ii-V-I with tritone substitution, maj7 and 9 chords, soft voice",
3401
+ tempo: { bpm: [56, 80], typical: 68 },
3402
+ groove: { swingRatio: [1, 1.05] },
3403
+ pitch: {
3404
+ scales: [
3405
+ ["major", 0.6],
3406
+ ["dorian", 0.2],
3407
+ ["minor", 0.2],
3408
+ ],
3409
+ },
3410
+ harmony: {
3411
+ presets: null,
3412
+ forms: [
3413
+ [["Imaj7", "bII7", "ii7", "V7"], 0.3],
3414
+ [["ii7", "V7", "Imaj7", "Imaj7"], 0.3],
3415
+ [["Imaj7", "VI7", "ii7", "bII7"], 0.2],
3416
+ [["i", "iv", "bVII7", "bIIImaj7"], 0.2],
3417
+ ],
3418
+ sevenths: 0.95,
3419
+ voicing: {
3420
+ types: [
3421
+ ["shell", 0.5],
3422
+ ["close", 0.5],
3423
+ ],
3424
+ range: [50, 72],
3425
+ notes: [3, 4],
3426
+ },
3427
+ },
3428
+ rhythm: {
3429
+ onsets: {
3430
+ kick: null,
3431
+ bell: tl("bossaClave"),
3432
+ perc: null,
3433
+ shaker: grid("x.x.x.x.x.x.x.x."),
3434
+ chords: tl("bossaClave"),
3435
+ },
3436
+ },
3437
+ bass: { onsets: grid("x.....x.x.....x.") },
3438
+ texture: {
3439
+ roles: {
3440
+ kick: null,
3441
+ perc: null,
3442
+ bell: maybe("bell"),
3443
+ chords: role("nylon"),
3444
+ bass: role("nylon", "doublebass:0.5"),
3445
+ lead: role("sing", "flute:0.4"),
3446
+ },
3447
+ },
3448
+ expression: { dynamics: [0.25, 0.6] },
3449
+ }),
3450
+ card({
3451
+ id: "mpb",
3452
+ summary:
3453
+ "MPB: post-bossa song, samba and baiao rhythms under pop forms, rich sevenths and modal interchange, verse-chorus",
3454
+ tempo: { bpm: [80, 115], typical: 96 },
3455
+ pitch: {
3456
+ scales: [
3457
+ ["major", 0.5],
3458
+ ["mixolydian", 0.25],
3459
+ ["dorian", 0.25],
3460
+ ],
3461
+ },
3462
+ harmony: {
3463
+ presets: [
3464
+ ["ii-v-i", 0.4],
3465
+ ["axis", 0.3],
3466
+ ["mixolydian-rock", 0.3],
3467
+ ],
3468
+ sevenths: 0.7,
3469
+ },
3470
+ rhythm: {
3471
+ onsets: {
3472
+ kick: grid("x.......x..x...."),
3473
+ snare: grid("....x.......x..."),
3474
+ chords: tl("partidoAlto"),
3475
+ },
3476
+ },
3477
+ texture: {
3478
+ roles: {
3479
+ snare: role("drums"),
3480
+ chords: role("nylon", "epiano:0.5"),
3481
+ bass: role("ebass"),
3482
+ lead: role("sing"),
3483
+ },
3484
+ },
3485
+ }),
3486
+ card({
3487
+ id: "tropicalia",
3488
+ summary:
3489
+ "tropicalia: psychedelic rock meets samba and baiao, straight rock kit with eighth hats, fuzz guitar and organ, mixolydian I-bVII and modal collage",
3490
+ tempo: { bpm: [95, 130], typical: 112 },
3491
+ pitch: { scales: [["mixolydian", 1]] },
3492
+ harmony: {
3493
+ presets: [
3494
+ ["mixolydian-rock", 0.6],
3495
+ ["fifties", 0.4],
3496
+ ],
3497
+ sevenths: 0.3,
3498
+ },
3499
+ rhythm: {
3500
+ onsets: {
3501
+ kick: grid("x.....x.x......."),
3502
+ snare: grid("....x.......x..."),
3503
+ hat: grid("x.x.x.x.x.x.x.x."),
3504
+ perc: null,
3505
+ },
3506
+ },
3507
+ texture: {
3508
+ roles: {
3509
+ snare: role("drums"),
3510
+ hat: role("drums"),
3511
+ perc: null,
3512
+ chords: role("electric@crunch", "organ:0.5"),
3513
+ bass: role("ebass"),
3514
+ lead: role("sing", "electric@crunch:0.4"),
3515
+ },
3516
+ },
3517
+ }),
3518
+ card({
3519
+ id: "forro",
3520
+ summary:
3521
+ "forro and baiao: zabumba bass on one and the and of two, triangle on the off-beats, accordion in mixolydian with raised fourth (lydian dominant color)",
3522
+ tempo: { bpm: [100, 140], typical: 118 },
3523
+ pitch: {
3524
+ scales: [
3525
+ ["mixolydian", 0.7],
3526
+ ["major", 0.3],
3527
+ ],
3528
+ },
3529
+ harmony: {
3530
+ presets: null,
3531
+ forms: [
3532
+ [["I", "bVII", "IV", "I"], 0.5],
3533
+ [["I", "IV", "V7", "I"], 0.5],
3534
+ ],
3535
+ rhythm: [[1, 1]],
3536
+ },
3537
+ rhythm: {
3538
+ onsets: {
3539
+ kick: grid("x.....x.x.....x."),
3540
+ perc: grid("..x...x...x...x."),
3541
+ shaker: tl("offbeats"),
3542
+ chords: grid("x.xx.xx.x.xx.xx."),
3543
+ },
3544
+ },
3545
+ bass: { onsets: grid("x.....x.x.....x.") },
3546
+ texture: {
3547
+ roles: {
3548
+ kick: role("drums"),
3549
+ perc: role("framedrum"),
3550
+ shaker: role("bell"),
3551
+ chords: role("reeds"),
3552
+ bass: role("ebass"),
3553
+ lead: role("reeds", "sing:0.6"),
3554
+ },
3555
+ },
3556
+ }),
3557
+ card({
3558
+ id: "frevo",
3559
+ summary:
3560
+ "frevo and maracatu: Recife carnival march at speed, brass and saxes in counterpoint, snare drive; maracatu alfaia and gongue bells",
3561
+ tempo: { bpm: [130, 170], typical: 150 },
3562
+ pitch: {
3563
+ scales: [
3564
+ ["major", 0.7],
3565
+ ["minor", 0.3],
3566
+ ],
3567
+ },
3568
+ harmony: {
3569
+ presets: [
3570
+ ["turnaround", 0.5],
3571
+ ["fifties", 0.5],
3572
+ ],
3573
+ sevenths: 0.4,
3574
+ },
3575
+ rhythm: {
3576
+ onsets: {
3577
+ kick: grid("x...x...x...x..."),
3578
+ snare: grid("x.xxx.xxx.xxx.xx"),
3579
+ bell: grid("x..x..x.x.x.x..."),
3580
+ },
3581
+ },
3582
+ melody: { intervals: LEAPY, density: [2, 4] },
3583
+ texture: {
3584
+ kind: "polyphonic",
3585
+ roles: {
3586
+ snare: role("drums"),
3587
+ bell: maybe("bell"),
3588
+ chords: role("trombone", "horn:0.5"),
3589
+ bass: role("tuba", "bass:0.5"),
3590
+ lead: role("trumpet", "altosax:0.6"),
3591
+ counter: role("tenorsax", "trombone:0.6"),
3592
+ },
3593
+ },
3594
+ }),
3595
+ card({
3596
+ id: "axe",
3597
+ summary:
3598
+ "axe and samba-reggae: Salvador bloco surdos in a reggae-like interlock, timbau slaps, carnival pop hooks in major",
3599
+ tempo: { bpm: [100, 130], typical: 116 },
3600
+ pitch: {
3601
+ scales: [
3602
+ ["major", 0.8],
3603
+ ["mixolydian", 0.2],
3604
+ ],
3605
+ },
3606
+ harmony: {
3607
+ presets: [
3608
+ ["axis", 0.5],
3609
+ ["fifties", 0.5],
3610
+ ],
3611
+ },
3612
+ rhythm: {
3613
+ onsets: {
3614
+ kick: grid("x.....x...x....."),
3615
+ snare: grid("....x..x....x..x"),
3616
+ perc: grid("..x.x..x..x.x..x"),
3617
+ },
3618
+ },
3619
+ texture: {
3620
+ kind: "interlocking",
3621
+ roles: {
3622
+ snare: role("drums"),
3623
+ chords: role("electric", "square:0.4"),
3624
+ bass: role("ebass"),
3625
+ lead: role("sing"),
3626
+ },
3627
+ },
3628
+ }),
3629
+ card({
3630
+ id: "carimbo",
3631
+ summary:
3632
+ "carimbo and lambada: Para curimbo drums, maracas, banjo and sax in a swaying 2/4; lambada adds guitarrada and synths",
3633
+ tempo: { bpm: [110, 140], typical: 122 },
3634
+ pitch: {
3635
+ scales: [
3636
+ ["major", 0.5],
3637
+ ["minor", 0.5],
3638
+ ],
3639
+ },
3640
+ harmony: {
3641
+ presets: null,
3642
+ forms: [
3643
+ [["i", "iv", "V7", "i"], 0.5],
3644
+ [["I", "V7"], 0.5],
3645
+ ],
3646
+ rhythm: [[1, 1]],
3647
+ },
3648
+ rhythm: {
3649
+ onsets: {
3650
+ kick: grid("x..x..x.x..x..x."),
3651
+ perc: grid("..x...xx..x...xx"),
3652
+ shaker: grid("x.x.x.x.x.x.x.x."),
3653
+ },
3654
+ },
3655
+ texture: {
3656
+ roles: {
3657
+ kick: role("drums"),
3658
+ perc: role("framedrum"),
3659
+ shaker: role("drums"),
3660
+ chords: role("banjo", "electric:0.5"),
3661
+ bass: role("ebass"),
3662
+ lead: role("sax", "sing:0.6"),
3663
+ },
3664
+ },
3665
+ }),
3666
+ card({
3667
+ id: "sertanejo",
3668
+ summary:
3669
+ "sertanejo and caipira: viola caipira strum, duo singing in parallel thirds, I-IV-V7 country harmony, guarania and toada lilts",
3670
+ tempo: { bpm: [80, 120], typical: 96 },
3671
+ pitch: {
3672
+ scales: [
3673
+ ["major", 0.9],
3674
+ ["minor", 0.1],
3675
+ ],
3676
+ },
3677
+ harmony: {
3678
+ presets: [
3679
+ ["fifties", 0.4],
3680
+ ["axis", 0.6],
3681
+ ],
3682
+ sevenths: 0.2,
3683
+ },
3684
+ rhythm: {
3685
+ onsets: {
3686
+ kick: grid("x.......x......."),
3687
+ snare: grid("....x.......x..."),
3688
+ perc: null,
3689
+ chords: grid("x.x.x.x.x.x.x.x."),
3690
+ },
3691
+ },
3692
+ texture: {
3693
+ roles: {
3694
+ snare: role("drums"),
3695
+ perc: null,
3696
+ chords: role("steel"),
3697
+ bass: role("ebass"),
3698
+ lead: role("sing"),
3699
+ counter: role("sing"),
3700
+ },
3701
+ },
3702
+ }),
3703
+ card({
3704
+ id: "brega",
3705
+ summary:
3706
+ "brega and tecnobrega: sentimental Para pop over drum machines, four-on-the-floor kick, keyboard leads, minor ballad changes",
3707
+ tempo: { bpm: [120, 150], typical: 132 },
3708
+ pitch: {
3709
+ scales: [
3710
+ ["minor", 0.6],
3711
+ ["major", 0.4],
3712
+ ],
3713
+ },
3714
+ harmony: {
3715
+ presets: [
3716
+ ["sad-pop", 0.6],
3717
+ ["axis", 0.4],
3718
+ ],
3719
+ sevenths: 0.2,
3720
+ },
3721
+ rhythm: {
3722
+ onsets: {
3723
+ kick: tl("fourFloor"),
3724
+ snare: grid("....x.......x..."),
3725
+ hat: tl("offbeats"),
3726
+ perc: null,
3727
+ },
3728
+ },
3729
+ texture: {
3730
+ roles: {
3731
+ kick: { required: true, voices: [kit("electro")] },
3732
+ snare: { required: true, voices: [kit("electro")] },
3733
+ hat: { required: false, voices: [kit("electro")] },
3734
+ perc: null,
3735
+ chords: role("square"),
3736
+ bass: role("bass"),
3737
+ lead: role("sing", "saw:0.5"),
3738
+ },
3739
+ },
3740
+ }),
3741
+ card({
3742
+ id: "baile-funk",
3743
+ summary:
3744
+ "baile funk: the tamborzao (3+3+2 kick with syncopated hand-drum hits) from the Miami-bass 808, one-chord minor chant",
3745
+ tempo: { bpm: [125, 150], typical: 130 },
3746
+ pitch: {
3747
+ scales: [
3748
+ ["minor", 0.6],
3749
+ ["phrygian", 0.4],
3750
+ ],
3751
+ },
3752
+ harmony: { model: "modal", presets: null, rhythm: [[4, 1]] },
3753
+ rhythm: {
3754
+ onsets: {
3755
+ kick: tl("tresillo"),
3756
+ snare: grid("....x..x....x..."),
3757
+ perc: grid("...x..x....x.x.."),
3758
+ shaker: null,
3759
+ },
3760
+ },
3761
+ bass: { behaviour: [["root", 1]], onsets: tl("tresillo"), kickLock: 0.9 },
3762
+ melody: { intervals: CHANT, ambitus: [3, 7], repetition: 0.8 },
3763
+ texture: {
3764
+ roles: {
3765
+ kick: { required: true, voices: [kit("syn808")] },
3766
+ snare: { required: true, voices: [kit("syn808")] },
3767
+ perc: role("drums"),
3768
+ shaker: null,
3769
+ chords: maybe("square"),
3770
+ bass: role("bass"),
3771
+ lead: role("sing"),
3772
+ },
3773
+ },
3774
+ mix: { loudness: "loud" },
3775
+ }),
3776
+ card({
3777
+ id: "capoeira",
3778
+ summary:
3779
+ "capoeira: berimbau ostinato (low, high and buzz tones), pandeiro and atabaque, ladainha then call-and-response corridos, drone",
3780
+ tempo: { bpm: [80, 130], typical: 100 },
3781
+ pitch: {
3782
+ scales: [
3783
+ ["mixolydian", 0.5],
3784
+ ["major", 0.5],
3785
+ ],
3786
+ },
3787
+ harmony: { model: "drone", presets: null, forms: null },
3788
+ rhythm: {
3789
+ onsets: {
3790
+ kick: null,
3791
+ perc: grid("x.x...x.x.x...x."),
3792
+ shaker: grid("x.xxx.xxx.xxx.xx"),
3793
+ chords: null,
3794
+ },
3795
+ },
3796
+ bass: { behaviour: [["ostinato", 1]], onsets: grid("x.x...x.......x.") },
3797
+ melody: { intervals: CHANT, ambitus: [5, 9], repetition: 0.7 },
3798
+ texture: {
3799
+ kind: "monophonic",
3800
+ roles: {
3801
+ kick: null,
3802
+ perc: role("framedrum"),
3803
+ shaker: role("drums"),
3804
+ chords: null,
3805
+ bass: role("pluck"),
3806
+ lead: role("sing", "choir:0.5"),
3807
+ },
3808
+ },
3809
+ }),
3810
+ ]);