@hraness/dawg 0.6.0 → 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.
- package/CHANGELOG.md +126 -0
- package/DAWG.md +655 -141
- package/README.md +27 -25
- package/core/autotune.ts +1119 -0
- package/core/chords.ts +759 -23
- package/core/clips.ts +499 -0
- package/core/diff.ts +182 -99
- package/core/expression.ts +158 -6
- package/core/fx.ts +354 -32
- package/core/granular.ts +91 -0
- package/core/instruments.ts +180 -0
- package/core/keys.ts +573 -4
- package/core/loop.ts +5 -0
- package/core/lyrics.ts +297 -0
- package/core/master.ts +3 -3
- package/core/resonators.ts +306 -4
- package/core/routing.ts +165 -0
- package/core/score.ts +1181 -16
- package/core/sdk/eval-child.ts +7 -2
- package/core/sdk/eval.ts +35 -6
- package/core/sdk/print.ts +354 -6
- package/core/sdk/sync-lyrics.ts +49 -0
- package/core/sdk/v1.ts +3160 -69
- package/core/sections.ts +298 -24
- package/core/sing.ts +815 -0
- package/core/strings.ts +237 -2
- package/core/style-provenance.ts +80 -0
- package/core/styles/africa-mena-southasia.ts +2893 -0
- package/core/styles/americas.ts +3810 -0
- package/core/styles/art.ts +4993 -0
- package/core/styles/base.ts +123 -0
- package/core/styles/cycles.ts +106 -0
- package/core/styles/electronic.ts +2723 -0
- package/core/styles/europe-asia-pacific.ts +2838 -0
- package/core/styles/excerpt.ts +29 -0
- package/core/styles/gamelan.ts +283 -0
- package/core/styles/generate.ts +2199 -0
- package/core/styles/index.ts +515 -0
- package/core/styles/parts.ts +106 -0
- package/core/styles/pop.ts +3189 -0
- package/core/styles/rock.ts +2993 -0
- package/core/styles/roots.ts +4175 -0
- package/core/styles/schema.ts +429 -0
- package/core/styles/taxonomy.ts +940 -0
- package/core/styles/validate.ts +528 -0
- package/core/tempo.ts +32 -2
- package/core/tuning.ts +19 -3
- package/core/vocoder.ts +524 -0
- package/core/winds.ts +652 -0
- package/guides/agent.md +29 -0
- package/guides/arrange.md +30 -0
- package/guides/audition.md +20 -14
- package/guides/automation.md +12 -6
- package/guides/chords.md +16 -14
- package/guides/effects.md +17 -15
- package/guides/faders.md +20 -16
- package/guides/files.md +13 -9
- package/guides/getting-started.md +15 -11
- package/guides/keys.md +19 -15
- package/guides/media.md +17 -12
- package/guides/mix.md +12 -6
- package/guides/music.md +23 -8
- package/guides/notes.md +15 -9
- package/guides/performance.md +15 -10
- package/guides/play.md +21 -13
- package/guides/project.md +25 -8
- package/guides/providers.md +20 -14
- package/guides/resample.md +32 -0
- package/guides/rhythm.md +17 -13
- package/guides/sessions.md +17 -7
- package/guides/show-me.md +31 -0
- package/guides/sound.md +25 -9
- package/guides/sounds.md +15 -12
- package/guides/styles.md +31 -0
- package/guides/tempo.md +15 -10
- package/guides/tracks.md +15 -10
- package/guides/tuning.md +32 -0
- package/guides/voice.md +31 -0
- package/guides/web-search.md +18 -8
- package/native/prebuilt/darwin-arm64/libdawg_sink.dylib +0 -0
- package/native/prebuilt/darwin-x64/libdawg_sink.dylib +0 -0
- package/native/prebuilt/linux-arm64/libdawg_sink.so +0 -0
- package/native/prebuilt/linux-x64/libdawg_sink.so +0 -0
- package/native/prebuilt/manifest.json +21 -0
- package/package.json +5 -2
- package/src/agent/agent.ts +131 -13
- package/src/agent/calibration-tools.ts +53 -0
- package/src/agent/chord-tools.ts +153 -1
- package/src/agent/clip-tools.ts +453 -0
- package/src/agent/command-agent.ts +369 -0
- package/src/agent/drum-tools.ts +2 -2
- package/src/agent/expression-tools.ts +91 -0
- package/src/agent/gateway.ts +246 -60
- package/src/agent/models.ts +53 -12
- package/src/agent/ops.ts +15 -1
- package/src/agent/pack-tools.ts +1 -1
- package/src/agent/planner.ts +13 -0
- package/src/agent/portable-schema.ts +80 -0
- package/src/agent/preview-tool.ts +5 -1
- package/src/agent/provider.ts +22 -8
- package/src/agent/resample-tool.ts +131 -0
- package/src/agent/rhythm-tools.ts +1 -1
- package/src/agent/section-tools.ts +1 -1
- package/src/agent/show-me.ts +497 -0
- package/src/agent/steer.ts +15 -0
- package/src/agent/style-tools.ts +217 -0
- package/src/agent/tool-error.ts +12 -0
- package/src/agent/tools.ts +307 -37
- package/src/agent/usage.ts +2 -2
- package/src/agent/voice-tools.ts +925 -0
- package/src/agent/xcb-agent.ts +16 -6
- package/src/argv.ts +38 -0
- package/src/audio/analysis.ts +253 -0
- package/src/audio/arrange.ts +58 -3
- package/src/audio/autotune-engine.ts +101 -0
- package/src/audio/autotune.ts +640 -0
- package/src/audio/clips.ts +240 -0
- package/src/audio/doctor.ts +86 -0
- package/src/audio/dsp/bandbank.ts +138 -0
- package/src/audio/dsp/envelope.ts +171 -0
- package/src/audio/dsp/follow.ts +120 -0
- package/src/audio/dsp/formant.ts +427 -0
- package/src/audio/dsp/glottal.ts +243 -0
- package/src/audio/dsp/interp.ts +7 -2
- package/src/audio/dsp/lpc.ts +50 -0
- package/src/audio/dsp/periodicity.ts +59 -0
- package/src/audio/dsp/pitch.ts +995 -0
- package/src/audio/dsp/psola.ts +199 -0
- package/src/audio/dsp/shift.ts +256 -0
- package/src/audio/effects/chain.ts +21 -4
- package/src/audio/effects/common.ts +57 -0
- package/src/audio/effects/convolution.ts +113 -5
- package/src/audio/effects/filter.ts +48 -69
- package/src/audio/effects/formant.ts +263 -0
- package/src/audio/effects/gaze.ts +354 -0
- package/src/audio/engine.ts +206 -33
- package/src/audio/fit.ts +80 -3
- package/src/audio/granular.ts +352 -21
- package/src/audio/instrument-check.ts +67 -47
- package/src/audio/instruments.ts +36 -3
- package/src/audio/keys/calibration.ts +56 -0
- package/src/audio/keys/electric.ts +427 -0
- package/src/audio/keys/engine.ts +156 -20
- package/src/audio/keys/organ.ts +1335 -0
- package/src/audio/keys/piano.ts +72 -8
- package/src/audio/keys/sympathetic.ts +127 -0
- package/src/audio/kits.ts +135 -6
- package/src/audio/live-worker.ts +3 -1
- package/src/audio/live.ts +247 -26
- package/src/audio/native.ts +615 -0
- package/src/audio/preview.ts +45 -3
- package/src/audio/render-worker.ts +2 -0
- package/src/audio/renderer.ts +2 -0
- package/src/audio/resample.ts +286 -0
- package/src/audio/resonators.ts +10 -2
- package/src/audio/sampler.ts +252 -24
- package/src/audio/samples.ts +46 -3
- package/src/audio/sing/analysis.ts +193 -0
- package/src/audio/sing/engine.ts +949 -0
- package/src/audio/strings/body.ts +29 -16
- package/src/audio/strings/bow.ts +699 -0
- package/src/audio/strings/engine.ts +274 -22
- package/src/audio/strings/measure.test-helpers.ts +2 -0
- package/src/audio/synth/oscillators.ts +31 -21
- package/src/audio/synth/voice.ts +34 -1
- package/src/audio/vocoder/bank.ts +314 -0
- package/src/audio/vocoder/carrier.ts +165 -0
- package/src/audio/vocoder/control.ts +68 -0
- package/src/audio/vocoder/detect.ts +50 -0
- package/src/audio/vocoder/index.ts +304 -0
- package/src/audio/vocoder/talkbox.ts +143 -0
- package/src/audio/wav.ts +608 -85
- package/src/audio/winds/engine.ts +306 -0
- package/src/audio/winds/filters.ts +153 -0
- package/src/audio/winds/pitch.ts +104 -0
- package/src/audio/winds/trim.ts +104 -0
- package/src/audio/winds/trims.ts +917 -0
- package/src/audio/winds/trims1.ts +297 -0
- package/src/audio/winds/voice.ts +492 -0
- package/src/auth/cli.ts +38 -36
- package/src/auth/credentials.ts +30 -1
- package/src/auth/login.ts +15 -9
- package/src/auth/tui.ts +19 -10
- package/src/commands/arrange.ts +44 -29
- package/src/commands/autotune.ts +421 -0
- package/src/commands/calibration.ts +74 -0
- package/src/commands/clips.ts +887 -0
- package/src/commands/drums.ts +3 -2
- package/src/commands/edit.ts +11 -4
- package/src/commands/expression.ts +104 -23
- package/src/commands/formant.ts +221 -0
- package/src/commands/fx.ts +105 -33
- package/src/commands/grammar.ts +558 -0
- package/src/commands/granular.ts +7 -2
- package/src/commands/help.ts +652 -339
- package/src/commands/history.ts +18 -0
- package/src/commands/keys.ts +293 -17
- package/src/commands/modal.ts +67 -4
- package/src/commands/music.ts +1 -1
- package/src/commands/nearest.ts +53 -0
- package/src/commands/pack.ts +9 -2
- package/src/commands/param-range.ts +56 -0
- package/src/commands/parses.ts +130 -0
- package/src/commands/progression.ts +170 -0
- package/src/commands/resample.ts +281 -0
- package/src/commands/rhythm.ts +3 -0
- package/src/commands/rig.ts +8 -25
- package/src/commands/sample.ts +49 -2
- package/src/commands/shift.ts +119 -0
- package/src/commands/sing.ts +478 -0
- package/src/commands/string.ts +28 -2
- package/src/commands/strum.ts +485 -0
- package/src/commands/style.ts +415 -0
- package/src/commands/time.ts +6 -3
- package/src/commands/tuning.ts +3 -3
- package/src/commands/vocal-pitch.ts +616 -0
- package/src/commands/vocal.ts +147 -0
- package/src/commands/vocoder.ts +627 -0
- package/src/commands/wind.ts +244 -0
- package/src/fs/durable.ts +50 -0
- package/src/lang/glossary.ts +493 -0
- package/src/launch-args.ts +163 -0
- package/src/main.ts +1521 -255
- package/src/media/cli.ts +20 -3
- package/src/media/import.ts +3 -1
- package/src/project/check.ts +26 -3
- package/src/project/clip-pins.ts +72 -0
- package/src/project/init.ts +23 -8
- package/src/project/sync.ts +418 -86
- package/src/render.ts +36 -1
- package/src/session/daemon.ts +3 -0
- package/src/session/meta.ts +14 -0
- package/src/session/origin.ts +154 -0
- package/src/session/port.ts +22 -4
- package/src/session/presence.ts +50 -7
- package/src/session/protocol.ts +5 -1
- package/src/session/rebase.ts +18 -5
- package/src/session/receipt.ts +258 -0
- package/src/session/store.ts +65 -43
- package/src/tui/arrange-menu.ts +65 -31
- package/src/tui/audition.ts +1 -1
- package/src/tui/euclid.ts +18 -13
- package/src/tui/fader.ts +228 -41
- package/src/tui/granular-menu.ts +2 -4
- package/src/tui/menu-clips.ts +297 -0
- package/src/tui/menu-time.ts +20 -13
- package/src/tui/menu-voice.ts +405 -0
- package/src/tui/menu.ts +1377 -193
- package/src/tui/modal-menu.ts +38 -11
- package/src/tui/performance-menu.ts +46 -1
- package/src/tui/play-chords.ts +108 -5
- package/src/tui/play-mode.ts +16 -1
- package/src/tui/play-session.ts +81 -16
- package/src/tui/sing-menu.ts +278 -0
- package/src/tui/style-menu.ts +104 -0
- package/src/tui/vocoder-menu.ts +244 -0
- package/src/tui/wind-menu.ts +144 -0
- package/src/version.ts +8 -0
- package/src/web/fetch.ts +115 -29
- package/tui/activity.ts +180 -9
- package/tui/app.ts +274 -40
- package/tui/clip-row.ts +132 -0
- package/tui/delight.ts +144 -0
- package/tui/drawer.ts +70 -22
- package/tui/frame-gate.ts +76 -0
- package/tui/grammar.ts +112 -63
- package/tui/guide.ts +42 -4
- package/tui/highway.ts +269 -25
- package/tui/hints.ts +192 -0
- package/tui/input.ts +60 -9
- package/tui/keys.ts +1 -1
- package/tui/play-strip.ts +68 -14
- package/tui/prompt.ts +1 -1
- package/tui/screen.ts +144 -14
- package/tui/theme.ts +27 -0
|
@@ -0,0 +1,2893 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sub-Saharan Africa, Middle East and North Africa, South Asia (quality-08
|
|
3
|
+
* family `africa-mena-southasia`). `arabic-classical` is the worked
|
|
4
|
+
* non-Western microtonal leaf: maqam bayati with its neutral second as a
|
|
5
|
+
* quarter tone (the 24-tone convention on the `bayati` tuning table),
|
|
6
|
+
* heterophony instead of chords, a sayr that opens on the tonic jins and
|
|
7
|
+
* climbs to the ghammaz (fourth) before returning, and the maqsum iqa as
|
|
8
|
+
* a dum/tak cycle on the frame drum.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { grid, intervals, kit, maybe, role } from "./parts.ts";
|
|
12
|
+
import { card, type CycleSpec, type StyleCard } from "./schema.ts";
|
|
13
|
+
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Timelines, talas, iqa'at and usuller (this lane's section of the cycles).
|
|
16
|
+
//
|
|
17
|
+
// A cycle is one stroke per beat unit (a quarter in x/4, an eighth in x/8);
|
|
18
|
+
// "." is a rest, `stress` and `release` are 1-based beats (tali and khali
|
|
19
|
+
// for a tala, dum accents for an iqa'). The divisions (vibhag, anga,
|
|
20
|
+
// usul groups) must add up to the beats; `cycle()` checks that.
|
|
21
|
+
|
|
22
|
+
/** Low (bass-voice) strokes: the open dum and bayan strokes of each family. */
|
|
23
|
+
const LOW = Object.freeze([
|
|
24
|
+
"dum",
|
|
25
|
+
"dha",
|
|
26
|
+
"dhin",
|
|
27
|
+
"dhage",
|
|
28
|
+
"ge",
|
|
29
|
+
"thom",
|
|
30
|
+
"dhi",
|
|
31
|
+
"dhom",
|
|
32
|
+
]);
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* A rhythmic cycle; throws when strokes and divisions disagree. Every key
|
|
36
|
+
* is set (release and low too) so a child's cycle never inherits its
|
|
37
|
+
* parent's khali or low strokes.
|
|
38
|
+
*/
|
|
39
|
+
export function cycle(
|
|
40
|
+
kind: CycleSpec["kind"],
|
|
41
|
+
name: string,
|
|
42
|
+
divisions: readonly number[],
|
|
43
|
+
strokes: string,
|
|
44
|
+
stress: readonly number[],
|
|
45
|
+
release: readonly number[] = [],
|
|
46
|
+
low: readonly string[] = LOW,
|
|
47
|
+
): CycleSpec {
|
|
48
|
+
const list = strokes.trim().split(/\s+/);
|
|
49
|
+
const beats = divisions.reduce((a, b) => a + b, 0);
|
|
50
|
+
if (list.length !== beats)
|
|
51
|
+
throw new Error(`cycle ${name}: ${list.length} strokes for ${beats} beats`);
|
|
52
|
+
for (const at of [...stress, ...release])
|
|
53
|
+
if (!(at >= 1 && at <= beats))
|
|
54
|
+
throw new Error(`cycle ${name}: beat ${at} outside 1-${beats}`);
|
|
55
|
+
return Object.freeze({
|
|
56
|
+
kind,
|
|
57
|
+
name,
|
|
58
|
+
beats,
|
|
59
|
+
divisions: Object.freeze([...divisions]),
|
|
60
|
+
strokes: Object.freeze(list),
|
|
61
|
+
stress: Object.freeze([...stress]),
|
|
62
|
+
release: Object.freeze([...release]),
|
|
63
|
+
low: Object.freeze([...low]),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Teental: 16 beats, vibhag 4+4+4+4, sam on 1, khali on 9. */
|
|
68
|
+
export const TEENTAL = cycle(
|
|
69
|
+
"tala",
|
|
70
|
+
"teental",
|
|
71
|
+
[4, 4, 4, 4],
|
|
72
|
+
"dha dhin dhin dha dha dhin dhin dha dha tin tin ta ta dhin dhin dha",
|
|
73
|
+
[1, 5, 13],
|
|
74
|
+
[9, 10, 11, 12],
|
|
75
|
+
);
|
|
76
|
+
/** Ektaal: 12 beats in six vibhag of two; khali on 3 and 7. */
|
|
77
|
+
export const EKTAAL = cycle(
|
|
78
|
+
"tala",
|
|
79
|
+
"ektaal",
|
|
80
|
+
[2, 2, 2, 2, 2, 2],
|
|
81
|
+
"dhin dhin dhage tirakita tu na kat ta dhage tirakita dhin na",
|
|
82
|
+
[1, 5, 9, 11],
|
|
83
|
+
[3, 4, 7, 8],
|
|
84
|
+
);
|
|
85
|
+
/** Chautal: 12 beats, 2+2+2+2+2+2, the pakhawaj cycle of dhrupad. */
|
|
86
|
+
export const CHAUTAL = cycle(
|
|
87
|
+
"tala",
|
|
88
|
+
"chautal",
|
|
89
|
+
[2, 2, 2, 2, 2, 2],
|
|
90
|
+
"dha dha din ta kita dha din ta tita kata gadi gana",
|
|
91
|
+
[1, 5, 9, 11],
|
|
92
|
+
[3, 4, 7, 8],
|
|
93
|
+
);
|
|
94
|
+
/** Deepchandi: 14 beats, 3+4+3+4, khali on 8 (thumri). */
|
|
95
|
+
export const DEEPCHANDI = cycle(
|
|
96
|
+
"tala",
|
|
97
|
+
"deepchandi",
|
|
98
|
+
[3, 4, 3, 4],
|
|
99
|
+
"dha dhin . dha dha tin . ta tin . dha dha dhin .",
|
|
100
|
+
[1, 4, 11],
|
|
101
|
+
[8, 9, 10],
|
|
102
|
+
);
|
|
103
|
+
/** Keherwa: 8 beats, 4+4, khali on 5. */
|
|
104
|
+
export const KEHERWA = cycle(
|
|
105
|
+
"tala",
|
|
106
|
+
"keherwa",
|
|
107
|
+
[4, 4],
|
|
108
|
+
"dha ge na ti na ka dhi na",
|
|
109
|
+
[1],
|
|
110
|
+
[5, 6, 7, 8],
|
|
111
|
+
);
|
|
112
|
+
/** Dadra: 6 beats, 3+3, khali on 4. */
|
|
113
|
+
export const DADRA = cycle(
|
|
114
|
+
"tala",
|
|
115
|
+
"dadra",
|
|
116
|
+
[3, 3],
|
|
117
|
+
"dha dhi na dha ti na",
|
|
118
|
+
[1],
|
|
119
|
+
[4, 5, 6],
|
|
120
|
+
);
|
|
121
|
+
/** Adi tala: 8 beats, laghu 4 + drutam 2 + drutam 2 (claps 1, 5, 7). */
|
|
122
|
+
export const ADI = cycle(
|
|
123
|
+
"tala",
|
|
124
|
+
"adi",
|
|
125
|
+
[4, 2, 2],
|
|
126
|
+
"tha ka dhi mi tha ka jo nu",
|
|
127
|
+
[1, 5, 7],
|
|
128
|
+
[6, 8],
|
|
129
|
+
);
|
|
130
|
+
/** Misra chapu: 7 beats, 3+2+2. */
|
|
131
|
+
export const MISRA_CHAPU = cycle(
|
|
132
|
+
"tala",
|
|
133
|
+
"misra chapu",
|
|
134
|
+
[3, 2, 2],
|
|
135
|
+
"tha ki ta tha ka dhi mi",
|
|
136
|
+
[1, 4, 6],
|
|
137
|
+
);
|
|
138
|
+
/** Rupaka (Carnatic): 6 beats, drutam 2 + laghu 4. */
|
|
139
|
+
export const RUPAKA = cycle(
|
|
140
|
+
"tala",
|
|
141
|
+
"rupaka",
|
|
142
|
+
[2, 4],
|
|
143
|
+
"tha ka tha ki ta thom",
|
|
144
|
+
[1, 3],
|
|
145
|
+
[2],
|
|
146
|
+
);
|
|
147
|
+
/** Maqsum: 8/8 dum tak . tak dum . tak . */
|
|
148
|
+
export const MAQSUM = cycle(
|
|
149
|
+
"iqa",
|
|
150
|
+
"maqsum",
|
|
151
|
+
[8],
|
|
152
|
+
"dum tak . tak dum . tak .",
|
|
153
|
+
[1, 5],
|
|
154
|
+
);
|
|
155
|
+
/** Baladi (masmudi saghir): dum dum . tak dum . tak . */
|
|
156
|
+
export const BALADI = cycle(
|
|
157
|
+
"iqa",
|
|
158
|
+
"baladi",
|
|
159
|
+
[8],
|
|
160
|
+
"dum dum . tak dum . tak .",
|
|
161
|
+
[1, 2, 5],
|
|
162
|
+
);
|
|
163
|
+
/** Sama'i thaqil: 10/8, the muwashshah and sama'i cycle. */
|
|
164
|
+
export const SAMAI_THAQIL = cycle(
|
|
165
|
+
"iqa",
|
|
166
|
+
"sama'i thaqil",
|
|
167
|
+
[3, 2, 2, 3],
|
|
168
|
+
"dum . . tak . dum dum tak . .",
|
|
169
|
+
[1, 6, 7],
|
|
170
|
+
);
|
|
171
|
+
/** Jurjina: 10/8 (3+2+2+3), the Iraqi maqam cycle. */
|
|
172
|
+
export const JURJINA = cycle(
|
|
173
|
+
"iqa",
|
|
174
|
+
"jurjina",
|
|
175
|
+
[3, 2, 2, 3],
|
|
176
|
+
"dum . tak dum . tak . dum tak .",
|
|
177
|
+
[1, 4, 8],
|
|
178
|
+
);
|
|
179
|
+
/** Wahda: 4/4 one dum on the downbeat, the slow tarab and recitation pulse. */
|
|
180
|
+
export const WAHDA = cycle("iqa", "wahda", [4], "dum . tak .", [1]);
|
|
181
|
+
/** Aksak: 9/8 in 2+2+2+3. */
|
|
182
|
+
export const AKSAK = cycle(
|
|
183
|
+
"usul",
|
|
184
|
+
"aksak",
|
|
185
|
+
[2, 2, 2, 3],
|
|
186
|
+
"dum . tek . tek . dum . tek",
|
|
187
|
+
[1, 7],
|
|
188
|
+
);
|
|
189
|
+
/** Curcuna: 10/8 in 3+2+2+3. */
|
|
190
|
+
export const CURCUNA = cycle(
|
|
191
|
+
"usul",
|
|
192
|
+
"curcuna",
|
|
193
|
+
[3, 2, 2, 3],
|
|
194
|
+
"dum . tek dum . tek . tek . .",
|
|
195
|
+
[1, 4],
|
|
196
|
+
);
|
|
197
|
+
/** Devr-i revan: 14/8 in 3+2+2+3+2+2, the Mevlevi ayin's third selam. */
|
|
198
|
+
export const DEVR_I_REVAN = cycle(
|
|
199
|
+
"usul",
|
|
200
|
+
"devr-i revan",
|
|
201
|
+
[3, 2, 2, 3, 2, 2],
|
|
202
|
+
"dum . tek dum . tek . dum . tek tek . tek .",
|
|
203
|
+
[1, 4, 8],
|
|
204
|
+
);
|
|
205
|
+
/** Devr-i hindi: 7/8 in 3+2+2. */
|
|
206
|
+
export const DEVR_I_HINDI = cycle(
|
|
207
|
+
"usul",
|
|
208
|
+
"devr-i hindi",
|
|
209
|
+
[3, 2, 2],
|
|
210
|
+
"dum . tek dum . tek .",
|
|
211
|
+
[1, 4],
|
|
212
|
+
);
|
|
213
|
+
/** Çiftetelli: 8 beats of 4/4 over two bars, dum on 1, 6 and 7. */
|
|
214
|
+
export const CIFTETELLI = cycle(
|
|
215
|
+
"usul",
|
|
216
|
+
"ciftetelli",
|
|
217
|
+
[3, 3, 2],
|
|
218
|
+
"dum tek . tek . dum dum tek",
|
|
219
|
+
[1, 6, 7],
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
/** Jhaptal: 10 beats, vibhag 2+3+2+3, khali on 6. */
|
|
223
|
+
export const JHAPTAL = cycle(
|
|
224
|
+
"tala",
|
|
225
|
+
"jhaptal",
|
|
226
|
+
[2, 3, 2, 3],
|
|
227
|
+
"dhi na dhi dhi na ti na dhi dhi na",
|
|
228
|
+
[1, 3, 8],
|
|
229
|
+
[6, 7],
|
|
230
|
+
);
|
|
231
|
+
/** Rupak: 7 beats, 3+2+2; the sam itself is khali (open, no bayan). */
|
|
232
|
+
export const RUPAK = cycle(
|
|
233
|
+
"tala",
|
|
234
|
+
"rupak",
|
|
235
|
+
[3, 2, 2],
|
|
236
|
+
"tin tin na dhi na dhi na",
|
|
237
|
+
[4, 6],
|
|
238
|
+
[1, 2, 3],
|
|
239
|
+
);
|
|
240
|
+
/** Malfuf: 8/8 in 3+3+2, the quick dabke and zaffa cycle. */
|
|
241
|
+
export const MALFUF = cycle(
|
|
242
|
+
"iqa",
|
|
243
|
+
"malfuf",
|
|
244
|
+
[3, 3, 2],
|
|
245
|
+
"dum . . tak . . tak .",
|
|
246
|
+
[1],
|
|
247
|
+
);
|
|
248
|
+
/** Khaliji: 8/8, dum on 1 and 4, the Gulf clapped pulse. */
|
|
249
|
+
export const KHALIJI = cycle(
|
|
250
|
+
"iqa",
|
|
251
|
+
"khaliji",
|
|
252
|
+
[3, 3, 2],
|
|
253
|
+
"dum . . dum tak . tak .",
|
|
254
|
+
[1, 4],
|
|
255
|
+
);
|
|
256
|
+
/** Masmudi kabir: 16/8, two dums, rest, then the tak run (muwashshah). */
|
|
257
|
+
export const MASMUDI_KABIR = cycle(
|
|
258
|
+
"iqa",
|
|
259
|
+
"masmudi kabir",
|
|
260
|
+
[4, 4, 4, 4],
|
|
261
|
+
"dum . dum . . . tak . dum . . tak tak . tak .",
|
|
262
|
+
[1, 3, 9],
|
|
263
|
+
);
|
|
264
|
+
|
|
265
|
+
/** Standard 12/8 bell: seven strokes in 2-2-1-2-2-2-1. */
|
|
266
|
+
export const STANDARD_BELL = grid("x.x.xx.x.x.x");
|
|
267
|
+
/** Tresillo 3+3+2, twice per 4/4 bar of sixteenths. */
|
|
268
|
+
export const TRESILLO = grid("x..x..x.x..x..x.");
|
|
269
|
+
/** Four-on-the-floor kick. */
|
|
270
|
+
export const FOUR_FLOOR = grid("x...x...x...x...");
|
|
271
|
+
/** Backbeat on 2 and 4. */
|
|
272
|
+
export const BACKBEAT = grid("....x.......x...");
|
|
273
|
+
/** Off-beat eighths (the "and"s). */
|
|
274
|
+
export const OFFBEATS = grid("..x...x...x...x.");
|
|
275
|
+
/** Straight eighths. */
|
|
276
|
+
export const EIGHTHS = grid("x.x.x.x.x.x.x.x.");
|
|
277
|
+
/** Sixteenths with the downbeats dropped (a shaker or scraper). */
|
|
278
|
+
export const SIXTEENTHS = grid("xxxxxxxxxxxxxxxx");
|
|
279
|
+
|
|
280
|
+
/** Root and branch cards: the shared patterns every leaf inherits. */
|
|
281
|
+
const NODES: readonly StyleCard[] = [
|
|
282
|
+
card({
|
|
283
|
+
id: "africa",
|
|
284
|
+
abstract: true,
|
|
285
|
+
summary:
|
|
286
|
+
"timeline-led polyrhythm: a bell pattern, interlocking parts, cyclic short forms",
|
|
287
|
+
meter: {
|
|
288
|
+
signatures: [
|
|
289
|
+
["12/8", 0.5],
|
|
290
|
+
["4/4", 0.5],
|
|
291
|
+
],
|
|
292
|
+
hypermeter: [[2, 1]],
|
|
293
|
+
},
|
|
294
|
+
tempo: { bpm: [90, 140], typical: 118 },
|
|
295
|
+
groove: { subdivision: 4, humanize: { timingMs: 6, velocity: 0.08 } },
|
|
296
|
+
rhythm: {
|
|
297
|
+
onsets: {
|
|
298
|
+
bell: grid("x.x.xx.x.x.x"),
|
|
299
|
+
kick: grid("x.....x....."),
|
|
300
|
+
perc: grid("..x..x..x..x"),
|
|
301
|
+
shaker: grid("xxxxxxxxxxxx"),
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
pitch: {
|
|
305
|
+
scales: [
|
|
306
|
+
["major", 0.5],
|
|
307
|
+
["major-pentatonic", 0.3],
|
|
308
|
+
["mixolydian", 0.2],
|
|
309
|
+
],
|
|
310
|
+
},
|
|
311
|
+
harmony: {
|
|
312
|
+
presets: [
|
|
313
|
+
["axis", 0.5],
|
|
314
|
+
["fifties", 0.5],
|
|
315
|
+
],
|
|
316
|
+
rhythm: [
|
|
317
|
+
[1, 0.6],
|
|
318
|
+
[2, 0.4],
|
|
319
|
+
],
|
|
320
|
+
sevenths: 0,
|
|
321
|
+
},
|
|
322
|
+
melody: {
|
|
323
|
+
repetition: 0.75,
|
|
324
|
+
phraseBars: [
|
|
325
|
+
[1, 0.5],
|
|
326
|
+
[2, 0.5],
|
|
327
|
+
],
|
|
328
|
+
},
|
|
329
|
+
bass: { behaviour: [["ostinato", 1]], onsets: grid("x..x..x..x..") },
|
|
330
|
+
form: {
|
|
331
|
+
plans: [[["intro", "verse", "chorus", "verse", "chorus"], 1]],
|
|
332
|
+
archetype: "cyclic",
|
|
333
|
+
},
|
|
334
|
+
texture: {
|
|
335
|
+
kind: "interlocking",
|
|
336
|
+
roles: {
|
|
337
|
+
snare: null,
|
|
338
|
+
hat: null,
|
|
339
|
+
kick: role("drums"),
|
|
340
|
+
bell: role("bell"),
|
|
341
|
+
perc: role("drums"),
|
|
342
|
+
shaker: maybe("drums"),
|
|
343
|
+
chords: role("nylon", "mbira:0.6", "marimba:0.4"),
|
|
344
|
+
lead: role("sing", "flute:0.3"),
|
|
345
|
+
},
|
|
346
|
+
},
|
|
347
|
+
}),
|
|
348
|
+
card({
|
|
349
|
+
id: "west-africa",
|
|
350
|
+
abstract: true,
|
|
351
|
+
summary: "12/8 bell timeline, call and response, kora and balafon ostinati",
|
|
352
|
+
texture: { roles: { chords: role("harp", "marimba:0.6") } },
|
|
353
|
+
}),
|
|
354
|
+
card({
|
|
355
|
+
id: "central-africa",
|
|
356
|
+
abstract: true,
|
|
357
|
+
summary: "soukous and rumba: interlocking guitars, sebene sixteenth runs",
|
|
358
|
+
meter: { signatures: [["4/4", 1]] },
|
|
359
|
+
rhythm: {
|
|
360
|
+
onsets: {
|
|
361
|
+
kick: grid("x...x...x...x..."),
|
|
362
|
+
snare: grid("....x.......x..."),
|
|
363
|
+
bell: grid("x..x..x...x.x..."),
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
texture: {
|
|
367
|
+
roles: { chords: role("electric"), lead: role("electric", "sing:0.6") },
|
|
368
|
+
},
|
|
369
|
+
}),
|
|
370
|
+
card({
|
|
371
|
+
id: "east-africa",
|
|
372
|
+
abstract: true,
|
|
373
|
+
summary: "pentatonic lyres and taarab: 6/8 lilt, call and response",
|
|
374
|
+
pitch: {
|
|
375
|
+
scales: [
|
|
376
|
+
["major-pentatonic", 0.5],
|
|
377
|
+
["minor-pentatonic", 0.5],
|
|
378
|
+
],
|
|
379
|
+
},
|
|
380
|
+
meter: {
|
|
381
|
+
signatures: [
|
|
382
|
+
["6/8", 0.6],
|
|
383
|
+
["4/4", 0.4],
|
|
384
|
+
],
|
|
385
|
+
},
|
|
386
|
+
}),
|
|
387
|
+
card({
|
|
388
|
+
id: "southern-africa",
|
|
389
|
+
abstract: true,
|
|
390
|
+
summary: "mbira cycles and choral harmony: I-IV-I64-V in a four-bar loop",
|
|
391
|
+
meter: {
|
|
392
|
+
signatures: [
|
|
393
|
+
["4/4", 0.6],
|
|
394
|
+
["12/8", 0.4],
|
|
395
|
+
],
|
|
396
|
+
},
|
|
397
|
+
harmony: { forms: [[["I", "IV", "I", "V"], 1]], sources: { forms: 3 } },
|
|
398
|
+
texture: { roles: { chords: role("mbira", "choir:0.5") } },
|
|
399
|
+
}),
|
|
400
|
+
card({
|
|
401
|
+
id: "mena",
|
|
402
|
+
abstract: true,
|
|
403
|
+
summary:
|
|
404
|
+
"modal monophony and heterophony: maqam or dastgah, iqa cycles, no functional chords",
|
|
405
|
+
meter: {
|
|
406
|
+
signatures: [
|
|
407
|
+
["8/8", 0.6],
|
|
408
|
+
["4/4", 0.4],
|
|
409
|
+
],
|
|
410
|
+
},
|
|
411
|
+
tempo: { bpm: [60, 130], typical: 96 },
|
|
412
|
+
pitch: {
|
|
413
|
+
scales: [
|
|
414
|
+
["hijaz", 0.4],
|
|
415
|
+
["nahawand", 0.3],
|
|
416
|
+
["kurd", 0.3],
|
|
417
|
+
],
|
|
418
|
+
},
|
|
419
|
+
harmony: { model: "drone", rhythm: [[0.5, 1]], sevenths: 0 },
|
|
420
|
+
melody: {
|
|
421
|
+
contour: [
|
|
422
|
+
["arch", 0.5],
|
|
423
|
+
["terraced", 0.5],
|
|
424
|
+
],
|
|
425
|
+
ambitus: [7, 14],
|
|
426
|
+
range: [57, 81],
|
|
427
|
+
intervals: intervals(6, 2, 0.5, 0.8),
|
|
428
|
+
chordToneRate: 0.3,
|
|
429
|
+
density: [2, 3],
|
|
430
|
+
repetition: 0.4,
|
|
431
|
+
finals: [
|
|
432
|
+
[0, 0.8],
|
|
433
|
+
[5, 0.2],
|
|
434
|
+
],
|
|
435
|
+
},
|
|
436
|
+
bass: {
|
|
437
|
+
behaviour: [
|
|
438
|
+
["pedal", 0.6],
|
|
439
|
+
["none", 0.4],
|
|
440
|
+
],
|
|
441
|
+
},
|
|
442
|
+
texture: {
|
|
443
|
+
kind: "heterophonic",
|
|
444
|
+
roles: {
|
|
445
|
+
kick: null,
|
|
446
|
+
snare: null,
|
|
447
|
+
hat: null,
|
|
448
|
+
chords: null,
|
|
449
|
+
bass: maybe("cello", "contrabass:0.5"),
|
|
450
|
+
perc: role("daf", "framedrum:0.6", "tabla:0.3"),
|
|
451
|
+
drone: maybe("oud", "strings:0.4"),
|
|
452
|
+
lead: role("oud", "ney:0.7", "violin:0.5", "santur:0.3"),
|
|
453
|
+
counter: maybe("ney", "violin:0.6"),
|
|
454
|
+
},
|
|
455
|
+
},
|
|
456
|
+
mix: {
|
|
457
|
+
levels: { perc: -4, lead: 0, counter: -4, drone: -10 },
|
|
458
|
+
space: 0.45,
|
|
459
|
+
},
|
|
460
|
+
}),
|
|
461
|
+
card({
|
|
462
|
+
id: "arabic-maqam",
|
|
463
|
+
abstract: true,
|
|
464
|
+
summary: "Arabic maqam: ajnas joined at the ghammaz, quarter-tone seconds",
|
|
465
|
+
}),
|
|
466
|
+
card({
|
|
467
|
+
id: "arabic-classical",
|
|
468
|
+
summary:
|
|
469
|
+
"maqam bayati in quarter tones, maqsum iqa, heterophonic oud and ney",
|
|
470
|
+
seedSalt: 1932,
|
|
471
|
+
tempo: { bpm: [72, 112], typical: 92 },
|
|
472
|
+
meter: {
|
|
473
|
+
signatures: [["8/8", 1]],
|
|
474
|
+
cycle: MAQSUM,
|
|
475
|
+
},
|
|
476
|
+
pitch: {
|
|
477
|
+
tuning: "bayati",
|
|
478
|
+
scales: [["bayati", 1]],
|
|
479
|
+
tonic: [[2, 1]],
|
|
480
|
+
maqam: { sayr: [0, 0, 2, 3, 0], ghammaz: 3 },
|
|
481
|
+
},
|
|
482
|
+
melody: {
|
|
483
|
+
ambitus: [7, 12],
|
|
484
|
+
finals: [
|
|
485
|
+
[0, 0.85],
|
|
486
|
+
[3, 0.15],
|
|
487
|
+
],
|
|
488
|
+
intervals: intervals(7, 1.5, 0.4, 0.6),
|
|
489
|
+
},
|
|
490
|
+
texture: {
|
|
491
|
+
roles: {
|
|
492
|
+
lead: role("oud", "violin:0.4"),
|
|
493
|
+
counter: role("ney"),
|
|
494
|
+
perc: role("daf", "framedrum:0.5"),
|
|
495
|
+
},
|
|
496
|
+
},
|
|
497
|
+
}),
|
|
498
|
+
card({
|
|
499
|
+
id: "persian-turkic",
|
|
500
|
+
abstract: true,
|
|
501
|
+
summary: "dastgah and makam: gushe phrases, avaz free rhythm, aksak usul",
|
|
502
|
+
pitch: {
|
|
503
|
+
scales: [
|
|
504
|
+
["shur", 0.4],
|
|
505
|
+
["chahargah", 0.3],
|
|
506
|
+
["homayoun", 0.3],
|
|
507
|
+
],
|
|
508
|
+
},
|
|
509
|
+
meter: {
|
|
510
|
+
signatures: [
|
|
511
|
+
["6/8", 0.4],
|
|
512
|
+
["9/8", 0.3],
|
|
513
|
+
["8/8", 0.3],
|
|
514
|
+
],
|
|
515
|
+
},
|
|
516
|
+
texture: {
|
|
517
|
+
roles: { lead: role("santur", "setar:0.6", "ney:0.5", "kemence:0.4") },
|
|
518
|
+
},
|
|
519
|
+
}),
|
|
520
|
+
card({
|
|
521
|
+
id: "jewish",
|
|
522
|
+
abstract: true,
|
|
523
|
+
summary: "freygish and misheberakh modes, doina freedom, bulgar 3+3+2",
|
|
524
|
+
pitch: {
|
|
525
|
+
scales: [
|
|
526
|
+
["phrygian-dominant", 0.6],
|
|
527
|
+
["dorian", 0.4],
|
|
528
|
+
],
|
|
529
|
+
},
|
|
530
|
+
meter: {
|
|
531
|
+
signatures: [
|
|
532
|
+
["8/8", 0.6],
|
|
533
|
+
["4/4", 0.4],
|
|
534
|
+
],
|
|
535
|
+
grouping: [[[3, 3, 2], 1]],
|
|
536
|
+
},
|
|
537
|
+
harmony: { model: "modal" },
|
|
538
|
+
texture: {
|
|
539
|
+
roles: {
|
|
540
|
+
lead: role("clarinet", "violin:0.6"),
|
|
541
|
+
chords: role("piano", "strings:0.4"),
|
|
542
|
+
},
|
|
543
|
+
},
|
|
544
|
+
}),
|
|
545
|
+
card({
|
|
546
|
+
id: "south-asia",
|
|
547
|
+
abstract: true,
|
|
548
|
+
summary:
|
|
549
|
+
"raga over tanpura drone in a tala cycle: alap, then composition and improvisation",
|
|
550
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
551
|
+
tempo: { bpm: [50, 140], typical: 80 },
|
|
552
|
+
pitch: {
|
|
553
|
+
scales: [
|
|
554
|
+
["yaman", 0.3],
|
|
555
|
+
["bhairav", 0.25],
|
|
556
|
+
["kafi", 0.25],
|
|
557
|
+
["khamaj", 0.2],
|
|
558
|
+
],
|
|
559
|
+
},
|
|
560
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]], sevenths: 0 },
|
|
561
|
+
melody: {
|
|
562
|
+
contour: [
|
|
563
|
+
["arch", 0.6],
|
|
564
|
+
["ascending", 0.4],
|
|
565
|
+
],
|
|
566
|
+
ambitus: [7, 19],
|
|
567
|
+
chordToneRate: 0.25,
|
|
568
|
+
intervals: intervals(6, 2, 0.6, 0.8),
|
|
569
|
+
finals: [
|
|
570
|
+
[0, 0.7],
|
|
571
|
+
[7, 0.3],
|
|
572
|
+
],
|
|
573
|
+
},
|
|
574
|
+
bass: { behaviour: [["none", 1]] },
|
|
575
|
+
rhythm: { onsets: { perc: grid("x..x..x.x..x..x.") } },
|
|
576
|
+
texture: {
|
|
577
|
+
kind: "heterophonic",
|
|
578
|
+
roles: {
|
|
579
|
+
kick: null,
|
|
580
|
+
snare: null,
|
|
581
|
+
hat: null,
|
|
582
|
+
chords: null,
|
|
583
|
+
bass: null,
|
|
584
|
+
drone: role("tanpura"),
|
|
585
|
+
perc: role("tabla"),
|
|
586
|
+
lead: role("sitar", "bansuri:0.7", "sing:0.4"),
|
|
587
|
+
},
|
|
588
|
+
},
|
|
589
|
+
mix: { space: 0.5 },
|
|
590
|
+
}),
|
|
591
|
+
card({
|
|
592
|
+
id: "hindustani",
|
|
593
|
+
abstract: true,
|
|
594
|
+
summary:
|
|
595
|
+
"Hindustani raga: teental 16-beat cycle, vadi and samvadi emphasis, meend",
|
|
596
|
+
meter: {
|
|
597
|
+
cycle: TEENTAL,
|
|
598
|
+
},
|
|
599
|
+
}),
|
|
600
|
+
card({
|
|
601
|
+
id: "carnatic",
|
|
602
|
+
abstract: true,
|
|
603
|
+
summary:
|
|
604
|
+
"Carnatic raga: adi tala, gamaka-rich lines, kriti form, mridangam",
|
|
605
|
+
pitch: {
|
|
606
|
+
scales: [
|
|
607
|
+
["major", 0.3],
|
|
608
|
+
["kafi", 0.3],
|
|
609
|
+
["bhairavi", 0.4],
|
|
610
|
+
],
|
|
611
|
+
},
|
|
612
|
+
texture: { roles: { lead: role("violin", "bansuri:0.5", "sing:0.5") } },
|
|
613
|
+
}),
|
|
614
|
+
card({
|
|
615
|
+
id: "south-asian-popular",
|
|
616
|
+
abstract: true,
|
|
617
|
+
summary: "film and pop: raga-tinged melody over chords, dholak and kit",
|
|
618
|
+
harmony: {
|
|
619
|
+
model: "functional",
|
|
620
|
+
presets: [
|
|
621
|
+
["aeolian", 0.5],
|
|
622
|
+
["sad-pop", 0.5],
|
|
623
|
+
],
|
|
624
|
+
},
|
|
625
|
+
pitch: {
|
|
626
|
+
scales: [
|
|
627
|
+
["minor", 0.4],
|
|
628
|
+
["kafi", 0.3],
|
|
629
|
+
["khamaj", 0.3],
|
|
630
|
+
],
|
|
631
|
+
},
|
|
632
|
+
bass: { behaviour: [["root", 1]] },
|
|
633
|
+
texture: {
|
|
634
|
+
roles: {
|
|
635
|
+
kick: role("drums"),
|
|
636
|
+
snare: role("drums"),
|
|
637
|
+
bass: role("bass"),
|
|
638
|
+
chords: role("strings", "keys:0.5"),
|
|
639
|
+
},
|
|
640
|
+
},
|
|
641
|
+
rhythm: {
|
|
642
|
+
onsets: {
|
|
643
|
+
kick: grid("x.....x.x......."),
|
|
644
|
+
snare: grid("....x.......x..."),
|
|
645
|
+
},
|
|
646
|
+
},
|
|
647
|
+
}),
|
|
648
|
+
];
|
|
649
|
+
|
|
650
|
+
// ---------------------------------------------------------------------------
|
|
651
|
+
// Shared leaf parts.
|
|
652
|
+
|
|
653
|
+
/** A required kit role on a named synth kit (the drum-set traditions). */
|
|
654
|
+
const kitRole = (name: string, weight = 1) =>
|
|
655
|
+
Object.freeze({ required: true, voices: Object.freeze([kit(name, weight)]) });
|
|
656
|
+
/** An optional kit role on a named synth kit. */
|
|
657
|
+
const kitMaybe = (name: string) =>
|
|
658
|
+
Object.freeze({ required: false, voices: Object.freeze([kit(name)]) });
|
|
659
|
+
/** The full kit (kick, snare, hat) on one synth kit. */
|
|
660
|
+
const fullKit = (name: string) =>
|
|
661
|
+
Object.freeze({
|
|
662
|
+
kick: kitRole(name),
|
|
663
|
+
snare: kitRole(name),
|
|
664
|
+
hat: kitRole(name),
|
|
665
|
+
});
|
|
666
|
+
/** No kit at all (hand drums, bells and voices only). */
|
|
667
|
+
const NO_KIT = Object.freeze({
|
|
668
|
+
kick: null,
|
|
669
|
+
snare: null,
|
|
670
|
+
hat: null,
|
|
671
|
+
clap: null,
|
|
672
|
+
rim: null,
|
|
673
|
+
openhat: null,
|
|
674
|
+
tom: null,
|
|
675
|
+
});
|
|
676
|
+
|
|
677
|
+
/** Folk and devotional textures: voices, drone and hand drums only. */
|
|
678
|
+
const UNPLUGGED = Object.freeze({ ...NO_KIT, chords: null, bass: null });
|
|
679
|
+
|
|
680
|
+
/** Sung lines: mostly steps, few leaps. */
|
|
681
|
+
const CONJUNCT = intervals(5, 2, 0.6, 0.6);
|
|
682
|
+
/** Chant: repeated notes and steps (recitation, call and response). */
|
|
683
|
+
const CHANT = intervals(4, 1.5, 0.3, 2);
|
|
684
|
+
/** Instrumental lines with arpeggiated leaps (guitar sebene, kora runs). */
|
|
685
|
+
const LEAPY = intervals(3, 2.5, 1.2, 0.4);
|
|
686
|
+
/** Ornamented steps (gamaka, tahrir, meend): seconds dominate. */
|
|
687
|
+
const ORNATE = intervals(8, 1.5, 0.3, 0.5);
|
|
688
|
+
|
|
689
|
+
const LEAVES: readonly StyleCard[] = [
|
|
690
|
+
// West Africa. References: J. H. Kwabena Nketia, The Music of Africa
|
|
691
|
+
// (1974); Eric Charry, Mande Music (2000).
|
|
692
|
+
card({
|
|
693
|
+
id: "highlife",
|
|
694
|
+
summary:
|
|
695
|
+
"highlife: 4/4 with the 12/8 bell felt underneath, palm-wine guitar arpeggios, I-IV-V cycles, horn riffs answering the voice",
|
|
696
|
+
tempo: { bpm: [100, 132], typical: 116 },
|
|
697
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
698
|
+
rhythm: {
|
|
699
|
+
onsets: {
|
|
700
|
+
kick: grid("x.......x......."),
|
|
701
|
+
snare: BACKBEAT,
|
|
702
|
+
hat: EIGHTHS,
|
|
703
|
+
bell: grid("x.x.x..x.x.x.x.."),
|
|
704
|
+
chords: OFFBEATS,
|
|
705
|
+
},
|
|
706
|
+
},
|
|
707
|
+
harmony: {
|
|
708
|
+
forms: [[["I", "IV", "I", "V"], 1]],
|
|
709
|
+
sources: { forms: 2, presets: 1 },
|
|
710
|
+
presets: [["fifties", 1]],
|
|
711
|
+
},
|
|
712
|
+
texture: {
|
|
713
|
+
roles: {
|
|
714
|
+
...fullKit("acoustic"),
|
|
715
|
+
chords: role("electric", "nylon:0.5"),
|
|
716
|
+
lead: role("sing", "trumpet:0.4", "sax:0.4"),
|
|
717
|
+
counter: maybe("trumpet", "sax:0.6"),
|
|
718
|
+
},
|
|
719
|
+
},
|
|
720
|
+
}),
|
|
721
|
+
card({
|
|
722
|
+
id: "hiplife",
|
|
723
|
+
summary:
|
|
724
|
+
"hiplife and azonto: highlife chord loops under rapped and sung Twi, programmed kit with a syncopated kick, bell on top",
|
|
725
|
+
tempo: { bpm: [108, 128], typical: 118 },
|
|
726
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
727
|
+
rhythm: {
|
|
728
|
+
onsets: {
|
|
729
|
+
kick: grid("x..x..x...x....."),
|
|
730
|
+
snare: BACKBEAT,
|
|
731
|
+
hat: SIXTEENTHS,
|
|
732
|
+
bell: grid("x.x..x.x..x.x..."),
|
|
733
|
+
},
|
|
734
|
+
},
|
|
735
|
+
harmony: {
|
|
736
|
+
presets: [
|
|
737
|
+
["axis", 0.6],
|
|
738
|
+
["sad-pop", 0.4],
|
|
739
|
+
],
|
|
740
|
+
},
|
|
741
|
+
melody: { intervals: CHANT, density: [2, 3] },
|
|
742
|
+
texture: {
|
|
743
|
+
roles: {
|
|
744
|
+
...fullKit("syn808"),
|
|
745
|
+
chords: role("keys", "electric:0.5"),
|
|
746
|
+
lead: role("sing"),
|
|
747
|
+
},
|
|
748
|
+
},
|
|
749
|
+
}),
|
|
750
|
+
card({
|
|
751
|
+
id: "afrobeat",
|
|
752
|
+
summary:
|
|
753
|
+
"afrobeat: one-chord modal vamp (dorian) for minutes, interlocking tenor and rhythm guitar, open-hat sixteenths, horn-section riffs, long build",
|
|
754
|
+
tempo: { bpm: [100, 128], typical: 112 },
|
|
755
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
756
|
+
pitch: {
|
|
757
|
+
scales: [
|
|
758
|
+
["dorian", 0.7],
|
|
759
|
+
["minor-pentatonic", 0.3],
|
|
760
|
+
],
|
|
761
|
+
},
|
|
762
|
+
harmony: {
|
|
763
|
+
model: "modal",
|
|
764
|
+
rhythm: [[0.5, 1]],
|
|
765
|
+
presets: [["dorian-vamp", 1]],
|
|
766
|
+
},
|
|
767
|
+
rhythm: {
|
|
768
|
+
onsets: {
|
|
769
|
+
kick: grid("x.....x...x....."),
|
|
770
|
+
snare: grid("....x..x....x..."),
|
|
771
|
+
hat: SIXTEENTHS,
|
|
772
|
+
bell: grid("x..x..x...x.x..."),
|
|
773
|
+
chords: grid(".x.x.x.x.x.x.x.x"),
|
|
774
|
+
},
|
|
775
|
+
},
|
|
776
|
+
bass: { behaviour: [["ostinato", 1]], onsets: grid("x..x...x.x..x...") },
|
|
777
|
+
form: {
|
|
778
|
+
plans: [
|
|
779
|
+
[["intro", "verse", "verse", "chorus", "breakdown", "chorus"], 1],
|
|
780
|
+
],
|
|
781
|
+
archetype: "vamp-build",
|
|
782
|
+
},
|
|
783
|
+
texture: {
|
|
784
|
+
roles: {
|
|
785
|
+
...fullKit("acoustic"),
|
|
786
|
+
bass: role("ebass"),
|
|
787
|
+
chords: role("electric"),
|
|
788
|
+
lead: role("sax", "sing:0.6", "trumpet:0.4"),
|
|
789
|
+
counter: role("trumpet", "trombone:0.6"),
|
|
790
|
+
pad: maybe("organ"),
|
|
791
|
+
},
|
|
792
|
+
},
|
|
793
|
+
}),
|
|
794
|
+
card({
|
|
795
|
+
id: "afrobeats",
|
|
796
|
+
summary:
|
|
797
|
+
"afrobeats: the 3+3+2 tresillo kick under a shaker and conga groove, sparse minor-pop loops, sung hooks, half-step syncopation",
|
|
798
|
+
tempo: { bpm: [94, 110], typical: 102 },
|
|
799
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
800
|
+
rhythm: {
|
|
801
|
+
onsets: {
|
|
802
|
+
kick: TRESILLO,
|
|
803
|
+
snare: grid("...x...x...x..x."),
|
|
804
|
+
hat: SIXTEENTHS,
|
|
805
|
+
shaker: SIXTEENTHS,
|
|
806
|
+
bell: grid("..x..x....x..x.."),
|
|
807
|
+
},
|
|
808
|
+
},
|
|
809
|
+
harmony: {
|
|
810
|
+
presets: [
|
|
811
|
+
["sad-pop", 0.5],
|
|
812
|
+
["aeolian", 0.5],
|
|
813
|
+
],
|
|
814
|
+
sevenths: 0.3,
|
|
815
|
+
},
|
|
816
|
+
melody: { intervals: CONJUNCT, repetition: 0.8 },
|
|
817
|
+
texture: {
|
|
818
|
+
roles: {
|
|
819
|
+
...fullKit("trap"),
|
|
820
|
+
bass: role("bass", "saw:0.3"),
|
|
821
|
+
chords: role("keys", "epiano:0.6", "pluck:0.4"),
|
|
822
|
+
lead: role("sing"),
|
|
823
|
+
},
|
|
824
|
+
},
|
|
825
|
+
mix: { loudness: "streaming" },
|
|
826
|
+
}),
|
|
827
|
+
card({
|
|
828
|
+
id: "juju",
|
|
829
|
+
summary:
|
|
830
|
+
"juju: talking-drum call and response over steel-guitar lines, I-IV-V hymn harmony, layered hand drums in a medium 4/4 lilt",
|
|
831
|
+
tempo: { bpm: [92, 120], typical: 104 },
|
|
832
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
833
|
+
rhythm: {
|
|
834
|
+
onsets: {
|
|
835
|
+
kick: grid("x.......x......."),
|
|
836
|
+
perc: grid("x..x..x.x.x..x.."),
|
|
837
|
+
bell: grid("x.x.x.x.x.x.x.x."),
|
|
838
|
+
chords: OFFBEATS,
|
|
839
|
+
},
|
|
840
|
+
},
|
|
841
|
+
harmony: { forms: [[["I", "IV", "V", "I"], 1]], sources: { forms: 3 } },
|
|
842
|
+
texture: {
|
|
843
|
+
roles: {
|
|
844
|
+
chords: role("electric", "steel:0.6"),
|
|
845
|
+
lead: role("sing", "steel:0.4"),
|
|
846
|
+
counter: maybe("steel"),
|
|
847
|
+
},
|
|
848
|
+
},
|
|
849
|
+
}),
|
|
850
|
+
card({
|
|
851
|
+
id: "fuji",
|
|
852
|
+
summary:
|
|
853
|
+
"fuji and apala: drums and voice only, no chords, pentatonic call and response over a dense dundun and sakara cross-rhythm",
|
|
854
|
+
tempo: { bpm: [110, 140], typical: 124 },
|
|
855
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
856
|
+
pitch: { scales: [["major-pentatonic", 1]] },
|
|
857
|
+
harmony: { model: "drone" },
|
|
858
|
+
rhythm: {
|
|
859
|
+
onsets: {
|
|
860
|
+
kick: grid("x..x...x..x....."),
|
|
861
|
+
perc: grid("x.xx.x.xx.x.x.xx"),
|
|
862
|
+
bell: grid("x.x.x.x.x.x.x.x."),
|
|
863
|
+
},
|
|
864
|
+
},
|
|
865
|
+
melody: { intervals: CHANT, density: [2, 3] },
|
|
866
|
+
bass: { behaviour: [["none", 1]] },
|
|
867
|
+
texture: {
|
|
868
|
+
kind: "homophonic",
|
|
869
|
+
roles: {
|
|
870
|
+
chords: null,
|
|
871
|
+
bass: null,
|
|
872
|
+
lead: role("sing"),
|
|
873
|
+
counter: role("choir"),
|
|
874
|
+
},
|
|
875
|
+
},
|
|
876
|
+
}),
|
|
877
|
+
card({
|
|
878
|
+
id: "griot",
|
|
879
|
+
summary:
|
|
880
|
+
"griot and kora: a kumbengo ostinato under birimintingo runs, heptatonic Mande scale, sung praise in long arching phrases, 12/8 felt in fours",
|
|
881
|
+
tempo: { bpm: [96, 132], typical: 112 },
|
|
882
|
+
meter: { signatures: [["12/8", 1]], hypermeter: [[2, 1]] },
|
|
883
|
+
pitch: {
|
|
884
|
+
scales: [
|
|
885
|
+
["major", 0.5],
|
|
886
|
+
["lydian", 0.3],
|
|
887
|
+
["mixolydian", 0.2],
|
|
888
|
+
],
|
|
889
|
+
},
|
|
890
|
+
harmony: { model: "modal", rhythm: [[0.5, 1]] },
|
|
891
|
+
bass: { behaviour: [["ostinato", 1]], onsets: grid("x..x..x..x..") },
|
|
892
|
+
melody: {
|
|
893
|
+
intervals: LEAPY,
|
|
894
|
+
contour: [
|
|
895
|
+
["arch", 0.6],
|
|
896
|
+
["descending", 0.4],
|
|
897
|
+
],
|
|
898
|
+
},
|
|
899
|
+
texture: {
|
|
900
|
+
roles: {
|
|
901
|
+
...NO_KIT,
|
|
902
|
+
bass: role("harp"),
|
|
903
|
+
chords: role("harp"),
|
|
904
|
+
lead: role("sing", "harp:0.6"),
|
|
905
|
+
counter: maybe("harp", "xylophone:0.5"),
|
|
906
|
+
perc: maybe("framedrum"),
|
|
907
|
+
},
|
|
908
|
+
},
|
|
909
|
+
}),
|
|
910
|
+
card({
|
|
911
|
+
id: "mande-pop",
|
|
912
|
+
summary:
|
|
913
|
+
"Mande and wassoulou pop: pentatonic kamalengoni ostinato, shekere sixteenths, a 12/8 lope with a swung 4/4 kit, women's call and response",
|
|
914
|
+
tempo: { bpm: [100, 136], typical: 118 },
|
|
915
|
+
meter: { signatures: [["12/8", 1]], hypermeter: [[2, 1]] },
|
|
916
|
+
pitch: {
|
|
917
|
+
scales: [
|
|
918
|
+
["minor-pentatonic", 0.6],
|
|
919
|
+
["major-pentatonic", 0.4],
|
|
920
|
+
],
|
|
921
|
+
},
|
|
922
|
+
harmony: { model: "modal", rhythm: [[0.5, 1]] },
|
|
923
|
+
rhythm: {
|
|
924
|
+
onsets: {
|
|
925
|
+
// The karignan iron scraper's long-short lope and a kit backbeat.
|
|
926
|
+
shaker: grid("xx.xx.xx.xx."),
|
|
927
|
+
kick: grid("x.....x....."),
|
|
928
|
+
snare: grid("...x.....x.."),
|
|
929
|
+
},
|
|
930
|
+
},
|
|
931
|
+
bass: { behaviour: [["ostinato", 1]], onsets: grid("x.xx..x.xx..") },
|
|
932
|
+
texture: {
|
|
933
|
+
roles: {
|
|
934
|
+
snare: maybe("drums"),
|
|
935
|
+
chords: role("harp", "electric:0.6"),
|
|
936
|
+
lead: role("sing"),
|
|
937
|
+
counter: maybe("harp", "flute:0.5"),
|
|
938
|
+
},
|
|
939
|
+
},
|
|
940
|
+
}),
|
|
941
|
+
card({
|
|
942
|
+
id: "desert-blues",
|
|
943
|
+
summary:
|
|
944
|
+
"desert blues: minor-pentatonic guitar hypnosis on a single tonic drone, 6/8 camel-gait lope, handclaps and calabash, no chord changes",
|
|
945
|
+
tempo: { bpm: [84, 120], typical: 100 },
|
|
946
|
+
meter: { signatures: [["6/8", 1]], hypermeter: [[4, 1]] },
|
|
947
|
+
pitch: {
|
|
948
|
+
scales: [
|
|
949
|
+
["minor-pentatonic", 0.6],
|
|
950
|
+
["blues", 0.4],
|
|
951
|
+
],
|
|
952
|
+
},
|
|
953
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
954
|
+
rhythm: {
|
|
955
|
+
onsets: {
|
|
956
|
+
kick: grid("x.....x....."),
|
|
957
|
+
clap: grid("...x.....x.."),
|
|
958
|
+
perc: grid("x..x.xx..x.x"),
|
|
959
|
+
},
|
|
960
|
+
},
|
|
961
|
+
bass: { behaviour: [["pedal", 1]] },
|
|
962
|
+
melody: { intervals: CONJUNCT, ambitus: [5, 12] },
|
|
963
|
+
texture: {
|
|
964
|
+
roles: {
|
|
965
|
+
bell: null,
|
|
966
|
+
clap: kitRole("acoustic"),
|
|
967
|
+
chords: null,
|
|
968
|
+
drone: role("electric"),
|
|
969
|
+
lead: role("electric", "sing:0.6"),
|
|
970
|
+
counter: maybe("electric"),
|
|
971
|
+
},
|
|
972
|
+
},
|
|
973
|
+
}),
|
|
974
|
+
card({
|
|
975
|
+
id: "mbalax",
|
|
976
|
+
summary:
|
|
977
|
+
"mbalax: sabar drum rolls in fast cross-rhythm, tama talking drum fills, bright major-key keys and guitar, melismatic Wolof lead",
|
|
978
|
+
tempo: { bpm: [120, 150], typical: 132 },
|
|
979
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
980
|
+
rhythm: {
|
|
981
|
+
onsets: {
|
|
982
|
+
kick: grid("x..x..x.x......."),
|
|
983
|
+
snare: grid("....x..x....x.x."),
|
|
984
|
+
hat: SIXTEENTHS,
|
|
985
|
+
perc: grid("xx.x.xx.x.xx.x.x"),
|
|
986
|
+
},
|
|
987
|
+
},
|
|
988
|
+
melody: { intervals: ORNATE, density: [2, 4] },
|
|
989
|
+
texture: {
|
|
990
|
+
roles: {
|
|
991
|
+
...fullKit("acoustic"),
|
|
992
|
+
chords: role("keys", "electric:0.6"),
|
|
993
|
+
lead: role("sing", "sax:0.3"),
|
|
994
|
+
},
|
|
995
|
+
},
|
|
996
|
+
}),
|
|
997
|
+
card({
|
|
998
|
+
id: "morna",
|
|
999
|
+
summary:
|
|
1000
|
+
"morna and coladeira: slow 4/4 lament (sodade), minor key with V7-i and iv cadences, cavaquinho off-beat chops over nylon guitar",
|
|
1001
|
+
tempo: { bpm: [60, 96], typical: 76 },
|
|
1002
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1003
|
+
pitch: {
|
|
1004
|
+
scales: [
|
|
1005
|
+
["harmonic-minor", 0.6],
|
|
1006
|
+
["minor", 0.4],
|
|
1007
|
+
],
|
|
1008
|
+
},
|
|
1009
|
+
harmony: {
|
|
1010
|
+
presets: [
|
|
1011
|
+
["minor-ii-v", 0.6],
|
|
1012
|
+
["andalusian", 0.4],
|
|
1013
|
+
],
|
|
1014
|
+
cadences: [
|
|
1015
|
+
["V-I", 0.7],
|
|
1016
|
+
["iv-I", 0.3],
|
|
1017
|
+
],
|
|
1018
|
+
sevenths: 0.5,
|
|
1019
|
+
},
|
|
1020
|
+
rhythm: {
|
|
1021
|
+
onsets: {
|
|
1022
|
+
chords: grid("x..x..x.x..x..x."),
|
|
1023
|
+
perc: grid("..x...x...x...x."),
|
|
1024
|
+
},
|
|
1025
|
+
},
|
|
1026
|
+
melody: {
|
|
1027
|
+
intervals: CONJUNCT,
|
|
1028
|
+
contour: [
|
|
1029
|
+
["arch", 0.7],
|
|
1030
|
+
["descending", 0.3],
|
|
1031
|
+
],
|
|
1032
|
+
},
|
|
1033
|
+
texture: {
|
|
1034
|
+
roles: {
|
|
1035
|
+
...NO_KIT,
|
|
1036
|
+
bell: null,
|
|
1037
|
+
chords: role("nylon"),
|
|
1038
|
+
bass: role("upright", "nylon:0.4"),
|
|
1039
|
+
lead: role("sing", "violin:0.3", "clarinet:0.3"),
|
|
1040
|
+
counter: maybe("violin", "piano:0.5"),
|
|
1041
|
+
},
|
|
1042
|
+
},
|
|
1043
|
+
}),
|
|
1044
|
+
card({
|
|
1045
|
+
id: "funana",
|
|
1046
|
+
summary:
|
|
1047
|
+
"funana: fast duple accordion two-chord pendulum (I-V or i-bVII), ferrinho scraper on every sixteenth, bass on every beat",
|
|
1048
|
+
tempo: { bpm: [128, 160], typical: 140 },
|
|
1049
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1050
|
+
harmony: {
|
|
1051
|
+
forms: [
|
|
1052
|
+
[["I", "V"], 0.6],
|
|
1053
|
+
[["i", "bVII"], 0.4],
|
|
1054
|
+
],
|
|
1055
|
+
sources: { forms: 3 },
|
|
1056
|
+
rhythm: [[1, 1]],
|
|
1057
|
+
},
|
|
1058
|
+
rhythm: {
|
|
1059
|
+
onsets: {
|
|
1060
|
+
kick: FOUR_FLOOR,
|
|
1061
|
+
shaker: SIXTEENTHS,
|
|
1062
|
+
chords: EIGHTHS,
|
|
1063
|
+
},
|
|
1064
|
+
},
|
|
1065
|
+
bass: { behaviour: [["root-fifth", 1]], onsets: FOUR_FLOOR },
|
|
1066
|
+
texture: {
|
|
1067
|
+
roles: {
|
|
1068
|
+
bell: null,
|
|
1069
|
+
perc: null,
|
|
1070
|
+
shaker: role("drums"),
|
|
1071
|
+
chords: role("organ", "keys:0.5"),
|
|
1072
|
+
lead: role("sing", "organ:0.5"),
|
|
1073
|
+
},
|
|
1074
|
+
},
|
|
1075
|
+
}),
|
|
1076
|
+
card({
|
|
1077
|
+
id: "west-african-drum",
|
|
1078
|
+
summary:
|
|
1079
|
+
"djembe ensemble (kuku): dundunba, sangban and kenkeni ostinati with their bells interlock in a fast 4/4, accompanying djembes, the lead djembe solos, no harmony",
|
|
1080
|
+
tempo: { bpm: [120, 160], typical: 138 },
|
|
1081
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1082
|
+
pitch: { scales: [["major-pentatonic", 1]] },
|
|
1083
|
+
harmony: { model: "none" },
|
|
1084
|
+
rhythm: {
|
|
1085
|
+
onsets: {
|
|
1086
|
+
// Kenkeni bell on the off-beats, dundunba and sangban as the kick,
|
|
1087
|
+
// the djembe accompaniment's tone-slap figure as the perc.
|
|
1088
|
+
bell: grid("..x...x...x...x."),
|
|
1089
|
+
kick: grid("x..x..x.....x..."),
|
|
1090
|
+
perc: grid("x.xx..x.x.xx..x."),
|
|
1091
|
+
shaker: SIXTEENTHS,
|
|
1092
|
+
},
|
|
1093
|
+
},
|
|
1094
|
+
bass: { behaviour: [["none", 1]] },
|
|
1095
|
+
melody: { intervals: CHANT, density: [1, 2] },
|
|
1096
|
+
texture: {
|
|
1097
|
+
kind: "interlocking",
|
|
1098
|
+
roles: {
|
|
1099
|
+
chords: null,
|
|
1100
|
+
bass: null,
|
|
1101
|
+
lead: role("sing", "flute:0.4"),
|
|
1102
|
+
},
|
|
1103
|
+
},
|
|
1104
|
+
}),
|
|
1105
|
+
card({
|
|
1106
|
+
id: "ewe-drumming",
|
|
1107
|
+
summary:
|
|
1108
|
+
"Ewe dance drumming (agbadza): the gankogui bell 2-2-1-2-2-2-1 is the timeline, support drums answer on off-pulses, atsimevu leads",
|
|
1109
|
+
tempo: { bpm: [100, 140], typical: 120 },
|
|
1110
|
+
meter: { signatures: [["12/8", 1]], hypermeter: [[2, 1]] },
|
|
1111
|
+
pitch: { scales: [["major-pentatonic", 1]] },
|
|
1112
|
+
harmony: { model: "none" },
|
|
1113
|
+
rhythm: {
|
|
1114
|
+
onsets: {
|
|
1115
|
+
bell: STANDARD_BELL,
|
|
1116
|
+
kick: grid("x.....x....."),
|
|
1117
|
+
perc: grid("..x..x..x..x"),
|
|
1118
|
+
shaker: grid("x..x..x..x.."),
|
|
1119
|
+
},
|
|
1120
|
+
},
|
|
1121
|
+
bass: { behaviour: [["none", 1]] },
|
|
1122
|
+
melody: { intervals: CHANT },
|
|
1123
|
+
texture: {
|
|
1124
|
+
kind: "interlocking",
|
|
1125
|
+
roles: {
|
|
1126
|
+
chords: null,
|
|
1127
|
+
bass: null,
|
|
1128
|
+
lead: role("sing"),
|
|
1129
|
+
counter: role("choir"),
|
|
1130
|
+
},
|
|
1131
|
+
},
|
|
1132
|
+
}),
|
|
1133
|
+
|
|
1134
|
+
// Central Africa. References: Gary Stewart, Rumba on the River (2000);
|
|
1135
|
+
// Simha Arom, African Polyphony and Polyrhythm (1991).
|
|
1136
|
+
card({
|
|
1137
|
+
id: "soukous",
|
|
1138
|
+
summary:
|
|
1139
|
+
"soukous and Congolese rumba: a sung rumba half, then the sebene: interlocking lead, mi-solo and rhythm guitars over a I-IV-V-IV cycle",
|
|
1140
|
+
tempo: { bpm: [116, 150], typical: 132 },
|
|
1141
|
+
harmony: { forms: [[["I", "IV", "V", "IV"], 1]], sources: { forms: 3 } },
|
|
1142
|
+
rhythm: { onsets: { hat: SIXTEENTHS } },
|
|
1143
|
+
melody: { intervals: LEAPY, density: [2, 4] },
|
|
1144
|
+
texture: {
|
|
1145
|
+
roles: {
|
|
1146
|
+
...fullKit("acoustic"),
|
|
1147
|
+
bass: role("ebass"),
|
|
1148
|
+
counter: role("electric"),
|
|
1149
|
+
},
|
|
1150
|
+
},
|
|
1151
|
+
}),
|
|
1152
|
+
card({
|
|
1153
|
+
id: "makossa",
|
|
1154
|
+
summary:
|
|
1155
|
+
"makossa and bikutsi: makossa's busy melodic bass on a four-on-the-floor; bikutsi's 6/8 hammered against 4/4, balafon-like guitar",
|
|
1156
|
+
tempo: { bpm: [110, 140], typical: 124 },
|
|
1157
|
+
rhythm: { onsets: { kick: FOUR_FLOOR, hat: OFFBEATS } },
|
|
1158
|
+
bass: {
|
|
1159
|
+
behaviour: [
|
|
1160
|
+
["arpeggio", 0.6],
|
|
1161
|
+
["walking", 0.4],
|
|
1162
|
+
],
|
|
1163
|
+
},
|
|
1164
|
+
texture: {
|
|
1165
|
+
roles: {
|
|
1166
|
+
...fullKit("acoustic"),
|
|
1167
|
+
bass: role("ebass"),
|
|
1168
|
+
chords: role("electric", "marimba:0.4"),
|
|
1169
|
+
counter: maybe("sax", "trumpet:0.5"),
|
|
1170
|
+
},
|
|
1171
|
+
},
|
|
1172
|
+
}),
|
|
1173
|
+
card({
|
|
1174
|
+
id: "aka-polyphony",
|
|
1175
|
+
summary:
|
|
1176
|
+
"forest polyphony: yodelled interlocking voices in a pentatonic cycle, each part a short ostinato, hand claps and a hemiola pulse",
|
|
1177
|
+
tempo: { bpm: [100, 132], typical: 116 },
|
|
1178
|
+
meter: { signatures: [["12/8", 1]], hypermeter: [[2, 1]] },
|
|
1179
|
+
pitch: { scales: [["major-pentatonic", 1]] },
|
|
1180
|
+
harmony: { model: "none" },
|
|
1181
|
+
rhythm: {
|
|
1182
|
+
onsets: {
|
|
1183
|
+
clap: grid("x.x.xx.x.x.x"),
|
|
1184
|
+
perc: grid("x..x..x..x.."),
|
|
1185
|
+
},
|
|
1186
|
+
},
|
|
1187
|
+
bass: { behaviour: [["none", 1]] },
|
|
1188
|
+
melody: { intervals: LEAPY, repetition: 0.85, ambitus: [7, 14] },
|
|
1189
|
+
texture: {
|
|
1190
|
+
kind: "interlocking",
|
|
1191
|
+
roles: {
|
|
1192
|
+
...NO_KIT,
|
|
1193
|
+
clap: kitRole("acoustic"),
|
|
1194
|
+
bell: null,
|
|
1195
|
+
chords: null,
|
|
1196
|
+
bass: null,
|
|
1197
|
+
lead: role("sing"),
|
|
1198
|
+
counter: role("choir", "flute:0.4"),
|
|
1199
|
+
},
|
|
1200
|
+
},
|
|
1201
|
+
}),
|
|
1202
|
+
// East Africa. References: Kelly Askew, Performing the Nation (2002);
|
|
1203
|
+
// Kay Kaufman Shelemay, Music, Ritual and Falasha History (1986).
|
|
1204
|
+
card({
|
|
1205
|
+
id: "benga",
|
|
1206
|
+
summary:
|
|
1207
|
+
"benga: fast 4/4 with the bass playing the plucked nyatiti lyre's leaping ostinato, bright interlocking guitars, I-IV-V in major",
|
|
1208
|
+
tempo: { bpm: [120, 150], typical: 136 },
|
|
1209
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1210
|
+
pitch: {
|
|
1211
|
+
scales: [
|
|
1212
|
+
["major", 0.6],
|
|
1213
|
+
["major-pentatonic", 0.4],
|
|
1214
|
+
],
|
|
1215
|
+
},
|
|
1216
|
+
harmony: { forms: [[["I", "IV", "I", "V"], 1]], sources: { forms: 3 } },
|
|
1217
|
+
rhythm: {
|
|
1218
|
+
onsets: {
|
|
1219
|
+
kick: FOUR_FLOOR,
|
|
1220
|
+
snare: BACKBEAT,
|
|
1221
|
+
hat: EIGHTHS,
|
|
1222
|
+
chords: SIXTEENTHS,
|
|
1223
|
+
},
|
|
1224
|
+
},
|
|
1225
|
+
bass: { behaviour: [["arpeggio", 1]], onsets: EIGHTHS },
|
|
1226
|
+
texture: {
|
|
1227
|
+
roles: {
|
|
1228
|
+
...fullKit("acoustic"),
|
|
1229
|
+
bass: role("ebass"),
|
|
1230
|
+
chords: role("electric"),
|
|
1231
|
+
lead: role("sing", "electric:0.5"),
|
|
1232
|
+
},
|
|
1233
|
+
},
|
|
1234
|
+
}),
|
|
1235
|
+
card({
|
|
1236
|
+
id: "taarab",
|
|
1237
|
+
summary:
|
|
1238
|
+
"taarab: Swahili sung poetry on Arabic maqam (hijaz, rast) with a qanun-and-violin orchestra, the 4/4 chakacha lilt, heterophony",
|
|
1239
|
+
tempo: { bpm: [84, 116], typical: 100 },
|
|
1240
|
+
meter: { signatures: [["8/8", 1]], cycle: MAQSUM },
|
|
1241
|
+
pitch: {
|
|
1242
|
+
scales: [
|
|
1243
|
+
["hijaz", 0.5],
|
|
1244
|
+
["nahawand", 0.5],
|
|
1245
|
+
],
|
|
1246
|
+
},
|
|
1247
|
+
harmony: { model: "drone", rhythm: [[0.5, 1]] },
|
|
1248
|
+
melody: { intervals: ORNATE },
|
|
1249
|
+
texture: {
|
|
1250
|
+
kind: "heterophonic",
|
|
1251
|
+
roles: {
|
|
1252
|
+
kick: null,
|
|
1253
|
+
bell: null,
|
|
1254
|
+
perc: role("daf", "framedrum:0.5"),
|
|
1255
|
+
chords: null,
|
|
1256
|
+
drone: maybe("oud"),
|
|
1257
|
+
lead: role("sing", "violin:0.5"),
|
|
1258
|
+
counter: role("oud", "violin:0.6", "harp:0.4"),
|
|
1259
|
+
},
|
|
1260
|
+
},
|
|
1261
|
+
}),
|
|
1262
|
+
card({
|
|
1263
|
+
id: "bongo-flava",
|
|
1264
|
+
summary:
|
|
1265
|
+
"bongo flava: Tanzanian pop on a programmed kit, taarab-inflected sung hooks, minor loops, singeli-fast hats in the dance cuts",
|
|
1266
|
+
tempo: { bpm: [92, 120], typical: 104 },
|
|
1267
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1268
|
+
pitch: {
|
|
1269
|
+
scales: [
|
|
1270
|
+
["minor", 0.6],
|
|
1271
|
+
["minor-pentatonic", 0.4],
|
|
1272
|
+
],
|
|
1273
|
+
},
|
|
1274
|
+
harmony: {
|
|
1275
|
+
presets: [
|
|
1276
|
+
["aeolian", 0.5],
|
|
1277
|
+
["sad-pop", 0.5],
|
|
1278
|
+
],
|
|
1279
|
+
},
|
|
1280
|
+
rhythm: { onsets: { kick: TRESILLO, snare: BACKBEAT, hat: SIXTEENTHS } },
|
|
1281
|
+
texture: {
|
|
1282
|
+
roles: {
|
|
1283
|
+
...fullKit("trap"),
|
|
1284
|
+
bass: role("bass"),
|
|
1285
|
+
chords: role("keys", "pluck:0.5"),
|
|
1286
|
+
lead: role("sing"),
|
|
1287
|
+
},
|
|
1288
|
+
},
|
|
1289
|
+
}),
|
|
1290
|
+
card({
|
|
1291
|
+
id: "ethio-jazz",
|
|
1292
|
+
summary:
|
|
1293
|
+
"Ethio-jazz: the anhemitonic qenet modes (tezeta, ambassel, anchihoye) over a minor vamp, 6/8 chik-chika shuffle, horns in unison",
|
|
1294
|
+
tempo: { bpm: [80, 120], typical: 96 },
|
|
1295
|
+
meter: {
|
|
1296
|
+
signatures: [
|
|
1297
|
+
["6/8", 0.6],
|
|
1298
|
+
["4/4", 0.4],
|
|
1299
|
+
],
|
|
1300
|
+
hypermeter: [[4, 1]],
|
|
1301
|
+
},
|
|
1302
|
+
pitch: {
|
|
1303
|
+
scales: [
|
|
1304
|
+
["minor-pentatonic", 0.5],
|
|
1305
|
+
["kurd", 0.3],
|
|
1306
|
+
["minor", 0.2],
|
|
1307
|
+
],
|
|
1308
|
+
},
|
|
1309
|
+
harmony: { model: "modal", rhythm: [[0.5, 1]], sevenths: 0.6 },
|
|
1310
|
+
rhythm: {
|
|
1311
|
+
onsets: { kick: grid("x.....x....."), snare: grid("...x.....x..") },
|
|
1312
|
+
},
|
|
1313
|
+
bass: { behaviour: [["ostinato", 1]] },
|
|
1314
|
+
texture: {
|
|
1315
|
+
roles: {
|
|
1316
|
+
...fullKit("acoustic"),
|
|
1317
|
+
bell: null,
|
|
1318
|
+
bass: role("upright", "ebass:0.5"),
|
|
1319
|
+
chords: role("organ", "vibes:0.6", "rhodes:0.4"),
|
|
1320
|
+
lead: role("sax", "vibes:0.5", "trumpet:0.4"),
|
|
1321
|
+
counter: maybe("trumpet", "sax:0.5"),
|
|
1322
|
+
},
|
|
1323
|
+
},
|
|
1324
|
+
}),
|
|
1325
|
+
card({
|
|
1326
|
+
id: "ethiopian-chant",
|
|
1327
|
+
summary:
|
|
1328
|
+
"zema: Ethiopian Orthodox liturgical chant in the ge'ez, ezel and araray modes, slow choral monophony with sistrum and kebero",
|
|
1329
|
+
tempo: { bpm: [50, 80], typical: 64 },
|
|
1330
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]], cycle: WAHDA },
|
|
1331
|
+
pitch: {
|
|
1332
|
+
scales: [
|
|
1333
|
+
["major-pentatonic", 0.5],
|
|
1334
|
+
["minor-pentatonic", 0.5],
|
|
1335
|
+
],
|
|
1336
|
+
},
|
|
1337
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
1338
|
+
melody: { intervals: CHANT, density: [1, 2], ambitus: [5, 9] },
|
|
1339
|
+
bass: { behaviour: [["none", 1]] },
|
|
1340
|
+
texture: {
|
|
1341
|
+
kind: "monophonic",
|
|
1342
|
+
roles: {
|
|
1343
|
+
kick: null,
|
|
1344
|
+
bell: maybe("bell"),
|
|
1345
|
+
shaker: null,
|
|
1346
|
+
perc: role("framedrum"),
|
|
1347
|
+
chords: null,
|
|
1348
|
+
bass: null,
|
|
1349
|
+
lead: role("choir", "sing:0.5"),
|
|
1350
|
+
},
|
|
1351
|
+
},
|
|
1352
|
+
mix: { space: 0.7 },
|
|
1353
|
+
}),
|
|
1354
|
+
card({
|
|
1355
|
+
id: "somali",
|
|
1356
|
+
summary:
|
|
1357
|
+
"Somali music: pentatonic qaraami songs with oud lead, a swaying 6/8 dhaanto, call and response, few chords",
|
|
1358
|
+
tempo: { bpm: [84, 120], typical: 100 },
|
|
1359
|
+
pitch: {
|
|
1360
|
+
scales: [
|
|
1361
|
+
["major-pentatonic", 0.5],
|
|
1362
|
+
["minor-pentatonic", 0.5],
|
|
1363
|
+
],
|
|
1364
|
+
},
|
|
1365
|
+
harmony: { model: "drone", rhythm: [[0.5, 1]] },
|
|
1366
|
+
melody: { intervals: CONJUNCT },
|
|
1367
|
+
texture: {
|
|
1368
|
+
roles: {
|
|
1369
|
+
kick: null,
|
|
1370
|
+
bell: null,
|
|
1371
|
+
perc: role("framedrum", "daf:0.4"),
|
|
1372
|
+
chords: null,
|
|
1373
|
+
drone: maybe("oud"),
|
|
1374
|
+
lead: role("sing", "oud:0.6"),
|
|
1375
|
+
counter: role("oud", "keys:0.4"),
|
|
1376
|
+
},
|
|
1377
|
+
},
|
|
1378
|
+
}),
|
|
1379
|
+
card({
|
|
1380
|
+
id: "kidandali",
|
|
1381
|
+
summary:
|
|
1382
|
+
"kidandali: Ugandan dance pop, kadongo kamu guitar picking on a four-on-the-floor kit, I-IV-V loops, sung Luganda hooks",
|
|
1383
|
+
tempo: { bpm: [110, 132], typical: 120 },
|
|
1384
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1385
|
+
pitch: {
|
|
1386
|
+
scales: [
|
|
1387
|
+
["major", 0.7],
|
|
1388
|
+
["major-pentatonic", 0.3],
|
|
1389
|
+
],
|
|
1390
|
+
},
|
|
1391
|
+
harmony: {
|
|
1392
|
+
presets: [
|
|
1393
|
+
["axis", 0.5],
|
|
1394
|
+
["fifties", 0.5],
|
|
1395
|
+
],
|
|
1396
|
+
},
|
|
1397
|
+
rhythm: { onsets: { kick: FOUR_FLOOR, snare: BACKBEAT, hat: OFFBEATS } },
|
|
1398
|
+
texture: {
|
|
1399
|
+
roles: {
|
|
1400
|
+
...fullKit("syn808"),
|
|
1401
|
+
bass: role("bass"),
|
|
1402
|
+
chords: role("keys", "electric:0.6"),
|
|
1403
|
+
lead: role("sing"),
|
|
1404
|
+
},
|
|
1405
|
+
},
|
|
1406
|
+
}),
|
|
1407
|
+
|
|
1408
|
+
// Southern Africa. References: David Coplan, In Township Tonight! (1985);
|
|
1409
|
+
// Paul Berliner, The Soul of Mbira (1978).
|
|
1410
|
+
card({
|
|
1411
|
+
id: "mbaqanga",
|
|
1412
|
+
summary:
|
|
1413
|
+
"mbaqanga and township jive: the I-IV-I64-V cycle, a melodic bouncing bass leading the band, clean guitar riffs, groaning male lead against women's harmony",
|
|
1414
|
+
tempo: { bpm: [116, 144], typical: 128 },
|
|
1415
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1416
|
+
rhythm: { onsets: { kick: FOUR_FLOOR, snare: BACKBEAT, hat: EIGHTHS } },
|
|
1417
|
+
bass: {
|
|
1418
|
+
behaviour: [
|
|
1419
|
+
["arpeggio", 0.7],
|
|
1420
|
+
["walking", 0.3],
|
|
1421
|
+
],
|
|
1422
|
+
onsets: EIGHTHS,
|
|
1423
|
+
},
|
|
1424
|
+
texture: {
|
|
1425
|
+
roles: {
|
|
1426
|
+
...fullKit("acoustic"),
|
|
1427
|
+
bell: null,
|
|
1428
|
+
bass: role("ebass"),
|
|
1429
|
+
chords: role("electric", "organ:0.4"),
|
|
1430
|
+
lead: role("sing"),
|
|
1431
|
+
counter: role("choir", "sax:0.4"),
|
|
1432
|
+
},
|
|
1433
|
+
},
|
|
1434
|
+
}),
|
|
1435
|
+
card({
|
|
1436
|
+
id: "isicathamiya",
|
|
1437
|
+
summary:
|
|
1438
|
+
"isicathamiya: unaccompanied Zulu male choir, bass-heavy close harmony on I-IV-I64-V, call from the leader and choral response, soft tiptoe pulse",
|
|
1439
|
+
tempo: { bpm: [70, 100], typical: 84 },
|
|
1440
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1441
|
+
harmony: {
|
|
1442
|
+
voicing: { types: [["close", 1]], range: [40, 64], notes: [3, 4] },
|
|
1443
|
+
},
|
|
1444
|
+
melody: { intervals: CONJUNCT, density: [1, 2] },
|
|
1445
|
+
bass: {
|
|
1446
|
+
behaviour: [
|
|
1447
|
+
["root", 0.6],
|
|
1448
|
+
["root-fifth", 0.4],
|
|
1449
|
+
],
|
|
1450
|
+
},
|
|
1451
|
+
texture: {
|
|
1452
|
+
kind: "homophonic",
|
|
1453
|
+
roles: {
|
|
1454
|
+
...NO_KIT,
|
|
1455
|
+
bell: null,
|
|
1456
|
+
perc: null,
|
|
1457
|
+
shaker: null,
|
|
1458
|
+
bass: role("choir"),
|
|
1459
|
+
chords: role("choir"),
|
|
1460
|
+
lead: role("sing"),
|
|
1461
|
+
},
|
|
1462
|
+
},
|
|
1463
|
+
mix: { space: 0.4 },
|
|
1464
|
+
}),
|
|
1465
|
+
card({
|
|
1466
|
+
id: "marabi",
|
|
1467
|
+
summary:
|
|
1468
|
+
"marabi and kwela: a three-chord I-IV-I64-V shuffle on keys, a pennywhistle lead in swung eighths, walking skiffle bass",
|
|
1469
|
+
tempo: { bpm: [110, 140], typical: 124 },
|
|
1470
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1471
|
+
groove: { subdivision: 2, swingRatio: [1.4, 1.8] },
|
|
1472
|
+
rhythm: {
|
|
1473
|
+
onsets: {
|
|
1474
|
+
kick: grid("x...x..."),
|
|
1475
|
+
snare: grid("..x...x."),
|
|
1476
|
+
chords: grid(".x.x.x.x"),
|
|
1477
|
+
},
|
|
1478
|
+
},
|
|
1479
|
+
bass: { behaviour: [["walking", 1]] },
|
|
1480
|
+
texture: {
|
|
1481
|
+
roles: {
|
|
1482
|
+
...fullKit("acoustic"),
|
|
1483
|
+
bell: null,
|
|
1484
|
+
perc: null,
|
|
1485
|
+
shaker: null,
|
|
1486
|
+
bass: role("upright"),
|
|
1487
|
+
chords: role("piano", "organ:0.5", "nylon:0.4"),
|
|
1488
|
+
lead: role("whistle", "sax:0.4"),
|
|
1489
|
+
},
|
|
1490
|
+
},
|
|
1491
|
+
}),
|
|
1492
|
+
card({
|
|
1493
|
+
id: "cape-jazz",
|
|
1494
|
+
summary:
|
|
1495
|
+
"Cape jazz: marabi and ghoema rhythms under jazz harmony, ii-V-I with extended chords, piano-led modal vamps, hymn-like melodies",
|
|
1496
|
+
tempo: { bpm: [80, 130], typical: 104 },
|
|
1497
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1498
|
+
harmony: {
|
|
1499
|
+
presets: [
|
|
1500
|
+
["ii-v-i", 0.5],
|
|
1501
|
+
["turnaround", 0.3],
|
|
1502
|
+
],
|
|
1503
|
+
forms: [[["I", "IV", "I", "V"], 1]],
|
|
1504
|
+
sources: { presets: 2, forms: 1 },
|
|
1505
|
+
sevenths: 0.8,
|
|
1506
|
+
voicing: {
|
|
1507
|
+
types: [
|
|
1508
|
+
["shell", 0.5],
|
|
1509
|
+
["open", 0.5],
|
|
1510
|
+
],
|
|
1511
|
+
range: [48, 72],
|
|
1512
|
+
notes: [3, 5],
|
|
1513
|
+
},
|
|
1514
|
+
},
|
|
1515
|
+
rhythm: {
|
|
1516
|
+
onsets: {
|
|
1517
|
+
kick: grid("x.....x.x......."),
|
|
1518
|
+
snare: grid("...x..x....x..x."),
|
|
1519
|
+
hat: EIGHTHS,
|
|
1520
|
+
},
|
|
1521
|
+
},
|
|
1522
|
+
bass: {
|
|
1523
|
+
behaviour: [
|
|
1524
|
+
["walking", 0.6],
|
|
1525
|
+
["arpeggio", 0.4],
|
|
1526
|
+
],
|
|
1527
|
+
},
|
|
1528
|
+
texture: {
|
|
1529
|
+
roles: {
|
|
1530
|
+
...fullKit("acoustic"),
|
|
1531
|
+
bell: null,
|
|
1532
|
+
perc: null,
|
|
1533
|
+
bass: role("upright"),
|
|
1534
|
+
chords: role("piano"),
|
|
1535
|
+
lead: role("sax", "piano:0.5", "trumpet:0.4"),
|
|
1536
|
+
},
|
|
1537
|
+
},
|
|
1538
|
+
}),
|
|
1539
|
+
card({
|
|
1540
|
+
id: "maskandi",
|
|
1541
|
+
summary:
|
|
1542
|
+
"maskandi: Zulu guitar music, a fast picked izihlabo introduction then concertina-like riffs over a I-IV-V lope, spoken praise (izibongo)",
|
|
1543
|
+
tempo: { bpm: [120, 150], typical: 132 },
|
|
1544
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1545
|
+
harmony: { forms: [[["I", "IV", "V", "I"], 1]], sources: { forms: 3 } },
|
|
1546
|
+
rhythm: { onsets: { kick: FOUR_FLOOR, snare: BACKBEAT, hat: EIGHTHS } },
|
|
1547
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
1548
|
+
melody: { intervals: LEAPY, density: [2, 4] },
|
|
1549
|
+
texture: {
|
|
1550
|
+
roles: {
|
|
1551
|
+
...fullKit("acoustic"),
|
|
1552
|
+
bell: null,
|
|
1553
|
+
perc: null,
|
|
1554
|
+
bass: role("ebass"),
|
|
1555
|
+
chords: role("steel", "electric:0.5"),
|
|
1556
|
+
lead: role("steel", "sing:0.6"),
|
|
1557
|
+
},
|
|
1558
|
+
},
|
|
1559
|
+
}),
|
|
1560
|
+
card({
|
|
1561
|
+
id: "chimurenga",
|
|
1562
|
+
summary:
|
|
1563
|
+
"chimurenga and mbira: the 48-pulse kushaura and kutsinhira interlock on a 12/8 hosho shaker, a four-phrase harmonic cycle, mbira-tuned guitars",
|
|
1564
|
+
tempo: { bpm: [110, 140], typical: 126 },
|
|
1565
|
+
meter: { signatures: [["12/8", 1]], hypermeter: [[4, 1]] },
|
|
1566
|
+
pitch: {
|
|
1567
|
+
tuning: "nyamaropa",
|
|
1568
|
+
scales: [["major", 1]],
|
|
1569
|
+
degrees: [0, 1, 2, 3, 4, 5, 6],
|
|
1570
|
+
},
|
|
1571
|
+
harmony: { model: "drone", rhythm: [[0.5, 1]] },
|
|
1572
|
+
rhythm: {
|
|
1573
|
+
onsets: { shaker: grid("x.xx.xx.xx.x"), kick: grid("x.....x.....") },
|
|
1574
|
+
},
|
|
1575
|
+
melody: { intervals: LEAPY, repetition: 0.85 },
|
|
1576
|
+
bass: { behaviour: [["ostinato", 1]], onsets: grid("x..x..x..x..") },
|
|
1577
|
+
texture: {
|
|
1578
|
+
kind: "interlocking",
|
|
1579
|
+
roles: {
|
|
1580
|
+
bell: null,
|
|
1581
|
+
shaker: role("drums"),
|
|
1582
|
+
bass: role("mbira"),
|
|
1583
|
+
chords: null,
|
|
1584
|
+
drone: role("mbira"),
|
|
1585
|
+
lead: role("mbira", "sing:0.6"),
|
|
1586
|
+
counter: role("mbira", "kalimba:0.5"),
|
|
1587
|
+
},
|
|
1588
|
+
},
|
|
1589
|
+
}),
|
|
1590
|
+
card({
|
|
1591
|
+
id: "kizomba",
|
|
1592
|
+
summary:
|
|
1593
|
+
"kizomba, semba and kuduro: slow zouk-derived 4/4 with the tresillo kick and sensual minor loops; semba faster, kuduro a hard electronic stomp",
|
|
1594
|
+
tempo: { bpm: [84, 140], typical: 92 },
|
|
1595
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1596
|
+
pitch: {
|
|
1597
|
+
scales: [
|
|
1598
|
+
["minor", 0.7],
|
|
1599
|
+
["dorian", 0.3],
|
|
1600
|
+
],
|
|
1601
|
+
},
|
|
1602
|
+
harmony: {
|
|
1603
|
+
presets: [
|
|
1604
|
+
["aeolian", 0.6],
|
|
1605
|
+
["sad-pop", 0.4],
|
|
1606
|
+
],
|
|
1607
|
+
sevenths: 0.5,
|
|
1608
|
+
},
|
|
1609
|
+
rhythm: {
|
|
1610
|
+
onsets: { kick: TRESILLO, snare: grid("...x...x...x...x"), hat: EIGHTHS },
|
|
1611
|
+
},
|
|
1612
|
+
texture: {
|
|
1613
|
+
roles: {
|
|
1614
|
+
...fullKit("electro"),
|
|
1615
|
+
bell: null,
|
|
1616
|
+
perc: null,
|
|
1617
|
+
bass: role("bass", "saw:0.3"),
|
|
1618
|
+
chords: role("keys", "strings:0.5"),
|
|
1619
|
+
lead: role("sing"),
|
|
1620
|
+
},
|
|
1621
|
+
},
|
|
1622
|
+
}),
|
|
1623
|
+
card({
|
|
1624
|
+
id: "marrabenta",
|
|
1625
|
+
summary:
|
|
1626
|
+
"marrabenta: Mozambican fast duple dance, bright I-IV-V guitar picking with a bouncing bass on the off-beats, call and response",
|
|
1627
|
+
tempo: { bpm: [120, 150], typical: 136 },
|
|
1628
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
1629
|
+
harmony: { forms: [[["I", "IV", "V", "I"], 1]], sources: { forms: 3 } },
|
|
1630
|
+
rhythm: { onsets: { kick: FOUR_FLOOR, snare: BACKBEAT, hat: OFFBEATS } },
|
|
1631
|
+
bass: { behaviour: [["root-fifth", 1]], onsets: grid("x..x..x.x..x..x.") },
|
|
1632
|
+
texture: {
|
|
1633
|
+
roles: {
|
|
1634
|
+
...fullKit("acoustic"),
|
|
1635
|
+
bell: null,
|
|
1636
|
+
perc: null,
|
|
1637
|
+
bass: role("ebass"),
|
|
1638
|
+
chords: role("electric", "nylon:0.5"),
|
|
1639
|
+
lead: role("sing"),
|
|
1640
|
+
},
|
|
1641
|
+
},
|
|
1642
|
+
}),
|
|
1643
|
+
card({
|
|
1644
|
+
id: "malagasy",
|
|
1645
|
+
summary:
|
|
1646
|
+
"salegy and tsapiky: fast Malagasy 6/8 with ternary-binary ambiguity, valiha-like harp and accordion runs in parallel thirds",
|
|
1647
|
+
tempo: { bpm: [130, 170], typical: 148 },
|
|
1648
|
+
meter: {
|
|
1649
|
+
signatures: [
|
|
1650
|
+
["6/8", 0.7],
|
|
1651
|
+
["12/8", 0.3],
|
|
1652
|
+
],
|
|
1653
|
+
hypermeter: [[4, 1]],
|
|
1654
|
+
},
|
|
1655
|
+
harmony: { forms: [[["I", "IV", "V", "I"], 1]], sources: { forms: 3 } },
|
|
1656
|
+
rhythm: {
|
|
1657
|
+
onsets: {
|
|
1658
|
+
kick: grid("x..x..x..x.."),
|
|
1659
|
+
snare: grid("...x.....x.."),
|
|
1660
|
+
hat: grid("xxxxxxxxxxxx"),
|
|
1661
|
+
},
|
|
1662
|
+
},
|
|
1663
|
+
melody: { intervals: LEAPY, density: [2, 4] },
|
|
1664
|
+
texture: {
|
|
1665
|
+
roles: {
|
|
1666
|
+
...fullKit("acoustic"),
|
|
1667
|
+
bell: null,
|
|
1668
|
+
bass: role("ebass"),
|
|
1669
|
+
chords: role("electric", "harp:0.5"),
|
|
1670
|
+
lead: role("harp", "organ:0.5", "sing:0.5"),
|
|
1671
|
+
},
|
|
1672
|
+
},
|
|
1673
|
+
}),
|
|
1674
|
+
card({
|
|
1675
|
+
id: "sega",
|
|
1676
|
+
summary:
|
|
1677
|
+
"sega and maloya: ternary 6/8 on ravanne frame drum, kayamb shaker and triangle, creole call and response, maloya's tonic drone",
|
|
1678
|
+
tempo: { bpm: [100, 140], typical: 120 },
|
|
1679
|
+
meter: { signatures: [["6/8", 1]], hypermeter: [[4, 1]] },
|
|
1680
|
+
harmony: {
|
|
1681
|
+
forms: [
|
|
1682
|
+
[["I", "V"], 0.6],
|
|
1683
|
+
[["I", "IV", "V", "I"], 0.4],
|
|
1684
|
+
],
|
|
1685
|
+
sources: { forms: 3 },
|
|
1686
|
+
},
|
|
1687
|
+
rhythm: {
|
|
1688
|
+
onsets: { perc: grid("x..x.xx..x.x"), shaker: grid("xxxxxxxxxxxx") },
|
|
1689
|
+
},
|
|
1690
|
+
texture: {
|
|
1691
|
+
kind: "homophonic",
|
|
1692
|
+
roles: {
|
|
1693
|
+
...NO_KIT,
|
|
1694
|
+
bell: null,
|
|
1695
|
+
perc: role("framedrum"),
|
|
1696
|
+
shaker: role("drums"),
|
|
1697
|
+
chords: role("nylon", "steel:0.5"),
|
|
1698
|
+
lead: role("sing"),
|
|
1699
|
+
counter: role("choir"),
|
|
1700
|
+
},
|
|
1701
|
+
},
|
|
1702
|
+
}),
|
|
1703
|
+
// Arabic maqam. References: Scott Marcus, Music in Egypt (2007); Habib
|
|
1704
|
+
// Hassan Touma, The Music of the Arabs (1996).
|
|
1705
|
+
card({
|
|
1706
|
+
id: "muwashshah",
|
|
1707
|
+
summary:
|
|
1708
|
+
"muwashshah and Andalusian nuba: strophic sung poetry in sama'i thaqil 10/8, maqam rast with its neutral third, the nuba's slow-to-fast suite",
|
|
1709
|
+
tempo: { bpm: [70, 120], typical: 92 },
|
|
1710
|
+
meter: {
|
|
1711
|
+
signatures: [["10/8", 1]],
|
|
1712
|
+
grouping: [[[3, 2, 2, 3], 1]],
|
|
1713
|
+
cycle: SAMAI_THAQIL,
|
|
1714
|
+
},
|
|
1715
|
+
pitch: {
|
|
1716
|
+
tuning: "rast",
|
|
1717
|
+
scales: [["rast", 1]],
|
|
1718
|
+
tonic: [[0, 1]],
|
|
1719
|
+
maqam: { sayr: [0, 2, 4, 2, 0], ghammaz: 4 },
|
|
1720
|
+
},
|
|
1721
|
+
form: {
|
|
1722
|
+
plans: [[["intro", "verse", "verse", "chorus", "verse"], 1]],
|
|
1723
|
+
archetype: "strophic",
|
|
1724
|
+
},
|
|
1725
|
+
texture: {
|
|
1726
|
+
roles: {
|
|
1727
|
+
lead: role("sing", "oud:0.5"),
|
|
1728
|
+
counter: role("violin", "ney:0.6", "oud:0.5"),
|
|
1729
|
+
perc: role("daf", "framedrum:0.6"),
|
|
1730
|
+
},
|
|
1731
|
+
},
|
|
1732
|
+
}),
|
|
1733
|
+
card({
|
|
1734
|
+
id: "iraqi-maqam",
|
|
1735
|
+
summary:
|
|
1736
|
+
"Iraqi maqam: a solo singer's tahrir opening, then ascents through the maqam's sections and a return (taslim), santur and joza, jurjina 10/8",
|
|
1737
|
+
tempo: { bpm: [60, 100], typical: 76 },
|
|
1738
|
+
meter: {
|
|
1739
|
+
signatures: [["10/8", 1]],
|
|
1740
|
+
grouping: [[[3, 2, 2, 3], 1]],
|
|
1741
|
+
cycle: JURJINA,
|
|
1742
|
+
},
|
|
1743
|
+
pitch: {
|
|
1744
|
+
tuning: "bayati",
|
|
1745
|
+
scales: [
|
|
1746
|
+
["bayati", 0.6],
|
|
1747
|
+
["saba", 0.4],
|
|
1748
|
+
],
|
|
1749
|
+
maqam: { sayr: [0, 1, 3, 4, 3, 0], ghammaz: 3 },
|
|
1750
|
+
},
|
|
1751
|
+
melody: { intervals: ORNATE, ambitus: [7, 14] },
|
|
1752
|
+
texture: {
|
|
1753
|
+
roles: {
|
|
1754
|
+
lead: role("sing", "santur:0.4"),
|
|
1755
|
+
counter: role("santur", "kamancheh:0.6"),
|
|
1756
|
+
perc: role("framedrum", "daf:0.5"),
|
|
1757
|
+
},
|
|
1758
|
+
},
|
|
1759
|
+
}),
|
|
1760
|
+
card({
|
|
1761
|
+
id: "khaleeji",
|
|
1762
|
+
summary:
|
|
1763
|
+
"khaleeji: Gulf song on the khaliji iqa (dum on 1 and 4, clapped), oud and strings in unison, maqam bayati and hijaz, a rolling 3+3+2 swing",
|
|
1764
|
+
tempo: { bpm: [90, 120], typical: 104 },
|
|
1765
|
+
meter: {
|
|
1766
|
+
signatures: [["8/8", 1]],
|
|
1767
|
+
grouping: [[[3, 3, 2], 1]],
|
|
1768
|
+
cycle: KHALIJI,
|
|
1769
|
+
},
|
|
1770
|
+
pitch: {
|
|
1771
|
+
scales: [
|
|
1772
|
+
["bayati", 0.6],
|
|
1773
|
+
["hijaz", 0.4],
|
|
1774
|
+
],
|
|
1775
|
+
},
|
|
1776
|
+
rhythm: { onsets: { clap: grid("x..x..x.") } },
|
|
1777
|
+
texture: {
|
|
1778
|
+
roles: {
|
|
1779
|
+
clap: kitRole("acoustic"),
|
|
1780
|
+
lead: role("sing", "oud:0.4"),
|
|
1781
|
+
counter: role("oud", "strings:0.6"),
|
|
1782
|
+
},
|
|
1783
|
+
},
|
|
1784
|
+
}),
|
|
1785
|
+
card({
|
|
1786
|
+
id: "quranic-recitation",
|
|
1787
|
+
summary:
|
|
1788
|
+
"tajwid-style chant (theory only): unmetered solo monophony around a reciting tone, maqam bayati or rast in rising registers, no instruments or pulse",
|
|
1789
|
+
tempo: { bpm: [50, 72], typical: 60 },
|
|
1790
|
+
meter: { signatures: [["4/4", 1]], cycle: WAHDA },
|
|
1791
|
+
pitch: {
|
|
1792
|
+
tuning: "bayati",
|
|
1793
|
+
scales: [["bayati", 1]],
|
|
1794
|
+
maqam: { sayr: [0, 0, 2, 3, 2, 0], ghammaz: 3 },
|
|
1795
|
+
},
|
|
1796
|
+
melody: {
|
|
1797
|
+
intervals: CHANT,
|
|
1798
|
+
density: [1, 2],
|
|
1799
|
+
ambitus: [5, 9],
|
|
1800
|
+
repetition: 0.2,
|
|
1801
|
+
},
|
|
1802
|
+
bass: { behaviour: [["none", 1]] },
|
|
1803
|
+
texture: {
|
|
1804
|
+
kind: "monophonic",
|
|
1805
|
+
roles: {
|
|
1806
|
+
perc: null,
|
|
1807
|
+
drone: null,
|
|
1808
|
+
counter: null,
|
|
1809
|
+
bass: null,
|
|
1810
|
+
lead: role("sing"),
|
|
1811
|
+
},
|
|
1812
|
+
},
|
|
1813
|
+
mix: { space: 0.6 },
|
|
1814
|
+
}),
|
|
1815
|
+
card({
|
|
1816
|
+
id: "shaabi",
|
|
1817
|
+
summary:
|
|
1818
|
+
"shaabi and mahraganat: Cairo street song on the maqsum, nahawand and hijaz over a drum-machine stomp, autotuned hooks and synth riffs",
|
|
1819
|
+
tempo: { bpm: [100, 135], typical: 120 },
|
|
1820
|
+
meter: { signatures: [["8/8", 1]], cycle: MAQSUM },
|
|
1821
|
+
pitch: {
|
|
1822
|
+
scales: [
|
|
1823
|
+
["hijaz", 0.5],
|
|
1824
|
+
["nahawand", 0.5],
|
|
1825
|
+
],
|
|
1826
|
+
},
|
|
1827
|
+
rhythm: {
|
|
1828
|
+
onsets: {
|
|
1829
|
+
kick: grid("x..x..x.x..x..x."),
|
|
1830
|
+
snare: BACKBEAT,
|
|
1831
|
+
hat: SIXTEENTHS,
|
|
1832
|
+
},
|
|
1833
|
+
},
|
|
1834
|
+
texture: {
|
|
1835
|
+
roles: {
|
|
1836
|
+
...fullKit("syn808"),
|
|
1837
|
+
lead: role("sing", "saw:0.5"),
|
|
1838
|
+
counter: role("lead", "square:0.5"),
|
|
1839
|
+
bass: role("bass"),
|
|
1840
|
+
},
|
|
1841
|
+
},
|
|
1842
|
+
mix: { loudness: "loud" },
|
|
1843
|
+
}),
|
|
1844
|
+
card({
|
|
1845
|
+
id: "dabke",
|
|
1846
|
+
summary:
|
|
1847
|
+
"dabke: Levantine line dance on the malfuf 3+3+2, mijwiz-style reed drone and riffs on hijaz or bayati, heavy tabl on beat one",
|
|
1848
|
+
tempo: { bpm: [110, 140], typical: 124 },
|
|
1849
|
+
meter: {
|
|
1850
|
+
signatures: [["8/8", 1]],
|
|
1851
|
+
grouping: [[[3, 3, 2], 1]],
|
|
1852
|
+
cycle: MALFUF,
|
|
1853
|
+
},
|
|
1854
|
+
pitch: {
|
|
1855
|
+
scales: [
|
|
1856
|
+
["hijaz", 0.6],
|
|
1857
|
+
["kurd", 0.4],
|
|
1858
|
+
],
|
|
1859
|
+
},
|
|
1860
|
+
melody: { intervals: CHANT, repetition: 0.8, ambitus: [5, 9] },
|
|
1861
|
+
texture: {
|
|
1862
|
+
roles: {
|
|
1863
|
+
kick: kitRole("acoustic"),
|
|
1864
|
+
drone: role("clarinet", "oud:0.4"),
|
|
1865
|
+
lead: role("clarinet", "sing:0.6"),
|
|
1866
|
+
counter: maybe("oud"),
|
|
1867
|
+
},
|
|
1868
|
+
},
|
|
1869
|
+
rhythm: { onsets: { kick: grid("x.......") } },
|
|
1870
|
+
}),
|
|
1871
|
+
card({
|
|
1872
|
+
id: "rai",
|
|
1873
|
+
summary:
|
|
1874
|
+
"rai: Oran pop on a 6/8-against-4/4 groove, hijaz and nahawand melody with synth and darbuka, the call of the cheb over a minor two-chord vamp",
|
|
1875
|
+
tempo: { bpm: [96, 128], typical: 112 },
|
|
1876
|
+
meter: {
|
|
1877
|
+
signatures: [
|
|
1878
|
+
["6/8", 0.5],
|
|
1879
|
+
["4/4", 0.5],
|
|
1880
|
+
],
|
|
1881
|
+
hypermeter: [[4, 1]],
|
|
1882
|
+
},
|
|
1883
|
+
pitch: {
|
|
1884
|
+
scales: [
|
|
1885
|
+
["hijaz", 0.5],
|
|
1886
|
+
["nahawand", 0.5],
|
|
1887
|
+
],
|
|
1888
|
+
},
|
|
1889
|
+
harmony: {
|
|
1890
|
+
model: "modal",
|
|
1891
|
+
rhythm: [[1, 1]],
|
|
1892
|
+
forms: [[["i", "bVII"], 1]],
|
|
1893
|
+
sources: { forms: 2 },
|
|
1894
|
+
},
|
|
1895
|
+
rhythm: {
|
|
1896
|
+
onsets: { kick: grid("x..x..x..x.."), snare: grid("...x.....x..") },
|
|
1897
|
+
},
|
|
1898
|
+
texture: {
|
|
1899
|
+
roles: {
|
|
1900
|
+
kick: kitRole("electro"),
|
|
1901
|
+
snare: kitRole("electro"),
|
|
1902
|
+
chords: role("keys", "saw:0.4"),
|
|
1903
|
+
bass: role("bass"),
|
|
1904
|
+
lead: role("sing", "lead:0.5"),
|
|
1905
|
+
},
|
|
1906
|
+
},
|
|
1907
|
+
}),
|
|
1908
|
+
card({
|
|
1909
|
+
id: "chaabi-maghreb",
|
|
1910
|
+
summary:
|
|
1911
|
+
"Algerian and Moroccan chaabi: Andalusian-derived qasida over a fast ternary 6/8 lilt (the derbouka's dum-tak-tak), mandole and banjo in heterophony, nahawand and hijaz",
|
|
1912
|
+
tempo: { bpm: [120, 160], typical: 138 },
|
|
1913
|
+
meter: { signatures: [["6/8", 1]], hypermeter: [[4, 1]] },
|
|
1914
|
+
pitch: {
|
|
1915
|
+
scales: [
|
|
1916
|
+
["nahawand", 0.6],
|
|
1917
|
+
["hijaz", 0.4],
|
|
1918
|
+
],
|
|
1919
|
+
},
|
|
1920
|
+
rhythm: {
|
|
1921
|
+
onsets: { perc: grid("x.xx.xx.xx.x"), clap: grid("...x.....x..") },
|
|
1922
|
+
},
|
|
1923
|
+
texture: {
|
|
1924
|
+
roles: {
|
|
1925
|
+
clap: kitRole("acoustic"),
|
|
1926
|
+
lead: role("sing", "banjo:0.5"),
|
|
1927
|
+
counter: role("banjo", "oud:0.6", "violin:0.5"),
|
|
1928
|
+
perc: role("tabla", "daf:0.5"),
|
|
1929
|
+
},
|
|
1930
|
+
},
|
|
1931
|
+
}),
|
|
1932
|
+
card({
|
|
1933
|
+
id: "gnawa",
|
|
1934
|
+
summary:
|
|
1935
|
+
"gnawa: trance repetition on the guembri bass lute, minor-pentatonic riffs, krakeb iron castanets in a swung triplet pulse, call and response",
|
|
1936
|
+
tempo: { bpm: [90, 140], typical: 112 },
|
|
1937
|
+
meter: { signatures: [["12/8", 1]], hypermeter: [[2, 1]] },
|
|
1938
|
+
groove: { subdivision: 3, swingRatio: [1, 1] },
|
|
1939
|
+
pitch: {
|
|
1940
|
+
scales: [
|
|
1941
|
+
["minor-pentatonic", 0.7],
|
|
1942
|
+
["blues", 0.3],
|
|
1943
|
+
],
|
|
1944
|
+
},
|
|
1945
|
+
harmony: { model: "drone" },
|
|
1946
|
+
rhythm: {
|
|
1947
|
+
onsets: { perc: grid("x.xx.xx.xx.x"), bass: grid("x..x.xx..x..") },
|
|
1948
|
+
},
|
|
1949
|
+
melody: { intervals: CHANT, repetition: 0.85, ambitus: [5, 9] },
|
|
1950
|
+
bass: { behaviour: [["ostinato", 1]] },
|
|
1951
|
+
texture: {
|
|
1952
|
+
roles: {
|
|
1953
|
+
perc: role("drums"),
|
|
1954
|
+
drone: null,
|
|
1955
|
+
bass: role("upright", "bass:0.5"),
|
|
1956
|
+
lead: role("sing"),
|
|
1957
|
+
counter: role("choir"),
|
|
1958
|
+
},
|
|
1959
|
+
},
|
|
1960
|
+
}),
|
|
1961
|
+
card({
|
|
1962
|
+
id: "amazigh",
|
|
1963
|
+
summary:
|
|
1964
|
+
"Amazigh music: pentatonic ahwash and ahidous chant, collective frame drums in 3+3+2 or 6/8, rribab fiddle drone, circle call and response",
|
|
1965
|
+
tempo: { bpm: [100, 140], typical: 120 },
|
|
1966
|
+
meter: {
|
|
1967
|
+
signatures: [["8/8", 1]],
|
|
1968
|
+
grouping: [[[3, 3, 2], 1]],
|
|
1969
|
+
cycle: MALFUF,
|
|
1970
|
+
},
|
|
1971
|
+
pitch: {
|
|
1972
|
+
scales: [
|
|
1973
|
+
["minor-pentatonic", 0.6],
|
|
1974
|
+
["major-pentatonic", 0.4],
|
|
1975
|
+
],
|
|
1976
|
+
},
|
|
1977
|
+
melody: { intervals: CHANT, repetition: 0.8 },
|
|
1978
|
+
texture: {
|
|
1979
|
+
roles: {
|
|
1980
|
+
perc: role("framedrum", "daf:0.6"),
|
|
1981
|
+
drone: role("fiddle"),
|
|
1982
|
+
lead: role("sing", "fiddle:0.5"),
|
|
1983
|
+
counter: role("choir"),
|
|
1984
|
+
},
|
|
1985
|
+
},
|
|
1986
|
+
}),
|
|
1987
|
+
card({
|
|
1988
|
+
id: "yemenite",
|
|
1989
|
+
summary:
|
|
1990
|
+
"Yemenite song (al-ghina al-san'ani): qanbus lute and voice, maqam bayati in a narrow ambitus around the tonic jins, sahn copper-tray pulse on every eighth, a tripartite slow-medium-fast qawma",
|
|
1991
|
+
tempo: { bpm: [84, 126], typical: 104 },
|
|
1992
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[2, 1]] },
|
|
1993
|
+
pitch: {
|
|
1994
|
+
tuning: "bayati",
|
|
1995
|
+
scales: [["bayati", 1]],
|
|
1996
|
+
maqam: { sayr: [0, 1, 2, 1, 0], ghammaz: 3 },
|
|
1997
|
+
},
|
|
1998
|
+
rhythm: { onsets: { bell: EIGHTHS } },
|
|
1999
|
+
melody: { intervals: CHANT, ambitus: [4, 7], repetition: 0.6 },
|
|
2000
|
+
texture: {
|
|
2001
|
+
roles: {
|
|
2002
|
+
bell: role("bell"),
|
|
2003
|
+
lead: role("sing"),
|
|
2004
|
+
counter: role("oud"),
|
|
2005
|
+
perc: role("framedrum"),
|
|
2006
|
+
},
|
|
2007
|
+
},
|
|
2008
|
+
}),
|
|
2009
|
+
|
|
2010
|
+
// Persian and Turkic. References: Bruno Nettl, The Radif of Persian Music
|
|
2011
|
+
// (1987); Karl Signell, Makam (1977).
|
|
2012
|
+
card({
|
|
2013
|
+
id: "persian-classical",
|
|
2014
|
+
summary:
|
|
2015
|
+
"radif and dastgah: dastgah shur with its koron second, gushe phrases rising to the shahed (focal) tone and back to the ist (stop), avaz then a metred zarbi",
|
|
2016
|
+
tempo: { bpm: [56, 100], typical: 72 },
|
|
2017
|
+
meter: {
|
|
2018
|
+
signatures: [
|
|
2019
|
+
["6/8", 0.6],
|
|
2020
|
+
["4/4", 0.4],
|
|
2021
|
+
],
|
|
2022
|
+
},
|
|
2023
|
+
pitch: {
|
|
2024
|
+
tuning: "shur",
|
|
2025
|
+
scales: [["shur", 1]],
|
|
2026
|
+
maqam: { sayr: [0, 1, 3, 1, 0], ghammaz: 3 },
|
|
2027
|
+
},
|
|
2028
|
+
melody: { intervals: ORNATE, density: [2, 4] },
|
|
2029
|
+
texture: {
|
|
2030
|
+
roles: {
|
|
2031
|
+
lead: role("setar", "santur:0.7", "kamancheh:0.5", "sing:0.5"),
|
|
2032
|
+
counter: role("ney", "kamancheh:0.6"),
|
|
2033
|
+
perc: role("tabla", "daf:0.5"),
|
|
2034
|
+
},
|
|
2035
|
+
},
|
|
2036
|
+
}),
|
|
2037
|
+
card({
|
|
2038
|
+
id: "ottoman-classical",
|
|
2039
|
+
summary:
|
|
2040
|
+
"Ottoman makam: the seyir of makam hicaz or ussak, peşrev and saz semaisi in long usul (aksak 9/8, curcuna 10/8), tanbur and ney heterophony",
|
|
2041
|
+
tempo: { bpm: [56, 96], typical: 76 },
|
|
2042
|
+
meter: {
|
|
2043
|
+
signatures: [["9/8", 1]],
|
|
2044
|
+
grouping: [[[2, 2, 2, 3], 1]],
|
|
2045
|
+
cycle: AKSAK,
|
|
2046
|
+
},
|
|
2047
|
+
pitch: {
|
|
2048
|
+
scales: [
|
|
2049
|
+
["hijaz", 0.5],
|
|
2050
|
+
// Ussak: bayati's quarter-tone second (the 24-tone convention).
|
|
2051
|
+
["bayati", 0.5],
|
|
2052
|
+
],
|
|
2053
|
+
},
|
|
2054
|
+
melody: { intervals: ORNATE, density: [1, 3] },
|
|
2055
|
+
texture: {
|
|
2056
|
+
roles: {
|
|
2057
|
+
lead: role("ney", "tar:0.6", "kamancheh:0.5"),
|
|
2058
|
+
counter: role("oud", "santur:0.5"),
|
|
2059
|
+
perc: role("daf", "framedrum:0.6"),
|
|
2060
|
+
},
|
|
2061
|
+
},
|
|
2062
|
+
}),
|
|
2063
|
+
card({
|
|
2064
|
+
id: "sufi-ney",
|
|
2065
|
+
summary:
|
|
2066
|
+
"Mevlevi and Sufi ritual: the ney's breathy taksim, the slow devr-i revan 14/8 turning cycle, hicaz and rast, kudum pulse, sema's accelerating selams",
|
|
2067
|
+
tempo: { bpm: [50, 90], typical: 66 },
|
|
2068
|
+
meter: {
|
|
2069
|
+
signatures: [["14/8", 1]],
|
|
2070
|
+
grouping: [[[3, 2, 2, 3, 2, 2], 1]],
|
|
2071
|
+
cycle: DEVR_I_REVAN,
|
|
2072
|
+
},
|
|
2073
|
+
pitch: {
|
|
2074
|
+
tuning: "rast",
|
|
2075
|
+
scales: [["rast", 0.6]],
|
|
2076
|
+
maqam: { sayr: [0, 2, 4, 5, 4, 0], ghammaz: 4 },
|
|
2077
|
+
},
|
|
2078
|
+
melody: { intervals: ORNATE, density: [1, 2] },
|
|
2079
|
+
texture: {
|
|
2080
|
+
roles: {
|
|
2081
|
+
lead: role("ney"),
|
|
2082
|
+
counter: maybe("sing", "kamancheh:0.5"),
|
|
2083
|
+
drone: role("ney", "strings:0.4"),
|
|
2084
|
+
perc: role("framedrum"),
|
|
2085
|
+
},
|
|
2086
|
+
},
|
|
2087
|
+
mix: { space: 0.65 },
|
|
2088
|
+
}),
|
|
2089
|
+
card({
|
|
2090
|
+
id: "turkish-folk",
|
|
2091
|
+
summary:
|
|
2092
|
+
"Turkish folk: türkü on the bağlama in aksak meters (7/8, 9/8), uzun hava free song, davul and zurna halay in 2+2+2+3",
|
|
2093
|
+
tempo: { bpm: [116, 160], typical: 136 },
|
|
2094
|
+
meter: {
|
|
2095
|
+
signatures: [
|
|
2096
|
+
["9/8", 0.6],
|
|
2097
|
+
["7/8", 0.4],
|
|
2098
|
+
],
|
|
2099
|
+
grouping: [
|
|
2100
|
+
[[2, 2, 2, 3], 0.6],
|
|
2101
|
+
[[3, 2, 2], 0.4],
|
|
2102
|
+
],
|
|
2103
|
+
cycle: AKSAK,
|
|
2104
|
+
},
|
|
2105
|
+
pitch: {
|
|
2106
|
+
scales: [
|
|
2107
|
+
["hijaz", 0.4],
|
|
2108
|
+
["kurd", 0.3],
|
|
2109
|
+
["phrygian", 0.3],
|
|
2110
|
+
],
|
|
2111
|
+
},
|
|
2112
|
+
melody: { intervals: CHANT, repetition: 0.7 },
|
|
2113
|
+
rhythm: { onsets: { kick: grid("x.......") } },
|
|
2114
|
+
texture: {
|
|
2115
|
+
roles: {
|
|
2116
|
+
kick: kitRole("acoustic"),
|
|
2117
|
+
lead: role("tar", "oboe:0.6", "clarinet:0.5"),
|
|
2118
|
+
counter: role("oboe", "clarinet:0.5"),
|
|
2119
|
+
perc: role("framedrum", "daf:0.5"),
|
|
2120
|
+
},
|
|
2121
|
+
},
|
|
2122
|
+
}),
|
|
2123
|
+
card({
|
|
2124
|
+
id: "mugham",
|
|
2125
|
+
summary:
|
|
2126
|
+
"Azerbaijani mugham: the khanende's tahrir trills over tar and kamancheh, mugham segah with its neutral third, rising shobe sections to a climax and descent",
|
|
2127
|
+
tempo: { bpm: [56, 96], typical: 72 },
|
|
2128
|
+
meter: { signatures: [["6/8", 1]] },
|
|
2129
|
+
pitch: {
|
|
2130
|
+
tuning: "segah",
|
|
2131
|
+
scales: [["segah", 1]],
|
|
2132
|
+
maqam: { sayr: [0, 2, 4, 2, 0], ghammaz: 3 },
|
|
2133
|
+
},
|
|
2134
|
+
melody: { intervals: ORNATE, density: [2, 4] },
|
|
2135
|
+
texture: {
|
|
2136
|
+
roles: {
|
|
2137
|
+
lead: role("sing", "tar:0.6"),
|
|
2138
|
+
counter: role("kamancheh", "tar:0.6"),
|
|
2139
|
+
perc: role("daf"),
|
|
2140
|
+
},
|
|
2141
|
+
},
|
|
2142
|
+
}),
|
|
2143
|
+
card({
|
|
2144
|
+
id: "shashmaqam",
|
|
2145
|
+
summary:
|
|
2146
|
+
"Shashmaqam: the six Bukharan maqoms, sung nasr suites in usul cycles on the doira frame drum, tanbur and dutar heterophony, diatonic modes",
|
|
2147
|
+
tempo: { bpm: [70, 110], typical: 88 },
|
|
2148
|
+
meter: {
|
|
2149
|
+
signatures: [
|
|
2150
|
+
["7/8", 0.5],
|
|
2151
|
+
["6/8", 0.5],
|
|
2152
|
+
],
|
|
2153
|
+
grouping: [[[3, 2, 2], 1]],
|
|
2154
|
+
cycle: DEVR_I_HINDI,
|
|
2155
|
+
},
|
|
2156
|
+
pitch: {
|
|
2157
|
+
scales: [
|
|
2158
|
+
["dorian", 0.4],
|
|
2159
|
+
["phrygian", 0.3],
|
|
2160
|
+
["minor", 0.3],
|
|
2161
|
+
],
|
|
2162
|
+
},
|
|
2163
|
+
texture: {
|
|
2164
|
+
roles: {
|
|
2165
|
+
lead: role("sing", "tar:0.5"),
|
|
2166
|
+
counter: role("tar", "setar:0.6", "kamancheh:0.5"),
|
|
2167
|
+
perc: role("daf", "framedrum:0.5"),
|
|
2168
|
+
},
|
|
2169
|
+
},
|
|
2170
|
+
}),
|
|
2171
|
+
card({
|
|
2172
|
+
id: "kurdish",
|
|
2173
|
+
summary:
|
|
2174
|
+
"Kurdish music: dengbêj epic narrative chant then govend circle dance, tembûr and zurna on maqam kurd and hijaz, a heavy davul halay pulse",
|
|
2175
|
+
tempo: { bpm: [100, 140], typical: 120 },
|
|
2176
|
+
meter: {
|
|
2177
|
+
signatures: [
|
|
2178
|
+
["8/8", 0.6],
|
|
2179
|
+
["4/4", 0.4],
|
|
2180
|
+
],
|
|
2181
|
+
cycle: BALADI,
|
|
2182
|
+
},
|
|
2183
|
+
pitch: {
|
|
2184
|
+
scales: [
|
|
2185
|
+
["kurd", 0.6],
|
|
2186
|
+
["hijaz", 0.4],
|
|
2187
|
+
],
|
|
2188
|
+
},
|
|
2189
|
+
melody: { intervals: CHANT, repetition: 0.7 },
|
|
2190
|
+
texture: {
|
|
2191
|
+
roles: {
|
|
2192
|
+
kick: kitRole("acoustic"),
|
|
2193
|
+
lead: role("sing", "tar:0.6", "oboe:0.4"),
|
|
2194
|
+
counter: role("tar", "oboe:0.5"),
|
|
2195
|
+
},
|
|
2196
|
+
},
|
|
2197
|
+
rhythm: { onsets: { kick: grid("x...x...") } },
|
|
2198
|
+
}),
|
|
2199
|
+
card({
|
|
2200
|
+
id: "armenian-folk",
|
|
2201
|
+
summary:
|
|
2202
|
+
"Armenian and Georgian: the duduk's lament over a drone (dam), aeolian and hijaz modes; Georgian three-voice polyphony with parallel fourths and fifths",
|
|
2203
|
+
tempo: { bpm: [60, 110], typical: 80 },
|
|
2204
|
+
meter: {
|
|
2205
|
+
signatures: [
|
|
2206
|
+
["6/8", 0.5],
|
|
2207
|
+
["4/4", 0.5],
|
|
2208
|
+
],
|
|
2209
|
+
},
|
|
2210
|
+
pitch: {
|
|
2211
|
+
scales: [
|
|
2212
|
+
["minor", 0.4],
|
|
2213
|
+
["hijaz", 0.3],
|
|
2214
|
+
["dorian", 0.3],
|
|
2215
|
+
],
|
|
2216
|
+
},
|
|
2217
|
+
melody: {
|
|
2218
|
+
intervals: CONJUNCT,
|
|
2219
|
+
contour: [
|
|
2220
|
+
["descending", 0.5],
|
|
2221
|
+
["arch", 0.5],
|
|
2222
|
+
],
|
|
2223
|
+
},
|
|
2224
|
+
texture: {
|
|
2225
|
+
roles: {
|
|
2226
|
+
lead: role("oboe", "clarinet:0.6", "sing:0.5"),
|
|
2227
|
+
drone: role("oboe", "strings:0.5"),
|
|
2228
|
+
counter: maybe("choir"),
|
|
2229
|
+
perc: role("framedrum"),
|
|
2230
|
+
},
|
|
2231
|
+
},
|
|
2232
|
+
}),
|
|
2233
|
+
|
|
2234
|
+
// Jewish. References: Abraham Z. Idelsohn, Jewish Music (1929); Walter
|
|
2235
|
+
// Zev Feldman, Klezmer: Music, History and Memory (2016).
|
|
2236
|
+
card({
|
|
2237
|
+
id: "klezmer",
|
|
2238
|
+
summary:
|
|
2239
|
+
"klezmer: freygish (phrygian dominant) and misheberakh (dorian #4) modes, krekhts sobbing ornaments, bulgar 3+3+2, freylekhs oom-pah, doina rubato",
|
|
2240
|
+
tempo: { bpm: [100, 160], typical: 132 },
|
|
2241
|
+
pitch: {
|
|
2242
|
+
scales: [
|
|
2243
|
+
["phrygian-dominant", 0.6],
|
|
2244
|
+
["nikriz", 0.4],
|
|
2245
|
+
],
|
|
2246
|
+
},
|
|
2247
|
+
harmony: {
|
|
2248
|
+
model: "functional",
|
|
2249
|
+
forms: [
|
|
2250
|
+
[["I", "iv", "I", "I"], 0.5],
|
|
2251
|
+
[["i", "bVII", "i", "I"], 0.5],
|
|
2252
|
+
],
|
|
2253
|
+
sources: { forms: 3 },
|
|
2254
|
+
},
|
|
2255
|
+
rhythm: {
|
|
2256
|
+
onsets: {
|
|
2257
|
+
kick: grid("x...x..."),
|
|
2258
|
+
snare: grid("..x...x."),
|
|
2259
|
+
chords: grid("..x...x."),
|
|
2260
|
+
},
|
|
2261
|
+
},
|
|
2262
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
2263
|
+
melody: { intervals: ORNATE, density: [2, 4] },
|
|
2264
|
+
texture: {
|
|
2265
|
+
roles: {
|
|
2266
|
+
perc: null,
|
|
2267
|
+
drone: null,
|
|
2268
|
+
kick: kitRole("acoustic"),
|
|
2269
|
+
snare: kitRole("acoustic"),
|
|
2270
|
+
bass: role("tuba", "upright:0.6"),
|
|
2271
|
+
chords: role("piano", "strings:0.4"),
|
|
2272
|
+
lead: role("clarinet", "violin:0.6"),
|
|
2273
|
+
counter: maybe("trumpet", "violin:0.5"),
|
|
2274
|
+
},
|
|
2275
|
+
},
|
|
2276
|
+
}),
|
|
2277
|
+
card({
|
|
2278
|
+
id: "cantorial",
|
|
2279
|
+
summary:
|
|
2280
|
+
"hazzanut: the shtayger prayer modes (ahavah rabbah = phrygian dominant, adonai malakh = mixolydian, magen avot = minor), coloratura over organ or choir",
|
|
2281
|
+
tempo: { bpm: [50, 84], typical: 64 },
|
|
2282
|
+
meter: { signatures: [["4/4", 1]], grouping: [[[4], 1]] },
|
|
2283
|
+
pitch: {
|
|
2284
|
+
scales: [
|
|
2285
|
+
["phrygian-dominant", 0.5],
|
|
2286
|
+
["mixolydian", 0.25],
|
|
2287
|
+
["minor", 0.25],
|
|
2288
|
+
],
|
|
2289
|
+
},
|
|
2290
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
2291
|
+
melody: { intervals: ORNATE, density: [1, 3] },
|
|
2292
|
+
bass: { behaviour: [["pedal", 1]] },
|
|
2293
|
+
texture: {
|
|
2294
|
+
kind: "monophonic",
|
|
2295
|
+
roles: {
|
|
2296
|
+
chords: null,
|
|
2297
|
+
perc: null,
|
|
2298
|
+
lead: role("sing"),
|
|
2299
|
+
drone: role("organ", "choir:0.6"),
|
|
2300
|
+
counter: maybe("choir"),
|
|
2301
|
+
},
|
|
2302
|
+
},
|
|
2303
|
+
mix: { space: 0.6 },
|
|
2304
|
+
}),
|
|
2305
|
+
card({
|
|
2306
|
+
id: "sephardic",
|
|
2307
|
+
summary:
|
|
2308
|
+
"Sephardic song: Ladino romances in Mediterranean maqam (hijaz, nahawand, kurd), oud and frame drum, strophic with an instrumental refrain",
|
|
2309
|
+
tempo: { bpm: [76, 116], typical: 96 },
|
|
2310
|
+
meter: { signatures: [["6/8", 1]], hypermeter: [[4, 1]] },
|
|
2311
|
+
pitch: {
|
|
2312
|
+
scales: [
|
|
2313
|
+
["nahawand", 0.45],
|
|
2314
|
+
["kurd", 0.35],
|
|
2315
|
+
["hijaz", 0.2],
|
|
2316
|
+
],
|
|
2317
|
+
},
|
|
2318
|
+
rhythm: { onsets: { perc: grid("x.....x..x..") } },
|
|
2319
|
+
harmony: { model: "drone", rhythm: [[0.5, 1]] },
|
|
2320
|
+
bass: {
|
|
2321
|
+
behaviour: [
|
|
2322
|
+
["pedal", 0.5],
|
|
2323
|
+
["none", 0.5],
|
|
2324
|
+
],
|
|
2325
|
+
},
|
|
2326
|
+
texture: {
|
|
2327
|
+
kind: "heterophonic",
|
|
2328
|
+
roles: {
|
|
2329
|
+
chords: null,
|
|
2330
|
+
lead: role("sing", "violin:0.4"),
|
|
2331
|
+
counter: role("oud", "ney:0.5"),
|
|
2332
|
+
perc: role("framedrum", "daf:0.5"),
|
|
2333
|
+
},
|
|
2334
|
+
},
|
|
2335
|
+
}),
|
|
2336
|
+
card({
|
|
2337
|
+
id: "mizrahi",
|
|
2338
|
+
summary:
|
|
2339
|
+
"Mizrahi and Zemer Ivri: pop arrangements on the ciftetelli and maqsum, hijaz melodies with violin answers, Hebrew folk-song I-iv-V harmony",
|
|
2340
|
+
tempo: { bpm: [90, 130], typical: 108 },
|
|
2341
|
+
meter: {
|
|
2342
|
+
signatures: [
|
|
2343
|
+
["8/8", 0.6],
|
|
2344
|
+
["4/4", 0.4],
|
|
2345
|
+
],
|
|
2346
|
+
grouping: [[[3, 3, 2], 1]],
|
|
2347
|
+
cycle: CIFTETELLI,
|
|
2348
|
+
},
|
|
2349
|
+
pitch: {
|
|
2350
|
+
scales: [
|
|
2351
|
+
["hijaz", 0.5],
|
|
2352
|
+
["phrygian-dominant", 0.3],
|
|
2353
|
+
["minor", 0.2],
|
|
2354
|
+
],
|
|
2355
|
+
},
|
|
2356
|
+
harmony: { forms: [[["i", "iv", "V", "i"], 1]], sources: { forms: 3 } },
|
|
2357
|
+
texture: {
|
|
2358
|
+
roles: {
|
|
2359
|
+
kick: kitRole("acoustic"),
|
|
2360
|
+
bass: role("bass"),
|
|
2361
|
+
chords: role("keys", "strings:0.5"),
|
|
2362
|
+
lead: role("sing", "violin:0.4"),
|
|
2363
|
+
counter: role("violin", "oud:0.5"),
|
|
2364
|
+
perc: role("tabla", "daf:0.5"),
|
|
2365
|
+
},
|
|
2366
|
+
},
|
|
2367
|
+
rhythm: { onsets: { kick: grid("x....x..") } },
|
|
2368
|
+
}),
|
|
2369
|
+
// Hindustani. References: Martin Clayton, Time in Indian Music (2000);
|
|
2370
|
+
// Vishnu Narayan Bhatkhande, Hindustani Sangeet Paddhati (1910-32).
|
|
2371
|
+
// dawg has no pakhawaj, mridangam, harmonium or veena: tabla, organ and
|
|
2372
|
+
// sitar stand in for them.
|
|
2373
|
+
card({
|
|
2374
|
+
id: "dhrupad",
|
|
2375
|
+
summary:
|
|
2376
|
+
"dhrupad: raga malkauns (pentatonic, no Re or Pa) in a long nom-tom alap, then the composition in chautal 12 on pakhawaj, vadi Ma, austere gamak",
|
|
2377
|
+
tempo: { bpm: [44, 90], typical: 60 },
|
|
2378
|
+
meter: { signatures: [["4/4", 1]], cycle: CHAUTAL },
|
|
2379
|
+
pitch: {
|
|
2380
|
+
scales: [["malkauns", 1]],
|
|
2381
|
+
raga: {
|
|
2382
|
+
aroha: [0, 3, 5, 8, 10, 12],
|
|
2383
|
+
avaroha: [12, 10, 8, 5, 3, 0],
|
|
2384
|
+
vadi: 5,
|
|
2385
|
+
samvadi: 0,
|
|
2386
|
+
pakad: [[5, 3, 5, 8, 10, 8, 5]],
|
|
2387
|
+
},
|
|
2388
|
+
},
|
|
2389
|
+
melody: { intervals: ORNATE, density: [1, 2] },
|
|
2390
|
+
form: {
|
|
2391
|
+
plans: [[["intro", "verse", "verse", "chorus"], 1]],
|
|
2392
|
+
archetype: "alap-jor-jhala",
|
|
2393
|
+
},
|
|
2394
|
+
texture: { roles: { lead: role("sing", "sitar:0.5") } },
|
|
2395
|
+
}),
|
|
2396
|
+
card({
|
|
2397
|
+
id: "khayal",
|
|
2398
|
+
summary:
|
|
2399
|
+
"khayal: raga yaman (tivra Ma) with vadi Ga and samvadi Ni, a vilambit bada khayal then a drut chhota khayal in teental, taans and bol-alap",
|
|
2400
|
+
tempo: { bpm: [50, 140], typical: 76 },
|
|
2401
|
+
pitch: {
|
|
2402
|
+
tuning: "yaman",
|
|
2403
|
+
scales: [["yaman", 1]],
|
|
2404
|
+
raga: {
|
|
2405
|
+
aroha: [0, 2, 4, 6, 7, 9, 11, 12],
|
|
2406
|
+
avaroha: [12, 11, 9, 7, 6, 4, 2, 0],
|
|
2407
|
+
vadi: 4,
|
|
2408
|
+
samvadi: 11,
|
|
2409
|
+
pakad: [[11, 2, 4, 2, 0]],
|
|
2410
|
+
},
|
|
2411
|
+
},
|
|
2412
|
+
melody: { intervals: ORNATE },
|
|
2413
|
+
texture: {
|
|
2414
|
+
roles: { lead: role("sing"), counter: maybe("organ", "violin:0.5") },
|
|
2415
|
+
},
|
|
2416
|
+
}),
|
|
2417
|
+
card({
|
|
2418
|
+
id: "hindustani-instrumental",
|
|
2419
|
+
summary:
|
|
2420
|
+
"the instrumental gat: alap, jor and jhala on sitar or sarod-like strings, a masitkhani gat in teental on tabla, raga kafi with tihai cadences on sam",
|
|
2421
|
+
tempo: { bpm: [60, 160], typical: 96 },
|
|
2422
|
+
pitch: {
|
|
2423
|
+
scales: [["kafi", 1]],
|
|
2424
|
+
raga: {
|
|
2425
|
+
aroha: [0, 2, 3, 5, 7, 9, 10, 12],
|
|
2426
|
+
avaroha: [12, 10, 9, 7, 5, 3, 2, 0],
|
|
2427
|
+
vadi: 7,
|
|
2428
|
+
samvadi: 0,
|
|
2429
|
+
},
|
|
2430
|
+
},
|
|
2431
|
+
melody: { intervals: LEAPY, density: [2, 4] },
|
|
2432
|
+
form: {
|
|
2433
|
+
plans: [[["intro", "verse", "chorus", "breakdown", "chorus"], 1]],
|
|
2434
|
+
archetype: "alap-jor-jhala",
|
|
2435
|
+
},
|
|
2436
|
+
texture: { roles: { lead: role("sitar", "bansuri:0.5") } },
|
|
2437
|
+
}),
|
|
2438
|
+
card({
|
|
2439
|
+
id: "thumri",
|
|
2440
|
+
summary:
|
|
2441
|
+
"thumri: romantic light classical in raga khamaj or bhairavi, deepchandi 14 (3+4+3+4), bol-banav text play, the laggi tabla release in keherwa",
|
|
2442
|
+
tempo: { bpm: [56, 96], typical: 72 },
|
|
2443
|
+
meter: { signatures: [["4/4", 1]], cycle: DEEPCHANDI },
|
|
2444
|
+
pitch: {
|
|
2445
|
+
scales: [
|
|
2446
|
+
["khamaj", 0.6],
|
|
2447
|
+
["bhairavi", 0.4],
|
|
2448
|
+
],
|
|
2449
|
+
},
|
|
2450
|
+
melody: { intervals: ORNATE },
|
|
2451
|
+
texture: {
|
|
2452
|
+
roles: { lead: role("sing"), counter: role("organ", "violin:0.5") },
|
|
2453
|
+
},
|
|
2454
|
+
}),
|
|
2455
|
+
card({
|
|
2456
|
+
id: "ghazal",
|
|
2457
|
+
summary:
|
|
2458
|
+
"ghazal: Urdu couplets (sher) with a returning radif refrain, raga-tinged khamaj or pahadi melody over simple harmonium changes, dadra or rupak on tabla, harmonium answering",
|
|
2459
|
+
tempo: { bpm: [60, 100], typical: 76 },
|
|
2460
|
+
meter: {
|
|
2461
|
+
signatures: [
|
|
2462
|
+
["6/8", 0.6],
|
|
2463
|
+
["7/8", 0.4],
|
|
2464
|
+
],
|
|
2465
|
+
cycle: DADRA,
|
|
2466
|
+
},
|
|
2467
|
+
pitch: {
|
|
2468
|
+
scales: [
|
|
2469
|
+
["khamaj", 0.5],
|
|
2470
|
+
// Pahadi: a bilawal (major) based folk raga, a ghazal favourite.
|
|
2471
|
+
["major", 0.5],
|
|
2472
|
+
],
|
|
2473
|
+
},
|
|
2474
|
+
// The light ghazal's harmonium follows simple chord changes.
|
|
2475
|
+
harmony: {
|
|
2476
|
+
model: "functional",
|
|
2477
|
+
rhythm: [[1, 1]],
|
|
2478
|
+
forms: [
|
|
2479
|
+
[["I", "IV", "V", "I"], 0.5],
|
|
2480
|
+
[["I", "ii", "V", "I"], 0.5],
|
|
2481
|
+
],
|
|
2482
|
+
sources: { forms: 3 },
|
|
2483
|
+
},
|
|
2484
|
+
rhythm: { onsets: { chords: grid("x..x..x..x..") } },
|
|
2485
|
+
melody: { intervals: CONJUNCT, repetition: 0.6 },
|
|
2486
|
+
form: {
|
|
2487
|
+
plans: [[["intro", "verse", "chorus", "verse", "chorus"], 1]],
|
|
2488
|
+
archetype: "strophic",
|
|
2489
|
+
},
|
|
2490
|
+
texture: {
|
|
2491
|
+
roles: {
|
|
2492
|
+
chords: role("organ"),
|
|
2493
|
+
lead: role("sing"),
|
|
2494
|
+
counter: role("violin", "sitar:0.5"),
|
|
2495
|
+
},
|
|
2496
|
+
},
|
|
2497
|
+
}),
|
|
2498
|
+
card({
|
|
2499
|
+
id: "qawwali",
|
|
2500
|
+
summary:
|
|
2501
|
+
"qawwali: Sufi devotional song led by a soloist and chorus clapping on keherwa, harmonium riffs, raga bhairavi or kafi, sargam runs building to ecstasy",
|
|
2502
|
+
tempo: { bpm: [80, 150], typical: 110 },
|
|
2503
|
+
meter: { signatures: [["4/4", 1]], cycle: KEHERWA },
|
|
2504
|
+
pitch: {
|
|
2505
|
+
scales: [
|
|
2506
|
+
["bhairavi", 0.5],
|
|
2507
|
+
["kafi", 0.5],
|
|
2508
|
+
],
|
|
2509
|
+
},
|
|
2510
|
+
rhythm: { onsets: { clap: grid("x...x...x...x...") } },
|
|
2511
|
+
melody: { intervals: CHANT, repetition: 0.7 },
|
|
2512
|
+
texture: {
|
|
2513
|
+
roles: {
|
|
2514
|
+
clap: kitRole("acoustic"),
|
|
2515
|
+
lead: role("sing"),
|
|
2516
|
+
counter: role("choir", "organ:0.6"),
|
|
2517
|
+
},
|
|
2518
|
+
},
|
|
2519
|
+
}),
|
|
2520
|
+
card({
|
|
2521
|
+
id: "bhajan",
|
|
2522
|
+
summary:
|
|
2523
|
+
"bhajan and kirtan: devotional call and response on pentatonic bhupali or durga, keherwa on dholak, cymbal (manjira) on every beat, accelerating repetitions",
|
|
2524
|
+
tempo: { bpm: [70, 140], typical: 96 },
|
|
2525
|
+
meter: { signatures: [["4/4", 1]], cycle: KEHERWA },
|
|
2526
|
+
pitch: {
|
|
2527
|
+
scales: [
|
|
2528
|
+
["bhupali", 0.6],
|
|
2529
|
+
["durga", 0.4],
|
|
2530
|
+
],
|
|
2531
|
+
},
|
|
2532
|
+
rhythm: { onsets: { bell: grid("x...x...x...x...") } },
|
|
2533
|
+
melody: { intervals: CHANT, repetition: 0.8 },
|
|
2534
|
+
texture: {
|
|
2535
|
+
roles: {
|
|
2536
|
+
bell: role("bell"),
|
|
2537
|
+
lead: role("sing"),
|
|
2538
|
+
counter: role("choir", "organ:0.5"),
|
|
2539
|
+
},
|
|
2540
|
+
},
|
|
2541
|
+
}),
|
|
2542
|
+
|
|
2543
|
+
// Carnatic. References: T. Viswanathan and Matthew Harp Allen, Music in
|
|
2544
|
+
// South India (2004); P. Sambamoorthy, South Indian Music (1958-69).
|
|
2545
|
+
card({
|
|
2546
|
+
id: "kriti",
|
|
2547
|
+
summary:
|
|
2548
|
+
"kriti: pallavi, anupallavi, charanam in adi tala (laghu 4 + drutam 2 + 2), raga mayamalavagowla (the bhairav scale), sangati variations, kalpana swaram",
|
|
2549
|
+
tempo: { bpm: [60, 120], typical: 84 },
|
|
2550
|
+
meter: { signatures: [["4/4", 1]], cycle: ADI },
|
|
2551
|
+
pitch: {
|
|
2552
|
+
scales: [["bhairav", 1]],
|
|
2553
|
+
raga: {
|
|
2554
|
+
aroha: [0, 1, 4, 5, 7, 8, 11, 12],
|
|
2555
|
+
avaroha: [12, 11, 8, 7, 5, 4, 1, 0],
|
|
2556
|
+
vadi: 7,
|
|
2557
|
+
samvadi: 0,
|
|
2558
|
+
},
|
|
2559
|
+
},
|
|
2560
|
+
melody: { intervals: ORNATE },
|
|
2561
|
+
form: {
|
|
2562
|
+
plans: [[["intro", "verse", "chorus", "verse", "chorus"], 1]],
|
|
2563
|
+
archetype: "pallavi-anupallavi-charanam",
|
|
2564
|
+
},
|
|
2565
|
+
texture: {
|
|
2566
|
+
roles: { lead: role("sing", "violin:0.4"), counter: role("violin") },
|
|
2567
|
+
},
|
|
2568
|
+
}),
|
|
2569
|
+
card({
|
|
2570
|
+
id: "carnatic-instrumental",
|
|
2571
|
+
summary:
|
|
2572
|
+
"ragam-tanam-pallavi: free ragam alapana, pulsed tanam, then a pallavi line in misra chapu (3+2+2) varied through niraval and swara kalpana, raga kalyani",
|
|
2573
|
+
tempo: { bpm: [60, 132], typical: 90 },
|
|
2574
|
+
meter: {
|
|
2575
|
+
signatures: [["7/8", 1]],
|
|
2576
|
+
grouping: [[[3, 2, 2], 1]],
|
|
2577
|
+
cycle: MISRA_CHAPU,
|
|
2578
|
+
},
|
|
2579
|
+
pitch: {
|
|
2580
|
+
scales: [["yaman", 1]],
|
|
2581
|
+
raga: {
|
|
2582
|
+
aroha: [0, 2, 4, 6, 7, 9, 11, 12],
|
|
2583
|
+
avaroha: [12, 11, 9, 7, 6, 4, 2, 0],
|
|
2584
|
+
vadi: 7,
|
|
2585
|
+
samvadi: 0,
|
|
2586
|
+
},
|
|
2587
|
+
},
|
|
2588
|
+
melody: { intervals: LEAPY, density: [2, 4] },
|
|
2589
|
+
texture: { roles: { lead: role("sitar", "violin:0.6", "bansuri:0.5") } },
|
|
2590
|
+
}),
|
|
2591
|
+
card({
|
|
2592
|
+
id: "thillana",
|
|
2593
|
+
summary:
|
|
2594
|
+
"thillana: the rhythmic finale of a Bharatanatyam recital, jati syllables over adi tala at speed, raga hindolam (pentatonic, the malkauns set), korvai cadences",
|
|
2595
|
+
tempo: { bpm: [100, 150], typical: 120 },
|
|
2596
|
+
meter: { signatures: [["4/4", 1]], cycle: ADI },
|
|
2597
|
+
pitch: {
|
|
2598
|
+
scales: [["malkauns", 1]],
|
|
2599
|
+
raga: {
|
|
2600
|
+
aroha: [0, 3, 5, 8, 10, 12],
|
|
2601
|
+
avaroha: [12, 10, 8, 5, 3, 0],
|
|
2602
|
+
vadi: 5,
|
|
2603
|
+
samvadi: 10,
|
|
2604
|
+
},
|
|
2605
|
+
},
|
|
2606
|
+
melody: { intervals: CHANT, density: [2, 4], repetition: 0.7 },
|
|
2607
|
+
texture: {
|
|
2608
|
+
roles: {
|
|
2609
|
+
lead: role("sing", "violin:0.4"),
|
|
2610
|
+
counter: role("bansuri", "violin:0.5"),
|
|
2611
|
+
},
|
|
2612
|
+
},
|
|
2613
|
+
}),
|
|
2614
|
+
|
|
2615
|
+
// South Asian popular. References: Gregory D. Booth, Behind the Curtain
|
|
2616
|
+
// (2008); Anna Morcom, Hindi Film Songs and the Cinema (2007).
|
|
2617
|
+
card({
|
|
2618
|
+
id: "filmi",
|
|
2619
|
+
summary:
|
|
2620
|
+
"filmi: string-orchestra interludes between sung verses (mukhda and antara), raga-tinged melody over pop harmony, dholak keherwa and kit",
|
|
2621
|
+
tempo: { bpm: [80, 130], typical: 96 },
|
|
2622
|
+
meter: { signatures: [["4/4", 1]], cycle: KEHERWA },
|
|
2623
|
+
texture: {
|
|
2624
|
+
roles: {
|
|
2625
|
+
...fullKit("acoustic"),
|
|
2626
|
+
lead: role("sing"),
|
|
2627
|
+
counter: role("strings", "sitar:0.5", "bansuri:0.5"),
|
|
2628
|
+
},
|
|
2629
|
+
},
|
|
2630
|
+
rhythm: { onsets: { hat: EIGHTHS } },
|
|
2631
|
+
}),
|
|
2632
|
+
card({
|
|
2633
|
+
id: "bhangra",
|
|
2634
|
+
summary:
|
|
2635
|
+
"bhangra: the dhol's chaal (a swung 'dha-ge' with the and of every beat accented), tumbi riffs on one or two notes, a mixolydian drone, hoy shouts",
|
|
2636
|
+
tempo: { bpm: [90, 115], typical: 100 },
|
|
2637
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
2638
|
+
groove: { subdivision: 4, swingRatio: [1.3, 1.6] },
|
|
2639
|
+
pitch: {
|
|
2640
|
+
scales: [
|
|
2641
|
+
["mixolydian", 0.6],
|
|
2642
|
+
["khamaj", 0.4],
|
|
2643
|
+
],
|
|
2644
|
+
},
|
|
2645
|
+
harmony: { model: "drone", rhythm: [[0.5, 1]] },
|
|
2646
|
+
rhythm: {
|
|
2647
|
+
onsets: {
|
|
2648
|
+
kick: grid("x.....x.x....x.."),
|
|
2649
|
+
snare: grid("..x...x...x...x."),
|
|
2650
|
+
perc: OFFBEATS,
|
|
2651
|
+
},
|
|
2652
|
+
},
|
|
2653
|
+
melody: { intervals: CHANT, repetition: 0.85, ambitus: [3, 8] },
|
|
2654
|
+
texture: {
|
|
2655
|
+
roles: {
|
|
2656
|
+
kick: kitRole("acoustic"),
|
|
2657
|
+
snare: kitRole("acoustic"),
|
|
2658
|
+
hat: null,
|
|
2659
|
+
bass: role("bass"),
|
|
2660
|
+
chords: null,
|
|
2661
|
+
drone: maybe("strings"),
|
|
2662
|
+
lead: role("pluck", "sing:0.6"),
|
|
2663
|
+
},
|
|
2664
|
+
},
|
|
2665
|
+
}),
|
|
2666
|
+
card({
|
|
2667
|
+
id: "baul",
|
|
2668
|
+
summary:
|
|
2669
|
+
"Baul: wandering mystic song on the one-string ektara drone, the khamok's plucked dotted pulse, a keherwa lilt on the duggi, khamaj and pentatonic modes",
|
|
2670
|
+
tempo: { bpm: [84, 132], typical: 108 },
|
|
2671
|
+
meter: { signatures: [["4/4", 1]], cycle: KEHERWA },
|
|
2672
|
+
rhythm: { onsets: { shaker: grid("x..x..x.x..x..x.") } },
|
|
2673
|
+
harmony: { model: "drone" },
|
|
2674
|
+
pitch: {
|
|
2675
|
+
scales: [
|
|
2676
|
+
["khamaj", 0.5],
|
|
2677
|
+
["bhupali", 0.5],
|
|
2678
|
+
],
|
|
2679
|
+
},
|
|
2680
|
+
melody: { intervals: CONJUNCT },
|
|
2681
|
+
texture: {
|
|
2682
|
+
roles: {
|
|
2683
|
+
...NO_KIT,
|
|
2684
|
+
chords: null,
|
|
2685
|
+
bass: null,
|
|
2686
|
+
shaker: role("drums"),
|
|
2687
|
+
drone: role("pluck", "tanpura:0.5"),
|
|
2688
|
+
lead: role("sing", "bansuri:0.4"),
|
|
2689
|
+
},
|
|
2690
|
+
},
|
|
2691
|
+
}),
|
|
2692
|
+
card({
|
|
2693
|
+
id: "lavani",
|
|
2694
|
+
summary:
|
|
2695
|
+
"lavani: Marathi folk theatre song on the dholki, fast keherwa with accelerating tihai, call and response, kafi and bhairavi colors",
|
|
2696
|
+
tempo: { bpm: [110, 160], typical: 132 },
|
|
2697
|
+
meter: { signatures: [["4/4", 1]], cycle: KEHERWA },
|
|
2698
|
+
pitch: {
|
|
2699
|
+
scales: [
|
|
2700
|
+
["kafi", 0.6],
|
|
2701
|
+
["bhairavi", 0.4],
|
|
2702
|
+
],
|
|
2703
|
+
},
|
|
2704
|
+
rhythm: { onsets: { bell: EIGHTHS } },
|
|
2705
|
+
melody: { intervals: CHANT, density: [2, 4] },
|
|
2706
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
2707
|
+
bass: { behaviour: [["none", 1]] },
|
|
2708
|
+
texture: {
|
|
2709
|
+
roles: {
|
|
2710
|
+
...UNPLUGGED,
|
|
2711
|
+
bell: role("bell"),
|
|
2712
|
+
lead: role("sing"),
|
|
2713
|
+
counter: role("organ", "choir:0.5"),
|
|
2714
|
+
},
|
|
2715
|
+
},
|
|
2716
|
+
}),
|
|
2717
|
+
card({
|
|
2718
|
+
id: "rajasthani-folk",
|
|
2719
|
+
summary:
|
|
2720
|
+
"Rajasthani folk: Manganiyar and Langa song on kamaicha drone and khartal clappers, kafi and khamaj (maand) modes, a quick dadra 6/8 swing",
|
|
2721
|
+
tempo: { bpm: [104, 152], typical: 128 },
|
|
2722
|
+
meter: {
|
|
2723
|
+
signatures: [["6/8", 1]],
|
|
2724
|
+
hypermeter: [[4, 1]],
|
|
2725
|
+
cycle: DADRA,
|
|
2726
|
+
},
|
|
2727
|
+
pitch: {
|
|
2728
|
+
scales: [
|
|
2729
|
+
["kafi", 0.5],
|
|
2730
|
+
["khamaj", 0.5],
|
|
2731
|
+
],
|
|
2732
|
+
},
|
|
2733
|
+
rhythm: { onsets: { shaker: grid("xx.xx.xx.xx.") } },
|
|
2734
|
+
melody: { intervals: ORNATE },
|
|
2735
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
2736
|
+
bass: { behaviour: [["none", 1]] },
|
|
2737
|
+
texture: {
|
|
2738
|
+
roles: {
|
|
2739
|
+
...UNPLUGGED,
|
|
2740
|
+
shaker: role("drums"),
|
|
2741
|
+
drone: role("fiddle", "tanpura:0.5"),
|
|
2742
|
+
lead: role("sing"),
|
|
2743
|
+
counter: role("fiddle", "organ:0.5"),
|
|
2744
|
+
},
|
|
2745
|
+
},
|
|
2746
|
+
}),
|
|
2747
|
+
card({
|
|
2748
|
+
id: "sufi-kafi",
|
|
2749
|
+
summary:
|
|
2750
|
+
"Sufi kafi: Punjabi and Sindhi mystic poetry in a refrain form, slow raga kafi or bhairavi, harmonium and tabla, the tonic drone held throughout",
|
|
2751
|
+
tempo: { bpm: [60, 100], typical: 76 },
|
|
2752
|
+
meter: { signatures: [["4/4", 1]], cycle: KEHERWA },
|
|
2753
|
+
pitch: {
|
|
2754
|
+
tuning: "kafi",
|
|
2755
|
+
scales: [["kafi", 1]],
|
|
2756
|
+
},
|
|
2757
|
+
melody: { intervals: ORNATE, density: [1, 3] },
|
|
2758
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
2759
|
+
bass: { behaviour: [["none", 1]] },
|
|
2760
|
+
texture: {
|
|
2761
|
+
roles: {
|
|
2762
|
+
...UNPLUGGED,
|
|
2763
|
+
lead: role("sing"),
|
|
2764
|
+
counter: role("organ", "sitar:0.4"),
|
|
2765
|
+
},
|
|
2766
|
+
},
|
|
2767
|
+
}),
|
|
2768
|
+
card({
|
|
2769
|
+
id: "sri-lankan",
|
|
2770
|
+
summary:
|
|
2771
|
+
"Sri Lankan baila and drums: baila's fast 6/8 kaffirinha strum with I-IV-V, the Kandyan geta beraya grooves and cymbal pulse",
|
|
2772
|
+
tempo: { bpm: [110, 150], typical: 128 },
|
|
2773
|
+
meter: { signatures: [["6/8", 1]], hypermeter: [[4, 1]] },
|
|
2774
|
+
pitch: {
|
|
2775
|
+
scales: [
|
|
2776
|
+
["major", 0.7],
|
|
2777
|
+
["mixolydian", 0.3],
|
|
2778
|
+
],
|
|
2779
|
+
},
|
|
2780
|
+
harmony: {
|
|
2781
|
+
model: "functional",
|
|
2782
|
+
forms: [[["I", "IV", "V", "I"], 1]],
|
|
2783
|
+
sources: { forms: 3 },
|
|
2784
|
+
presets: [["fifties", 1]],
|
|
2785
|
+
},
|
|
2786
|
+
rhythm: {
|
|
2787
|
+
onsets: {
|
|
2788
|
+
kick: grid("x.....x....."),
|
|
2789
|
+
perc: grid("x..x.xx..x.x"),
|
|
2790
|
+
chords: grid("x.xx.xx.xx.x"),
|
|
2791
|
+
},
|
|
2792
|
+
},
|
|
2793
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
2794
|
+
texture: {
|
|
2795
|
+
roles: {
|
|
2796
|
+
kick: kitRole("acoustic"),
|
|
2797
|
+
snare: kitRole("acoustic"),
|
|
2798
|
+
bass: role("bass"),
|
|
2799
|
+
chords: role("nylon", "steel:0.5"),
|
|
2800
|
+
lead: role("sing", "violin:0.3"),
|
|
2801
|
+
drone: null,
|
|
2802
|
+
},
|
|
2803
|
+
},
|
|
2804
|
+
}),
|
|
2805
|
+
card({
|
|
2806
|
+
id: "nepali-folk",
|
|
2807
|
+
summary:
|
|
2808
|
+
"Nepali and Himalayan folk: the 6/8 jhyaure lilt on madal, sarangi fiddle answering the voice, pentatonic and khamaj melodies in call and response",
|
|
2809
|
+
tempo: { bpm: [90, 130], typical: 108 },
|
|
2810
|
+
meter: { signatures: [["6/8", 1]], cycle: DADRA },
|
|
2811
|
+
pitch: {
|
|
2812
|
+
scales: [
|
|
2813
|
+
["major-pentatonic", 0.75],
|
|
2814
|
+
["khamaj", 0.25],
|
|
2815
|
+
],
|
|
2816
|
+
},
|
|
2817
|
+
melody: { intervals: CONJUNCT, repetition: 0.7 },
|
|
2818
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
2819
|
+
bass: { behaviour: [["none", 1]] },
|
|
2820
|
+
texture: {
|
|
2821
|
+
roles: {
|
|
2822
|
+
...UNPLUGGED,
|
|
2823
|
+
lead: role("sing", "bansuri:0.5"),
|
|
2824
|
+
counter: role("fiddle", "bansuri:0.5"),
|
|
2825
|
+
drone: maybe("strings"),
|
|
2826
|
+
},
|
|
2827
|
+
},
|
|
2828
|
+
}),
|
|
2829
|
+
card({
|
|
2830
|
+
id: "tibetan",
|
|
2831
|
+
summary:
|
|
2832
|
+
"Tibetan Buddhist chant: very low sustained recitation on one tone with overtones, long horns and gongs marking structure, cymbal accelerandos, no pulse grid",
|
|
2833
|
+
tempo: { bpm: [40, 70], typical: 52 },
|
|
2834
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
2835
|
+
pitch: { scales: [["minor-pentatonic", 1]] },
|
|
2836
|
+
melody: {
|
|
2837
|
+
intervals: CHANT,
|
|
2838
|
+
density: [0.5, 1],
|
|
2839
|
+
ambitus: [2, 5],
|
|
2840
|
+
range: [40, 60],
|
|
2841
|
+
},
|
|
2842
|
+
rhythm: { onsets: { bell: grid("x...............") } },
|
|
2843
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
2844
|
+
bass: { behaviour: [["none", 1]] },
|
|
2845
|
+
texture: {
|
|
2846
|
+
kind: "monophonic",
|
|
2847
|
+
roles: {
|
|
2848
|
+
...UNPLUGGED,
|
|
2849
|
+
perc: null,
|
|
2850
|
+
bell: role("gong"),
|
|
2851
|
+
drone: role("choir", "horn:0.5"),
|
|
2852
|
+
lead: role("choir"),
|
|
2853
|
+
},
|
|
2854
|
+
},
|
|
2855
|
+
mix: { space: 0.75 },
|
|
2856
|
+
}),
|
|
2857
|
+
card({
|
|
2858
|
+
id: "asian-underground",
|
|
2859
|
+
summary:
|
|
2860
|
+
"Asian Underground: London breakbeat and drum and bass under tabla loops and sitar drones, sub-bass, raga phrases sampled-style over a minor vamp",
|
|
2861
|
+
tempo: { bpm: [90, 174], typical: 160 },
|
|
2862
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[8, 1]] },
|
|
2863
|
+
pitch: {
|
|
2864
|
+
scales: [
|
|
2865
|
+
["bhairavi", 0.5],
|
|
2866
|
+
["kafi", 0.5],
|
|
2867
|
+
],
|
|
2868
|
+
},
|
|
2869
|
+
rhythm: {
|
|
2870
|
+
onsets: { kick: grid("x.........x....."), snare: BACKBEAT, hat: EIGHTHS },
|
|
2871
|
+
},
|
|
2872
|
+
bass: {
|
|
2873
|
+
behaviour: [
|
|
2874
|
+
["pedal", 0.5],
|
|
2875
|
+
["ostinato", 0.5],
|
|
2876
|
+
],
|
|
2877
|
+
},
|
|
2878
|
+
texture: {
|
|
2879
|
+
roles: {
|
|
2880
|
+
...fullKit("electro"),
|
|
2881
|
+
bass: role("bass", "saw:0.4"),
|
|
2882
|
+
lead: role("sitar", "sing:0.5", "bansuri:0.4"),
|
|
2883
|
+
pad: maybe("strings", "saw:0.4"),
|
|
2884
|
+
},
|
|
2885
|
+
},
|
|
2886
|
+
mix: { loudness: "club" },
|
|
2887
|
+
}),
|
|
2888
|
+
];
|
|
2889
|
+
|
|
2890
|
+
export const AFRICA_MENA_SOUTHASIA_CARDS: readonly StyleCard[] = [
|
|
2891
|
+
...NODES,
|
|
2892
|
+
...LEAVES,
|
|
2893
|
+
];
|