Strudelify
Sir Duke cover art

1976 · Songs In The Key Of Life

Sir Duke

Stevie Wonder

KeyB majorTempo104 bpm
0:00/0:00
// Sir Duke — Wonder Stevie
// 104 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 104 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/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 · "E.PIANO 2"
const epiano2 = note(`<
  ~@8 A@2 B C D@2 E@2 F G F H I J K L M N O P Q R S T U V W X A@2 B C D@2 E@2 F G F H I J K L M N O P I J K L M N O P Q
  R S T U V W X I J K L M N O P I J K L M N O P I J K L M N O P Q R S T U V W X
>`.pickRestart({
  A: "[f#3@22 ~@2 g#3@19 ~@2 g#3@2 ~, b3@15 ~, ~ d#4]/2", B: "g3@13 ~@5 b3 b3@3 ~@2, [b3,d4]@17 ~ d4@6, ~@5 g3@3",
  C: "f#3@7 c#4, c#4@5 ~, b3@2 ~", D: "[b3@7 f#3 ~@5 g#4@2 d#4, d#4@13 ~@3, f#3@3 ~ g#3@4, ~@8 b3@7 ~]/2",
  E: "[b3@15 ~@3 b3@3 ~@12 a#3@3 [f3,a3,c4]@10 ~@2, d4@7 [f#3,c#4]@5 ~@4, g3@12 ~@3 g3@7 ~@26]/2", // F F#5
  F: "[g#3,d4] ~@2 [g#3,d4] ~@2 [g3,c#4] ~@2 [g3,c#4] ~@2 [f#3,c4] ~@2 [f#3,c4] ~@2 [f3,b3] ~@2 [f3,b3] ~@2", // G#dim Gdim F#dim Fdim
  G: "[f#3,c4] ~@2 [f#3,c4] ~@2 [g3,c#4] ~@2 [g#3,d4]!2 ~@13", // F#dim Gdim G#dim
  H: "[f#3,c4] ~@2 [g3,c#4] ~@2 [g#3,d4] ~@2 [a3,d#4] ~ [a3,a#3,e4] ~@12", I: "b3@18 g#3@3 b3@2 ~, [f#3,d#4]@23 ~",
  J: "[f3,g#3]@13 ~@7 c4@3 ~, c4@19 d#4@5, ~@5 [f3,g#3]@3", K: "[e3,g#3,b3]@17 ~@3 c#4@4, ~@19 [d#3,f#3]@4 ~",
  L: "[e3,g#3,b3] ~@2 [e3,g#3,b3] ~@5 [g#3,b3]@3 ~@6 f#4@6, ~@4 e3@2 [f#3,c#4]@5 ~", // E G#m F#5
  M: "b3@15 ~@5 b3@4, d#4, f#3@4 ~ f#3@3", N: "~@7 c4, f3, [g#3,c4]@19 ~ g#3@3 ~, ~@5 d#4@3",
  O: "[e3,g#3,b3]@9 ~ [d#3,f#3,c#4]@2", // E D#m7
  P: "[e3,g#3,b3] ~@2 [e3,g#3,b3] ~@14 a#3@5 ~, ~@8 e3@3 ~ [f#3,c#4]@11 ~, ~@3 b3@3 ~@2", // E F#5
  Q: "~@8 b3 d#4@2 c#4 ~@2 c#4 g#4@2 f#4 ~@2 f#4 f#3@2 g#3",
  R: "b3 ~@2 c#4 ~ d4 d#4 f#4 ~ g#4 b4 ~@3 [c#4,c#5] [d4,d5] ~ [d#4,d#5] ~@6", // C# D D#
  S: "[g#3,g#4]@4 [d#3,d#4] ~@4 [f#3,f#4]@4 ~@2 [c#3,c#4]@5 [d#3,d#4] ~@3", // G# D# F# C# D#
  T: "c#4@2 b3 g#3 ~ f#3 c#4 ~ b3 g#3 ~ b3@2 ~@11",
  U: "[d#3,d#4] ~@2 c#3@2 [b2,b3] [c#3,c#4] ~ [b2,b3] [g#2,g#3] ~ b2 [g#2,g#3] f#2 f#3 [g#2,g#3]@3 ~ f#3 f#4 d#3@2 [f#3,f#4], ~@3 c#4 ~@7 b3@2 ~@8 d#4 ~@2", // D# B C# B G# F#
  V: "[d#3,d#4]@2 [c#3,c#4] [d#3,d#4]@2 [c#3,c#4] [b2,b3] ~ [c#3,c#4] b3@2 [g#2,g#3]@3 ~ [f#2,f#3] ~@8, ~@9 b2 ~@14", // D# C# D# C# B C# G# F#
  W: "f#3@2 g#3 b3@2 c#4 d#4 ~ f#4 g#4 b3 b4 ~@2 [g#3,g#4] [b3,b4]@4 [g#3,g#4] ~@2 f#3 f#4, f#4 ~@23", // G# B G#
  X: "[g#3,g#4]@3 ~ f#4 f#3 ~@2 [d#3,d#4] [f#3,f#4]@3 ~@3 f#3 f#2 [f#2,f#3] ~@6", // G# D# F#
})).s("gm_epiano2").gain(0.27)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@7 A B C D E F G H I J K J L M N O P F Q R S T U V W X Y Z AA B C D E F G H I J K J L M N O P F Q R S F Q R S F Q R S
  T U V W X Y Z AA M N O P F Q R S F Q R S F Q R S F Q R S F Q R S T U V W X Y Z AA
