Strudelify

Mornin'

Al Jarreau

KeyA majorTempo86 bpm
0:00/0:00
// Mornin' — Al Jarreau
// 86 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(86/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · epiano2
const epiano2 = note(`<
  A@2 B C D E B F G H I E J K B F G H I E L M@2 N O P@2 Q@2 R B S D K B F T H I E U V W X Y Z AA AB AC AD AE AF AG AH AI
  AJ AK R B S D E B F G H I AL L M@2 AM O P@2 AN@2 AO AP AQ AR AS AT AO AU AO AP AQ AR AS AV AO AU AW ~@2
>`.pickRestart({
  A: "[~@23 e4 [e4,a4,c#5]@17 ~ [e4,a4,c#5]@3 [f#4,b4,d5]@2 a4, ~@12 [c8,d8]@4 [a6,b6] [e6,f#6,g6]@8 ~@23, ~@13 [a7,b7]@5 [c6,d6] [g5,a5,b5]@6 ~@20 c#5 ~@2, ~@14 [f#7,g7]@6 [d5,e5,f#5] [b4,c5] [g4,a4] f#4@2 ~@23, ~@15 [c7,d7,e7]@10 ~@23]/2", // A Bm Csus2 Asus2 Em Asus2 Csus2 G …
  B: "[e4,a4,c#5]@3 [f#4,b4,d5]", C: "[e4,a4,c#5]@18 [e4,a4,c#5]@2 ~ [f#4,b4,d5]@2 ~",
  D: "[e4,a4,c#5]@14 e4 [b4,e5,g5]@3 [a4,d5,f5]@3 [b4,e5,g5]@3", E: "[e4,a4,c#5]@17 ~ [e4,a4,c#5]@3 [f#4,b4,d5]@3",
  F: "[e4,a4,c#5]@17 a4 [e4,a4,c#5]@3 [f#4,b4,d5]@3", G: "[e4,a4,c#5]", H: "[g4,c5,e5]@12 ~@6 g5@5 ~, ~ [g4,b4,d5]",
  I: "~@5 g5@4 ~@3 [b4,d5]@12, [g4,c5,e5]@12 g4 ~@11", J: "[e4,a4,c#5]@15 [b4,e5,g5]@3 [a4,d5,f5]@2 ~ [b4,e5,g5]@3",
  K: "[e4,a4,c#5]@17 ~ [e4,a4,c#5]@3 [f#4,b4,d5]@2 ~", L: "[e4,a4,c#5]@23 ~",
  M: "[~@12 f5@11 ~, [a#4,d5]@23 ~, f5@11 ~@13, ~@9 a#5@14 ~]/2", // A#
  N: "[f#4,a4,c#5]@17 ~ [f#4,a4,c#5]@3 [f#4,b4,d5]@2 ~, ~@21 c#5 ~@2", O: "[f#4,a4,c#5]@23 ~",
  P: "[~@9 f5@3 d5@11 ~, [f4,a#4]@23 ~, d5@11 ~@13]/2", // A#5
  Q: "[~@24 g6@11 ~@4 [b4,e5,g5]@3 [a4,d5,f5]@2 ~ [b4,e5,g5]@3, [g4,b4,d5]@3 ~]/2", // Em Dm Em G
  R: "[e4,a4,c#5]@17 ~ [e4,a4,c#5]@3 [f#4,b4,d5]@2 a4, ~@21 c#5 ~@2", S: "[e4,a4,c#5]@6 [e4,a4,c#5] [f#4,b4,d5]",
  T: "[d4,f#4,a4] [f#4,a4,b4] [b4,d5] [b4,d5,e5,g5], ~@12 g4@11 ~", // D B7 Bm Em7
  U: "[f#4,a4,c#5]@5 ~ [f#4,a4,c#5]@5 ~ [g4,b4,d5]@5 ~ [a4,c#5,e5]@6", V: "[g4,b4,f#5]", W: "[e4,g4,c#5]",
  X: "[f#4,a4,c#5]", Y: "f5@6 f#5@6 [a5,c6]@4 [g5,b5]@4 [f#5,a5]@3 ~, [b4,d#5] ~", Z: "a5@2 ~ [e5,g5]@3, f#5 ~, ~ b5@2",
  AA: "[b4,c#5,e5]", AB: "[a#4,d#5,f#5]", AC: "~@6 [d#4,f#4,a#4]@6 [e4,g#4,b4]@4 ~@2 [f#4,a#4,c#5]@5 ~",
  AD: "[f#4,b4,d#5]@23 ~", AE: "a#4@11 a4@12 ~, d#4, f#4@11 ~", AF: "[f4,g#4,c#5]", AG: "[d#4,f#4,a#4]@23 ~",
  AH: "[d#4,b4], f#4@11 ~", AI: "[f4,c#5], g#4@11 ~", AJ: "[f#4,a#4,d#5]@23 ~",
  AK: "[f#4,b4,d#5]@6 [g#4,c#5,f5]@5 ~ [b4,d#5,f#5]@5 ~ [c#5,f5,g#5]@5 ~", // B C# B C#
  AL: "[e4,a4,c#5]@17 ~ [e4,a4,c#5]@2 ~ [f#4,b4,d5]@2 ~", // A Bm
  AM: "[f#4,a4,c#5]@17 ~ [f#4,a4,c#5]@3 [f#4,b4,d5]@3, ~@21 c#5 ~@2", // F#m Bm
  AN: "[~@24 g6@11 ~@4 [b4,e5,g5]@3 [a4,d5,f5]@2 ~ [b4,e5,g5]@3, [f#4,b4,d5]@3 ~]/2", // Em Dm Em Bm
  AO: "[f4,a#4,d5]@17 ~ [f4,a#4,d5]@3 [g4,c5,d#5]@3", AP: "[f4,a#4,d5]@3 [g4,c5,d#5]",
  AQ: "[f4,a#4,d5]@17 a#4 [f4,a#4,d5]@3 [g4,c5,d#5]@3", // A# Cm
  AR: "[d#4,g4,a#4] [g4,a#4,c5] [c5,d#5] [c5,d#5,f5,g#5], ~@12 g#4@11 ~", // D# C7 Cm Fm7
  AS: "[g#4,c#5,f5]@12 ~@6 g#5@5 ~, ~ [g#4,c5,d#5]", AT: "~@5 g#5@4 ~@3 [c5,d#5]@12, [g#4,c#5,f5]@12 g#4 ~@11",
  AU: "[f4,a#4,d5]@5 [c5,f5,g#5] [a#4,d#5,f#5] [c5,f5,g#5]", AV: "~@5 g#5@4 [c5,d#5]@15, [c#5,f5] ~, g#4@3 g#4 ~@4",
  AW: "[f4,a#4,d5]@23 ~", // A#
})).s("gm_epiano2").gain(0.25).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  ~ A B A C D E F G H I J K L E F G M I J N O P Q R S T U V A B A W A X D Y Z AA A AB AC AD AE AF AG AH AI AJ AK AD AL
  AM AK AN AF AO AP B A AQ L E D G AR I AS K AT P Q AU AV T U AW AX AY AX AZ BA BB AX BC BD AY BE BF BA BB AX BC BG@2 ~
