@hraness/dawg 0.6.1 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +92 -0
- package/DAWG.md +343 -116
- package/README.md +27 -25
- package/core/autotune.ts +1119 -0
- package/core/chords.ts +271 -23
- package/core/clips.ts +499 -0
- package/core/diff.ts +182 -104
- package/core/expression.ts +15 -0
- package/core/fx.ts +99 -29
- package/core/instruments.ts +19 -0
- package/core/keys.ts +3 -3
- package/core/loop.ts +5 -0
- package/core/lyrics.ts +297 -0
- package/core/master.ts +3 -3
- package/core/resonators.ts +16 -2
- package/core/routing.ts +165 -0
- package/core/score.ts +832 -13
- package/core/sdk/eval-child.ts +7 -2
- package/core/sdk/eval.ts +35 -6
- package/core/sdk/print.ts +276 -3
- package/core/sdk/sync-lyrics.ts +49 -0
- package/core/sdk/v1.ts +1849 -42
- package/core/sections.ts +292 -26
- package/core/sing.ts +815 -0
- 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/guides/agent.md +29 -0
- package/guides/arrange.md +30 -0
- package/guides/audition.md +20 -14
- package/guides/automation.md +12 -7
- package/guides/chords.md +15 -15
- package/guides/effects.md +17 -16
- 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 -13
- package/guides/play.md +21 -13
- package/guides/project.md +25 -8
- package/guides/providers.md +20 -14
- package/guides/resample.md +15 -9
- 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 -13
- 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 +126 -14
- package/src/agent/calibration-tools.ts +53 -0
- 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 +1 -1
- package/src/agent/gateway.ts +246 -60
- package/src/agent/models.ts +53 -12
- package/src/agent/ops.ts +12 -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 +4 -1
- package/src/agent/provider.ts +22 -8
- 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 +108 -23
- package/src/agent/usage.ts +2 -2
- package/src/agent/voice-tools.ts +925 -0
- package/src/agent/xcb-agent.ts +11 -7
- package/src/argv.ts +38 -0
- package/src/audio/analysis.ts +253 -0
- package/src/audio/arrange.ts +37 -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 +10 -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/effects/chain.ts +3 -1
- package/src/audio/effects/common.ts +43 -0
- package/src/audio/effects/convolution.ts +7 -4
- package/src/audio/effects/filter.ts +48 -69
- package/src/audio/effects/formant.ts +263 -0
- package/src/audio/engine.ts +160 -28
- package/src/audio/fit.ts +35 -3
- package/src/audio/instrument-check.ts +59 -43
- package/src/audio/instruments.ts +4 -0
- package/src/audio/keys/calibration.ts +56 -0
- package/src/audio/keys/electric.ts +8 -1
- package/src/audio/keys/engine.ts +13 -1
- package/src/audio/keys/piano.ts +22 -2
- package/src/audio/kits.ts +135 -6
- package/src/audio/live.ts +114 -20
- package/src/audio/native.ts +615 -0
- package/src/audio/preview.ts +30 -2
- package/src/audio/render-worker.ts +2 -0
- package/src/audio/renderer.ts +2 -0
- package/src/audio/resample.ts +2 -1
- package/src/audio/sampler.ts +85 -4
- package/src/audio/samples.ts +20 -2
- package/src/audio/sing/analysis.ts +193 -0
- package/src/audio/sing/engine.ts +949 -0
- package/src/audio/strings/bow.ts +48 -5
- package/src/audio/strings/engine.ts +8 -2
- 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 +500 -77
- package/src/audio/winds/engine.ts +5 -1
- package/src/audio/winds/trim.ts +28 -4
- package/src/audio/winds/trims1.ts +297 -0
- package/src/audio/winds/voice.ts +15 -2
- 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 +1 -1
- package/src/commands/formant.ts +221 -0
- package/src/commands/fx.ts +101 -32
- package/src/commands/grammar.ts +558 -0
- package/src/commands/help.ts +610 -380
- package/src/commands/history.ts +18 -0
- package/src/commands/keys.ts +8 -8
- package/src/commands/modal.ts +1 -1
- 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/rhythm.ts +3 -0
- package/src/commands/rig.ts +3 -24
- package/src/commands/sing.ts +478 -0
- package/src/commands/strum.ts +13 -1
- 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 +2 -2
- 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 +1397 -253
- package/src/media/cli.ts +20 -3
- package/src/media/import.ts +3 -1
- package/src/project/check.ts +21 -2
- 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 +20 -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 +34 -4
- 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 +759 -177
- package/src/tui/modal-menu.ts +6 -6
- package/src/tui/performance-menu.ts +5 -2
- package/src/tui/play-chords.ts +4 -2
- package/src/tui/play-mode.ts +15 -1
- package/src/tui/play-session.ts +47 -7
- 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 +3 -3
- 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,2838 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* European folk, East and Southeast Asia, Oceania (quality-08 family
|
|
3
|
+
* `europe-asia-pacific`). Root and branch cards only.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { grid, intervals, kitRoles, maybe, role } from "./parts.ts";
|
|
7
|
+
import {
|
|
8
|
+
AGUNG,
|
|
9
|
+
CHING,
|
|
10
|
+
DEGUNG,
|
|
11
|
+
GILAK,
|
|
12
|
+
LADRANG,
|
|
13
|
+
pathetFinals,
|
|
14
|
+
pathetPitch,
|
|
15
|
+
SI_WA,
|
|
16
|
+
} from "./gamelan.ts";
|
|
17
|
+
import { card, type CycleSpec, type StyleCard } from "./schema.ts";
|
|
18
|
+
|
|
19
|
+
const NO_KIT = Object.freeze({ kick: null, snare: null, hat: null });
|
|
20
|
+
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Celtic and British
|
|
23
|
+
//
|
|
24
|
+
// References: Breandán Breathnach, "Folk Music and Dances of Ireland"
|
|
25
|
+
// (1971); Roderick Cannon, "The Highland Bagpipe and Its Music" (1988).
|
|
26
|
+
|
|
27
|
+
const KIT_LIGHT = kitRoles("acoustic", ["kick", "snare"], ["hat"]);
|
|
28
|
+
|
|
29
|
+
/** Jig and reel feel: the lift on the first of each beat group. */
|
|
30
|
+
const JIG_GROOVE = { subdivision: 3, velocity: [1, 0.7, 0.8] } as const;
|
|
31
|
+
|
|
32
|
+
/** Flamenco 12-beat compas (soleá, bulería): accents 3, 6, 8, 10, 12. */
|
|
33
|
+
export const SOLEA_COMPAS: CycleSpec = Object.freeze({
|
|
34
|
+
kind: "compas",
|
|
35
|
+
name: "solea",
|
|
36
|
+
beats: 12,
|
|
37
|
+
divisions: [3, 3, 2, 2, 2],
|
|
38
|
+
strokes: Object.freeze([
|
|
39
|
+
"tak",
|
|
40
|
+
"tak",
|
|
41
|
+
"dum",
|
|
42
|
+
"tak",
|
|
43
|
+
"tak",
|
|
44
|
+
"dum",
|
|
45
|
+
"tak",
|
|
46
|
+
"dum",
|
|
47
|
+
"tak",
|
|
48
|
+
"dum",
|
|
49
|
+
"tak",
|
|
50
|
+
"dum",
|
|
51
|
+
]),
|
|
52
|
+
low: Object.freeze(["dum"]),
|
|
53
|
+
stress: Object.freeze([3, 6, 8, 10, 12]),
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
/** Rumba flamenca: the 3+3+2 ventilador cell on eighths. */
|
|
57
|
+
const RUMBA_CELL = grid("x..x..x.");
|
|
58
|
+
|
|
59
|
+
const EUROPE_LEAVES: readonly StyleCard[] = [
|
|
60
|
+
card({
|
|
61
|
+
id: "irish-trad",
|
|
62
|
+
summary:
|
|
63
|
+
"reel and jig: AABB tunes in 8-bar strains, dorian and mixolydian, roll and cut ornaments, unison session heterophony",
|
|
64
|
+
tempo: { bpm: [160, 220], typical: 190 },
|
|
65
|
+
meter: {
|
|
66
|
+
signatures: [
|
|
67
|
+
["4/4", 0.5],
|
|
68
|
+
["6/8", 0.5],
|
|
69
|
+
],
|
|
70
|
+
hypermeter: [[8, 1]],
|
|
71
|
+
},
|
|
72
|
+
melody: {
|
|
73
|
+
density: [3, 4],
|
|
74
|
+
ambitus: [9, 14],
|
|
75
|
+
range: [62, 86],
|
|
76
|
+
phraseBars: [[4, 1]],
|
|
77
|
+
finals: [
|
|
78
|
+
[0, 0.7],
|
|
79
|
+
[4, 0.3],
|
|
80
|
+
],
|
|
81
|
+
},
|
|
82
|
+
texture: {
|
|
83
|
+
roles: {
|
|
84
|
+
lead: role("fiddle", "tinwhistle:0.6", "flute:0.5"),
|
|
85
|
+
counter: maybe("fiddle", "flute:0.5"),
|
|
86
|
+
chords: role("acoustic", "lute:0.4"),
|
|
87
|
+
perc: maybe("bodhran"),
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
}),
|
|
91
|
+
card({
|
|
92
|
+
id: "sean-nos",
|
|
93
|
+
summary:
|
|
94
|
+
"sean-nós: unaccompanied melismatic solo song, free strophic rubato, decorated stepwise lines, no harmony",
|
|
95
|
+
tempo: { bpm: [56, 80], typical: 66 },
|
|
96
|
+
meter: { signatures: [["4/4", 1]] },
|
|
97
|
+
harmony: { model: "none" },
|
|
98
|
+
melody: {
|
|
99
|
+
density: [1, 3],
|
|
100
|
+
intervals: intervals(8, 2, 0.4, 0.5),
|
|
101
|
+
phraseBars: [[4, 1]],
|
|
102
|
+
contour: [["arch", 1]],
|
|
103
|
+
},
|
|
104
|
+
bass: { behaviour: [["none", 1]] },
|
|
105
|
+
texture: {
|
|
106
|
+
kind: "monophonic",
|
|
107
|
+
roles: {
|
|
108
|
+
chords: null,
|
|
109
|
+
bass: null,
|
|
110
|
+
perc: null,
|
|
111
|
+
lead: role("sing"),
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
mix: { space: 0.4 },
|
|
115
|
+
}),
|
|
116
|
+
card({
|
|
117
|
+
id: "scottish-trad",
|
|
118
|
+
summary:
|
|
119
|
+
"strathspey: dotted snap (short-long Scotch snap), double-tonic I-bVII shift, pipe-scale mixolydian",
|
|
120
|
+
tempo: { bpm: [110, 150], typical: 128 },
|
|
121
|
+
meter: { signatures: [["4/4", 1]] },
|
|
122
|
+
groove: { subdivision: 4, velocity: [1, 0.9, 0.5, 0.8] },
|
|
123
|
+
pitch: { scales: [["mixolydian", 1]] },
|
|
124
|
+
harmony: {
|
|
125
|
+
presets: null,
|
|
126
|
+
forms: [[["I", "I", "bVII", "bVII"], 1]],
|
|
127
|
+
cadences: [["bVII-I", 1]],
|
|
128
|
+
},
|
|
129
|
+
melody: { density: [2, 4] },
|
|
130
|
+
texture: {
|
|
131
|
+
roles: {
|
|
132
|
+
lead: role("fiddle", "tinwhistle:0.5"),
|
|
133
|
+
drone: maybe("reeds"),
|
|
134
|
+
chords: role("acoustic", "piano:0.4"),
|
|
135
|
+
perc: maybe("bodhran"),
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
rhythm: { onsets: { perc: grid("x.x.x.x.") } },
|
|
139
|
+
}),
|
|
140
|
+
card({
|
|
141
|
+
id: "piobaireachd",
|
|
142
|
+
summary:
|
|
143
|
+
"ceòl mòr: theme (ùrlar) and variations over a fixed pipe drone, nine-note mixolydian chanter, slow pulse",
|
|
144
|
+
tempo: { bpm: [40, 66], typical: 52 },
|
|
145
|
+
meter: { signatures: [["4/4", 1]] },
|
|
146
|
+
pitch: { scales: [["mixolydian", 1]] },
|
|
147
|
+
harmony: { model: "drone" },
|
|
148
|
+
melody: {
|
|
149
|
+
density: [1, 2],
|
|
150
|
+
ambitus: [9, 9],
|
|
151
|
+
range: [67, 79],
|
|
152
|
+
repetition: 0.8,
|
|
153
|
+
phraseBars: [[4, 1]],
|
|
154
|
+
},
|
|
155
|
+
bass: { behaviour: [["pedal", 1]] },
|
|
156
|
+
texture: {
|
|
157
|
+
kind: "monophonic",
|
|
158
|
+
roles: {
|
|
159
|
+
chords: null,
|
|
160
|
+
perc: null,
|
|
161
|
+
drone: role("reeds"),
|
|
162
|
+
bass: maybe("reeds"),
|
|
163
|
+
lead: role("reeds"),
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
form: { archetype: "theme-and-variations" },
|
|
167
|
+
}),
|
|
168
|
+
card({
|
|
169
|
+
id: "english-folk",
|
|
170
|
+
summary:
|
|
171
|
+
"morris and ceilidh: 2-bar call figures over I-IV-V, major and mixolydian, melodeon and fiddle, stepped hop on beat",
|
|
172
|
+
tempo: { bpm: [100, 130], typical: 112 },
|
|
173
|
+
meter: {
|
|
174
|
+
signatures: [
|
|
175
|
+
["4/4", 0.6],
|
|
176
|
+
["6/8", 0.4],
|
|
177
|
+
],
|
|
178
|
+
},
|
|
179
|
+
pitch: {
|
|
180
|
+
scales: [
|
|
181
|
+
["major", 0.6],
|
|
182
|
+
["mixolydian", 0.4],
|
|
183
|
+
],
|
|
184
|
+
},
|
|
185
|
+
harmony: { presets: [["fifties", 1]], cadences: [["V-I", 1]] },
|
|
186
|
+
texture: {
|
|
187
|
+
roles: {
|
|
188
|
+
lead: role("fiddle", "reeds:0.6"),
|
|
189
|
+
chords: role("reeds", "acoustic:0.5"),
|
|
190
|
+
perc: maybe("framedrum"),
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
}),
|
|
194
|
+
card({
|
|
195
|
+
id: "welsh",
|
|
196
|
+
summary:
|
|
197
|
+
"cerdd dant: a sung counter-melody (descant) set over a repeated harp air, major-key diatonic harmony",
|
|
198
|
+
tempo: { bpm: [70, 100], typical: 84 },
|
|
199
|
+
meter: {
|
|
200
|
+
signatures: [
|
|
201
|
+
["3/4", 0.5],
|
|
202
|
+
["4/4", 0.5],
|
|
203
|
+
],
|
|
204
|
+
},
|
|
205
|
+
pitch: { scales: [["major", 1]] },
|
|
206
|
+
harmony: {
|
|
207
|
+
presets: [
|
|
208
|
+
["canon", 0.5],
|
|
209
|
+
["fifties", 0.5],
|
|
210
|
+
],
|
|
211
|
+
cadences: [["V-I", 1]],
|
|
212
|
+
},
|
|
213
|
+
melody: { density: [1, 2] },
|
|
214
|
+
texture: {
|
|
215
|
+
kind: "polyphonic",
|
|
216
|
+
roles: {
|
|
217
|
+
chords: role("harp"),
|
|
218
|
+
lead: role("sing"),
|
|
219
|
+
counter: role("harp", "flute:0.4"),
|
|
220
|
+
perc: null,
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
}),
|
|
224
|
+
card({
|
|
225
|
+
id: "breton",
|
|
226
|
+
summary:
|
|
227
|
+
"kan ha diskan: two singers in overlapping call and response, an dro and gavotte in 4/4, bombarde and biniou in octave pairs",
|
|
228
|
+
tempo: { bpm: [110, 140], typical: 124 },
|
|
229
|
+
meter: { signatures: [["4/4", 1]], hypermeter: [[4, 1]] },
|
|
230
|
+
pitch: {
|
|
231
|
+
scales: [
|
|
232
|
+
["dorian", 0.5],
|
|
233
|
+
["minor", 0.5],
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
harmony: { model: "drone" },
|
|
237
|
+
melody: { repetition: 0.85, phraseBars: [[2, 1]] },
|
|
238
|
+
texture: {
|
|
239
|
+
kind: "heterophonic",
|
|
240
|
+
roles: {
|
|
241
|
+
bass: null,
|
|
242
|
+
perc: null,
|
|
243
|
+
chords: null,
|
|
244
|
+
lead: role("oboe", "sing:0.6"),
|
|
245
|
+
counter: role("reeds", "sing:0.5"),
|
|
246
|
+
drone: maybe("reeds"),
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
}),
|
|
250
|
+
card({
|
|
251
|
+
id: "galician",
|
|
252
|
+
summary:
|
|
253
|
+
"muiñeira: 6/8 gaita (bagpipe) over a drone, pandeireta on the dotted pulse, mixolydian and major",
|
|
254
|
+
tempo: { bpm: [150, 190], typical: 168 },
|
|
255
|
+
meter: { signatures: [["6/8", 1]] },
|
|
256
|
+
groove: JIG_GROOVE,
|
|
257
|
+
pitch: {
|
|
258
|
+
scales: [
|
|
259
|
+
["mixolydian", 0.5],
|
|
260
|
+
["major", 0.5],
|
|
261
|
+
],
|
|
262
|
+
},
|
|
263
|
+
harmony: { model: "drone" },
|
|
264
|
+
texture: {
|
|
265
|
+
roles: {
|
|
266
|
+
chords: null,
|
|
267
|
+
lead: role("reeds", "oboe:0.4"),
|
|
268
|
+
drone: role("reeds"),
|
|
269
|
+
perc: role("framedrum", "bodhran:0.5"),
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
rhythm: { onsets: { perc: grid("x.5x.5") } },
|
|
273
|
+
}),
|
|
274
|
+
card({
|
|
275
|
+
id: "celtic-fusion",
|
|
276
|
+
summary:
|
|
277
|
+
"celtic rock: trad modal tunes over a rock backbeat on 2 and 4, I-bVII-IV mixolydian loops, electric bass",
|
|
278
|
+
tempo: { bpm: [110, 160], typical: 130 },
|
|
279
|
+
meter: { signatures: [["4/4", 1]] },
|
|
280
|
+
harmony: {
|
|
281
|
+
presets: [
|
|
282
|
+
["mixolydian-rock", 0.6],
|
|
283
|
+
["axis", 0.4],
|
|
284
|
+
],
|
|
285
|
+
},
|
|
286
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
287
|
+
texture: {
|
|
288
|
+
kind: "homophonic",
|
|
289
|
+
roles: {
|
|
290
|
+
...KIT_LIGHT,
|
|
291
|
+
bass: role("bassguitar"),
|
|
292
|
+
chords: role("electric", "acoustic:0.5"),
|
|
293
|
+
lead: role("fiddle", "tinwhistle:0.5"),
|
|
294
|
+
perc: null,
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
rhythm: {
|
|
298
|
+
onsets: {
|
|
299
|
+
kick: grid("x...x.5."),
|
|
300
|
+
snare: grid("..x...x."),
|
|
301
|
+
hat: grid("xxxxxxxx"),
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
}),
|
|
305
|
+
|
|
306
|
+
// -------------------------------------------------------------------------
|
|
307
|
+
// Nordic and Baltic
|
|
308
|
+
//
|
|
309
|
+
// References: Jan Ling, "A History of European Folk Music" (1997);
|
|
310
|
+
// Mats Johansson on polska beat asymmetry (2010).
|
|
311
|
+
card({
|
|
312
|
+
id: "nordic-fiddle",
|
|
313
|
+
summary:
|
|
314
|
+
"polska: 3/4 with an uneven, long-first beat, hardingfele sympathetic drone strings, double stops on open fifths",
|
|
315
|
+
tempo: { bpm: [100, 130], typical: 114 },
|
|
316
|
+
meter: { signatures: [["3/4", 1]] },
|
|
317
|
+
groove: {
|
|
318
|
+
subdivision: 2,
|
|
319
|
+
velocity: [1, 0.7],
|
|
320
|
+
microtiming: [0, 0.1],
|
|
321
|
+
},
|
|
322
|
+
harmony: { model: "drone" },
|
|
323
|
+
// Polska bowing runs in semiquavers across the three beats.
|
|
324
|
+
melody: { density: [3, 4] },
|
|
325
|
+
texture: {
|
|
326
|
+
roles: {
|
|
327
|
+
perc: null,
|
|
328
|
+
bass: null,
|
|
329
|
+
chords: null,
|
|
330
|
+
lead: role("fiddle", "violin:0.5"),
|
|
331
|
+
counter: maybe("fiddle", "viola:0.5"),
|
|
332
|
+
drone: role("fiddle"),
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
}),
|
|
336
|
+
card({
|
|
337
|
+
id: "kulning",
|
|
338
|
+
summary:
|
|
339
|
+
"kulning: high head-voice herding calls, long held tones and falling glides, free rhythm, no accompaniment",
|
|
340
|
+
tempo: { bpm: [40, 66], typical: 50 },
|
|
341
|
+
meter: { signatures: [["4/4", 1]] },
|
|
342
|
+
pitch: { scales: [["major-pentatonic", 1]] },
|
|
343
|
+
harmony: { model: "none" },
|
|
344
|
+
melody: {
|
|
345
|
+
density: [0, 1],
|
|
346
|
+
range: [72, 91],
|
|
347
|
+
contour: [["descending", 1]],
|
|
348
|
+
intervals: intervals(2, 3, 2, 0.4),
|
|
349
|
+
},
|
|
350
|
+
bass: { behaviour: [["none", 1]] },
|
|
351
|
+
texture: {
|
|
352
|
+
kind: "monophonic",
|
|
353
|
+
roles: { chords: null, bass: null, lead: role("sing") },
|
|
354
|
+
},
|
|
355
|
+
mix: { space: 0.75 },
|
|
356
|
+
}),
|
|
357
|
+
card({
|
|
358
|
+
id: "joik",
|
|
359
|
+
summary:
|
|
360
|
+
"Sámi joik: a short cyclic pentatonic figure repeated without end, wide leaps of fourths and fifths, no fixed close",
|
|
361
|
+
tempo: { bpm: [80, 120], typical: 96 },
|
|
362
|
+
meter: { signatures: [["4/4", 1]] },
|
|
363
|
+
pitch: { scales: [["minor-pentatonic", 1]] },
|
|
364
|
+
harmony: { model: "none" },
|
|
365
|
+
melody: {
|
|
366
|
+
repetition: 0.9,
|
|
367
|
+
phraseBars: [[2, 1]],
|
|
368
|
+
intervals: intervals(2, 4, 3, 0.8),
|
|
369
|
+
contour: [["wave", 1]],
|
|
370
|
+
},
|
|
371
|
+
bass: { behaviour: [["none", 1]] },
|
|
372
|
+
texture: {
|
|
373
|
+
kind: "monophonic",
|
|
374
|
+
roles: {
|
|
375
|
+
chords: null,
|
|
376
|
+
bass: null,
|
|
377
|
+
lead: role("sing"),
|
|
378
|
+
perc: maybe("framedrum"),
|
|
379
|
+
},
|
|
380
|
+
},
|
|
381
|
+
rhythm: { onsets: { perc: grid("x.x.x.x.") } },
|
|
382
|
+
}),
|
|
383
|
+
card({
|
|
384
|
+
id: "rune-singing",
|
|
385
|
+
summary:
|
|
386
|
+
"runo song: trochaic tetrameter on a 5-note range, 5/4 lines, lead singer and chorus overlap on the line end",
|
|
387
|
+
tempo: { bpm: [90, 130], typical: 108 },
|
|
388
|
+
meter: { signatures: [["5/4", 1]], grouping: [[[2, 3], 1]] },
|
|
389
|
+
pitch: { scales: [["minor", 1]] },
|
|
390
|
+
harmony: { model: "none" },
|
|
391
|
+
melody: {
|
|
392
|
+
ambitus: [5, 5],
|
|
393
|
+
repetition: 0.9,
|
|
394
|
+
phraseBars: [[1, 1]],
|
|
395
|
+
intervals: intervals(8, 1, 0.1, 1),
|
|
396
|
+
},
|
|
397
|
+
bass: { behaviour: [["none", 1]] },
|
|
398
|
+
texture: {
|
|
399
|
+
roles: {
|
|
400
|
+
perc: null,
|
|
401
|
+
chords: null,
|
|
402
|
+
bass: null,
|
|
403
|
+
lead: role("sing"),
|
|
404
|
+
counter: role("choir"),
|
|
405
|
+
drone: maybe("dulcimer"),
|
|
406
|
+
},
|
|
407
|
+
},
|
|
408
|
+
}),
|
|
409
|
+
card({
|
|
410
|
+
id: "baltic-folk",
|
|
411
|
+
summary:
|
|
412
|
+
"sutartinės: two-voice canon in clashing seconds, dainas in narrow-range strophes, kanklės drone",
|
|
413
|
+
tempo: { bpm: [80, 110], typical: 92 },
|
|
414
|
+
meter: {
|
|
415
|
+
signatures: [
|
|
416
|
+
["2/4", 0.6],
|
|
417
|
+
["4/4", 0.4],
|
|
418
|
+
],
|
|
419
|
+
},
|
|
420
|
+
pitch: {
|
|
421
|
+
scales: [
|
|
422
|
+
["major", 0.5],
|
|
423
|
+
["dorian", 0.5],
|
|
424
|
+
],
|
|
425
|
+
},
|
|
426
|
+
harmony: { model: "drone" },
|
|
427
|
+
melody: {
|
|
428
|
+
ambitus: [4, 7],
|
|
429
|
+
repetition: 0.9,
|
|
430
|
+
intervals: intervals(8, 1.5, 0.2, 1),
|
|
431
|
+
},
|
|
432
|
+
texture: {
|
|
433
|
+
kind: "polyphonic",
|
|
434
|
+
roles: {
|
|
435
|
+
chords: null,
|
|
436
|
+
lead: role("sing"),
|
|
437
|
+
counter: role("sing", "choir:0.5"),
|
|
438
|
+
drone: role("dulcimer"),
|
|
439
|
+
},
|
|
440
|
+
},
|
|
441
|
+
}),
|
|
442
|
+
card({
|
|
443
|
+
id: "nordic-folk-revival",
|
|
444
|
+
summary:
|
|
445
|
+
"ambient nordic folk: frame-drum ostinato, lyre drones, aeolian and dorian chant over pedal point",
|
|
446
|
+
tempo: { bpm: [70, 100], typical: 84 },
|
|
447
|
+
meter: { signatures: [["4/4", 1]] },
|
|
448
|
+
harmony: {
|
|
449
|
+
model: "modal",
|
|
450
|
+
rhythm: [[0.5, 1]],
|
|
451
|
+
},
|
|
452
|
+
bass: { behaviour: [["pedal", 1]] },
|
|
453
|
+
texture: {
|
|
454
|
+
roles: {
|
|
455
|
+
chords: role("lute", "harp:0.5"),
|
|
456
|
+
pad: maybe("strings", "choir:0.5"),
|
|
457
|
+
lead: role("sing", "flute:0.4"),
|
|
458
|
+
perc: role("framedrum"),
|
|
459
|
+
},
|
|
460
|
+
},
|
|
461
|
+
rhythm: { onsets: { perc: grid("x..x..x.x...x...") } },
|
|
462
|
+
mix: { space: 0.6 },
|
|
463
|
+
}),
|
|
464
|
+
|
|
465
|
+
// -------------------------------------------------------------------------
|
|
466
|
+
// Western Europe
|
|
467
|
+
//
|
|
468
|
+
// References: Peter Manuel, "Popular Musics of the Non-Western World"
|
|
469
|
+
// (1988) on Iberian and Mediterranean dance forms; Max Peter Baumann,
|
|
470
|
+
// "Musikfolklore und Musikfolklorismus" (1976) on yodel and Ländler.
|
|
471
|
+
card({
|
|
472
|
+
id: "volksmusik",
|
|
473
|
+
summary:
|
|
474
|
+
"Ländler: 3/4 oom-pah-pah, tonic and dominant only, yodel leaps across the register break, reeds and tuba",
|
|
475
|
+
tempo: { bpm: [120, 160], typical: 138 },
|
|
476
|
+
meter: { signatures: [["3/4", 1]] },
|
|
477
|
+
pitch: { scales: [["major", 1]] },
|
|
478
|
+
harmony: {
|
|
479
|
+
presets: null,
|
|
480
|
+
forms: [[["I", "I", "V", "V", "V", "V", "I", "I"], 1]],
|
|
481
|
+
cadences: [["V-I", 1]],
|
|
482
|
+
voicing: { strokes: [["waltz", 1]] },
|
|
483
|
+
},
|
|
484
|
+
melody: { intervals: intervals(3, 5, 2, 0.5) },
|
|
485
|
+
bass: { behaviour: [["root-fifth", 1]], onsets: grid("x.....") },
|
|
486
|
+
texture: {
|
|
487
|
+
kind: "homophonic",
|
|
488
|
+
roles: {
|
|
489
|
+
bass: role("tuba"),
|
|
490
|
+
chords: role("reeds", "nylon:0.4"),
|
|
491
|
+
lead: role("sing", "clarinet:0.5", "trumpet:0.4"),
|
|
492
|
+
perc: null,
|
|
493
|
+
},
|
|
494
|
+
},
|
|
495
|
+
}),
|
|
496
|
+
card({
|
|
497
|
+
id: "polka",
|
|
498
|
+
summary:
|
|
499
|
+
"polka: 2/4 oom-pah, bass on the beat and chords on the off-beat, I-V-I in major, clarinet and reeds lead",
|
|
500
|
+
tempo: { bpm: [110, 140], typical: 126 },
|
|
501
|
+
meter: { signatures: [["2/4", 1]], hypermeter: [[8, 1]] },
|
|
502
|
+
groove: { subdivision: 2, velocity: [1, 0.8] },
|
|
503
|
+
pitch: { scales: [["major", 1]] },
|
|
504
|
+
harmony: {
|
|
505
|
+
presets: null,
|
|
506
|
+
forms: [[["I", "I", "V", "V", "V", "V", "I", "I"], 1]],
|
|
507
|
+
cadences: [["V-I", 1]],
|
|
508
|
+
rhythm: [[1, 1]],
|
|
509
|
+
},
|
|
510
|
+
bass: { behaviour: [["root-fifth", 1]], onsets: grid("x.x.") },
|
|
511
|
+
texture: {
|
|
512
|
+
kind: "homophonic",
|
|
513
|
+
roles: {
|
|
514
|
+
...kitRoles("acoustic", ["kick", "snare"]),
|
|
515
|
+
bass: role("tuba"),
|
|
516
|
+
chords: role("reeds"),
|
|
517
|
+
lead: role("clarinet", "trumpet:0.6", "reeds:0.4"),
|
|
518
|
+
perc: null,
|
|
519
|
+
},
|
|
520
|
+
},
|
|
521
|
+
rhythm: {
|
|
522
|
+
onsets: { kick: grid("x.x."), snare: grid(".x.x"), chords: grid(".x.x") },
|
|
523
|
+
},
|
|
524
|
+
}),
|
|
525
|
+
card({
|
|
526
|
+
id: "waltz-folk",
|
|
527
|
+
summary:
|
|
528
|
+
"folk waltz: 3/4 with bass on 1 and chords on 2 and 3, I-IV-V-I in major, musette reeds",
|
|
529
|
+
tempo: { bpm: [130, 180], typical: 150 },
|
|
530
|
+
meter: { signatures: [["3/4", 1]] },
|
|
531
|
+
pitch: {
|
|
532
|
+
scales: [
|
|
533
|
+
["major", 0.7],
|
|
534
|
+
["harmonic-minor", 0.3],
|
|
535
|
+
],
|
|
536
|
+
},
|
|
537
|
+
harmony: {
|
|
538
|
+
presets: [["fifties", 1]],
|
|
539
|
+
voicing: { strokes: [["waltz", 1]] },
|
|
540
|
+
},
|
|
541
|
+
bass: { behaviour: [["root-fifth", 1]], onsets: grid("x.....") },
|
|
542
|
+
texture: {
|
|
543
|
+
kind: "homophonic",
|
|
544
|
+
roles: {
|
|
545
|
+
bass: role("contrabass", "tuba:0.4"),
|
|
546
|
+
chords: role("reeds", "nylon:0.5"),
|
|
547
|
+
lead: role("reeds", "violin:0.5"),
|
|
548
|
+
perc: null,
|
|
549
|
+
},
|
|
550
|
+
},
|
|
551
|
+
rhythm: { onsets: { chords: grid("..x.x.") } },
|
|
552
|
+
}),
|
|
553
|
+
card({
|
|
554
|
+
id: "levenslied",
|
|
555
|
+
summary:
|
|
556
|
+
"levenslied: sentimental strophic ballad with a sing-along refrain, waltz or schlager 4/4, I-vi-IV-V, key change up a step",
|
|
557
|
+
tempo: { bpm: [90, 130], typical: 108 },
|
|
558
|
+
meter: {
|
|
559
|
+
signatures: [
|
|
560
|
+
["4/4", 0.6],
|
|
561
|
+
["3/4", 0.4],
|
|
562
|
+
],
|
|
563
|
+
},
|
|
564
|
+
pitch: { scales: [["major", 1]] },
|
|
565
|
+
harmony: {
|
|
566
|
+
presets: [
|
|
567
|
+
["fifties", 0.6],
|
|
568
|
+
["axis", 0.4],
|
|
569
|
+
],
|
|
570
|
+
},
|
|
571
|
+
texture: {
|
|
572
|
+
kind: "homophonic",
|
|
573
|
+
roles: {
|
|
574
|
+
...KIT_LIGHT,
|
|
575
|
+
bass: role("bass"),
|
|
576
|
+
chords: role("reeds", "piano:0.6"),
|
|
577
|
+
lead: role("sing"),
|
|
578
|
+
perc: null,
|
|
579
|
+
},
|
|
580
|
+
},
|
|
581
|
+
rhythm: {
|
|
582
|
+
onsets: { kick: grid("x...x..."), snare: grid("..x...x."), hat: null },
|
|
583
|
+
},
|
|
584
|
+
}),
|
|
585
|
+
card({
|
|
586
|
+
id: "basque",
|
|
587
|
+
summary:
|
|
588
|
+
"Basque trikitixa and txalaparta: two players interlock on wooden planks in fast 5/8 and 6/8 cells, trikitixa reeds over a tambourine",
|
|
589
|
+
tempo: { bpm: [130, 180], typical: 150 },
|
|
590
|
+
meter: {
|
|
591
|
+
signatures: [
|
|
592
|
+
["5/8", 0.5],
|
|
593
|
+
["6/8", 0.5],
|
|
594
|
+
],
|
|
595
|
+
grouping: [
|
|
596
|
+
[[2, 3], 0.5],
|
|
597
|
+
[[3, 3], 0.5],
|
|
598
|
+
],
|
|
599
|
+
},
|
|
600
|
+
pitch: {
|
|
601
|
+
scales: [
|
|
602
|
+
["major", 0.5],
|
|
603
|
+
["mixolydian", 0.5],
|
|
604
|
+
],
|
|
605
|
+
},
|
|
606
|
+
texture: {
|
|
607
|
+
kind: "interlocking",
|
|
608
|
+
roles: {
|
|
609
|
+
chords: role("reeds"),
|
|
610
|
+
lead: role("reeds", "oboe:0.4"),
|
|
611
|
+
perc: role("xylophone", "framedrum:0.5"),
|
|
612
|
+
},
|
|
613
|
+
},
|
|
614
|
+
rhythm: { onsets: { perc: grid("x.x.x.") } },
|
|
615
|
+
}),
|
|
616
|
+
card({
|
|
617
|
+
id: "occitan",
|
|
618
|
+
summary:
|
|
619
|
+
"Occitan bourrée: 3/8 and 2/4 dance over the hurdy-gurdy's drone and trompette buzz, mixolydian and dorian",
|
|
620
|
+
tempo: { bpm: [110, 150], typical: 126 },
|
|
621
|
+
meter: {
|
|
622
|
+
signatures: [
|
|
623
|
+
["3/4", 0.5],
|
|
624
|
+
["2/4", 0.5],
|
|
625
|
+
],
|
|
626
|
+
},
|
|
627
|
+
pitch: {
|
|
628
|
+
scales: [
|
|
629
|
+
["mixolydian", 0.5],
|
|
630
|
+
["dorian", 0.5],
|
|
631
|
+
],
|
|
632
|
+
},
|
|
633
|
+
harmony: { model: "drone" },
|
|
634
|
+
texture: {
|
|
635
|
+
roles: {
|
|
636
|
+
chords: null,
|
|
637
|
+
drone: role("fiddle", "reeds:0.5"),
|
|
638
|
+
lead: role("fiddle", "reeds:0.5"),
|
|
639
|
+
perc: maybe("framedrum"),
|
|
640
|
+
},
|
|
641
|
+
},
|
|
642
|
+
}),
|
|
643
|
+
card({
|
|
644
|
+
id: "italian-folk",
|
|
645
|
+
summary:
|
|
646
|
+
"tarantella and pizzica: fast 6/8 tamburello triplets, i-V7 harmonic minor alternation, tremolo plucked strings",
|
|
647
|
+
tempo: { bpm: [150, 200], typical: 176 },
|
|
648
|
+
meter: { signatures: [["6/8", 1]] },
|
|
649
|
+
groove: JIG_GROOVE,
|
|
650
|
+
pitch: {
|
|
651
|
+
scales: [
|
|
652
|
+
["harmonic-minor", 0.7],
|
|
653
|
+
["major", 0.3],
|
|
654
|
+
],
|
|
655
|
+
},
|
|
656
|
+
harmony: {
|
|
657
|
+
presets: null,
|
|
658
|
+
forms: [[["i", "V", "V", "i"], 1]],
|
|
659
|
+
cadences: [["V-I", 1]],
|
|
660
|
+
},
|
|
661
|
+
texture: {
|
|
662
|
+
roles: {
|
|
663
|
+
chords: role("nylon", "reeds:0.5"),
|
|
664
|
+
lead: role("tremolo", "violin:0.5", "reeds:0.4"),
|
|
665
|
+
perc: role("framedrum"),
|
|
666
|
+
},
|
|
667
|
+
},
|
|
668
|
+
rhythm: { onsets: { perc: grid("xxxxxx") } },
|
|
669
|
+
}),
|
|
670
|
+
card({
|
|
671
|
+
id: "maltese",
|
|
672
|
+
summary:
|
|
673
|
+
"għana: improvised sung exchanges over a strummed guitar ostinato, Mediterranean minor with a phrygian close",
|
|
674
|
+
tempo: { bpm: [80, 110], typical: 94 },
|
|
675
|
+
meter: { signatures: [["4/4", 1]] },
|
|
676
|
+
pitch: {
|
|
677
|
+
scales: [
|
|
678
|
+
["harmonic-minor", 0.5],
|
|
679
|
+
["phrygian-dominant", 0.5],
|
|
680
|
+
],
|
|
681
|
+
},
|
|
682
|
+
harmony: { presets: [["andalusian", 1]] },
|
|
683
|
+
texture: {
|
|
684
|
+
roles: {
|
|
685
|
+
perc: null,
|
|
686
|
+
bass: null,
|
|
687
|
+
chords: role("nylon"),
|
|
688
|
+
lead: role("sing"),
|
|
689
|
+
counter: maybe("sing"),
|
|
690
|
+
},
|
|
691
|
+
},
|
|
692
|
+
}),
|
|
693
|
+
|
|
694
|
+
// -------------------------------------------------------------------------
|
|
695
|
+
// Iberia
|
|
696
|
+
//
|
|
697
|
+
// References: Peter Manuel, "Modal Harmony in Andalusian, Eastern
|
|
698
|
+
// European, and Turkish Syncretic Musics" (1989); Rui Vieira Nery,
|
|
699
|
+
// "A History of Portuguese Fado" (2012).
|
|
700
|
+
card({
|
|
701
|
+
id: "flamenco",
|
|
702
|
+
summary:
|
|
703
|
+
"soleá compás: 12-beat cycle accented 3, 6, 8, 10, 12, phrygian (Andalusian) cadence iv-III-II-I, rasgueado nylon guitar",
|
|
704
|
+
tempo: { bpm: [100, 160], typical: 128 },
|
|
705
|
+
meter: { signatures: [["12/8", 1]], cycle: SOLEA_COMPAS },
|
|
706
|
+
pitch: { scales: [["phrygian-dominant", 1]] },
|
|
707
|
+
harmony: {
|
|
708
|
+
presets: [["andalusian", 1]],
|
|
709
|
+
cadences: [["bII-I", 1]],
|
|
710
|
+
voicing: { strokes: [["down", 1]] },
|
|
711
|
+
},
|
|
712
|
+
melody: { intervals: intervals(8, 2, 0.4, 0.8) },
|
|
713
|
+
texture: {
|
|
714
|
+
kind: "homophonic",
|
|
715
|
+
roles: {
|
|
716
|
+
chords: role("nylon"),
|
|
717
|
+
lead: role("sing", "nylon:0.4"),
|
|
718
|
+
perc: role("framedrum"),
|
|
719
|
+
},
|
|
720
|
+
},
|
|
721
|
+
}),
|
|
722
|
+
card({
|
|
723
|
+
id: "rumba-flamenca",
|
|
724
|
+
summary:
|
|
725
|
+
"rumba flamenca: the 3+3+2 ventilador strum on nylon guitar, Andalusian cadence loop, palmas on 2 and 4",
|
|
726
|
+
tempo: { bpm: [96, 128], typical: 110 },
|
|
727
|
+
meter: { signatures: [["4/4", 1]] },
|
|
728
|
+
harmony: {
|
|
729
|
+
presets: [["andalusian", 1]],
|
|
730
|
+
voicing: { strokes: [["funk", 1]] },
|
|
731
|
+
},
|
|
732
|
+
texture: {
|
|
733
|
+
roles: {
|
|
734
|
+
bass: role("bass"),
|
|
735
|
+
chords: role("nylon"),
|
|
736
|
+
lead: role("sing", "nylon:0.4"),
|
|
737
|
+
perc: role("framedrum"),
|
|
738
|
+
},
|
|
739
|
+
},
|
|
740
|
+
rhythm: { onsets: { chords: RUMBA_CELL, perc: grid("..x...x.") } },
|
|
741
|
+
}),
|
|
742
|
+
card({
|
|
743
|
+
id: "copla",
|
|
744
|
+
summary:
|
|
745
|
+
"copla: orchestral song in three parts, minor verse turning to a major refrain (modal interchange), pasodoble 2/4 lilt",
|
|
746
|
+
tempo: { bpm: [90, 120], typical: 104 },
|
|
747
|
+
meter: {
|
|
748
|
+
signatures: [
|
|
749
|
+
["2/4", 0.6],
|
|
750
|
+
["4/4", 0.4],
|
|
751
|
+
],
|
|
752
|
+
},
|
|
753
|
+
pitch: {
|
|
754
|
+
scales: [
|
|
755
|
+
["harmonic-minor", 0.6],
|
|
756
|
+
["major", 0.4],
|
|
757
|
+
],
|
|
758
|
+
},
|
|
759
|
+
harmony: {
|
|
760
|
+
presets: [
|
|
761
|
+
["andalusian", 0.5],
|
|
762
|
+
["fifties", 0.5],
|
|
763
|
+
],
|
|
764
|
+
cadences: [["V-I", 1]],
|
|
765
|
+
},
|
|
766
|
+
texture: {
|
|
767
|
+
kind: "homophonic",
|
|
768
|
+
roles: {
|
|
769
|
+
bass: role("contrabass"),
|
|
770
|
+
chords: role("strings", "piano:0.5"),
|
|
771
|
+
lead: role("sing"),
|
|
772
|
+
counter: maybe("violins", "trumpet:0.4"),
|
|
773
|
+
perc: null,
|
|
774
|
+
},
|
|
775
|
+
},
|
|
776
|
+
}),
|
|
777
|
+
card({
|
|
778
|
+
id: "jota",
|
|
779
|
+
summary:
|
|
780
|
+
"jota: fast 3/4 with castanet triplets, alternating tonic and dominant only, sung copla between danced strains",
|
|
781
|
+
tempo: { bpm: [150, 200], typical: 174 },
|
|
782
|
+
meter: { signatures: [["3/4", 1]] },
|
|
783
|
+
pitch: { scales: [["major", 1]] },
|
|
784
|
+
harmony: {
|
|
785
|
+
presets: null,
|
|
786
|
+
forms: [[["I", "V", "V", "I"], 1]],
|
|
787
|
+
cadences: [["V-I", 1]],
|
|
788
|
+
voicing: { strokes: [["waltz", 1]] },
|
|
789
|
+
},
|
|
790
|
+
texture: {
|
|
791
|
+
roles: {
|
|
792
|
+
chords: role("nylon", "lute:0.5"),
|
|
793
|
+
lead: role("lute", "sing:0.6"),
|
|
794
|
+
perc: role("framedrum"),
|
|
795
|
+
},
|
|
796
|
+
},
|
|
797
|
+
rhythm: { onsets: { perc: grid("x.xxx.") } },
|
|
798
|
+
}),
|
|
799
|
+
card({
|
|
800
|
+
id: "catalan",
|
|
801
|
+
summary:
|
|
802
|
+
"sardana: cobla of shawms (tenora), flabiol and brass, curts and llargs sections in 6/8, major tonality",
|
|
803
|
+
tempo: { bpm: [90, 120], typical: 104 },
|
|
804
|
+
meter: {
|
|
805
|
+
signatures: [
|
|
806
|
+
["6/8", 0.6],
|
|
807
|
+
["2/4", 0.4],
|
|
808
|
+
],
|
|
809
|
+
},
|
|
810
|
+
pitch: { scales: [["major", 1]] },
|
|
811
|
+
harmony: {
|
|
812
|
+
presets: [
|
|
813
|
+
["fifties", 0.5],
|
|
814
|
+
["canon", 0.5],
|
|
815
|
+
],
|
|
816
|
+
},
|
|
817
|
+
texture: {
|
|
818
|
+
kind: "homophonic",
|
|
819
|
+
roles: {
|
|
820
|
+
bass: role("contrabass", "tuba:0.5"),
|
|
821
|
+
chords: role("cornet", "horn:0.5"),
|
|
822
|
+
lead: role("oboe", "flute:0.4"),
|
|
823
|
+
perc: maybe("framedrum"),
|
|
824
|
+
},
|
|
825
|
+
},
|
|
826
|
+
}),
|
|
827
|
+
card({
|
|
828
|
+
id: "fado",
|
|
829
|
+
summary:
|
|
830
|
+
"fado: saudade in minor with a turn to the parallel major, guitarra portuguesa counter-lines, i-iv-V7-i, rubato voice",
|
|
831
|
+
tempo: { bpm: [60, 96], typical: 76 },
|
|
832
|
+
meter: {
|
|
833
|
+
signatures: [
|
|
834
|
+
["4/4", 0.6],
|
|
835
|
+
["2/4", 0.4],
|
|
836
|
+
],
|
|
837
|
+
},
|
|
838
|
+
pitch: {
|
|
839
|
+
scales: [
|
|
840
|
+
["harmonic-minor", 0.6],
|
|
841
|
+
["minor", 0.4],
|
|
842
|
+
],
|
|
843
|
+
},
|
|
844
|
+
harmony: {
|
|
845
|
+
presets: [
|
|
846
|
+
["minor-ii-v", 0.5],
|
|
847
|
+
["aeolian", 0.5],
|
|
848
|
+
],
|
|
849
|
+
cadences: [["V-I", 1]],
|
|
850
|
+
},
|
|
851
|
+
texture: {
|
|
852
|
+
kind: "homophonic",
|
|
853
|
+
roles: {
|
|
854
|
+
bass: maybe("doublebass"),
|
|
855
|
+
chords: role("nylon"),
|
|
856
|
+
lead: role("sing"),
|
|
857
|
+
counter: role("lute"),
|
|
858
|
+
perc: null,
|
|
859
|
+
},
|
|
860
|
+
},
|
|
861
|
+
}),
|
|
862
|
+
|
|
863
|
+
// -------------------------------------------------------------------------
|
|
864
|
+
// Central and Eastern Europe
|
|
865
|
+
//
|
|
866
|
+
// References: Béla Bartók, "Hungarian Folk Music" (1931); Lajos Vargyas,
|
|
867
|
+
// "Hungarian Folk Music" (1981); Izaly Zemtsovsky on Russian folk lyric.
|
|
868
|
+
card({
|
|
869
|
+
id: "hungarian-folk",
|
|
870
|
+
summary:
|
|
871
|
+
"Hungarian new-style song: descending pentatonic fifth-transposition (ABBA), csárdás 2/4 with kontra off-beat chords",
|
|
872
|
+
tempo: { bpm: [90, 150], typical: 120 },
|
|
873
|
+
meter: {
|
|
874
|
+
signatures: [
|
|
875
|
+
["2/4", 0.7],
|
|
876
|
+
["4/4", 0.3],
|
|
877
|
+
],
|
|
878
|
+
},
|
|
879
|
+
pitch: {
|
|
880
|
+
scales: [
|
|
881
|
+
["minor-pentatonic", 0.5],
|
|
882
|
+
["dorian", 0.5],
|
|
883
|
+
],
|
|
884
|
+
},
|
|
885
|
+
harmony: { model: "modal" },
|
|
886
|
+
melody: { contour: [["descending", 1]] },
|
|
887
|
+
texture: {
|
|
888
|
+
roles: {
|
|
889
|
+
bass: role("contrabass"),
|
|
890
|
+
chords: role("viola", "dulcimer:0.5"),
|
|
891
|
+
lead: role("fiddle"),
|
|
892
|
+
},
|
|
893
|
+
},
|
|
894
|
+
rhythm: { onsets: { chords: grid(".x.x") } },
|
|
895
|
+
}),
|
|
896
|
+
card({
|
|
897
|
+
id: "romani",
|
|
898
|
+
summary:
|
|
899
|
+
"Romani verbunkos and lassú-friss: slow rubato then fast, double harmonic minor (augmented seconds), cimbalom tremolo",
|
|
900
|
+
tempo: { bpm: [80, 180], typical: 132 },
|
|
901
|
+
meter: {
|
|
902
|
+
signatures: [
|
|
903
|
+
["2/4", 0.6],
|
|
904
|
+
["4/4", 0.4],
|
|
905
|
+
],
|
|
906
|
+
},
|
|
907
|
+
pitch: {
|
|
908
|
+
scales: [
|
|
909
|
+
["bhairav", 0.5],
|
|
910
|
+
["harmonic-minor", 0.5],
|
|
911
|
+
],
|
|
912
|
+
},
|
|
913
|
+
harmony: {
|
|
914
|
+
presets: [
|
|
915
|
+
["andalusian", 0.5],
|
|
916
|
+
["minor-ii-v", 0.5],
|
|
917
|
+
],
|
|
918
|
+
cadences: [["V-I", 1]],
|
|
919
|
+
},
|
|
920
|
+
texture: {
|
|
921
|
+
roles: {
|
|
922
|
+
bass: role("contrabass"),
|
|
923
|
+
chords: role("dulcimer", "nylon:0.5"),
|
|
924
|
+
lead: role("violin", "clarinet:0.4"),
|
|
925
|
+
},
|
|
926
|
+
},
|
|
927
|
+
}),
|
|
928
|
+
card({
|
|
929
|
+
id: "polish-folk",
|
|
930
|
+
summary:
|
|
931
|
+
"mazurka and oberek: 3/4 with the accent moved to beat 2 or 3, dotted first beat, fiddle over a basy drone",
|
|
932
|
+
tempo: { bpm: [120, 180], typical: 150 },
|
|
933
|
+
meter: { signatures: [["3/4", 1]] },
|
|
934
|
+
groove: { subdivision: 2, velocity: [1, 0.7] },
|
|
935
|
+
pitch: {
|
|
936
|
+
scales: [
|
|
937
|
+
["major", 0.4],
|
|
938
|
+
["lydian", 0.3],
|
|
939
|
+
["minor", 0.3],
|
|
940
|
+
],
|
|
941
|
+
},
|
|
942
|
+
harmony: { model: "drone" },
|
|
943
|
+
texture: {
|
|
944
|
+
roles: {
|
|
945
|
+
chords: null,
|
|
946
|
+
bass: role("cello"),
|
|
947
|
+
lead: role("fiddle"),
|
|
948
|
+
perc: role("framedrum"),
|
|
949
|
+
},
|
|
950
|
+
},
|
|
951
|
+
rhythm: { onsets: { perc: grid("x.x.5.") } },
|
|
952
|
+
}),
|
|
953
|
+
card({
|
|
954
|
+
id: "czech-slovak",
|
|
955
|
+
summary:
|
|
956
|
+
"cimbalom band (cimbálová muzika): verbunk and polka figures, lydian sharp fourth in Moravian song, I-IV-V",
|
|
957
|
+
tempo: { bpm: [100, 140], typical: 118 },
|
|
958
|
+
meter: {
|
|
959
|
+
signatures: [
|
|
960
|
+
["2/4", 0.6],
|
|
961
|
+
["3/4", 0.4],
|
|
962
|
+
],
|
|
963
|
+
},
|
|
964
|
+
pitch: {
|
|
965
|
+
scales: [
|
|
966
|
+
["major", 0.6],
|
|
967
|
+
["lydian", 0.4],
|
|
968
|
+
],
|
|
969
|
+
},
|
|
970
|
+
harmony: { presets: [["fifties", 1]] },
|
|
971
|
+
texture: {
|
|
972
|
+
roles: {
|
|
973
|
+
bass: role("contrabass"),
|
|
974
|
+
chords: role("dulcimer"),
|
|
975
|
+
lead: role("violin", "clarinet:0.5"),
|
|
976
|
+
},
|
|
977
|
+
},
|
|
978
|
+
}),
|
|
979
|
+
card({
|
|
980
|
+
id: "russian-folk",
|
|
981
|
+
summary:
|
|
982
|
+
"protyazhnaya and chastushka: drawn-out podgoloski heterophony in natural minor, relative-major shifts, fast 2/4 ditties",
|
|
983
|
+
tempo: { bpm: [70, 150], typical: 104 },
|
|
984
|
+
meter: {
|
|
985
|
+
signatures: [
|
|
986
|
+
["2/4", 0.5],
|
|
987
|
+
["4/4", 0.5],
|
|
988
|
+
],
|
|
989
|
+
},
|
|
990
|
+
pitch: {
|
|
991
|
+
scales: [
|
|
992
|
+
["minor", 0.7],
|
|
993
|
+
["dorian", 0.3],
|
|
994
|
+
],
|
|
995
|
+
},
|
|
996
|
+
harmony: { presets: [["aeolian", 1]] },
|
|
997
|
+
texture: {
|
|
998
|
+
kind: "heterophonic",
|
|
999
|
+
roles: {
|
|
1000
|
+
bass: role("contrabass"),
|
|
1001
|
+
chords: role("reeds", "tremolo:0.5"),
|
|
1002
|
+
lead: role("sing", "tremolo:0.4"),
|
|
1003
|
+
counter: role("choir"),
|
|
1004
|
+
},
|
|
1005
|
+
},
|
|
1006
|
+
}),
|
|
1007
|
+
card({
|
|
1008
|
+
id: "ukrainian-folk",
|
|
1009
|
+
summary:
|
|
1010
|
+
"Ukrainian dumy and kolomyika: Ukrainian dorian (raised fourth), bandura harp textures, choral thirds",
|
|
1011
|
+
tempo: { bpm: [80, 150], typical: 112 },
|
|
1012
|
+
meter: {
|
|
1013
|
+
signatures: [
|
|
1014
|
+
["2/4", 0.6],
|
|
1015
|
+
["4/4", 0.4],
|
|
1016
|
+
],
|
|
1017
|
+
},
|
|
1018
|
+
pitch: {
|
|
1019
|
+
scales: [
|
|
1020
|
+
["nikriz", 0.6],
|
|
1021
|
+
["minor", 0.4],
|
|
1022
|
+
],
|
|
1023
|
+
},
|
|
1024
|
+
harmony: { model: "modal" },
|
|
1025
|
+
texture: {
|
|
1026
|
+
roles: {
|
|
1027
|
+
chords: role("harp"),
|
|
1028
|
+
lead: role("sing", "violin:0.4"),
|
|
1029
|
+
counter: maybe("choir"),
|
|
1030
|
+
},
|
|
1031
|
+
},
|
|
1032
|
+
}),
|
|
1033
|
+
card({
|
|
1034
|
+
id: "estrada-romance",
|
|
1035
|
+
summary:
|
|
1036
|
+
"romance and estrada: harmonic minor i-iv-V7, descending chromatic-tinged bass, guitar arpeggios and strings",
|
|
1037
|
+
tempo: { bpm: [70, 110], typical: 88 },
|
|
1038
|
+
meter: {
|
|
1039
|
+
signatures: [
|
|
1040
|
+
["4/4", 0.5],
|
|
1041
|
+
["3/4", 0.5],
|
|
1042
|
+
],
|
|
1043
|
+
},
|
|
1044
|
+
pitch: { scales: [["harmonic-minor", 1]] },
|
|
1045
|
+
harmony: {
|
|
1046
|
+
presets: [
|
|
1047
|
+
["minor-ii-v", 0.5],
|
|
1048
|
+
["andalusian", 0.5],
|
|
1049
|
+
],
|
|
1050
|
+
cadences: [["V-I", 1]],
|
|
1051
|
+
sevenths: 0.4,
|
|
1052
|
+
},
|
|
1053
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
1054
|
+
texture: {
|
|
1055
|
+
kind: "homophonic",
|
|
1056
|
+
roles: {
|
|
1057
|
+
...KIT_LIGHT,
|
|
1058
|
+
bass: role("bass"),
|
|
1059
|
+
chords: role("nylon", "strings:0.5"),
|
|
1060
|
+
lead: role("sing"),
|
|
1061
|
+
pad: maybe("strings"),
|
|
1062
|
+
},
|
|
1063
|
+
},
|
|
1064
|
+
rhythm: {
|
|
1065
|
+
onsets: { kick: grid("x...x..."), snare: grid("..x...x."), hat: null },
|
|
1066
|
+
},
|
|
1067
|
+
}),
|
|
1068
|
+
|
|
1069
|
+
// -------------------------------------------------------------------------
|
|
1070
|
+
// Balkans and Mediterranean
|
|
1071
|
+
//
|
|
1072
|
+
// References: Timothy Rice, "May It Fill Your Soul" (1994) on Bulgarian
|
|
1073
|
+
// aksak; Gail Holst-Warhaft, "Road to Rembetika" (1975); Albert Lord,
|
|
1074
|
+
// "The Singer of Tales" (1960) on gusle epic.
|
|
1075
|
+
card({
|
|
1076
|
+
id: "balkan-brass",
|
|
1077
|
+
summary:
|
|
1078
|
+
"Balkan brass (truba): čoček 2/4 and 7/8 aksak, oro in 2+2+3, tapan bass drum, trumpets in parallel thirds over tuba",
|
|
1079
|
+
tempo: { bpm: [120, 170], typical: 140 },
|
|
1080
|
+
meter: {
|
|
1081
|
+
signatures: [
|
|
1082
|
+
["7/8", 0.5],
|
|
1083
|
+
["2/4", 0.5],
|
|
1084
|
+
],
|
|
1085
|
+
grouping: [[[2, 2, 3], 1]],
|
|
1086
|
+
},
|
|
1087
|
+
harmony: {
|
|
1088
|
+
model: "functional",
|
|
1089
|
+
presets: [
|
|
1090
|
+
["aeolian", 0.5],
|
|
1091
|
+
["andalusian", 0.5],
|
|
1092
|
+
],
|
|
1093
|
+
},
|
|
1094
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
1095
|
+
texture: {
|
|
1096
|
+
kind: "homophonic",
|
|
1097
|
+
roles: {
|
|
1098
|
+
kick: role("drums"),
|
|
1099
|
+
snare: role("drums"),
|
|
1100
|
+
bass: role("tuba"),
|
|
1101
|
+
chords: role("horn", "trombone:0.5"),
|
|
1102
|
+
lead: role("trumpet"),
|
|
1103
|
+
counter: role("trumpet", "clarinet:0.4"),
|
|
1104
|
+
perc: null,
|
|
1105
|
+
},
|
|
1106
|
+
},
|
|
1107
|
+
rhythm: { onsets: { kick: grid("x.x.x.."), snare: grid(".x.x.x.") } },
|
|
1108
|
+
}),
|
|
1109
|
+
card({
|
|
1110
|
+
id: "bulgarian-folk",
|
|
1111
|
+
summary:
|
|
1112
|
+
"Bulgarian aksak: rachenitsa 7/8 (2+2+3) and kopanitsa 11/8 (2+2+3+2+2), gaida drone, close-harmony seconds",
|
|
1113
|
+
tempo: { bpm: [140, 200], typical: 170 },
|
|
1114
|
+
meter: {
|
|
1115
|
+
signatures: [
|
|
1116
|
+
["7/8", 0.5],
|
|
1117
|
+
["11/8", 0.5],
|
|
1118
|
+
],
|
|
1119
|
+
grouping: [
|
|
1120
|
+
[[2, 2, 3], 0.5],
|
|
1121
|
+
[[2, 2, 3, 2, 2], 0.5],
|
|
1122
|
+
],
|
|
1123
|
+
},
|
|
1124
|
+
// Bulgarian dance tunes sit mostly in major, mixolydian and dorian;
|
|
1125
|
+
// the augmented-second colour is Thracian, a minority here.
|
|
1126
|
+
pitch: {
|
|
1127
|
+
scales: [
|
|
1128
|
+
["mixolydian", 0.35],
|
|
1129
|
+
["dorian", 0.3],
|
|
1130
|
+
["major", 0.2],
|
|
1131
|
+
["hijaz", 0.15],
|
|
1132
|
+
],
|
|
1133
|
+
},
|
|
1134
|
+
harmony: { model: "drone" },
|
|
1135
|
+
texture: {
|
|
1136
|
+
roles: {
|
|
1137
|
+
chords: null,
|
|
1138
|
+
drone: role("reeds"),
|
|
1139
|
+
lead: role("reeds", "fiddle:0.5", "ney:0.4"),
|
|
1140
|
+
perc: role("framedrum"),
|
|
1141
|
+
},
|
|
1142
|
+
},
|
|
1143
|
+
}),
|
|
1144
|
+
card({
|
|
1145
|
+
id: "macedonian-folk",
|
|
1146
|
+
summary:
|
|
1147
|
+
"lesnoto: 7/8 counted 3+2+2 (long beat first), zurla shawms and tapan, makam-flavoured hijaz turns",
|
|
1148
|
+
tempo: { bpm: [110, 160], typical: 132 },
|
|
1149
|
+
meter: { signatures: [["7/8", 1]], grouping: [[[3, 2, 2], 1]] },
|
|
1150
|
+
pitch: {
|
|
1151
|
+
scales: [
|
|
1152
|
+
["hijaz", 0.6],
|
|
1153
|
+
["minor", 0.4],
|
|
1154
|
+
],
|
|
1155
|
+
},
|
|
1156
|
+
harmony: { model: "drone" },
|
|
1157
|
+
texture: {
|
|
1158
|
+
roles: {
|
|
1159
|
+
chords: null,
|
|
1160
|
+
drone: role("oboe"),
|
|
1161
|
+
lead: role("oboe", "clarinet:0.5"),
|
|
1162
|
+
perc: role("framedrum"),
|
|
1163
|
+
},
|
|
1164
|
+
},
|
|
1165
|
+
rhythm: { onsets: { perc: grid("x..x.x.") } },
|
|
1166
|
+
}),
|
|
1167
|
+
card({
|
|
1168
|
+
id: "rebetiko",
|
|
1169
|
+
summary:
|
|
1170
|
+
"rebetiko: zeibekiko 9/4-feel 9/8 and hasapiko 2/4, dromos hijaz and ousak modes, bouzouki tremolo over baglamas",
|
|
1171
|
+
tempo: { bpm: [70, 130], typical: 96 },
|
|
1172
|
+
meter: {
|
|
1173
|
+
signatures: [
|
|
1174
|
+
["9/8", 0.6],
|
|
1175
|
+
["2/4", 0.4],
|
|
1176
|
+
],
|
|
1177
|
+
grouping: [[[2, 2, 2, 3], 1]],
|
|
1178
|
+
},
|
|
1179
|
+
pitch: {
|
|
1180
|
+
scales: [
|
|
1181
|
+
["hijaz", 0.6],
|
|
1182
|
+
["kurd", 0.4],
|
|
1183
|
+
],
|
|
1184
|
+
},
|
|
1185
|
+
harmony: { model: "modal" },
|
|
1186
|
+
texture: {
|
|
1187
|
+
roles: {
|
|
1188
|
+
chords: role("lute", "nylon:0.5"),
|
|
1189
|
+
lead: role("tremolo", "sing:0.6"),
|
|
1190
|
+
},
|
|
1191
|
+
},
|
|
1192
|
+
}),
|
|
1193
|
+
card({
|
|
1194
|
+
id: "laiko",
|
|
1195
|
+
summary:
|
|
1196
|
+
"laïkó: tsifteteli 8/8 belly-dance groove and hasapiko, bouzouki leads over a pop kit, harmonic minor",
|
|
1197
|
+
tempo: { bpm: [100, 140], typical: 118 },
|
|
1198
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1199
|
+
pitch: {
|
|
1200
|
+
scales: [
|
|
1201
|
+
["harmonic-minor", 0.5],
|
|
1202
|
+
["hijaz", 0.5],
|
|
1203
|
+
],
|
|
1204
|
+
},
|
|
1205
|
+
harmony: {
|
|
1206
|
+
model: "functional",
|
|
1207
|
+
presets: [
|
|
1208
|
+
["aeolian", 0.5],
|
|
1209
|
+
["andalusian", 0.5],
|
|
1210
|
+
],
|
|
1211
|
+
},
|
|
1212
|
+
texture: {
|
|
1213
|
+
roles: {
|
|
1214
|
+
...KIT_LIGHT,
|
|
1215
|
+
bass: role("bassguitar"),
|
|
1216
|
+
chords: role("lute", "keys:0.5"),
|
|
1217
|
+
lead: role("sing", "tremolo:0.5"),
|
|
1218
|
+
},
|
|
1219
|
+
},
|
|
1220
|
+
rhythm: {
|
|
1221
|
+
onsets: {
|
|
1222
|
+
kick: grid("x..x..x."),
|
|
1223
|
+
snare: grid("..x...x."),
|
|
1224
|
+
hat: grid("x.x.x.x."),
|
|
1225
|
+
},
|
|
1226
|
+
},
|
|
1227
|
+
}),
|
|
1228
|
+
card({
|
|
1229
|
+
id: "cretan",
|
|
1230
|
+
summary:
|
|
1231
|
+
"Cretan syrtos and pentozalis: lyra lead over laouto ostinato, dorian with a raised fourth, 2/4 driving pulse",
|
|
1232
|
+
tempo: { bpm: [110, 160], typical: 134 },
|
|
1233
|
+
meter: { signatures: [["2/4", 1]] },
|
|
1234
|
+
pitch: {
|
|
1235
|
+
scales: [
|
|
1236
|
+
["dorian", 0.5],
|
|
1237
|
+
["nikriz", 0.5],
|
|
1238
|
+
],
|
|
1239
|
+
},
|
|
1240
|
+
harmony: { model: "modal" },
|
|
1241
|
+
texture: {
|
|
1242
|
+
roles: {
|
|
1243
|
+
chords: role("lute"),
|
|
1244
|
+
lead: role("kemence", "fiddle:0.5"),
|
|
1245
|
+
},
|
|
1246
|
+
},
|
|
1247
|
+
}),
|
|
1248
|
+
card({
|
|
1249
|
+
id: "tamburica",
|
|
1250
|
+
summary:
|
|
1251
|
+
"tamburica orchestra: kolo 2/4 in major, plucked tambura choir in tremolo thirds over a berde bass",
|
|
1252
|
+
tempo: { bpm: [110, 150], typical: 128 },
|
|
1253
|
+
meter: { signatures: [["2/4", 1]] },
|
|
1254
|
+
pitch: { scales: [["major", 1]] },
|
|
1255
|
+
harmony: { presets: [["fifties", 1]], cadences: [["V-I", 1]] },
|
|
1256
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
1257
|
+
texture: {
|
|
1258
|
+
kind: "homophonic",
|
|
1259
|
+
roles: {
|
|
1260
|
+
perc: null,
|
|
1261
|
+
bass: role("contrabass"),
|
|
1262
|
+
chords: role("requinto", "tres:0.5"),
|
|
1263
|
+
lead: role("tremolo", "requinto:0.5"),
|
|
1264
|
+
},
|
|
1265
|
+
},
|
|
1266
|
+
rhythm: { onsets: { chords: grid(".x.x") } },
|
|
1267
|
+
}),
|
|
1268
|
+
card({
|
|
1269
|
+
id: "turbo-folk",
|
|
1270
|
+
summary:
|
|
1271
|
+
"turbo-folk: synth-pop kit and four-on-floor under oriental harmonic-minor melisma, i-VII-VI-V loops",
|
|
1272
|
+
tempo: { bpm: [110, 140], typical: 124 },
|
|
1273
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1274
|
+
pitch: {
|
|
1275
|
+
scales: [
|
|
1276
|
+
["harmonic-minor", 0.6],
|
|
1277
|
+
["hijaz", 0.4],
|
|
1278
|
+
],
|
|
1279
|
+
},
|
|
1280
|
+
harmony: {
|
|
1281
|
+
model: "functional",
|
|
1282
|
+
presets: [
|
|
1283
|
+
["andalusian", 0.6],
|
|
1284
|
+
["aeolian", 0.4],
|
|
1285
|
+
],
|
|
1286
|
+
},
|
|
1287
|
+
texture: {
|
|
1288
|
+
roles: {
|
|
1289
|
+
...kitRoles("electro"),
|
|
1290
|
+
bass: role("saw"),
|
|
1291
|
+
chords: role("keys", "strings:0.5"),
|
|
1292
|
+
lead: role("sing", "reeds:0.5"),
|
|
1293
|
+
},
|
|
1294
|
+
},
|
|
1295
|
+
rhythm: {
|
|
1296
|
+
onsets: {
|
|
1297
|
+
kick: grid("x.x.x.x."),
|
|
1298
|
+
snare: grid("..x...x."),
|
|
1299
|
+
hat: grid(".x.x.x.x"),
|
|
1300
|
+
},
|
|
1301
|
+
},
|
|
1302
|
+
}),
|
|
1303
|
+
card({
|
|
1304
|
+
id: "albanian-iso",
|
|
1305
|
+
summary:
|
|
1306
|
+
"iso-polyphony: a held group drone (iso) under two soloists who answer in pentatonic seconds and fourths",
|
|
1307
|
+
tempo: { bpm: [56, 90], typical: 70 },
|
|
1308
|
+
meter: { signatures: [["4/4", 1]], grouping: null },
|
|
1309
|
+
pitch: { scales: [["minor-pentatonic", 1]] },
|
|
1310
|
+
harmony: { model: "drone" },
|
|
1311
|
+
texture: {
|
|
1312
|
+
kind: "polyphonic",
|
|
1313
|
+
roles: {
|
|
1314
|
+
perc: null,
|
|
1315
|
+
bass: null,
|
|
1316
|
+
chords: null,
|
|
1317
|
+
drone: role("choir"),
|
|
1318
|
+
lead: role("sing"),
|
|
1319
|
+
counter: role("sing"),
|
|
1320
|
+
},
|
|
1321
|
+
},
|
|
1322
|
+
}),
|
|
1323
|
+
card({
|
|
1324
|
+
id: "sevdalinka",
|
|
1325
|
+
summary:
|
|
1326
|
+
"sevdalinka: slow melismatic love song, makam hijaz with an augmented second, saz and accordion-like reeds",
|
|
1327
|
+
tempo: { bpm: [50, 80], typical: 62 },
|
|
1328
|
+
meter: {
|
|
1329
|
+
signatures: [
|
|
1330
|
+
["4/4", 0.6],
|
|
1331
|
+
["7/8", 0.4],
|
|
1332
|
+
],
|
|
1333
|
+
grouping: [[[3, 2, 2], 1]],
|
|
1334
|
+
},
|
|
1335
|
+
pitch: {
|
|
1336
|
+
scales: [
|
|
1337
|
+
["hijaz", 0.6],
|
|
1338
|
+
["harmonic-minor", 0.4],
|
|
1339
|
+
],
|
|
1340
|
+
},
|
|
1341
|
+
harmony: { model: "modal" },
|
|
1342
|
+
melody: { density: [1, 2], intervals: intervals(8, 1.5, 0.3, 0.7) },
|
|
1343
|
+
texture: {
|
|
1344
|
+
roles: {
|
|
1345
|
+
chords: role("reeds", "lute:0.5"),
|
|
1346
|
+
lead: role("sing"),
|
|
1347
|
+
counter: maybe("lute"),
|
|
1348
|
+
// Sung over saz and accordion; no drum (never an Irish bodhrán).
|
|
1349
|
+
perc: null,
|
|
1350
|
+
},
|
|
1351
|
+
},
|
|
1352
|
+
}),
|
|
1353
|
+
card({
|
|
1354
|
+
id: "dinaric-rural",
|
|
1355
|
+
summary:
|
|
1356
|
+
"ganga and ojkanje: narrow-range singing in clashing seconds, a lead line and a group that holds and shakes the tone",
|
|
1357
|
+
tempo: { bpm: [56, 90], typical: 72 },
|
|
1358
|
+
meter: { signatures: [["4/4", 1]], grouping: null },
|
|
1359
|
+
pitch: { scales: [["minor", 1]] },
|
|
1360
|
+
harmony: { model: "none" },
|
|
1361
|
+
melody: {
|
|
1362
|
+
ambitus: [3, 4],
|
|
1363
|
+
intervals: intervals(9, 0.5, 0.05, 1.2),
|
|
1364
|
+
density: [1, 2],
|
|
1365
|
+
},
|
|
1366
|
+
bass: { behaviour: [["none", 1]] },
|
|
1367
|
+
texture: {
|
|
1368
|
+
kind: "polyphonic",
|
|
1369
|
+
roles: {
|
|
1370
|
+
chords: null,
|
|
1371
|
+
bass: null,
|
|
1372
|
+
lead: role("sing"),
|
|
1373
|
+
counter: role("choir"),
|
|
1374
|
+
},
|
|
1375
|
+
},
|
|
1376
|
+
}),
|
|
1377
|
+
card({
|
|
1378
|
+
id: "gusle-epic",
|
|
1379
|
+
summary:
|
|
1380
|
+
"gusle epic: decasyllabic lines recited on a narrow 4-note range, the single-string gusle doubling the voice",
|
|
1381
|
+
tempo: { bpm: [90, 120], typical: 104 },
|
|
1382
|
+
meter: { signatures: [["5/4", 1]], grouping: [[[2, 3], 1]] },
|
|
1383
|
+
pitch: { scales: [["minor", 1]] },
|
|
1384
|
+
harmony: { model: "none" },
|
|
1385
|
+
melody: {
|
|
1386
|
+
ambitus: [4, 5],
|
|
1387
|
+
repetition: 0.85,
|
|
1388
|
+
phraseBars: [[2, 1]],
|
|
1389
|
+
intervals: intervals(9, 1, 0.05, 1.5),
|
|
1390
|
+
},
|
|
1391
|
+
bass: { behaviour: [["none", 1]] },
|
|
1392
|
+
texture: {
|
|
1393
|
+
kind: "heterophonic",
|
|
1394
|
+
roles: {
|
|
1395
|
+
perc: null,
|
|
1396
|
+
chords: null,
|
|
1397
|
+
bass: null,
|
|
1398
|
+
lead: role("sing"),
|
|
1399
|
+
counter: role("kemence", "fiddle:0.5"),
|
|
1400
|
+
},
|
|
1401
|
+
},
|
|
1402
|
+
}),
|
|
1403
|
+
];
|
|
1404
|
+
|
|
1405
|
+
// ---------------------------------------------------------------------------
|
|
1406
|
+
// East Asia
|
|
1407
|
+
//
|
|
1408
|
+
// References: Alan R. Thrasher, "Chinese Musical Instruments" (2000) and
|
|
1409
|
+
// "Sizhu Instrumental Music of South China" (2008); William P. Malm,
|
|
1410
|
+
// "Traditional Japanese Music and Musical Instruments" (1959/2000);
|
|
1411
|
+
// Keith Howard, "Perspectives on Korean Music" (2006); Theodore Levin,
|
|
1412
|
+
// "Where Rivers and Mountains Sing" (2006) on Tuvan overtone song.
|
|
1413
|
+
|
|
1414
|
+
/**
|
|
1415
|
+
* Korean jangdan: janggu strokes, `deong` (both heads, low), `kung`
|
|
1416
|
+
* (left, low), `deok` (right stick), `giduk` (stick roll).
|
|
1417
|
+
*/
|
|
1418
|
+
export const JUNGMORI: CycleSpec = Object.freeze({
|
|
1419
|
+
kind: "timeline",
|
|
1420
|
+
name: "jungmori",
|
|
1421
|
+
beats: 12,
|
|
1422
|
+
divisions: [3, 3, 3, 3],
|
|
1423
|
+
strokes: Object.freeze([
|
|
1424
|
+
"deong",
|
|
1425
|
+
".",
|
|
1426
|
+
"kung",
|
|
1427
|
+
"deok",
|
|
1428
|
+
".",
|
|
1429
|
+
"kung",
|
|
1430
|
+
"kung",
|
|
1431
|
+
".",
|
|
1432
|
+
"deong",
|
|
1433
|
+
"deok",
|
|
1434
|
+
".",
|
|
1435
|
+
".",
|
|
1436
|
+
]),
|
|
1437
|
+
low: Object.freeze(["deong", "kung"]),
|
|
1438
|
+
stress: Object.freeze([1, 9]),
|
|
1439
|
+
});
|
|
1440
|
+
|
|
1441
|
+
/** Gutgeori: four dotted beats, the third answered by a left-hand kung. */
|
|
1442
|
+
export const GUTGEORI: CycleSpec = Object.freeze({
|
|
1443
|
+
kind: "timeline",
|
|
1444
|
+
name: "gutgeori",
|
|
1445
|
+
beats: 12,
|
|
1446
|
+
divisions: [3, 3, 3, 3],
|
|
1447
|
+
strokes: Object.freeze([
|
|
1448
|
+
"deong",
|
|
1449
|
+
".",
|
|
1450
|
+
"deok",
|
|
1451
|
+
"kung",
|
|
1452
|
+
"deok",
|
|
1453
|
+
".",
|
|
1454
|
+
"kung",
|
|
1455
|
+
".",
|
|
1456
|
+
"deok",
|
|
1457
|
+
"kung",
|
|
1458
|
+
"deok",
|
|
1459
|
+
"deok",
|
|
1460
|
+
]),
|
|
1461
|
+
low: Object.freeze(["deong", "kung"]),
|
|
1462
|
+
stress: Object.freeze([1, 7]),
|
|
1463
|
+
});
|
|
1464
|
+
|
|
1465
|
+
/** Noh yatsu-byōshi: the 8-beat frame the hayashi drums articulate. */
|
|
1466
|
+
export const YATSU_BYOSHI: CycleSpec = Object.freeze({
|
|
1467
|
+
kind: "timeline",
|
|
1468
|
+
name: "yatsu-byoshi",
|
|
1469
|
+
beats: 8,
|
|
1470
|
+
divisions: [4, 4],
|
|
1471
|
+
strokes: Object.freeze(["pon", ".", "ta", "pon", ".", "ta", "pon", "ta"]),
|
|
1472
|
+
low: Object.freeze(["pon"]),
|
|
1473
|
+
stress: Object.freeze([1, 8]),
|
|
1474
|
+
});
|
|
1475
|
+
|
|
1476
|
+
/** The Japanese in scale (miyako-bushi): semitone above tonic and fifth. */
|
|
1477
|
+
const IN_SCALE = Object.freeze({
|
|
1478
|
+
scales: [["phrygian", 1]] as const,
|
|
1479
|
+
raga: {
|
|
1480
|
+
aroha: [0, 1, 5, 7, 10],
|
|
1481
|
+
avaroha: [0, 1, 5, 7, 8],
|
|
1482
|
+
vadi: 7,
|
|
1483
|
+
samvadi: 0,
|
|
1484
|
+
},
|
|
1485
|
+
});
|
|
1486
|
+
|
|
1487
|
+
/**
|
|
1488
|
+
* In-scale cadences: phrases close on the tonic, the 4th or the 5th
|
|
1489
|
+
* (phrygian degrees 0, 3, 4), never on the avoided minor 3rd.
|
|
1490
|
+
*/
|
|
1491
|
+
const IN_FINALS = Object.freeze([
|
|
1492
|
+
[0, 0.6],
|
|
1493
|
+
[3, 0.15],
|
|
1494
|
+
[4, 0.25],
|
|
1495
|
+
] as const);
|
|
1496
|
+
|
|
1497
|
+
/** Ryūkyū scale: major with no 2nd or 6th (do mi fa so ti). */
|
|
1498
|
+
const RYUKYU = Object.freeze({
|
|
1499
|
+
scales: [["major", 1]] as const,
|
|
1500
|
+
raga: {
|
|
1501
|
+
aroha: [0, 4, 5, 7, 11],
|
|
1502
|
+
avaroha: [0, 4, 5, 7, 11],
|
|
1503
|
+
vadi: 0,
|
|
1504
|
+
samvadi: 7,
|
|
1505
|
+
},
|
|
1506
|
+
});
|
|
1507
|
+
|
|
1508
|
+
/** Shang mode of the Chinese pentatonic: re mi so la do on re. */
|
|
1509
|
+
const SHANG_MODE = Object.freeze({
|
|
1510
|
+
scales: [["dorian", 1]] as const,
|
|
1511
|
+
raga: {
|
|
1512
|
+
aroha: [0, 2, 5, 7, 10],
|
|
1513
|
+
avaroha: [0, 2, 5, 7, 10],
|
|
1514
|
+
vadi: 0,
|
|
1515
|
+
samvadi: 7,
|
|
1516
|
+
},
|
|
1517
|
+
});
|
|
1518
|
+
|
|
1519
|
+
/**
|
|
1520
|
+
* Thai thang (pitch level) on the seven equidistant tones: a pentatonic
|
|
1521
|
+
* subset 1 2 3 5 6 of the seven, with 4 and 7 as passing tones left out.
|
|
1522
|
+
*/
|
|
1523
|
+
const THANG_NOK = Object.freeze({
|
|
1524
|
+
tuning: "thai",
|
|
1525
|
+
degrees: Object.freeze([0, 1, 2, 4, 5]),
|
|
1526
|
+
scales: Object.freeze([Object.freeze(["major-pentatonic", 1] as const)]),
|
|
1527
|
+
});
|
|
1528
|
+
|
|
1529
|
+
/**
|
|
1530
|
+
* Khmer pinpeat pentatonic on the same equidistant scale, a different
|
|
1531
|
+
* pitch level (1 2 4 5 6 of the seven), so the gaps sit elsewhere.
|
|
1532
|
+
*/
|
|
1533
|
+
const KHMER_PENTATONIC = Object.freeze({
|
|
1534
|
+
tuning: "thai",
|
|
1535
|
+
degrees: Object.freeze([0, 1, 3, 4, 5]),
|
|
1536
|
+
scales: Object.freeze([Object.freeze(["major-pentatonic", 1] as const)]),
|
|
1537
|
+
});
|
|
1538
|
+
|
|
1539
|
+
/**
|
|
1540
|
+
* Vietnamese điệu oán (the sad nam mode of cải lương and đờn ca tài tử):
|
|
1541
|
+
* hò xự xang xê cống with xự and cống neutral, about a quarter tone off
|
|
1542
|
+
* the tempered third and seventh (rast's 3.5 and 10.5 steps).
|
|
1543
|
+
*/
|
|
1544
|
+
const DIEU_OAN = Object.freeze({
|
|
1545
|
+
tuning: null,
|
|
1546
|
+
degrees: null,
|
|
1547
|
+
scales: [["rast", 1]] as const,
|
|
1548
|
+
raga: {
|
|
1549
|
+
aroha: [0, 4, 5, 7, 11],
|
|
1550
|
+
avaroha: [0, 4, 5, 7, 11],
|
|
1551
|
+
vadi: 0,
|
|
1552
|
+
samvadi: 7,
|
|
1553
|
+
},
|
|
1554
|
+
});
|
|
1555
|
+
|
|
1556
|
+
/**
|
|
1557
|
+
* Nanguan wukong guan: on the pipa's open string it reads 5 6 1 2 3, the
|
|
1558
|
+
* zhi mode of the pentatonic (sol la do re mi on sol), so the fourth is
|
|
1559
|
+
* present and the major third absent; the guqin's gong mode is the reverse.
|
|
1560
|
+
*/
|
|
1561
|
+
const WUKONG_GUAN = Object.freeze({
|
|
1562
|
+
scales: [["mixolydian", 1]] as const,
|
|
1563
|
+
raga: {
|
|
1564
|
+
aroha: [0, 2, 5, 7, 9],
|
|
1565
|
+
avaroha: [0, 2, 5, 7, 9],
|
|
1566
|
+
vadi: 0,
|
|
1567
|
+
samvadi: 7,
|
|
1568
|
+
},
|
|
1569
|
+
});
|
|
1570
|
+
|
|
1571
|
+
/** 12-TET for leaves under the slendro-tuned southeast-asia branch. */
|
|
1572
|
+
const TWELVE = Object.freeze({ tuning: null, degrees: null });
|
|
1573
|
+
|
|
1574
|
+
const ASIA_PACIFIC_LEAVES: readonly StyleCard[] = [
|
|
1575
|
+
card({
|
|
1576
|
+
id: "guqin",
|
|
1577
|
+
summary:
|
|
1578
|
+
"guqin: slow solo zither, harmonics (fanyin) and sliding stopped tones, gong-mode pentatonic, sparse sound and silence",
|
|
1579
|
+
tempo: { bpm: [38, 56], typical: 46 },
|
|
1580
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1581
|
+
pitch: { scales: [["major-pentatonic", 1]] },
|
|
1582
|
+
melody: {
|
|
1583
|
+
density: [0, 1],
|
|
1584
|
+
range: [48, 79],
|
|
1585
|
+
intervals: intervals(4, 4, 1, 0.6),
|
|
1586
|
+
contour: [["wave", 1]],
|
|
1587
|
+
},
|
|
1588
|
+
texture: {
|
|
1589
|
+
kind: "monophonic",
|
|
1590
|
+
roles: { drone: null, bass: null, lead: role("koto"), counter: null },
|
|
1591
|
+
},
|
|
1592
|
+
mix: { space: 0.55 },
|
|
1593
|
+
}),
|
|
1594
|
+
card({
|
|
1595
|
+
id: "chinese-classical",
|
|
1596
|
+
summary:
|
|
1597
|
+
"sizhu chamber pieces: silk and bamboo heterophony, each player ornamenting one skeletal pentatonic line, jiahua elaboration",
|
|
1598
|
+
tempo: { bpm: [60, 96], typical: 76 },
|
|
1599
|
+
meter: {
|
|
1600
|
+
signatures: [
|
|
1601
|
+
["4/4", 0.6],
|
|
1602
|
+
["2/4", 0.4],
|
|
1603
|
+
],
|
|
1604
|
+
},
|
|
1605
|
+
// Jiangnan sizhu sits mostly in zhi mode (the dizi's D pieces: sol la
|
|
1606
|
+
// do re mi on sol), like nanguan's wukong guan but brisk and busy.
|
|
1607
|
+
pitch: WUKONG_GUAN,
|
|
1608
|
+
melody: {
|
|
1609
|
+
density: [2, 3],
|
|
1610
|
+
finals: [
|
|
1611
|
+
[0, 0.6],
|
|
1612
|
+
[4, 0.4],
|
|
1613
|
+
],
|
|
1614
|
+
},
|
|
1615
|
+
texture: {
|
|
1616
|
+
kind: "heterophonic",
|
|
1617
|
+
roles: {
|
|
1618
|
+
lead: role("lute", "erhu:0.6"),
|
|
1619
|
+
counter: role("flute", "hammered:0.5"),
|
|
1620
|
+
drone: null,
|
|
1621
|
+
bass: null,
|
|
1622
|
+
perc: null,
|
|
1623
|
+
},
|
|
1624
|
+
},
|
|
1625
|
+
}),
|
|
1626
|
+
card({
|
|
1627
|
+
id: "chinese-opera",
|
|
1628
|
+
summary:
|
|
1629
|
+
"jingju: xipi and erhuang modes, banshi metres led by the clapper, jinghu fiddle doubling the voice, gong-and-cymbal luogu",
|
|
1630
|
+
tempo: { bpm: [70, 140], typical: 100 },
|
|
1631
|
+
meter: {
|
|
1632
|
+
signatures: [
|
|
1633
|
+
["2/4", 0.6],
|
|
1634
|
+
["4/4", 0.4],
|
|
1635
|
+
],
|
|
1636
|
+
},
|
|
1637
|
+
pitch: {
|
|
1638
|
+
scales: [
|
|
1639
|
+
["major-pentatonic", 0.6],
|
|
1640
|
+
["durga", 0.4],
|
|
1641
|
+
],
|
|
1642
|
+
},
|
|
1643
|
+
melody: { range: [64, 88], density: [1, 3] },
|
|
1644
|
+
texture: {
|
|
1645
|
+
kind: "heterophonic",
|
|
1646
|
+
roles: {
|
|
1647
|
+
lead: role("sing"),
|
|
1648
|
+
counter: role("erhu"),
|
|
1649
|
+
drone: null,
|
|
1650
|
+
bass: maybe("gong"),
|
|
1651
|
+
perc: role("framedrum"),
|
|
1652
|
+
},
|
|
1653
|
+
},
|
|
1654
|
+
rhythm: { onsets: { perc: grid("x.x.xxx.") } },
|
|
1655
|
+
}),
|
|
1656
|
+
card({
|
|
1657
|
+
id: "chinese-folk",
|
|
1658
|
+
summary:
|
|
1659
|
+
"xiaodiao and shan'ge: strophic folk song in the zhi mode (sol la do re mi), suona and dizi, four-phrase qi-cheng-zhuan-he",
|
|
1660
|
+
tempo: { bpm: [72, 120], typical: 92 },
|
|
1661
|
+
meter: {
|
|
1662
|
+
signatures: [
|
|
1663
|
+
["2/4", 0.6],
|
|
1664
|
+
["4/4", 0.4],
|
|
1665
|
+
],
|
|
1666
|
+
},
|
|
1667
|
+
pitch: {
|
|
1668
|
+
scales: [
|
|
1669
|
+
["durga", 0.6],
|
|
1670
|
+
["major-pentatonic", 0.4],
|
|
1671
|
+
],
|
|
1672
|
+
},
|
|
1673
|
+
melody: { phraseBars: [[2, 1]], repetition: 0.6 },
|
|
1674
|
+
texture: {
|
|
1675
|
+
roles: {
|
|
1676
|
+
lead: role("sing", "oboe:0.5", "flute:0.5"),
|
|
1677
|
+
counter: maybe("flute"),
|
|
1678
|
+
drone: null,
|
|
1679
|
+
perc: maybe("framedrum"),
|
|
1680
|
+
},
|
|
1681
|
+
},
|
|
1682
|
+
}),
|
|
1683
|
+
card({
|
|
1684
|
+
id: "cantonese-music",
|
|
1685
|
+
summary:
|
|
1686
|
+
"guangdong yinyue: gaohu and yangqin, lively 2/4 with the yi and fan pien tones colouring the shang mode",
|
|
1687
|
+
tempo: { bpm: [96, 140], typical: 116 },
|
|
1688
|
+
meter: { signatures: [["2/4", 1]] },
|
|
1689
|
+
pitch: SHANG_MODE,
|
|
1690
|
+
melody: {
|
|
1691
|
+
density: [2, 4],
|
|
1692
|
+
// shang closes on the tonic, the 4th or the 5th; the gate omits the 3rd
|
|
1693
|
+
finals: [
|
|
1694
|
+
[0, 0.5],
|
|
1695
|
+
[3, 0.2],
|
|
1696
|
+
[4, 0.3],
|
|
1697
|
+
],
|
|
1698
|
+
},
|
|
1699
|
+
texture: {
|
|
1700
|
+
kind: "heterophonic",
|
|
1701
|
+
roles: {
|
|
1702
|
+
lead: role("erhu"),
|
|
1703
|
+
counter: role("hammered", "lute:0.5"),
|
|
1704
|
+
drone: null,
|
|
1705
|
+
},
|
|
1706
|
+
},
|
|
1707
|
+
}),
|
|
1708
|
+
card({
|
|
1709
|
+
id: "nanguan",
|
|
1710
|
+
summary:
|
|
1711
|
+
"nanguan: very slow Hokkien art song, pipa held horizontally, dongxiao flute, clapper on the strong beat, long melismas",
|
|
1712
|
+
tempo: { bpm: [36, 56], typical: 44 },
|
|
1713
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1714
|
+
pitch: WUKONG_GUAN,
|
|
1715
|
+
melody: {
|
|
1716
|
+
density: [0, 1],
|
|
1717
|
+
intervals: intervals(6, 3, 0.4, 0.6),
|
|
1718
|
+
finals: [
|
|
1719
|
+
[0, 0.6],
|
|
1720
|
+
[4, 0.4],
|
|
1721
|
+
],
|
|
1722
|
+
},
|
|
1723
|
+
texture: {
|
|
1724
|
+
kind: "heterophonic",
|
|
1725
|
+
roles: {
|
|
1726
|
+
lead: role("sing"),
|
|
1727
|
+
counter: role("lute", "shakuhachi:0.6"),
|
|
1728
|
+
drone: null,
|
|
1729
|
+
perc: role("framedrum"),
|
|
1730
|
+
},
|
|
1731
|
+
},
|
|
1732
|
+
rhythm: { onsets: { perc: grid("x.......") } },
|
|
1733
|
+
}),
|
|
1734
|
+
card({
|
|
1735
|
+
id: "chinese-orchestra",
|
|
1736
|
+
summary:
|
|
1737
|
+
"guoyue orchestra: Western-style sections of erhu, yangqin, pipa and dizi, pentatonic melody harmonised in functional triads",
|
|
1738
|
+
tempo: { bpm: [66, 120], typical: 88 },
|
|
1739
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1740
|
+
harmony: {
|
|
1741
|
+
model: "functional",
|
|
1742
|
+
presets: [
|
|
1743
|
+
["fifties", 0.5],
|
|
1744
|
+
["canon", 0.5],
|
|
1745
|
+
],
|
|
1746
|
+
rhythm: [[1, 1]],
|
|
1747
|
+
},
|
|
1748
|
+
bass: { behaviour: [["root", 1]] },
|
|
1749
|
+
texture: {
|
|
1750
|
+
kind: "homophonic",
|
|
1751
|
+
roles: {
|
|
1752
|
+
bass: role("cellos", "contrabasses:0.5"),
|
|
1753
|
+
chords: role("hammered", "strings:0.6"),
|
|
1754
|
+
lead: role("erhu", "flute:0.5"),
|
|
1755
|
+
counter: maybe("lute"),
|
|
1756
|
+
drone: null,
|
|
1757
|
+
},
|
|
1758
|
+
},
|
|
1759
|
+
}),
|
|
1760
|
+
card({
|
|
1761
|
+
id: "gagaku",
|
|
1762
|
+
summary:
|
|
1763
|
+
"gagaku tōgaku: shō cluster chords held over a slow jo-ha-kyū unfolding, hichiriki and ryūteki in heterophony, ritsu mode",
|
|
1764
|
+
tempo: { bpm: [30, 50], typical: 40 },
|
|
1765
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1766
|
+
// Ritsu (re mi sol la do on re): the hyōjō, ōshikichō and banshikichō
|
|
1767
|
+
// repertory; the ryo modes are in practice coloured toward ritsu.
|
|
1768
|
+
pitch: { scales: [["durga", 1]] },
|
|
1769
|
+
melody: { density: [0, 1], range: [62, 84] },
|
|
1770
|
+
texture: {
|
|
1771
|
+
kind: "heterophonic",
|
|
1772
|
+
roles: {
|
|
1773
|
+
drone: role("reeds"),
|
|
1774
|
+
lead: role("oboe"),
|
|
1775
|
+
counter: role("flute"),
|
|
1776
|
+
bass: role("koto"),
|
|
1777
|
+
perc: role("kettledrum"),
|
|
1778
|
+
},
|
|
1779
|
+
},
|
|
1780
|
+
// Kakko taps lead into the taiko stroke that closes each measure.
|
|
1781
|
+
rhythm: { onsets: { perc: grid("....5.5.5..5..x.") } },
|
|
1782
|
+
mix: { space: 0.55 },
|
|
1783
|
+
}),
|
|
1784
|
+
card({
|
|
1785
|
+
id: "shomyo",
|
|
1786
|
+
summary:
|
|
1787
|
+
"shōmyō: Buddhist chant in unison, narrow range, long melismas on held syllables, ryo and ritsu modes, free pulse",
|
|
1788
|
+
tempo: { bpm: [36, 56], typical: 44 },
|
|
1789
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1790
|
+
// Shingon and Tendai chant favour the ryo pentatonic over ritsu.
|
|
1791
|
+
pitch: {
|
|
1792
|
+
scales: [
|
|
1793
|
+
["major-pentatonic", 0.8],
|
|
1794
|
+
["durga", 0.2],
|
|
1795
|
+
],
|
|
1796
|
+
},
|
|
1797
|
+
// Melisma: several tones on each held syllable.
|
|
1798
|
+
melody: {
|
|
1799
|
+
density: [1, 2],
|
|
1800
|
+
ambitus: [4, 7],
|
|
1801
|
+
range: [48, 67],
|
|
1802
|
+
intervals: intervals(9, 1, 0.05, 1),
|
|
1803
|
+
},
|
|
1804
|
+
texture: {
|
|
1805
|
+
kind: "monophonic",
|
|
1806
|
+
roles: {
|
|
1807
|
+
lead: role("choir"),
|
|
1808
|
+
drone: null,
|
|
1809
|
+
bass: null,
|
|
1810
|
+
perc: maybe("bowl"),
|
|
1811
|
+
},
|
|
1812
|
+
},
|
|
1813
|
+
rhythm: { onsets: { perc: grid("x...............") } },
|
|
1814
|
+
mix: { space: 0.7 },
|
|
1815
|
+
}),
|
|
1816
|
+
card({
|
|
1817
|
+
id: "sankyoku",
|
|
1818
|
+
summary:
|
|
1819
|
+
"sankyoku: koto, shamisen and shakuhachi trio in heterophony, in scale (semitone above tonic and fifth), dan sections that accelerate",
|
|
1820
|
+
tempo: { bpm: [60, 110], typical: 80 },
|
|
1821
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1822
|
+
pitch: IN_SCALE,
|
|
1823
|
+
melody: { density: [1, 3], finals: IN_FINALS },
|
|
1824
|
+
texture: {
|
|
1825
|
+
kind: "heterophonic",
|
|
1826
|
+
roles: {
|
|
1827
|
+
lead: role("koto"),
|
|
1828
|
+
counter: role("shakuhachi"),
|
|
1829
|
+
drone: maybe("lute"),
|
|
1830
|
+
},
|
|
1831
|
+
},
|
|
1832
|
+
}),
|
|
1833
|
+
card({
|
|
1834
|
+
id: "honkyoku",
|
|
1835
|
+
summary:
|
|
1836
|
+
"honkyoku: solo shakuhachi, one breath per phrase (ma between), meri pitch bends in the in scale, no metre",
|
|
1837
|
+
tempo: { bpm: [36, 56], typical: 44 },
|
|
1838
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1839
|
+
pitch: IN_SCALE,
|
|
1840
|
+
melody: {
|
|
1841
|
+
density: [0, 1],
|
|
1842
|
+
phraseBars: [[1, 1]],
|
|
1843
|
+
contour: [["arch", 1]],
|
|
1844
|
+
// Breaths end on ro (the tonic) or on re a fifth above.
|
|
1845
|
+
finals: [
|
|
1846
|
+
[0, 0.6],
|
|
1847
|
+
[4, 0.4],
|
|
1848
|
+
],
|
|
1849
|
+
},
|
|
1850
|
+
texture: {
|
|
1851
|
+
kind: "monophonic",
|
|
1852
|
+
roles: { lead: role("shakuhachi"), drone: null, bass: null },
|
|
1853
|
+
},
|
|
1854
|
+
mix: { space: 0.65 },
|
|
1855
|
+
}),
|
|
1856
|
+
card({
|
|
1857
|
+
id: "noh",
|
|
1858
|
+
summary:
|
|
1859
|
+
"noh: utai chant over the hayashi (nōkan flute, kotsuzumi, ōtsuzumi) in the 8-beat yatsu-byōshi, in scale",
|
|
1860
|
+
tempo: { bpm: [50, 80], typical: 62 },
|
|
1861
|
+
meter: { signatures: [["4/4", 1]], cycle: YATSU_BYOSHI },
|
|
1862
|
+
pitch: IN_SCALE,
|
|
1863
|
+
// Utai moves in a narrow band around the jo, chū and ge pivot tones.
|
|
1864
|
+
melody: { ambitus: [3, 7], density: [1, 2], finals: IN_FINALS },
|
|
1865
|
+
texture: {
|
|
1866
|
+
kind: "heterophonic",
|
|
1867
|
+
roles: {
|
|
1868
|
+
lead: role("sing"),
|
|
1869
|
+
counter: role("flute"),
|
|
1870
|
+
drone: null,
|
|
1871
|
+
perc: role("framedrum"),
|
|
1872
|
+
},
|
|
1873
|
+
},
|
|
1874
|
+
}),
|
|
1875
|
+
card({
|
|
1876
|
+
id: "minyo",
|
|
1877
|
+
summary:
|
|
1878
|
+
"min'yō: work and festival song in the yo scale (no semitones), shamisen and taiko on a 2/4 pulse, kakegoe calls",
|
|
1879
|
+
tempo: { bpm: [90, 130], typical: 108 },
|
|
1880
|
+
meter: { signatures: [["2/4", 1]] },
|
|
1881
|
+
pitch: { scales: [["durga", 1]] },
|
|
1882
|
+
texture: {
|
|
1883
|
+
kind: "heterophonic",
|
|
1884
|
+
roles: {
|
|
1885
|
+
lead: role("sing"),
|
|
1886
|
+
counter: role("lute", "flute:0.5"),
|
|
1887
|
+
drone: null,
|
|
1888
|
+
perc: role("kettledrum"),
|
|
1889
|
+
},
|
|
1890
|
+
},
|
|
1891
|
+
rhythm: { onsets: { perc: grid("x.x.x.xx") } },
|
|
1892
|
+
}),
|
|
1893
|
+
card({
|
|
1894
|
+
id: "taiko",
|
|
1895
|
+
summary:
|
|
1896
|
+
"kumi-daiko: ensemble drums over a ji-uchi base pattern (don doko), shinobue flute above, yo scale, accelerating sections",
|
|
1897
|
+
tempo: { bpm: [100, 160], typical: 128 },
|
|
1898
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1899
|
+
pitch: { scales: [["durga", 1]] },
|
|
1900
|
+
texture: {
|
|
1901
|
+
roles: {
|
|
1902
|
+
kick: role("kettledrum"),
|
|
1903
|
+
perc: role("kettledrum", "framedrum:0.5"),
|
|
1904
|
+
lead: role("flute"),
|
|
1905
|
+
drone: null,
|
|
1906
|
+
},
|
|
1907
|
+
},
|
|
1908
|
+
rhythm: {
|
|
1909
|
+
onsets: {
|
|
1910
|
+
kick: grid("x...x...x...x..."),
|
|
1911
|
+
perc: grid("x.xxx.xxx.xxx.xx"),
|
|
1912
|
+
},
|
|
1913
|
+
},
|
|
1914
|
+
}),
|
|
1915
|
+
card({
|
|
1916
|
+
id: "okinawan",
|
|
1917
|
+
summary:
|
|
1918
|
+
"Ryūkyū song: sanshin lute in the ryūkyū scale (do mi fa so ti), kachāshī 2/4 dance lilt, hayashi handclaps",
|
|
1919
|
+
tempo: { bpm: [100, 140], typical: 120 },
|
|
1920
|
+
meter: { signatures: [["2/4", 1]] },
|
|
1921
|
+
groove: { subdivision: 2, swingRatio: [1.4, 1.8] },
|
|
1922
|
+
pitch: RYUKYU,
|
|
1923
|
+
texture: {
|
|
1924
|
+
roles: {
|
|
1925
|
+
lead: role("sing"),
|
|
1926
|
+
counter: role("lute"),
|
|
1927
|
+
drone: null,
|
|
1928
|
+
perc: maybe("framedrum"),
|
|
1929
|
+
},
|
|
1930
|
+
},
|
|
1931
|
+
}),
|
|
1932
|
+
card({
|
|
1933
|
+
id: "korean-court",
|
|
1934
|
+
summary:
|
|
1935
|
+
"jeongak: very slow court music, pyeongjo mode, piri and daegeum heterophony with wide vibrato and swelling held tones",
|
|
1936
|
+
tempo: { bpm: [24, 44], typical: 32 },
|
|
1937
|
+
meter: { signatures: [["12/8", 1]] },
|
|
1938
|
+
pitch: { scales: [["durga", 1]] },
|
|
1939
|
+
melody: { density: [0, 1] },
|
|
1940
|
+
texture: {
|
|
1941
|
+
kind: "heterophonic",
|
|
1942
|
+
roles: {
|
|
1943
|
+
lead: role("oboe"),
|
|
1944
|
+
counter: role("flute", "erhu:0.5"),
|
|
1945
|
+
drone: maybe("koto"),
|
|
1946
|
+
perc: role("framedrum"),
|
|
1947
|
+
},
|
|
1948
|
+
},
|
|
1949
|
+
rhythm: { onsets: { perc: grid("x...........") } },
|
|
1950
|
+
}),
|
|
1951
|
+
card({
|
|
1952
|
+
id: "pansori",
|
|
1953
|
+
summary:
|
|
1954
|
+
"pansori: one singer and a buk drummer, jungmori 12-beat jangdan, gyemyeonjo mode (trembling fifth, falling fourth), chuimsae calls",
|
|
1955
|
+
tempo: { bpm: [60, 110], typical: 84 },
|
|
1956
|
+
meter: { signatures: [["12/8", 1]], cycle: JUNGMORI },
|
|
1957
|
+
pitch: { scales: [["minor-pentatonic", 1]] },
|
|
1958
|
+
melody: { intervals: intervals(6, 3, 0.4, 0.8) },
|
|
1959
|
+
texture: {
|
|
1960
|
+
kind: "monophonic",
|
|
1961
|
+
roles: { lead: role("sing"), drone: null, perc: role("framedrum") },
|
|
1962
|
+
},
|
|
1963
|
+
}),
|
|
1964
|
+
card({
|
|
1965
|
+
id: "pungmul",
|
|
1966
|
+
summary:
|
|
1967
|
+
"pungmul: farmers' band of kkwaenggwari gong, jing, janggu and buk in gutgeori 12/8, taepyeongso shawm, accelerating",
|
|
1968
|
+
tempo: { bpm: [90, 150], typical: 120 },
|
|
1969
|
+
meter: { signatures: [["12/8", 1]], cycle: GUTGEORI },
|
|
1970
|
+
pitch: { scales: [["durga", 1]] },
|
|
1971
|
+
texture: {
|
|
1972
|
+
roles: {
|
|
1973
|
+
lead: role("oboe"),
|
|
1974
|
+
bass: role("gong"),
|
|
1975
|
+
drone: null,
|
|
1976
|
+
perc: role("framedrum"),
|
|
1977
|
+
},
|
|
1978
|
+
},
|
|
1979
|
+
}),
|
|
1980
|
+
card({
|
|
1981
|
+
id: "mongolian",
|
|
1982
|
+
summary:
|
|
1983
|
+
"urtyn duu long song: unmetred, wide-ranging pentatonic phrases with falsetto turns over the morin khuur's drone",
|
|
1984
|
+
tempo: { bpm: [44, 70], typical: 54 },
|
|
1985
|
+
meter: { signatures: [["4/4", 1]] },
|
|
1986
|
+
melody: {
|
|
1987
|
+
density: [0, 1],
|
|
1988
|
+
ambitus: [10, 17],
|
|
1989
|
+
intervals: intervals(3, 4, 2, 0.6),
|
|
1990
|
+
},
|
|
1991
|
+
texture: {
|
|
1992
|
+
kind: "heterophonic",
|
|
1993
|
+
roles: {
|
|
1994
|
+
lead: role("sing"),
|
|
1995
|
+
counter: role("fiddle", "cello:0.5"),
|
|
1996
|
+
drone: maybe("khoomei"),
|
|
1997
|
+
},
|
|
1998
|
+
},
|
|
1999
|
+
mix: { space: 0.5 },
|
|
2000
|
+
}),
|
|
2001
|
+
card({
|
|
2002
|
+
id: "tuvan",
|
|
2003
|
+
summary:
|
|
2004
|
+
"khöömei: a sung fundamental drone (kargyraa) with a whistled overtone melody (sygyt) on the harmonic series, galloping igil",
|
|
2005
|
+
tempo: { bpm: [90, 130], typical: 108 },
|
|
2006
|
+
meter: { signatures: [["6/8", 1]] },
|
|
2007
|
+
groove: { subdivision: 3, velocity: [1, 0.5, 0.8] },
|
|
2008
|
+
harmony: { model: "drone" },
|
|
2009
|
+
texture: {
|
|
2010
|
+
roles: {
|
|
2011
|
+
drone: role("kargyraa", "khoomei:0.6"),
|
|
2012
|
+
lead: role("sygyt"),
|
|
2013
|
+
counter: maybe("fiddle"),
|
|
2014
|
+
perc: maybe("framedrum"),
|
|
2015
|
+
},
|
|
2016
|
+
},
|
|
2017
|
+
rhythm: { onsets: { perc: grid("x.xx.x") } },
|
|
2018
|
+
}),
|
|
2019
|
+
card({
|
|
2020
|
+
id: "kazakh-kyrgyz",
|
|
2021
|
+
summary:
|
|
2022
|
+
"dombra and komuz küy: two-string lute in parallel fourths and fifths, galloping strum, programmatic tune episodes",
|
|
2023
|
+
tempo: { bpm: [110, 160], typical: 132 },
|
|
2024
|
+
meter: {
|
|
2025
|
+
signatures: [
|
|
2026
|
+
["6/8", 0.6],
|
|
2027
|
+
["2/4", 0.4],
|
|
2028
|
+
],
|
|
2029
|
+
},
|
|
2030
|
+
groove: { subdivision: 3, velocity: [1, 0.6, 0.8] },
|
|
2031
|
+
pitch: {
|
|
2032
|
+
scales: [
|
|
2033
|
+
["dorian", 0.5],
|
|
2034
|
+
["mixolydian", 0.5],
|
|
2035
|
+
],
|
|
2036
|
+
},
|
|
2037
|
+
harmony: { model: "drone" },
|
|
2038
|
+
texture: {
|
|
2039
|
+
roles: {
|
|
2040
|
+
lead: role("lute"),
|
|
2041
|
+
drone: role("lute"),
|
|
2042
|
+
counter: maybe("fiddle"),
|
|
2043
|
+
},
|
|
2044
|
+
},
|
|
2045
|
+
}),
|
|
2046
|
+
|
|
2047
|
+
// -------------------------------------------------------------------------
|
|
2048
|
+
// Southeast Asia
|
|
2049
|
+
//
|
|
2050
|
+
// References: Judith Becker and Sumarsam (see gamelan.ts); Michael
|
|
2051
|
+
// Tenzer, "Gamelan Gong Kebyar" (2000); Pamela Myers-Moro, "Thai Music
|
|
2052
|
+
// and Musicians in Contemporary Bangkok" (1993); Andrew Weintraub,
|
|
2053
|
+
// "Dangdut Stories" (2010).
|
|
2054
|
+
card({
|
|
2055
|
+
id: "javanese-gamelan",
|
|
2056
|
+
summary:
|
|
2057
|
+
"Javanese gamelan: ladrang colotomy (gong closes the 32-beat gongan), balungan with bonang elaboration, pathet nem",
|
|
2058
|
+
meter: { signatures: [["4/4", 1]], cycle: LADRANG },
|
|
2059
|
+
pitch: pathetPitch("pelog-nem"),
|
|
2060
|
+
// Balungan mlaku: the saron states one skeleton tone per beat.
|
|
2061
|
+
melody: { density: [1, 1], finals: pathetFinals("pelog-nem") },
|
|
2062
|
+
texture: {
|
|
2063
|
+
roles: {
|
|
2064
|
+
perc: role("kenong", "kethuk:0.5"),
|
|
2065
|
+
lead: role("saron", "demung:0.5"),
|
|
2066
|
+
counter: role("bonang", "gender:0.5"),
|
|
2067
|
+
},
|
|
2068
|
+
},
|
|
2069
|
+
}),
|
|
2070
|
+
card({
|
|
2071
|
+
id: "balinese-gamelan",
|
|
2072
|
+
summary:
|
|
2073
|
+
"gong kebyar: fast gilak cycle, kotekan (two gangsa parts interlocking polos and sangsih), pelog selisir, sudden dynamic shifts",
|
|
2074
|
+
tempo: { bpm: [110, 160], typical: 132 },
|
|
2075
|
+
meter: { signatures: [["4/4", 1]], cycle: GILAK },
|
|
2076
|
+
pitch: pathetPitch("pelog-lima"),
|
|
2077
|
+
melody: { density: [3, 4], finals: pathetFinals("pelog-lima") },
|
|
2078
|
+
texture: {
|
|
2079
|
+
roles: {
|
|
2080
|
+
perc: role("gongageng", "kempul:0.5"),
|
|
2081
|
+
lead: role("gangsa"),
|
|
2082
|
+
counter: role("gangsa"),
|
|
2083
|
+
},
|
|
2084
|
+
},
|
|
2085
|
+
}),
|
|
2086
|
+
card({
|
|
2087
|
+
id: "sundanese",
|
|
2088
|
+
summary:
|
|
2089
|
+
"degung: Sundanese gong-chime ensemble, the goong closing a 16-beat cycle, suling flute above, pelog-derived degung scale",
|
|
2090
|
+
// Degung klasik is unhurried; the suling ornaments freely above.
|
|
2091
|
+
tempo: { bpm: [52, 76], typical: 64 },
|
|
2092
|
+
meter: { signatures: [["4/4", 1]], cycle: DEGUNG },
|
|
2093
|
+
pitch: pathetPitch("pelog-nem"),
|
|
2094
|
+
melody: { finals: pathetFinals("pelog-nem") },
|
|
2095
|
+
texture: {
|
|
2096
|
+
roles: {
|
|
2097
|
+
perc: role("bonang", "kenong:0.5"),
|
|
2098
|
+
lead: role("suling"),
|
|
2099
|
+
counter: role("bonang", "saron:0.5"),
|
|
2100
|
+
},
|
|
2101
|
+
},
|
|
2102
|
+
}),
|
|
2103
|
+
card({
|
|
2104
|
+
id: "dangdut",
|
|
2105
|
+
summary:
|
|
2106
|
+
"dangdut: the kendang 'dang-dut' (open low stroke on 4, high on 1), harmonic minor melisma, suling and mandolin-like tremolo",
|
|
2107
|
+
tempo: { bpm: [70, 110], typical: 88 },
|
|
2108
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2109
|
+
pitch: {
|
|
2110
|
+
...TWELVE,
|
|
2111
|
+
scales: [
|
|
2112
|
+
["harmonic-minor", 0.6],
|
|
2113
|
+
["minor", 0.4],
|
|
2114
|
+
],
|
|
2115
|
+
},
|
|
2116
|
+
harmony: {
|
|
2117
|
+
model: "functional",
|
|
2118
|
+
presets: [
|
|
2119
|
+
["aeolian", 0.5],
|
|
2120
|
+
["andalusian", 0.5],
|
|
2121
|
+
],
|
|
2122
|
+
rhythm: [[1, 1]],
|
|
2123
|
+
},
|
|
2124
|
+
melody: { density: [2, 3], finals: [[0, 1]] },
|
|
2125
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
2126
|
+
texture: {
|
|
2127
|
+
kind: "homophonic",
|
|
2128
|
+
roles: {
|
|
2129
|
+
bass: role("bassguitar"),
|
|
2130
|
+
chords: role("keys", "nylon:0.5"),
|
|
2131
|
+
lead: role("sing", "suling:0.4"),
|
|
2132
|
+
counter: maybe("tremolo"),
|
|
2133
|
+
perc: role("tabla"),
|
|
2134
|
+
},
|
|
2135
|
+
},
|
|
2136
|
+
rhythm: { onsets: { perc: grid("x..x....x..x..x.") } },
|
|
2137
|
+
}),
|
|
2138
|
+
card({
|
|
2139
|
+
id: "keroncong",
|
|
2140
|
+
summary:
|
|
2141
|
+
"keroncong: cak and cuk ukuleles interlocking off-beats, pizzicato cello in a running kendang role, I-IV-V7 in major",
|
|
2142
|
+
tempo: { bpm: [80, 110], typical: 92 },
|
|
2143
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2144
|
+
pitch: { ...TWELVE, scales: [["major", 1]] },
|
|
2145
|
+
harmony: {
|
|
2146
|
+
model: "functional",
|
|
2147
|
+
presets: [
|
|
2148
|
+
["fifties", 0.5],
|
|
2149
|
+
["turnaround", 0.5],
|
|
2150
|
+
],
|
|
2151
|
+
rhythm: [[1, 1]],
|
|
2152
|
+
sevenths: 0.3,
|
|
2153
|
+
},
|
|
2154
|
+
melody: { finals: [[0, 1]] },
|
|
2155
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
2156
|
+
texture: {
|
|
2157
|
+
kind: "interlocking",
|
|
2158
|
+
roles: {
|
|
2159
|
+
bass: role("pizzicato", "doublebass:0.5"),
|
|
2160
|
+
chords: role("requinto", "nylon:0.5"),
|
|
2161
|
+
lead: role("sing", "violin:0.5", "flute:0.4"),
|
|
2162
|
+
counter: role("tres"),
|
|
2163
|
+
},
|
|
2164
|
+
},
|
|
2165
|
+
rhythm: { onsets: { chords: grid(".x.x.x.x"), counter: grid("x.x.x.x.") } },
|
|
2166
|
+
}),
|
|
2167
|
+
card({
|
|
2168
|
+
id: "thai-classical",
|
|
2169
|
+
summary:
|
|
2170
|
+
"piphat: ranat xylophone and khong wong gong circle elaborate a core melody in the seven equidistant tones, ching cymbal alternating open ching and damped chap",
|
|
2171
|
+
tempo: { bpm: [70, 130], typical: 96 },
|
|
2172
|
+
meter: { signatures: [["4/4", 1]], cycle: CHING },
|
|
2173
|
+
pitch: THANG_NOK,
|
|
2174
|
+
melody: {
|
|
2175
|
+
finals: [
|
|
2176
|
+
[0, 0.7],
|
|
2177
|
+
[3, 0.3],
|
|
2178
|
+
],
|
|
2179
|
+
},
|
|
2180
|
+
texture: {
|
|
2181
|
+
roles: {
|
|
2182
|
+
perc: role("crotales", "glock:0.5"),
|
|
2183
|
+
lead: role("xylophone"),
|
|
2184
|
+
counter: role("bonang", "oboe:0.4"),
|
|
2185
|
+
bass: maybe("gong"),
|
|
2186
|
+
},
|
|
2187
|
+
},
|
|
2188
|
+
}),
|
|
2189
|
+
card({
|
|
2190
|
+
id: "luk-thung",
|
|
2191
|
+
summary:
|
|
2192
|
+
"luk thung: Thai country song, pentatonic melody with vocal ornaments (luk khor), brass and a cha-cha-tinged kit",
|
|
2193
|
+
tempo: { bpm: [90, 130], typical: 110 },
|
|
2194
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2195
|
+
pitch: {
|
|
2196
|
+
...TWELVE,
|
|
2197
|
+
scales: [["major-pentatonic", 1]],
|
|
2198
|
+
},
|
|
2199
|
+
harmony: {
|
|
2200
|
+
model: "functional",
|
|
2201
|
+
presets: [
|
|
2202
|
+
["fifties", 0.5],
|
|
2203
|
+
["sad-pop", 0.5],
|
|
2204
|
+
],
|
|
2205
|
+
rhythm: [[1, 1]],
|
|
2206
|
+
},
|
|
2207
|
+
melody: { finals: [[0, 1]] },
|
|
2208
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
2209
|
+
texture: {
|
|
2210
|
+
kind: "homophonic",
|
|
2211
|
+
roles: {
|
|
2212
|
+
...KIT_LIGHT,
|
|
2213
|
+
bass: role("bassguitar"),
|
|
2214
|
+
chords: role("keys", "electric:0.5"),
|
|
2215
|
+
lead: role("sing"),
|
|
2216
|
+
counter: maybe("trumpet", "sax:0.5"),
|
|
2217
|
+
perc: role("crotales"),
|
|
2218
|
+
},
|
|
2219
|
+
},
|
|
2220
|
+
rhythm: {
|
|
2221
|
+
onsets: {
|
|
2222
|
+
perc: grid(".x.x.x.x"),
|
|
2223
|
+
kick: grid("x...x..."),
|
|
2224
|
+
snare: grid("..x...xx"),
|
|
2225
|
+
hat: grid("x.x.x.x."),
|
|
2226
|
+
},
|
|
2227
|
+
},
|
|
2228
|
+
}),
|
|
2229
|
+
card({
|
|
2230
|
+
id: "mor-lam",
|
|
2231
|
+
summary:
|
|
2232
|
+
"mor lam: the khaen free-reed mouth organ's drone and pulsing chords, rapid patter singing in lai pentatonic modes",
|
|
2233
|
+
tempo: { bpm: [110, 150], typical: 128 },
|
|
2234
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2235
|
+
pitch: {
|
|
2236
|
+
...TWELVE,
|
|
2237
|
+
scales: [
|
|
2238
|
+
["minor-pentatonic", 0.6],
|
|
2239
|
+
["major-pentatonic", 0.4],
|
|
2240
|
+
],
|
|
2241
|
+
},
|
|
2242
|
+
melody: { density: [3, 4], ambitus: [5, 9], finals: [[0, 1]] },
|
|
2243
|
+
texture: {
|
|
2244
|
+
kind: "heterophonic",
|
|
2245
|
+
roles: {
|
|
2246
|
+
bass: null,
|
|
2247
|
+
drone: role("reeds"),
|
|
2248
|
+
lead: role("sing"),
|
|
2249
|
+
counter: role("reeds", "lute:0.5"),
|
|
2250
|
+
perc: maybe("framedrum"),
|
|
2251
|
+
},
|
|
2252
|
+
},
|
|
2253
|
+
rhythm: { onsets: { perc: grid("x.xxx.xx") } },
|
|
2254
|
+
}),
|
|
2255
|
+
card({
|
|
2256
|
+
id: "khmer",
|
|
2257
|
+
summary:
|
|
2258
|
+
"pinpeat: sralai oboe leading roneat xylophone heterophony over the ching-chap cycle and skor thom drums, equidistant pentatonic",
|
|
2259
|
+
tempo: { bpm: [70, 120], typical: 92 },
|
|
2260
|
+
meter: { signatures: [["4/4", 1]], cycle: CHING },
|
|
2261
|
+
pitch: KHMER_PENTATONIC,
|
|
2262
|
+
melody: {
|
|
2263
|
+
finals: [
|
|
2264
|
+
[0, 0.7],
|
|
2265
|
+
[2, 0.3],
|
|
2266
|
+
],
|
|
2267
|
+
},
|
|
2268
|
+
texture: {
|
|
2269
|
+
kind: "heterophonic",
|
|
2270
|
+
roles: {
|
|
2271
|
+
perc: role("crotales"),
|
|
2272
|
+
kick: role("kettledrum"),
|
|
2273
|
+
lead: role("oboe"),
|
|
2274
|
+
counter: role("xylophone", "bonang:0.5"),
|
|
2275
|
+
bass: maybe("gong"),
|
|
2276
|
+
},
|
|
2277
|
+
},
|
|
2278
|
+
rhythm: { onsets: { kick: grid("x.......x...x.x.") } },
|
|
2279
|
+
}),
|
|
2280
|
+
card({
|
|
2281
|
+
id: "vietnamese",
|
|
2282
|
+
summary:
|
|
2283
|
+
"Vietnamese điệu oán: the sad nam mode of cải lương, neutral xự and cống with vibrato, đàn bầu over đàn tranh, song lang on the strong beats",
|
|
2284
|
+
tempo: { bpm: [56, 96], typical: 72 },
|
|
2285
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2286
|
+
pitch: DIEU_OAN,
|
|
2287
|
+
melody: { density: [1, 2], intervals: intervals(5, 3, 0.6, 0.6) },
|
|
2288
|
+
bass: { behaviour: [["none", 1]] },
|
|
2289
|
+
texture: {
|
|
2290
|
+
kind: "heterophonic",
|
|
2291
|
+
roles: {
|
|
2292
|
+
bass: null,
|
|
2293
|
+
lead: role("erhu", "sing:0.6"),
|
|
2294
|
+
counter: role("koto"),
|
|
2295
|
+
perc: role("framedrum"),
|
|
2296
|
+
},
|
|
2297
|
+
},
|
|
2298
|
+
rhythm: { onsets: { perc: grid("....x.......x...") } },
|
|
2299
|
+
}),
|
|
2300
|
+
card({
|
|
2301
|
+
id: "philippine",
|
|
2302
|
+
summary:
|
|
2303
|
+
"kulintang: a row of eight gong-chimes plays the melody over agung pair off-beats and the dabakan drum, binalig rhythmic mode",
|
|
2304
|
+
tempo: { bpm: [100, 140], typical: 120 },
|
|
2305
|
+
meter: { signatures: [["4/4", 1]], cycle: AGUNG },
|
|
2306
|
+
pitch: { ...TWELVE, scales: [["major-pentatonic", 1]] },
|
|
2307
|
+
texture: {
|
|
2308
|
+
roles: {
|
|
2309
|
+
perc: role("gong", "gongageng:0.5"),
|
|
2310
|
+
lead: role("bonang"),
|
|
2311
|
+
counter: maybe("kenong"),
|
|
2312
|
+
bass: null,
|
|
2313
|
+
},
|
|
2314
|
+
},
|
|
2315
|
+
}),
|
|
2316
|
+
card({
|
|
2317
|
+
id: "burmese",
|
|
2318
|
+
summary:
|
|
2319
|
+
"hsaing waing: the pat waing tuned-drum circle leads, hne oboe answers, si bell and wa clapper alternate at the half bar, dense diatonic runs",
|
|
2320
|
+
tempo: { bpm: [90, 150], typical: 116 },
|
|
2321
|
+
meter: { signatures: [["4/4", 1]], cycle: SI_WA },
|
|
2322
|
+
pitch: { ...TWELVE, scales: [["mixolydian", 1]] },
|
|
2323
|
+
melody: { density: [3, 4] },
|
|
2324
|
+
texture: {
|
|
2325
|
+
roles: {
|
|
2326
|
+
perc: role("crotales", "chimes:0.4"),
|
|
2327
|
+
lead: role("timpani"),
|
|
2328
|
+
counter: role("oboe"),
|
|
2329
|
+
bass: maybe("gong"),
|
|
2330
|
+
},
|
|
2331
|
+
},
|
|
2332
|
+
}),
|
|
2333
|
+
card({
|
|
2334
|
+
id: "malay",
|
|
2335
|
+
summary:
|
|
2336
|
+
"zapin and joget: gambus lute and marwas drums in 4/4 zapin (accent on the last beat), violin in harmonic minor, ronggeng lilt",
|
|
2337
|
+
tempo: { bpm: [90, 130], typical: 108 },
|
|
2338
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2339
|
+
pitch: {
|
|
2340
|
+
...TWELVE,
|
|
2341
|
+
scales: [
|
|
2342
|
+
["harmonic-minor", 0.6],
|
|
2343
|
+
["hijaz", 0.4],
|
|
2344
|
+
],
|
|
2345
|
+
},
|
|
2346
|
+
harmony: {
|
|
2347
|
+
model: "functional",
|
|
2348
|
+
presets: [
|
|
2349
|
+
["andalusian", 0.5],
|
|
2350
|
+
["aeolian", 0.5],
|
|
2351
|
+
],
|
|
2352
|
+
rhythm: [[1, 1]],
|
|
2353
|
+
},
|
|
2354
|
+
melody: { finals: [[0, 1]] },
|
|
2355
|
+
bass: { behaviour: [["root", 1]] },
|
|
2356
|
+
texture: {
|
|
2357
|
+
kind: "heterophonic",
|
|
2358
|
+
roles: {
|
|
2359
|
+
bass: role("doublebass"),
|
|
2360
|
+
chords: role("oud"),
|
|
2361
|
+
lead: role("violin", "sing:0.6"),
|
|
2362
|
+
counter: null,
|
|
2363
|
+
perc: role("daf", "framedrum:0.5"),
|
|
2364
|
+
},
|
|
2365
|
+
},
|
|
2366
|
+
rhythm: { onsets: { perc: grid("x.....x.x.x.x.xx") } },
|
|
2367
|
+
}),
|
|
2368
|
+
|
|
2369
|
+
// -------------------------------------------------------------------------
|
|
2370
|
+
// Oceania
|
|
2371
|
+
//
|
|
2372
|
+
// References: Mervyn McLean, "Weavers of Song: Polynesian Music and
|
|
2373
|
+
// Dance" (1999); Catherine Ellis, "Aboriginal Music: Education for
|
|
2374
|
+
// Living" (1985); George Kanahele (ed.), "Hawaiian Music and Musicians"
|
|
2375
|
+
// (1979).
|
|
2376
|
+
card({
|
|
2377
|
+
id: "aboriginal",
|
|
2378
|
+
summary:
|
|
2379
|
+
"song series: descending terraced melodic contour over a continuous low drone (didjeridu, voiced here by kargyraa) and clapstick pulse",
|
|
2380
|
+
tempo: { bpm: [100, 140], typical: 120 },
|
|
2381
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2382
|
+
pitch: { scales: [["minor-pentatonic", 1]] },
|
|
2383
|
+
harmony: { model: "drone", presets: null },
|
|
2384
|
+
melody: {
|
|
2385
|
+
contour: [
|
|
2386
|
+
["terraced", 0.6],
|
|
2387
|
+
["descending", 0.4],
|
|
2388
|
+
],
|
|
2389
|
+
},
|
|
2390
|
+
texture: {
|
|
2391
|
+
kind: "heterophonic",
|
|
2392
|
+
roles: {
|
|
2393
|
+
chords: null,
|
|
2394
|
+
drone: role("kargyraa"),
|
|
2395
|
+
lead: role("sing"),
|
|
2396
|
+
perc: role("framedrum"),
|
|
2397
|
+
},
|
|
2398
|
+
},
|
|
2399
|
+
rhythm: { onsets: { perc: grid("x.x.x.x.") } },
|
|
2400
|
+
}),
|
|
2401
|
+
card({
|
|
2402
|
+
id: "maori",
|
|
2403
|
+
summary:
|
|
2404
|
+
"waiata and haka: narrow-range unison chant on a recitation tone, waiata-ā-ringa action songs with strummed I-IV-V",
|
|
2405
|
+
tempo: { bpm: [80, 120], typical: 96 },
|
|
2406
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2407
|
+
melody: { ambitus: [4, 7], intervals: intervals(8, 1.5, 0.2, 1) },
|
|
2408
|
+
texture: {
|
|
2409
|
+
kind: "homophonic",
|
|
2410
|
+
roles: {
|
|
2411
|
+
chords: role("acoustic"),
|
|
2412
|
+
lead: role("choir", "sing:0.6"),
|
|
2413
|
+
bass: null,
|
|
2414
|
+
},
|
|
2415
|
+
},
|
|
2416
|
+
rhythm: { onsets: { chords: grid("x.xx.xx.") } },
|
|
2417
|
+
}),
|
|
2418
|
+
card({
|
|
2419
|
+
id: "hawaiian",
|
|
2420
|
+
summary:
|
|
2421
|
+
"kī hō'alu slack key and steel guitar: open-tuned I-IV-V7 with the II7-V7-I vamp, falsetto ha'i breaks, 2/4 hula",
|
|
2422
|
+
tempo: { bpm: [70, 110], typical: 88 },
|
|
2423
|
+
meter: {
|
|
2424
|
+
signatures: [
|
|
2425
|
+
["2/4", 0.5],
|
|
2426
|
+
["4/4", 0.5],
|
|
2427
|
+
],
|
|
2428
|
+
},
|
|
2429
|
+
harmony: {
|
|
2430
|
+
presets: null,
|
|
2431
|
+
forms: [[["I", "I", "IV", "I", "II", "V", "I", "I"], 1]],
|
|
2432
|
+
cadences: [["V-I", 1]],
|
|
2433
|
+
sevenths: 0.4,
|
|
2434
|
+
},
|
|
2435
|
+
melody: { intervals: intervals(4, 3, 1.5, 0.6) },
|
|
2436
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
2437
|
+
texture: {
|
|
2438
|
+
kind: "homophonic",
|
|
2439
|
+
roles: {
|
|
2440
|
+
bass: maybe("bassguitar"),
|
|
2441
|
+
chords: role("steel", "nylon:0.5"),
|
|
2442
|
+
lead: role("sing"),
|
|
2443
|
+
counter: maybe("steel"),
|
|
2444
|
+
},
|
|
2445
|
+
},
|
|
2446
|
+
}),
|
|
2447
|
+
card({
|
|
2448
|
+
id: "polynesian",
|
|
2449
|
+
summary:
|
|
2450
|
+
"Tahitian and Cook Islands drum dance: fast to'ere log-drum 16th patterns with pahu bass drum, himene choral harmony",
|
|
2451
|
+
tempo: { bpm: [120, 170], typical: 144 },
|
|
2452
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2453
|
+
texture: {
|
|
2454
|
+
kind: "homophonic",
|
|
2455
|
+
roles: {
|
|
2456
|
+
kick: role("kettledrum"),
|
|
2457
|
+
perc: role("xylophone", "framedrum:0.5"),
|
|
2458
|
+
chords: role("choir"),
|
|
2459
|
+
lead: role("sing"),
|
|
2460
|
+
},
|
|
2461
|
+
},
|
|
2462
|
+
rhythm: {
|
|
2463
|
+
onsets: {
|
|
2464
|
+
kick: grid("x.......x......."),
|
|
2465
|
+
perc: grid("x.xxx.xxx.xxx.xx"),
|
|
2466
|
+
},
|
|
2467
|
+
},
|
|
2468
|
+
}),
|
|
2469
|
+
card({
|
|
2470
|
+
id: "melanesian",
|
|
2471
|
+
summary:
|
|
2472
|
+
"string band and bamboo band: fast-strummed guitars and ukulele on I-IV-V, panpipe ensembles in parallel voices",
|
|
2473
|
+
tempo: { bpm: [100, 140], typical: 120 },
|
|
2474
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2475
|
+
harmony: {
|
|
2476
|
+
presets: [
|
|
2477
|
+
["fifties", 0.5],
|
|
2478
|
+
["axis", 0.5],
|
|
2479
|
+
],
|
|
2480
|
+
voicing: { strokes: [["island", 1]] },
|
|
2481
|
+
},
|
|
2482
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
2483
|
+
texture: {
|
|
2484
|
+
kind: "homophonic",
|
|
2485
|
+
roles: {
|
|
2486
|
+
bass: role("bassguitar", "doublebass:0.5"),
|
|
2487
|
+
chords: role("steel", "nylon:0.5"),
|
|
2488
|
+
lead: role("sing", "panpipes:0.5"),
|
|
2489
|
+
counter: maybe("panpipes"),
|
|
2490
|
+
},
|
|
2491
|
+
},
|
|
2492
|
+
}),
|
|
2493
|
+
card({
|
|
2494
|
+
id: "island-reggae",
|
|
2495
|
+
summary:
|
|
2496
|
+
"island reggae: off-beat guitar skank, one-drop kick and snare on beat 3, ukulele strum, I-IV-V love-song changes",
|
|
2497
|
+
tempo: { bpm: [70, 100], typical: 84 },
|
|
2498
|
+
meter: { signatures: [["4/4", 1]] },
|
|
2499
|
+
harmony: {
|
|
2500
|
+
presets: [
|
|
2501
|
+
["axis", 0.5],
|
|
2502
|
+
["fifties", 0.5],
|
|
2503
|
+
],
|
|
2504
|
+
voicing: { strokes: [["reggae", 1]] },
|
|
2505
|
+
},
|
|
2506
|
+
bass: { behaviour: [["root-fifth", 1]] },
|
|
2507
|
+
texture: {
|
|
2508
|
+
kind: "homophonic",
|
|
2509
|
+
roles: {
|
|
2510
|
+
...KIT_LIGHT,
|
|
2511
|
+
bass: role("bassguitar"),
|
|
2512
|
+
chords: role("steel", "keys:0.4"),
|
|
2513
|
+
lead: role("sing"),
|
|
2514
|
+
},
|
|
2515
|
+
},
|
|
2516
|
+
rhythm: {
|
|
2517
|
+
onsets: {
|
|
2518
|
+
kick: grid("........x......."),
|
|
2519
|
+
snare: grid("........x......."),
|
|
2520
|
+
hat: grid("x.x.x.x.x.x.x.x."),
|
|
2521
|
+
chords: grid("..x...x...x...x."),
|
|
2522
|
+
},
|
|
2523
|
+
},
|
|
2524
|
+
}),
|
|
2525
|
+
];
|
|
2526
|
+
|
|
2527
|
+
export const EUROPE_ASIA_PACIFIC_CARDS: readonly StyleCard[] = Object.freeze([
|
|
2528
|
+
card({
|
|
2529
|
+
id: "europe-folk",
|
|
2530
|
+
abstract: true,
|
|
2531
|
+
summary:
|
|
2532
|
+
"dance tunes and strophic song: modal diatonic tunes in 2- and 4-bar strains",
|
|
2533
|
+
tempo: { bpm: [90, 140], typical: 112 },
|
|
2534
|
+
groove: { subdivision: 2 },
|
|
2535
|
+
pitch: {
|
|
2536
|
+
scales: [
|
|
2537
|
+
["major", 0.35],
|
|
2538
|
+
["dorian", 0.25],
|
|
2539
|
+
["mixolydian", 0.25],
|
|
2540
|
+
["minor", 0.15],
|
|
2541
|
+
],
|
|
2542
|
+
},
|
|
2543
|
+
harmony: {
|
|
2544
|
+
presets: [
|
|
2545
|
+
["fifties", 0.3],
|
|
2546
|
+
["mixolydian-rock", 0.3],
|
|
2547
|
+
["dorian-vamp", 0.4],
|
|
2548
|
+
],
|
|
2549
|
+
sevenths: 0,
|
|
2550
|
+
voicing: { types: [["open", 1]] },
|
|
2551
|
+
},
|
|
2552
|
+
melody: {
|
|
2553
|
+
density: [2, 4],
|
|
2554
|
+
repetition: 0.7,
|
|
2555
|
+
intervals: intervals(5, 3, 0.6, 0.6),
|
|
2556
|
+
phraseBars: [
|
|
2557
|
+
[4, 0.7],
|
|
2558
|
+
[2, 0.3],
|
|
2559
|
+
],
|
|
2560
|
+
},
|
|
2561
|
+
bass: {
|
|
2562
|
+
behaviour: [
|
|
2563
|
+
["root-fifth", 0.6],
|
|
2564
|
+
["pedal", 0.4],
|
|
2565
|
+
],
|
|
2566
|
+
},
|
|
2567
|
+
form: {
|
|
2568
|
+
plans: [
|
|
2569
|
+
[
|
|
2570
|
+
[
|
|
2571
|
+
"verse",
|
|
2572
|
+
"verse",
|
|
2573
|
+
"chorus",
|
|
2574
|
+
"chorus",
|
|
2575
|
+
"verse",
|
|
2576
|
+
"verse",
|
|
2577
|
+
"chorus",
|
|
2578
|
+
"chorus",
|
|
2579
|
+
],
|
|
2580
|
+
1,
|
|
2581
|
+
],
|
|
2582
|
+
],
|
|
2583
|
+
archetype: "AABB",
|
|
2584
|
+
},
|
|
2585
|
+
texture: {
|
|
2586
|
+
kind: "heterophonic",
|
|
2587
|
+
roles: {
|
|
2588
|
+
...NO_KIT,
|
|
2589
|
+
bass: maybe("cello"),
|
|
2590
|
+
chords: role("acoustic", "lute:0.4", "harp:0.4"),
|
|
2591
|
+
lead: role("fiddle", "whistle:0.6", "flute:0.4"),
|
|
2592
|
+
perc: maybe("bodhran", "framedrum:0.5"),
|
|
2593
|
+
},
|
|
2594
|
+
},
|
|
2595
|
+
rhythm: { onsets: { perc: grid("x..x..x.") } },
|
|
2596
|
+
}),
|
|
2597
|
+
card({
|
|
2598
|
+
id: "celtic-british",
|
|
2599
|
+
abstract: true,
|
|
2600
|
+
summary:
|
|
2601
|
+
"jigs, reels and airs: 6/8 and 4/4, dorian and mixolydian, drone pipes",
|
|
2602
|
+
meter: {
|
|
2603
|
+
signatures: [
|
|
2604
|
+
["6/8", 0.4],
|
|
2605
|
+
["4/4", 0.4],
|
|
2606
|
+
["9/8", 0.2],
|
|
2607
|
+
],
|
|
2608
|
+
},
|
|
2609
|
+
}),
|
|
2610
|
+
card({
|
|
2611
|
+
id: "nordic-baltic",
|
|
2612
|
+
abstract: true,
|
|
2613
|
+
summary: "polska and runo song: 3/4 asymmetric lilt, minor and dorian",
|
|
2614
|
+
meter: {
|
|
2615
|
+
signatures: [
|
|
2616
|
+
["3/4", 0.7],
|
|
2617
|
+
["4/4", 0.3],
|
|
2618
|
+
],
|
|
2619
|
+
},
|
|
2620
|
+
pitch: {
|
|
2621
|
+
scales: [
|
|
2622
|
+
["minor", 0.5],
|
|
2623
|
+
["dorian", 0.5],
|
|
2624
|
+
],
|
|
2625
|
+
},
|
|
2626
|
+
}),
|
|
2627
|
+
card({
|
|
2628
|
+
id: "west-europe",
|
|
2629
|
+
abstract: true,
|
|
2630
|
+
summary:
|
|
2631
|
+
"chanson, musette and alpine: waltz and march, major-minor tonality",
|
|
2632
|
+
meter: {
|
|
2633
|
+
signatures: [
|
|
2634
|
+
["3/4", 0.5],
|
|
2635
|
+
["4/4", 0.5],
|
|
2636
|
+
],
|
|
2637
|
+
},
|
|
2638
|
+
harmony: {
|
|
2639
|
+
presets: [
|
|
2640
|
+
["fifties", 0.5],
|
|
2641
|
+
["andalusian", 0.5],
|
|
2642
|
+
],
|
|
2643
|
+
},
|
|
2644
|
+
}),
|
|
2645
|
+
card({
|
|
2646
|
+
id: "iberia",
|
|
2647
|
+
abstract: true,
|
|
2648
|
+
summary:
|
|
2649
|
+
"flamenco and fado: phrygian-dominant and andalusian cadence, 12-beat compas",
|
|
2650
|
+
pitch: {
|
|
2651
|
+
scales: [
|
|
2652
|
+
["phrygian-dominant", 0.5],
|
|
2653
|
+
["harmonic-minor", 0.3],
|
|
2654
|
+
["minor", 0.2],
|
|
2655
|
+
],
|
|
2656
|
+
},
|
|
2657
|
+
harmony: { presets: [["andalusian", 1]] },
|
|
2658
|
+
texture: {
|
|
2659
|
+
roles: { chords: role("nylon"), lead: role("nylon", "sing:0.6") },
|
|
2660
|
+
},
|
|
2661
|
+
}),
|
|
2662
|
+
card({
|
|
2663
|
+
id: "central-east-europe",
|
|
2664
|
+
abstract: true,
|
|
2665
|
+
summary:
|
|
2666
|
+
"polka, czardas and klezmer neighbours: 2/4 oom-pah, harmonic minor turns",
|
|
2667
|
+
meter: {
|
|
2668
|
+
signatures: [
|
|
2669
|
+
["2/4", 0.5],
|
|
2670
|
+
["4/4", 0.5],
|
|
2671
|
+
],
|
|
2672
|
+
},
|
|
2673
|
+
pitch: {
|
|
2674
|
+
scales: [
|
|
2675
|
+
["harmonic-minor", 0.4],
|
|
2676
|
+
["major", 0.4],
|
|
2677
|
+
["minor", 0.2],
|
|
2678
|
+
],
|
|
2679
|
+
},
|
|
2680
|
+
}),
|
|
2681
|
+
card({
|
|
2682
|
+
id: "balkans-mediterranean",
|
|
2683
|
+
abstract: true,
|
|
2684
|
+
summary: "aksak meters 7/8, 9/8, 11/8 in 2s and 3s, makam-tinged modes",
|
|
2685
|
+
meter: {
|
|
2686
|
+
signatures: [
|
|
2687
|
+
["7/8", 0.4],
|
|
2688
|
+
["9/8", 0.3],
|
|
2689
|
+
["11/8", 0.3],
|
|
2690
|
+
],
|
|
2691
|
+
grouping: [
|
|
2692
|
+
[[3, 2, 2], 0.5],
|
|
2693
|
+
[[2, 2, 2, 3], 0.5],
|
|
2694
|
+
],
|
|
2695
|
+
},
|
|
2696
|
+
pitch: {
|
|
2697
|
+
scales: [
|
|
2698
|
+
["phrygian-dominant", 0.4],
|
|
2699
|
+
["minor", 0.3],
|
|
2700
|
+
["hijaz", 0.3],
|
|
2701
|
+
],
|
|
2702
|
+
},
|
|
2703
|
+
harmony: { model: "modal" },
|
|
2704
|
+
}),
|
|
2705
|
+
card({
|
|
2706
|
+
id: "east-asia",
|
|
2707
|
+
abstract: true,
|
|
2708
|
+
summary:
|
|
2709
|
+
"anhemitonic pentatonic melody, heterophony, ornament over sustained tones, little harmony",
|
|
2710
|
+
tempo: { bpm: [56, 110], typical: 76 },
|
|
2711
|
+
pitch: {
|
|
2712
|
+
scales: [
|
|
2713
|
+
["major-pentatonic", 0.6],
|
|
2714
|
+
["minor-pentatonic", 0.4],
|
|
2715
|
+
],
|
|
2716
|
+
},
|
|
2717
|
+
harmony: { model: "drone", rhythm: [[0.5, 1]] },
|
|
2718
|
+
melody: {
|
|
2719
|
+
intervals: intervals(3, 4, 0.8, 0.6),
|
|
2720
|
+
chordToneRate: 0.4,
|
|
2721
|
+
density: [1, 2],
|
|
2722
|
+
},
|
|
2723
|
+
bass: {
|
|
2724
|
+
behaviour: [
|
|
2725
|
+
["none", 0.6],
|
|
2726
|
+
["pedal", 0.4],
|
|
2727
|
+
],
|
|
2728
|
+
},
|
|
2729
|
+
texture: {
|
|
2730
|
+
kind: "heterophonic",
|
|
2731
|
+
roles: {
|
|
2732
|
+
...NO_KIT,
|
|
2733
|
+
chords: null,
|
|
2734
|
+
drone: maybe("koto", "strings:0.5"),
|
|
2735
|
+
lead: role("erhu", "shakuhachi:0.6", "koto:0.5", "flute:0.4"),
|
|
2736
|
+
},
|
|
2737
|
+
},
|
|
2738
|
+
mix: { space: 0.5 },
|
|
2739
|
+
}),
|
|
2740
|
+
card({
|
|
2741
|
+
id: "china",
|
|
2742
|
+
abstract: true,
|
|
2743
|
+
summary: "gong-shang-jiao-zhi-yu pentatonic, erhu and dizi heterophony",
|
|
2744
|
+
texture: { roles: { lead: role("erhu", "flute:0.6") } },
|
|
2745
|
+
}),
|
|
2746
|
+
card({
|
|
2747
|
+
id: "japan",
|
|
2748
|
+
abstract: true,
|
|
2749
|
+
summary: "in and yo scales, ma silence, koto and shakuhachi",
|
|
2750
|
+
pitch: {
|
|
2751
|
+
scales: [
|
|
2752
|
+
["major-pentatonic", 0.4],
|
|
2753
|
+
["phrygian", 0.6],
|
|
2754
|
+
],
|
|
2755
|
+
},
|
|
2756
|
+
melody: { density: [0, 2] },
|
|
2757
|
+
texture: { roles: { lead: role("shakuhachi", "koto:0.6") } },
|
|
2758
|
+
}),
|
|
2759
|
+
card({
|
|
2760
|
+
id: "korea",
|
|
2761
|
+
abstract: true,
|
|
2762
|
+
summary:
|
|
2763
|
+
"jangdan cycles in compound triple time, pyeongjo and gyemyeonjo modes",
|
|
2764
|
+
meter: {
|
|
2765
|
+
signatures: [
|
|
2766
|
+
["12/8", 0.6],
|
|
2767
|
+
["9/8", 0.4],
|
|
2768
|
+
],
|
|
2769
|
+
},
|
|
2770
|
+
}),
|
|
2771
|
+
card({
|
|
2772
|
+
id: "central-north-asia",
|
|
2773
|
+
abstract: true,
|
|
2774
|
+
summary: "steppe song: overtone drone, galloping 6/8, pentatonic long song",
|
|
2775
|
+
meter: {
|
|
2776
|
+
signatures: [
|
|
2777
|
+
["6/8", 0.6],
|
|
2778
|
+
["4/4", 0.4],
|
|
2779
|
+
],
|
|
2780
|
+
},
|
|
2781
|
+
texture: {
|
|
2782
|
+
roles: {
|
|
2783
|
+
drone: role("khoomei", "strings:0.4"),
|
|
2784
|
+
lead: role("fiddle", "sing:0.5"),
|
|
2785
|
+
},
|
|
2786
|
+
},
|
|
2787
|
+
}),
|
|
2788
|
+
card({
|
|
2789
|
+
id: "southeast-asia",
|
|
2790
|
+
abstract: true,
|
|
2791
|
+
summary:
|
|
2792
|
+
"gong-chime colotomy: slendro or pelog tuning, nested cycles, interlocking elaboration",
|
|
2793
|
+
tempo: { bpm: [60, 120], typical: 84 },
|
|
2794
|
+
pitch: { tuning: "slendro", scales: [["major-pentatonic", 1]] },
|
|
2795
|
+
harmony: { model: "drone", rhythm: [[0.25, 1]] },
|
|
2796
|
+
melody: {
|
|
2797
|
+
chordToneRate: 0.3,
|
|
2798
|
+
density: [2, 4],
|
|
2799
|
+
repetition: 0.8,
|
|
2800
|
+
intervals: intervals(5, 2, 0.5, 0.5),
|
|
2801
|
+
},
|
|
2802
|
+
bass: { behaviour: [["pedal", 1]] },
|
|
2803
|
+
texture: {
|
|
2804
|
+
kind: "interlocking",
|
|
2805
|
+
roles: {
|
|
2806
|
+
...NO_KIT,
|
|
2807
|
+
chords: null,
|
|
2808
|
+
bass: role("gong", "kempul:0.6"),
|
|
2809
|
+
lead: role("saron", "gangsa:0.6", "bonang:0.4"),
|
|
2810
|
+
counter: maybe("gender", "bonang:0.5"),
|
|
2811
|
+
},
|
|
2812
|
+
},
|
|
2813
|
+
mix: { space: 0.45 },
|
|
2814
|
+
}),
|
|
2815
|
+
card({
|
|
2816
|
+
id: "oceania",
|
|
2817
|
+
abstract: true,
|
|
2818
|
+
summary:
|
|
2819
|
+
"Pacific song: I-IV-V slack-key and choral harmony, island reggae lilt",
|
|
2820
|
+
tempo: { bpm: [70, 120], typical: 92 },
|
|
2821
|
+
pitch: { scales: [["major", 1]] },
|
|
2822
|
+
harmony: {
|
|
2823
|
+
presets: [
|
|
2824
|
+
["fifties", 0.5],
|
|
2825
|
+
["axis", 0.5],
|
|
2826
|
+
],
|
|
2827
|
+
},
|
|
2828
|
+
texture: {
|
|
2829
|
+
roles: {
|
|
2830
|
+
...NO_KIT,
|
|
2831
|
+
chords: role("steel", "nylon:0.5"),
|
|
2832
|
+
lead: role("sing", "steelpan:0.3"),
|
|
2833
|
+
},
|
|
2834
|
+
},
|
|
2835
|
+
}),
|
|
2836
|
+
...EUROPE_LEAVES,
|
|
2837
|
+
...ASIA_PACIFIC_LEAVES,
|
|
2838
|
+
]);
|