>`.pickRestart({
  A: "~@2 f#3 e3 ~@2 f#3@4 ~@4 f#2 ~@2 e2 d#2@3 c#2 ~@2", B: "b1@4 ~@2 f#2@3 ~@2 f#2 b2@3 ~@2 b2 f#2@3 b1 ~@2",
  C: "g#1@4 ~@2 d#2@3 ~@2 d#2 g#2@3 ~@2 g#2 d#2 ~@2 g#1 ~@2", D: "g2@4 ~@2 d2@3 ~@2 g1 g2 ~@2 g2@3 d2 ~@2 g2 ~@2",
  E: "f#2@4 ~@2 c#2@3 ~@2 e2 f#2 ~@2 e2 ~@2 d#2 ~@2 c#2 ~@2", F: "b1@4 ~@2 f#2@3 ~@2 f#2 b2@3 ~@2 b2 f#2@2 ~ b1 ~@2",
  G: "g#1@3 ~@3 d#2@3 ~@2 d#2 g#2@3 ~@2 g#2 d#2 ~@2 g#1 ~@2", H: "g2@4 ~@2 d2@4 ~ g1 g2@4 ~ g2 d2@2 ~ g2 ~@2",
  I: "f#2@4 ~@2 c#2 ~@2 f#2 ~@2 f2@4 ~@2 c3@2 ~ f2 ~@2",
  J: "e2 ~@2 e2 ~@2 d#2 ~@2 d#2 ~@2 d2 ~@2 d2 ~@2 c#2 ~@2 c#2 ~@2", K: "d2 ~@2 d2 ~@2 d#2 ~@2 d#2 ~ e2@7 ~@6",
  L: "d2 ~@2 d#2 ~@2 e2 ~@2 f2@2 f#2@2 ~@11", M: "b1@3 ~@3 f#2@3 ~@2 f#2 b2@3 ~@2 b2 f#2@2 ~ b1 ~@2",
  N: "f2@4 ~@2 g#2@3 ~@2 g#2 c3@3 ~@2 c3 g#2 ~@2 f2 ~@2", O: "e2@4 ~@2 b2@3 ~@3 e2@3 ~ e2!2 ~ d#2@4 ~",
  P: "c#2 ~@2 c#2 ~@2 c#2 ~ c#2 d#2@2 e2 f#2 ~@2 f#2 ~@2 f#2 ~ f#2 c#2@2 ~",
  Q: "f2@4 ~@2 g#2@4 ~ g#2 c3@3 ~@2 c3 g#2@3 f2 ~@2", R: "e2@3 ~@3 b2@3 ~@3 e2@3 ~@2 e2!2 ~ d#2@4",
  S: "c#2 ~@2 c#2 ~@2 c#2 ~ c#2 d#2 ~ e2 f#2 ~@2 f#2 ~@2 f#2 ~ f#2 c#2 ~@2",
  T: "b1 ~@7 b1 d#2@2 c#2 ~@2 c#2 g#2 ~ f#2 ~@2 f#2 f#1@2 g#1",
  U: "b1 ~@2 c#2 ~ d2 d#2 ~ f#2 g#2 ~ b2 ~@2 c#3 d3@2 d#3 ~@6", V: "g#3@4 d#3 ~@4 f#3@5 ~ c#3@5 ~ d#3 ~@2",
  W: "c#3 ~ b2 g#2@2 f#2 c#3@2 b2 g#2 ~ b2 ~@12",
  X: "d#3 ~@2 c#3 ~ b2 c#3 ~ b2 g#2 ~ b2 g#2 ~ f#2 g#2@4 ~ f#2 d#2@2 f#2",
  Y: "d#2 ~ c#2 d#2@2 c#2 b1 ~ c#2 b1 ~ g#1@3 ~ f#1 ~@7 f#2",
  Z: "f#1 ~ g#1 b1@2 c#2 d#2 ~ f#2 g#2@2 b2@3 g#2 b2@4 ~ g#2 ~@2 f#2",
  AA: "g#2@4 ~ f#2 ~@2 d#2 f#2@3 ~@3 f#1 ~ f#1 ~@6",
})).s("gm_electric_bass_finger").gain(0.27).pan(0.6)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  A B C ~ A B C ~@10 D ~ E ~@2 F G ~@2 F H I@2 J K L M N O ~@9 D ~ E P Q R S P Q R S P Q R S P Q R S I@2 J K L M N O P Q
  R S P Q R S P Q R S P Q R S P Q R S P Q R S I@2 J K L M N T
>`.pickRestart({
  A: "b3@6 d#4@6 f#4@4 ~ b4 ~@6", B: "g#3 ~@2 g#3 ~@2 b3 ~ a#3 b3@2 ~ d#4@2 d4 d#4 ~ g#4@2 ~@5",
  C: "g3 ~@2 g3 ~@2 b3 ~@2 b3 ~@2 d4 ~ c#4 d4 ~@2 g4@4 f#4 ~", D: "~@15 [g#3,d4,f#4,b4] ~ [g#3,d4,f#4,b4] ~@6",
  E: "~@3 [b3,f#4,b4]", F: "~@15 e3 a#3 f#3 [g#3,b3] ~ f#3@3 [g#3,b3,e4,g#4], ~@15 g#3@2 ~@2 [a#3,c#4,d#4]@3 ~@2",
  G: "~@3 [g#3,b3,e4,g#4]@2 [f#3,f#4] g#3@2 [b3,g#4,b4] [g#3,g#4]@2 ~ [f#3,a#3,c#4,f#4] ~@2 [f#3,a#3,c#4,f#4]@2 [e3,e4] [f#3,f#4]@2 [c#3,f#3]@4, ~@6 g#4 ~ e4@2 ~@10 [e3,e4] ~@3", // E F# E G# F# E F# F#5 …
  H: "~@3 [g#3,b3,e4,g#4]@2 [f#3,f#4] g#3@2 [b3,g#4,b4] [g#3,g#4]@2 ~ [f#3,a#3,c#4,f#4] ~@2 [f#3,a#3,c#4,f#4]@2 [e3,e4] [f#3,f#4]@2 [e3,e4] [c#3,f#3]@2 ~, ~@6 g#4 ~ e4@2 ~@14", // E F# E G# F# E F# E …
  I: "[b3 ~@7 d#4@2 c#4 ~@3 c#4 g#4@2 f#4 ~ [g#4,a4,b4] f#3@2 g#3 b3@2 ~ c#4@2 d4 d#4@2 f#4 g#4 ~@2 b4 ~@2 [c#4,c#5] [d4,d5] ~ [d#4,d#5] ~@6, ~@8 b3 ~@11 f#4 ~@27]/2", // G#m C# D D#
  J: "[g#4,g#5]@4 [d#4,d#5] ~@4 [f#4,f#5]@6 [c#4,c#5]@5 ~ [d#4,d#5] ~@2", // G# D# F# C# D#
  K: "c#5 [b3,b4] ~ g#4@2 [f#3,f#4] [c#4,c#5]@2 [b3,b4] g#4@2 [b3,b4] ~@12, c#4@2 g#3@2 ~@5 g#3 ~@14", // B F# C# B
  L: "[d#4,d#5]@2 ~ [c#4,c#5] ~ [b3,b4] [c#4,c#5] ~ [b3,b4] [g#3,g#4] ~ [b3,b4] [g#3,g#4] ~ [f#3,f#4] [g#3,g#4]@4 ~ [f#3,f#4] [d#3,d#4] ~ [f#3,f#4]", // D# C# B C# B G# B G# …
  M: "d#3@2 [c#3,c#4] d#3@2 [c#3,c#4] [b2,b3] c#3 c#4 [b2,b3] ~ [g#2,g#3]@4 [f#2,f#3] ~@7 [f#4,g#4,a4,b4], d#4 ~@2 d#4 ~@20", // C# B G# F# G#m7
  N: "f#3@2 g#3 b3 ~ c#4 ~ f#4 ~ g#4 ~ [b3,b4] ~@2 [g#3,g#4] [b3,b4]@4 ~ [g#3,g#4] ~@2 [f#3,f#4], ~@3 d#4 ~@8", // B G# B G# F#
  O: "[g#3,g#4]@3 ~@2 f#3@2 ~ [d#3,d#4] [f#3,f#4]@2 ~@4 [f#2,f#3,f#4,f#5] ~ [f#2,f#3,f#4,f#5] ~@6, ~@5 f#4 ~@18", // G# D# F#
  P: "~@9 [d#4,f#4,b4] ~@4 [d#4,f#4,b4] ~@3 [d#4,f#4,b4]@6", Q: "~@9 [f4,g#4,c5] ~@4 [f4,g#4,c5] ~@3 [f4,g#4,c5]@6",
  R: "~@9 [e4,g#4,b4] ~@4 [e4,g#4,b4] ~@3 [e4,g#4,b4] ~ [f#4,b4,d#5]@4", // E B
  S: "[g#4,c#5] b4@4 ~ g#4 ~ f#4 g#4@3 [c#4,f#4]@5 ~ [c#4,f#4,g#4]@6, e4@5 ~@19", // C#5 F#5 C#sus4
  T: "[g#3,g#4]@3 ~@2 f#3@2 ~ [d#3,d#4] [f#3,f#4]@2 ~@4 [f#2,f#3,f#4,f#5]@2 [f#2,f#3,f#4,f#5] ~@6, ~@5 f#4 ~@18", // G# D# F#
})).s("gm_brass_section").gain(0.27).pan(0.3)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@8 A B C D A B E F G H G I A J K L A J K L M N O P Q R S T A B C D A B E F G H G I A J K L A J K L A J K L A J K L M
  N O P Q R S T A J K L A J K L A J K L A J K L A J K L A J K L M N O P Q R S T