>`.pickRestart({
  A: "d2@2 ~@6 a1 b1@2 a1 d2@2 ~@10", B: "d2@2 ~@9 d2!2 ~@11", C: "d2@2 ~@9 d2 d2@3 a1@3 g1@3 a1@3",
  D: "d2 ~@7 a1 b1@2 a1 d2@2 ~@10", E: "d2 ~@10 d2 d2@2 d2 ~@9", F: "d2 ~@7 a1 b1@2 a1 d2 ~@11",
  G: "d2@2 ~@9 d2 d2@2 d2 ~@9", H: "a1@2 ~@9 a1 a1@2 ~@10", I: "a1@2 ~@3 g#2 a2@2 ~@3 e2 a1@2 ~@10",
  J: "d2@2 ~@6 a1 b1@2 ~ d2@2 ~@10", K: "d2@2 ~@9 d2 d2@2 ~ a1@3 g1@2 ~ a1@2 ~",
  L: "d2@2 ~@6 a1 b1@2 a1 d2@2 ~@10, a1 ~@23", M: "a1@2 ~@9 a1!2 ~@11", N: "d2@2 ~@9 d2 d2@2 d2 ~@3 d1@5 ~",
  O: "a#1@2 ~@9 a#1 a#1@2 ~@10", P: "a#1 ~@10 a#1 a#1@5 ~ a#1@6", Q: "d2@2 ~@6 a1 b1@3 d2@2 ~@10",
  R: "d2@2 ~@9 d2 d2@2 d2 ~@3 d1@6", S: "c2 ~@10 c2 c2@2 c2 ~@9", T: "c2@2 ~@9 c2 c2@5 ~ c2@6",
  U: "a1@10 ~ a1 a1@2 ~@10", V: "a1@2 ~@6 e1 g1 ~ e1 a1@2 ~@4 a1@2 ~@4", W: "d2@2 ~@7 d2@2 d2 ~@12",
  X: "d2@2 ~@9 d2 d2@2 ~@10", Y: "d2@5 ~ b1@6 g1@6 e1@6", Z: "a1@3 ~@8 a1!2 ~@11", AA: "a1@4 ~ g#2 a2@4 ~ e2 a1@11 ~",
  AB: "d2@2 ~@4 d2@5 ~ e2@6 f#2@5 ~", AC: "g2@10 ~ g2 g2@8 ~ g2@3", AD: "c#2@10 ~ c#2 c#2@8 ~ c#2@3",
  AE: "f#2@9 ~@2 f#2 f#2@8 ~ f#2@2 ~", AF: "b1@10 ~ b1 b1@8 ~ b1@2 ~", AG: "e2@10 ~ e2 e2@8 ~ e2@2 ~",
  AH: "c#2@10 ~ c#2 c#2@6 ~@3 c#2@3", AI: "b1@9 ~@2 b1 b1@5 ~ f#1@6", AJ: "b1@9 ~@2 b1 c#2@8 ~ c#2@3",
  AK: "g#1@10 ~ g#1 g#1@8 ~ g#1@2 ~", AL: "f#1@10 ~ f#1 a#1@7 ~@2 a#1@3", AM: "d#2@9 ~@2 d#2 d#2@8 ~ d#2@2 ~",
  AN: "a#1@10 ~ a#1 a#1@8 ~ a#1@2 ~", AO: "c#2@5 ~ c#2@5 ~ c#2@5 ~ c#2@6", AP: "d2@2 ~@6 a1 b1@2 a1 d2 ~@11",
  AQ: "d2 ~@8 d2@2 d2 ~@12", AR: "a1 ~@10 a1 a1@2 ~@10", AS: "d2@2 ~@6 a1 b1@2 ~ d2 ~@11",
  AT: "a#1@2 ~@9 a#1 a#1@2 ~@10, d1 ~@23", AU: "d2@2 ~@9 d2!2 ~ d2 ~@3 d1@6", AV: "c2@2 ~@9 c2 c2@2 c2 ~@9",
  AW: "a1@2 ~@6 e1 g1@2 e1 a1@2 ~@4 a1@2 ~@4", AX: "d#2@2 ~@6 a#1 c2@2 a#1 d#2@2 ~@10", AY: "d#2@2 ~@9 d#2 d#2@2 ~@10",
  AZ: "d#2@5 ~ c2@6 g#1@6 f1@6", BA: "a#1@3 ~@8 a#1 a#1@2 ~@10", BB: "a#1@4 ~ a2 a#2@4 ~ f2 a#1@11 ~",
  BC: "d#2@2 ~@9 d#2 d#2@2 ~ a#1@3 g#1@3 a#1@2 ~", BD: "d#2 ~@7 a#1 c2@2 a#1 d#2@2 ~@10",
  BE: "d#2@2 ~@6 a#1 c2@2 a#1 d#2 ~@11", BF: "d#2 c2 g#1 f1", BG: "[[d#1,d#2]@37 ~@11]/2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A B C B C B C B D E A B C B C B D E C B F G C B H G I J C B A B C B C B D E C B ~@16 C B C B A B C B D E C B H G A B
  K G L J M N M N O P M N M N M N O P Q N ~@3
>`.pickRestart({
  A: "[a3,c#4] ~ [a3,c#4]!2 ~ [a3,c#4] ~@2 [b3,d4] ~@8 [b3,d4] ~@2 [a3,c#4] [b3,d4] ~@2", // A Bm A Bm
  B: "[a3,c#4] ~ [a3,c#4]!2 ~ [a3,c#4] ~@2 [b3,d4] ~@2 [a3,c#4] ~@12", // A Bm A
  C: "[a3,c#4] ~ [a3,c#4]!2 ~ [a3,c#4] ~@2 [b3,d4] ~@8 [b3,d4] ~@3 [b3,d4] ~@2, ~@10 [a3,c#4] ~", // A Bm A
  D: "[a3,c4] ~ [a3,c4]!2 ~ [a3,c4] ~@2 [b3,d4] ~@8 [b3,d4] ~@2 [a3,c4] [b3,d4] ~@2", // Am Bm Am Bm
  E: "[a3,c4] ~ [a3,c4]!2 ~ [a3,c4] ~@2 [b3,d4] ~@2 [g3,b3] ~@12", // Am Bm G
  F: "[a3,c4] ~ [a3,c4]!2 ~ [a3,c4] ~@2 [a#3,d4] ~@8 [a#3,d4] [a3,c4]@2 [a3,c4] [a#3,d4]@2 ~", // Am A# Am A#
  G: "[a3,c4] ~ [a3,c4]!2 ~ [a3,c4] ~@2 [a#3,d4] ~@2 [g3,a#3] ~@12", // Am A# Gm
  H: "[a3,c4] ~ [a3,c4]!2 ~ [a3,c4] ~@2 [a#3,d4] ~@8 [a#3,d4] [a3,c4]@2 ~ [a#3,d4]@2 ~, ~@10 [a3,c4] ~", // Am A# Am A# Am
  I: "[b3,d4] ~ [b3,d4]!2 ~ [b3,d4] ~@2 [c#4,e4] ~@8 [c#4,e4] [b3,d4]@2 ~ [c#4,e4]@2 ~, ~@10 [b3,d4] ~", // Bm C#m Bm C#m Bm
  J: "[b3,d4] ~ [b3,d4]!2 ~ [b3,d4] ~@2 [c#4,e4] ~@2 [a3,c#4] ~@12", // Bm C#m A
  K: "[a3,c4] ~ [a3,c4]!2 ~ [a3,c4] ~@2 [a#3,d4] ~@8 [a#3,d4] [a3,c4] ~@2 [a#3,d4]@2 ~, ~@10 [a3,c4] ~", // Am A# Am A# Am
  L: "[b3,d4] ~ [b3,d4]!2 ~ [b3,d4] ~@2 [c#4,e4] ~@8 [c#4,e4] [b3,d4]@2 ~ [c#4,e4] ~@2, ~@10 [b3,d4] ~", // Bm C#m Bm C#m Bm
  M: "[a#3,d4] ~ [a#3,d4]!2 ~ [a#3,d4] ~@2 [c4,d#4] ~@8 [c4,d#4] ~@3 [c4,d#4] ~@2, ~@10 [a#3,d4] ~", // A# Cm A#
  N: "[a#3,d4] ~ [a#3,d4]!2 ~ [a#3,d4] ~@2 [c4,d#4] ~@2 [a#3,d4] ~@12", // A# Cm A#
  O: "[a#3,c#4] ~ [a#3,c#4]!2 ~ [a#3,c#4] ~@2 [c4,d#4] ~@8 [c4,d#4] ~@2 [a#3,c#4] [c4,d#4] ~@2", // A#m Cm A#m Cm
  P: "[a#3,c#4] ~ [a#3,c#4]!2 ~ [a#3,c#4] ~@2 [c4,d#4] ~@2 [g#3,c4] ~@12", // A#m Cm G#
  Q: "[a#3,d4] ~ [a#3,d4]!2 ~ [a#3,d4] ~@2 [c4,d#4] ~@8 [c4,d#4] ~@2 [a#3,d4] [c4,d#4] ~@2", // A# Cm A# Cm
})).s("gm_electric_guitar_muted").gain(0.29)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~ A@4 ~@8 B@4 C@2 D@2 E@4 F@8 G@3 H I@2 J@2 K@3 L@3 M N@3 O@3 P Q R S@4 G@3 H I@2 T@2 E@4 U@4 V@3 W X Y Z@2 AA ~@2 W X
  Y Z@2 ~@3