>`.pickRestart({
  A: "~@3 [b3,d#4,f#4,b4]@2 [b3,f#4,b4] ~@3 [b3,d#4,f#4,b4]@2 [b3,d#4,b4] ~@3 [b3,d#4,f#4,b4]@2 [b3,d#4] ~@3 [b3,d#4,f#4,b4]@2 [b3,b4]", // B B5 B
  B: "~@3 [g#3,b3,d#4,g#4]@2 [b3,d#4,g#4] ~@3 [g#3,b3,d#4,g#4]@2 [b3,d#4,g#4] ~@3 [g#3,b3,d#4,g#4]@2 [b3,g#4] ~@3 [g#3,b3,d#4,g#4]@2 [d#4,g#4]", // G#m E G#m G#5
  C: "~@3 [g3,b3,d4,g4]@2 [a#3,d4,g4] ~@3 [g3,b3,d4,g4]@2 [b3,d4,g4] ~@3 [g3,b3,d4,g4]@2 [b3,g4] ~@3 [g3,b3,d4,g4]@2 [d4,g4]", // G Gm G Em G G5
  D: "~@3 [f#3,a#3,c#4,f#4]@2 [a3,c#4,f#4] ~@3 [f#3,a#3,c#4,f#4]@2 [a#3,c#4,f#4] ~@3 [f#3,a#3,c#4,f#4]@2 [a#3,f#4] ~@3 [f#3,a#3,c#4,f#4]@2 [c#4,f#4]", // F# F#m F# D#m F# F#5
  E: "~@3 [g3,b3,d4,g4]@2 [b3,d4,g4] ~@3 [g3,b3,d4,g4]@2 [b3,d4,g4] ~@3 [g3,b3,d4,g4]@2 [b3,g4] ~@3 [g3,b3,d4,g4]@2 [d4,g4]", // G Em G G5
  F: "~@3 [f#3,a#3,c#4,f#4]@2 [a#3,c#4,f#4] ~@3 [f#3,a#3,c#4,f#4]@2 [a#3,c#4,f#4] ~@3 [f3,a3,c4,f4]@2 [a3,f4] ~@3 [f3,a3,c4,f4]@2 [c4,f4]", // F# F Dm F F5
  G: "[g#3,d4,f#4,b4] ~@2 [g#3,d4,f#4,b4] ~@2 [g3,c#4,f4,a#4] ~@2 [g3,c#4,f4,a#4] ~@2 [f#3,c4,e4,a4] ~@2 [f#3,c4,e4,a4] ~@2 [f3,b3,d#4,g#4] ~@2 [f3,b3,d#4,g#4] ~@2", // G#m7b5 Gm7b5 F#m7b5 Fm7b5
  H: "[f#3,c4,e4,a4] ~@2 [f#3,c4,e4,a4] ~@2 [g3,c#4,f4,a#4] ~@2 [g#3,d4,f#4,b4] ~ [g#3,d4,f#4,b4] ~@12", // F#m7b5 Gm7b5 G#m7b5
  I: "[f#3,c4,e4,a4] ~@2 [g3,c#4,f4,a#4] ~@2 [g#3,d4,f#4,b4] ~@2 [a3,e4,g4,c5] ~ [a#3,e4,g#4,c#5] ~@12", // F#m7b5 Gm7b5 G#m7b5 Am7 A#m7b5
  J: "~@3 [c4,d#4,g#4]@2 [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~ [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~ [d#4,g#4] ~@3 [c4,d#4,g#4] ~ [d#4,g#4]", // G# G#5 G# G#5
  K: "~@3 [b3,d#4,g#4]@2 [b3,d#4,g#4] ~@3 [b3,d#4,g#4] ~ [b3,d#4,g#4] ~@3 [b3,d#4,g#4] ~ [d#4,g#4] ~@5 [c#4,f#4]", // G#m G#5 F#5
  L: "~@3 [b3,e4,g#4]@2 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~ [b3,e4,g#4] ~@3 [a#3,c#4,f#4] ~ [c#4,f#4] ~@3 [a#3,c#4,f#4] ~ [c#4,f#4]", // E F# F#5 F# F#5
  M: "b2 ~@7 b2 d#3@2 c#3 ~@2 c#3 g#3 ~ f#3 ~@2 [f#2,f#3] ~@2 g#2", // F#
  N: "b2 ~@2 c#3 ~ d3 d#3 f#3 g#3 ~@2 b3 ~@2 c#4 d4 ~ d#4 ~@6", O: "g#4@4 d#4 ~@4 f#4@4 ~@2 c#4@4 ~@2 d#4 ~@2",
  P: "c#4 ~ b3 g#3 ~ f#3 c#4 ~ b3 g#3 ~ b3@2 ~@11",
  Q: "d#4 ~@2 c#4@2 b3 c#4 ~ b3 g#3 b3 ~ g#3 ~ f#3 g#3@3 ~@2 f#3 d#3 ~ f#3",
  R: "d#3@2 c#3 d#3 ~ c#3 b2 ~ c#3 b2 g#2@4 ~ f#2 ~@8",
  S: "f#3 f#2 g#2 b2@2 c#3 d#3@2 f#3 g#3 ~ b3@2 ~ g#3 b3@4 g#3 ~@3 f#3",
  T: "g#3@3 ~@2 f#3 ~@2 d#3 f#3@3 ~@3 [f#3,b3] [c#4,f#4] [f#3,b3,c#4,f#4] ~@6", // B5 F#5 F#sus4
})).s("gm_electric_guitar_jazz").gain(0.15).pan(0.2)

// chords · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz_2 = note(`<
  ~@8 A B C D E F G H I J I K L M N O L M N O ~@8 A B C D E F G H P J I K L M N O L M N O L M N O L M N O ~@8 L M N O L
  M N O L M N O L M N O L M N O L M N O ~@8
>`.pickRestart({
  A: "~@5 [f#3,b3] d#4 ~@2 b4 ~@2 f#4 ~@2 d#4 ~@2 b3 ~@2 f#3 ~@2", // B5
  B: "~@5 [d#3,g#3] [b3,d#4] ~@2 g#4 ~@2 d#4 ~@2 b3 ~@2 g#3 ~@2 d#3 ~@2", // G#5 B
  C: "~@5 [g3,d4] [f4,a4] ~@2 d5 ~@2 a4 ~@2 f4 ~@2 d4 ~@2 g3 ~@2", // G5 F
  D: "~@4 f#3 [c#4,e4] g#4 ~@2 c#5 ~@2 g#4 ~@2 e4 ~@2 c#4 ~@2 f#3 ~@2", // C#m
  E: "~@5 [f#3,b3] [d#4,f#4] ~@2 b4 ~@2 f#4 ~@2 d#4 ~@2 b3 ~@2 f#3 ~@2", // B5 D#m
  F: "~@5 [d#3,g#3,b3] d#4 ~@2 g#4 ~@2 d#4 ~@2 b3 ~@2 g#3 ~@2 d#3 ~@2", // G#m
  G: "~@5 [g3,f4] [d4,a4] ~@2 d5 ~@2 a4 ~@2 f4 ~@2 d4 ~@2 g3 ~@2", // G7 D5
  H: "~@5 [a#3,e4] g#4 ~@2 c#5 ~@7 [a3,d#4] g4 ~@2 c5 ~@2", // A#dim Adim
  I: "[f#4,b4] ~@2 [f#4,b4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 [e4,a4] ~@2 [e4,a4] ~@2 [d#4,g#4] ~@2 [d#4,g#4] ~@2", // B5 A#5 A5 G#5
  J: "[e4,a4] ~@2 [e4,a4] ~@2 [f4,a#4] ~@2 [f#4,b4] ~ [f#4,b4] ~@12", // A5 A#5 B5
  K: "[e4,a4] ~@2 [f4,a#4] ~@2 [f#4,b4] ~@2 [g4,c5]@2 [g#4,c#5] ~@12", // A5 A#5 B5 C5 C#5
  L: "~@5 f#3 [b3,d#4] ~@2 b4 ~@2 f#4 ~@2 d#4 ~@2 b3 ~@2 f#3 ~@2", // B
  M: "~@5 f3 [g#3,d#4] ~@2 c5 ~@2 g#4 ~@2 d#4 ~@2 c4 ~@2 g#3 ~@2", // G#5
  N: "~@5 [e3,b3] d#4 ~@2 b4 ~@2 g#4 ~@2 d#4 ~@2 b3 ~ [c#4,f#4]@4", // E5 F#5
  O: "[b3,e4] ~@2 [b3,e4] ~@2 g#3@2 [b3,e4]@3 g#3 f#3@2 ~ [c#4,f#4] ~@5 f#3@2 ~, ~@10 [c#4,f#4] ~", // E5 F#5
  P: "[f#4,b4] ~@2 [f#4,b4] ~@2 [f4,a#4] ~@2 [f4,a#4] ~@2 a4 e4 ~ [e4,a4] ~@2 [d#4,g#4] ~@2 [d#4,g#4] ~@2", // B5 A#5 A5 G#5
})).s("gm_electric_guitar_jazz").gain(0.18).pan(0.9)

// chords · alto sax
const alto_sax = note(`<
  A B C ~ A B C ~@10 D ~ E ~@2 F@2 ~@2 F@2 ~@17 D ~ E G H I J G H I J G H I J G H I J ~@8 G H I J G H I J G H I J G H I
  J G H I J G H I J ~@8