>`.pickRestart({
  A: "[[c#4,f#4]@29 ~@3, a4@19 ~@29]/4", B: "a5/4", C: "[[c5,e5] [b4,d5] [c5,e5] [b4,d5], g5]/2", D: "[c#5,f#5,a5]/2",
  E: "[[d4,f4] [c#4,e4], a3]/4", F: "[g3@8 a3@8 c#4@13 ~@3, d4@48 a4@19 ~@29, f4@23 ~ f#4@63 ~@9]/8", G: "a5/3",
  H: "d4@5 ~@7 g4@6 g5@6, [f#4,a4] d5, ~ b4@3", I: "[[c4,e4] [b3,d4] [c4,e4] [b3,d4], g4]/2",
  J: "[[f#4,a4]@29 ~ [c#4,f#4,a4]@6 [d4,g4,b4]@6 [e4,a4,c#5]@6, c#4@13 ~@11]/2", // F#m G A
  K: "[[d5,f#5] ~ f#4, g4@37 ~@35, ~ e5@2, ~@4 c#5@7 ~]/3", // D
  L: "[f4 f#4@3 e4@4 c#4@4, b4@67 ~@5, d#5@23 ~ g4@30 ~@18]/3", M: "[b3,d#4,f#4]",
  N: "[~ [f#3,b3,d#4] [g#3,c#4,e4] [a#3,f#4] g#4@4 f#4@4, ~ d#4@3, ~ b3@2]/3", // B C#m D#m
  O: "[c#4@4 ~ f#4@3 [g#3,b3]@4, a#3@2 ~, f4@5 ~@7, ~ d#4@2]/3", P: "[a#3,c#4,f4]", Q: "[b3,d#4,f#4]@23 ~",
  R: "[f#3,b3,d#4] [g#3,c#4,f4] [b3,d#4] [c#4,f4,g#4], ~@12 f#4@5 ~@7", // B C# B C#
  S: "[[d4,f#4]@81 [d4,f#4,a4] ~ [d4,f#4,a4] ~@12, a4@19 ~@29]/4", T: "[c#4,f#4,a4]/2",
  U: "[[g3,f4]@47 ~ a3@48, d4, ~@4 f#4@3 ~]/4", V: "a#5/3", W: "d#4@5 ~@7 g#4@6 g#5@6, [g4,a#4] d#5, ~ c5@3",
  X: "[c#5,f5] [c5,d#5], g#5 ~@23", Y: "[c#5,f5] [c5,d#5]", Z: "[d5,g5,a#5]/2", AA: "a#5 ~@23",
})).s("gm_string_ensemble_2").gain(0.2)

// other · french horn
const french_horn = note("<~@40 A B C D E F G H ~ I J K L M N O ~@40>".pickRestart({
  A: "~ c#4 d4 e4", B: "f#4@5 ~ d#4@6 e4@6 f#4@6", C: "g4@21 f#4 g4 ~", D: "g#4@11 ~ c#4@6 e4@6", E: "f4 f#4@2 ~",
  F: "d4", G: "e4 c4", H: "c#4", I: "~@8 c#4 d#4 f#4 g#4", J: "a#4 a4", K: "g#4@3 c#4", L: "f4 f#4 c#4@2",
  M: "d#4@21 c#4 d#4 ~", N: "f4@21 d#4 f4 ~", O: "a#4",
})).s("gm_french_horn").gain(0.33).pan(0.3)

// other · whistle
const whistle = note("<~@61 A@2 B C D E F G ~@27>".pickRestart({
  A: "[f#6@2 a6 ~@2 a6@2 ~ a6@2 ~ f#6 a6@2 f#6 a6@2 b6@2 ~ c#7 ~@2 d7@12 ~ c#7@2 a6 b6 ~ f#6 ~@2 e6 ~ d6 ~]/2",
  B: "f#6@8 ~ e6@2 d6 c#6@2 a5 ~@2 b5 ~@5 a5", C: "b5@2 c#6 d6@2 e6 f6@2 f#6 a6@2 b6 ~@2 c#7@2 d7 ~ e7 ~ f#7 ~ g7@2",
  D: "a7@11 ~ g7@2 f#7@2 ~ e7 ~ e7 f#7@3 ~, ~@20 f7 ~@3", E: "d7@8 ~ [a6,b6] ~ a6@9 ~ g6@2 a6",
  F: "f#6@8 d6 e6@3 d6@8 ~ b5@2 d6", G: "a5@13 ~@11",
})).s("gm_whistle").gain(0.3).pan(0.7)

// other · synth strings 1
const synth_strings_1 = note("<~@41 A B C D@3 E F G H I@2 J K E L M@2 ~@37>".pickRestart({
  A: "~ f#4 g4 a4", B: "b4@5 ~ a#4@2 e5@2 d5@2, ~@5 c#5 ~@6, ~@11 b4@2 ~@11", C: "c#5",
  D: "[~ d#5 e5 f#5@3 ~@2 g5@2 a5@2, ~@36 b4@31 ~@5]/3", E: "a#5", F: "~ a#4 b4 c#5", G: "d#5@8 c#5 d#5 f#5 g#5",
  H: "a#5 a5", I: "[g#5@3 ~ f5 f#5 c#5 a#4, ~@18 c#5@13 ~@17]/2", J: "b4@3 f#5 g#5 a#5", K: "g#5 c#5",
  L: "b4 a#4 g#4 d#5", M: "[c#5@19 ~@5]/2",
})).s("gm_synth_strings_1").gain(0.36)

// chords · epiano2
const epiano2_2 = note(`<
  A@3 B@2 C@2 D@2 E@2 F G C@2 D@2 H@2 I@2 J@2 K@2 L@2 M@2 N@4 O@3 P Q@2 R@2 S T U V W X Y@2 Z AA AB AC AD AE AF AG AH@4
  AI@2 D@2 H@2 I@2 J@2 K@2 L@2 AJ@2 AK@3 AL AM@2 AN AO AK@3 AL AM@2 AN AO AP@2 ~