>`.pickRestart({
  A: "b3@6 d#4@5 ~ f#4@5 b4 ~@6", B: "g#3 ~@2 g#3 ~@2 b3@2 a#3 b3 ~@2 d#4@2 d4 d#4@2 g#4 ~@6",
  C: "g3 ~@2 g3 ~@2 b3 ~@2 b3 ~@2 d4@2 c#4 d4 ~@2 g4@4 f#4@2", D: "~@15 [g#3,d4] ~ [g#3,d4] ~@6", E: "~@3 [b3,f#4]",
  F: "[~@15 g#3@2 [f#3,a#3] [g#3,b3] ~ [f#3,a#3]@3 g#3 e4 ~@2 [g#3,b3]@2 f#3 g#3@2 b3 g#3@2 ~ [f#3,a#3] ~@2 [f#3,a#3]@2 e3 f#3@2 e3 [c#3,f#3]@2 ~, ~@15 e3 ~@7 b3@2 ~@7 e4@2 ~@14]/2", // F# G#m F# G#m F# F#5
  G: "~@9 [f#3,b3] ~@4 [f#3,b3] ~@3 [f#3,b3]@5 ~", H: "~@9 [g#3,c4] ~@4 [g#3,c4] ~@3 [g#3,c4]@6",
  I: "~@9 [g#3,b3] ~@4 [g#3,b3] ~@3 [g#3,b3]@2 [g#3,d#4]@4", J: "c#4 ~ b3@3 ~ g#3 ~ f#3 g#3@2 ~ [f#3,c#4]@6 g#3@5 ~",
})).s("gm_alto_sax").gain(0.24).pan(0.9)

// other · woodblock
const woodblock = note(`<
  ~@48 A@2 B C D E F G A@2 B C D E F G ~@8 A@2 B C D E F G A@2 B C D E F G A@2 B C D E F G ~@8
>`.pickRestart({
  A: "a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 ~ d6!2 ~ d6",
  B: "a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 d6 ~@2 d6 a6",
  C: "~@3 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6",
  D: "a6 ~@2 d6 ~ d6 ~@2 d6 a6 ~@2 a6 ~@2 d6 ~@2 a6 ~@2 d6 ~@2",
  E: "a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 ~@2 d6 a6 ~@2",
  F: "a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6",
  G: "a6 ~@2 a6 ~@2 d6 ~ d6 ~@2 d6 a6 ~@2 d6 ~ d6 a6 ~@2 d6 ~ d6",
})).s("gm_woodblock").gain(0.15).pan(0.9)

// other · whistle
const whistle = note("<~@19 [~@3 f6] ~@27 [~@3 f6] ~@56>").s("gm_whistle").gain(0.21)

// drums · kick
const kick = s("bd").struct(`<
  A@3 B A C A ~ A@3 B A@3 D A E A E A@3 E A@6 C F A@3 E A@3 B A@3 D A E A E A@3 E A@7 E A@6 C F A@3 E A@3 E A@7 E A@7 E
  A@6 C F A@3 E
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x!4", C: "x ~ x ~ x ~ x!2", D: "x ~@5 x ~@5 x ~@4 x ~@6", E: "x!3 ~",
  F: "x ~@5 x ~@5 x ~@4 x ~@3 x ~@2",
})).gain(0.24)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B@7 C B D B@4 C E B@3 F ~@7 G B@7 C B D B@4 C E B@3 F B@2 C E B@3 H ~@7 G B@2 C E B@3 F B@2 C E B@3 F B@2 C E
  B@3 F ~@7 G