>`.pickRestart({
  A: "[~@24 [e4,a4,c#5]@17 ~ [e4,a4,c#5]@3 [f#4,b4,d5]@3 [a4,c#5]@18 [a4,c#5,e5]@6, ~@11 d8@4 [a6,b6,c7]@2 [c6,d6] [g5,a5,b5] [d5,e5,f#5] [a4,b4,c5] c#4@18 ~@2 c#4@31, ~@12 [a7,b7,c8]@9 [f#4,g4]@2 a3@48 ~, ~@13 [f#7,g7]@3 [e6,f#6,g6]@8 d3@48, ~@14 [d7,e7]@11 ~@20 [a4,c#5] ~@2 e4@24]/3", // A Bm A Am Csus2 G D Am …
  B: "[[c#4,e4,a4,c#5]@17 ~ [e4,c#5]@3 [f#4,b4,d5]@3 [e4,a4,c#5]@14 [d3,a3,c#4] [b4,e5,g5]@3 [a4,d5,f5]@3 [b4,e5,g5]@2 ~, [d3,a3]@19 ~@5, ~@17 c#4@21 ~@10, ~@3 a4 ~@4, ~@21 c#5 ~@26]/2", // A C#m Bm A Dmaj7 Em Dm Em …
  C: "[[d3,c#4,e4,a4,c#5]@16 ~@2 [e4,a4,c#5]@3 [f#4,b4,d5]@2 ~@20 e5@5, ~@17 [d3,c#4]@31, ~ [e4,a4,c#5], ~@19 c#6@5, ~@41 a5@7]/2", // A Bm Dmaj7 A
  D: "[~@17 e6@4 ~@12 e4@6 ~@6 c#5@3, [d3,c#4]@13 e4 a4@2, c#5 e7, a4@7 e6@9, e4@5 e5@11]/2", // Dmaj7
  E: "[g4@10 g4@2 ~@6 g5@6 ~@23 a4, a3 [a3,c5,e5], [c5,e5]@12 a2@23 [a2,g4,b4,d5]@13, ~@12 [g4,b4,d5]@12 g4@11 ~@11 e4@2, ~@29 g5@13 g5@6]/2", // Am C G
  F: "[d3,a3,c#4,e4,a4,c#5]@17 ~@4 [f#4,b4,d5]@3, ~@17 [d3,a3,c#4]@7, ~@3 [e4,a4,c#5]", // A Bm Dmaj7 A
  G: "[d3,a3,c#4,e4,a4,c#5]@14 [d3,a3,c#4] [b4,e5,g5]@3 [a4,d5,f5]@3 [b4,e5,g5]@3", // A Dmaj7 Em Dm Em
  H: "[g4@10 g4@2 ~@6 g5@6 ~@23 a4, a3@12 [a3,c5,e5]@11 e4, [c5,e5]@12 a2@23 a2@13, ~ [g4,b4,d5] g4 [g4,b4,d5], ~@29 g5@13 g5@6]/2", // Am C G
  I: "[[c#4,e4,a4,c#5]@17 ~ [e4,a4,c#5]@3 [f#4,b4,d5]@2 ~ e4@11 ~@10 a3@3, d3@7 c#5, ~@17 c#4@31, ~@8 c#5@5 a4@3, ~@2 a4 e4]/2", // A Bm
  J: "[~@29 a#6@18 ~, [a#2,a#3,a4,d5,f5]@5 f7@7, ~@8 f6@15 a6@24 ~, ~@11 a5@36 ~, ~@14 a#5@33 ~]/2", // A#maj7
  K: "[[d3,c#4,e4,a4,c#5]@17 ~ [e4,a4,c#5]@3 [f#4,b4,d5]@3 e4@8 ~@10 e5@6, ~@17 [d3,c#4]@31, ~@21 c#5 ~@2 c#5@13 c#5@11, ~@12 a4@5 a4@7, ~@2 e4]/2", // A Bm Dmaj7
  L: "[~@3 f5, [c3,c4,d5] g4, g4@7 g5@17, a#4@11 a#5@37, f5@8 f6@11 f5@3 a#4@26]/2", // Csus2
  M: "[[b4,d5]@11 ~@33 [e4,f#4]@4, [a2,a3]@37 [c7,d7] [g6,a6,b6] [d6,e6,f#6] [b5,c6] [f#5,g5,a5] [c5,d5,e5] [g4,a4,b4]@5, g4@3 [e7,f#7,g7], ~@11 [b4,d5]@24 [a7,b7]@13, ~@11 g5@13 [b5,d6,g6]@10 c8@14]/2", // Bm Esus2 A Csus2 G D Cmaj7 F#m …
  N: "[[d3,c#4,e4,a4,c#5]@17 ~ [e4,a4,c#5]@3 [f#4,b4,d5]@3 [e4,a4]@14 ~@4 [e4,a4,c#5]@3 [f#4,b4,d5]@2 a4 [d3,e4,a4,c#5]@17 ~@4 [f#4,b4,d5]@3 [d3,e4,a4,c#5]@14 [d3,c#4] [b4,e5,g5]@2 ~ [a4,d5,f5]@3 [b4,e5,g5]@3, ~@17 d3@30 ~@18 d3@7 ~@24, ~@17 c#4@24 c#4@24 c#4@21 ~@10, ~@21 c5 ~@2 c#5@17 ~@7 f#4 ~@17 [e4,a4,c#5]@6 ~@24]/4", // A Bm A5 A Bm A Bm A …
  O: "[~@23 a5@18 ~ [e4,a4,c#5]@3 ~ a3@2 ~@12 e5@12, [d3,c#4,e4,a4,c#5]@41 [d3,c#4]@31, ~@7 e6@14 ~@15, ~@17 c#6@25 ~@30, ~@20 e5@22 ~@3 [f#4,b4,d5]@3 [e4,a4,c#5]@24]/3", // A Dmaj7 Bm A
  P: "[d4,f#4,a4]@6 [b3,f#4,a4,b4]@5 ~ [g3,g4,b4,d5]@6 [e3,b4,d5,e5,g5]@6", // D B7 G Em7
  Q: "[[c5,e5,g5]@12 ~@6 g5@5 ~ d5 ~@11 [g4,b4,d5]@10 ~ [a3,a4], a3@47 ~, [a2,g4]@23 ~ a2@23 ~, ~@12 [b4,d5]@12 [g4,c5,e5]@9 ~@3 e5 ~@9 e4@2, ~@29 g5@19]/2", // C G A A7 Bm C
  R: "[~@4 a4 [d3,c#4,e4,a4,c#5] [e3,g4,b4] [f#3,c#5], [d3,c#4,e4,c#5]@5 ~@3, a4@24 ~@12 d4@2 ~@4 [e4,a4] ~@5, ~@20 e5@9 ~@19]/2", // A Em F#5 C#m A5
  S: "[g2,g3,g4,b4,f#5]", T: "b4@15 ~@5 b4@4, [c#3,e4,g4], ~@5 e5@3", U: "[f#3,e4,a4,c#5]",
  V: "f5@2 ~@5 [f#5,a5], [b2,b3,b4], ~@6 f#5@11 [g5,b5]@7, ~ c6, ~@4 a5@3 ~", // F#m B G
  W: "~@12 [b4,e5,g5]@10 ~ g4, [e3,e4]@23 ~, [f#5,a5]@6 ~@5 e4, ~@8 b5@15 ~", X: "b4@2 ~ b4, [c#3,e4,g4], ~ e5",
  Y: "[~@4 d#5 [b2,b3,f#4,a#4,d#5] [c#3,c#4,g#4,c#5,e5] [d#3,d#4,a#4,d#5,f#5], [b2,b3,f#4]@5 ~@3, d#5@19 ~@29, a#4@8 ~ a#4@6 ~@9, ~@2 f#5@3 ~@3]/2", // Bmaj7 C#m D#m B5
  Z: "b4@2 ~ f#4, [g#2,g#3,d#5], f#4@3 ~, ~ [d#4,b4]", AA: "[c#3,b3,d#4,f#4,a#4]@23 g#4",
  AB: "~@12 [f5,c#6]@10 ~ f#4, [f#3,f4,g#4,c#5], ~@4 [g#5,f6]@7 c#4", AC: "f#4 ~@2 a#4, [d#3,c#4], a#4 f#4, ~ c#5@3",
  AD: "~@3 f#4, [g#2,g#3,d#4,b4], f#4@3 ~, ~ d#5", AE: "~@3 g#4, [a#2,a#3,f4,c#5], g#4@3 ~, ~ f5",
  AF: "[b2,b3,f#4,a#4,d#5]@23 ~", // Bmaj7
  AG: "[c#3,c#4,f#4,b4,d#5] [c#3,c#4,g#4,c#5,f5] [c#3,c#4] [c#3,c#4,c#5,f5,g#5], ~ [b4,d#5,f#5]", // B C# B
  AH: "[~@45 e4@3 ~@24 e5@13 ~ [d3,d4] [b4,e5,g5]@3 [a4,d5,f5]@3 [b4,e5,g5]@3, [d3,c#4,d5,f#5] e5@2 ~, a4@20 a5@48 c#6@17 ~@11, ~@14 a6@24 c#5@4 a4@6 [d3,e4,a4,c#5]@37 ~@11, ~@18 c#6@45 e6@23 ~@10]/4", // D Em Dm Em Dmaj7 A
  AI: "[[d3,c#4,e4,a4,c#5]@16 ~@2 [e4,a4,c#5]@3 [f#4,b4,d5]@3 ~@19 e5@5, ~@17 [d3,c#4]@31, ~ [e4,a4,c#5], ~@19 c#6@5, ~@41 a5@7]/2", // A Bm Dmaj7 A
  AJ: "[~@24 b4@14 [g2,g3] [b4,e5,g5]@3 [a4,d5,f5]@3 [b4,e5,g5]@3, [a2,a3,g4,d5]@17 g5@22 ~@9, b4@14 d6@7 f#5@17 ~@10, f#5@11 b5@27 ~@10, ~@4 f#6@15 ~@5]/2", // G Em Dm Em Dsus4
  AK: "[~@23 a#5@18 ~ [f4,a#4,d5]@3 ~ a#3@2 ~@12 f5@12, [d#3,d4,f4,a#4,d5]@41 [d#3,d4]@31, ~@7 f6@14 ~@15, ~@17 d6@25 ~@30, ~@20 f5@22 ~@3 [g4,c5,d#5]@3 [f4,a#4,d5]@24]/3", // A# D#maj7 Cm A#
  AL: "[d#4,g4,a#4] [c4,g4,a#4,c5] [g#3,g#4,c5,d#5] [f3,c5,d#5,f5,g#5]", // D# C7 G# Fm7
  AM: "[[c#5,f5,g#5]@12 ~@6 g#5@5 ~ d#5 ~@11 [g#4,c5,d#5]@10 ~ [a#3,a#4], a#3@47 ~, [a#2,g#4]@23 ~ a#2@23 ~, ~@12 [c5,d#5]@12 [g#4,c#5,f5]@9 ~@3 f5 ~@9 f4@2, ~@29 g#5@19]/2", // C# G# A# A#7 Cm C#
  AN: "[d#3,d4,f4,a#4,d5]@17 ~@4 [g4,c5,d#5]@3, a#3 ~@16 [d#3,a#3,d4]@7, ~@3 [f4,a#4,d5]", // A# Cm D#maj7 A#
  AO: "[a#3,a#4,d5]@14 [d#3,a#3,d4] [c5,f5,g#5]@3 [a#4,d#5,f#5]@2 ~ [c5,f5,g#5]@3, [d#3,d4,f4] ~@23", // A# D#maj7 Fm D#m Fm Dm
  AP: "[d#3,d4,f4,a#4,d5]/2", // A#
})).s("gm_epiano2").gain(0.42).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~ [x ~@10 x!2 ~@11]!31 x [x ~@10 x!2 ~@11]!27 x [x ~@10 x!2 ~@11]!32 ~@3>").gain(0.54)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@3 B A@7 B A@7 B A@3 B A@3 B A@3 ~ A@3 B A@3 B A@7 B A@7 B A@3 ~ A@7 B A@3 B A@3 B A@7 B A@7 B ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.54)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 B ~@3 A ~@7 B ~@7 B ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 B ~@3
>`.pickRestart({
  A: "~@7 x", B: "~@23 x",
})).gain(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@3 B A@7 B A@7 B A@3 B A@3 B A@3 C A@3 ~ A@3 ~ D@7 ~ D@7 ~ A@3 C A@7 B A@3 B A@3 B A@7 B A@7 ~@4
// … 36 more lines

More by Al Jarreau