>`.pickRestart({
  A: "~@14 x ~@2 x!2 ~@2 x ~@2", B: "~ x ~ x", C: "~ x!3", D: "~@6 x ~@8 x ~ x ~@6", E: "x ~ x ~ x!2 ~@2",
  F: "~@6 x ~@8 x ~@4 x!2 ~@2", G: "~@15 x ~ x ~@6", H: "~@3 x ~ x ~@2",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@7 B ~@19 A ~@7 B ~@7 C ~@3 A ~@11 B ~@7 C ~@7 B ~@12>".pickRestart({
  A: "~@7 x", B: "~@21 x ~ x", C: "~@21 x!3",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct(`<
  A@7 ~ B C@2 D E C F G H I J K L@2 ~@3 M N O P Q@6 R B C@2 D E C F G H I J K L@2 ~@3 M N O L@2 ~@3 M N O P Q@6 R L@2
  ~@3 M N O L@2 ~@3 M N O L@2 ~@3 M N O P Q@6 S
>`.pickRestart({
  A: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x", B: "~@2 x!6",
  C: "x ~@2 x ~@2 x ~@2 x ~ x!2 ~@2 x ~@2 x ~@2 x ~@2", D: "x!7 ~", E: "~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x",
  F: "x!8", G: "x ~@2 x ~@2 x ~@2 x ~@7 x ~@3 x ~@2", H: "~ x!4 ~ x!2", I: "x ~@5 x ~@2 x ~ x ~@6 x ~@5",
  J: "x!5 ~ x!2", K: "x ~@2 x ~@2 x ~@2 x ~ x ~@12", L: "x", M: "~@3 x", N: "~ x ~ x", O: "~@4 x ~@2 x",
  P: "x ~@2 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x", Q: "~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x",
  R: "~@3 x ~ x ~@3 x ~ x ~@4 x ~@4 x ~@2", S: "~@3 x ~ x ~@3 x ~ x ~@4 x ~@7",
})).gain(0.21)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A ~@3 B ~@3 C D E F C ~@7 G H I@6 J ~@3 B ~@3 C D E F C ~@7 G ~@7 G H I@6 J ~@7 G ~@7 G ~@7 G H I@6 J
// … 29 more lines

More by Stevie Wonder