Strudelify

Happy Birthday

Stevie Wonder

KeyF minorTempo116 bpm
0:00/0:00
// Happy Birthday — Wonder Stevie
// 116 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 3 "Wurlitz" named as a piano, played on epiano1 (its music box patch is not one)
// note: duplicate parts dropped: ch 6 "Spitorgan" rock organ (copy of ch 5 "Organ" rock organ)
// note: Full arrangement: all 180 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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.

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@8 A B C D E F G H A B C D E F G H A B C D E F G H I J K L M N O P Q R S T A B C D E F G H A B C D E F G H I J K L M
  N O P Q R S T U V W X Y@2 Z AA AB AC A B C D E F G H A B C D E F G H I J K AD AE AF AG AH AI AJ AK AL AE AF AG AH AI
  AJ AK AL AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AM AN AO AP AQ AR AS AT AM AN AO AP AQ AR AS AT AM AN AO AP
  AQ AR AS AT AM AN AO AP AQ AR AS AT AM AN AO AP AQ AR AS AT ~@6
>`.pickRestart({
  A: "c2@4 c3 ~@3 d3@3 c3 ~ g2 ~ f2", B: "c2@3 ~ c3 ~@4 d3 ~ c3 ~ c2 ~ g2", C: "bb1@4 bb2 ~@3 c3@3 bb2 ~ f2 ~ g2",
  D: "bb1@3 ~ bb2@2 ~@2 c3@3 bb2 ~ bb1 f2@2", E: "a1@4 a2 ~@3 b2@3 a2@2 g2 ~ e2, ~@8 a2 ~@7",
  F: "a1@4 a2 ~@3 g2@3 a2@2 a1 b2@2", G: "g1@4 g2@2 ~@2 g2@3 a2@2 g1 g2@2", H: "f1@4 f2@2 ~@2 f2@2 ~ g1@2 g2 ~@2",
  I: "f2@2 d2@2 c2@2 d2@2 f2@3 f2@3 ~ f2", J: "g2@2 e2@2 d2@2 e2@2 g2@3 g2@3 ~ g2",
  K: "f2@2 d2@2 c2@2 d2@2 f2@3 f2@4 e2", L: "g2@4 g2@4 g2@3 d2 g1@3 ~",
  M: "c2@4 c3@2 ~@2 a2@3 g2 ~@2 d2 e2, ~@8 g2 ~@7", N: "c2@3 ~ c3@2 ~@3 a2@2 g2 ~@2 a2 g2, ~@4 g2 ~@3",
  O: "c2@3 ~ c3@3 ~ g2 a2@2 g2 ~@2 d2 e2", P: "c2@4 c3 ~@3 e3@2 ~ c3 ~@2 g2 a2, ~@8 eb3 ~@7",
  Q: "c2@4 c3@2 ~@2 a2@3 g2 ~ g1@2 a1, ~@8 g2 ~@7", R: "c2@3 ~ c3@2 ~@2 a2@3 g2 ~@2 a2@2, ~@8 g2 ~@7",
  S: "c2@4 c3@2 ~@2 a2@3 ~@2 g2 e2@2, ~@8 g2 ~@7", T: "c2@4 c3 ~@3 g2 a2 ~ c2@2 d2 e2 ~",
  U: "d2@5 ~ d3 ~ c3@3 a2 ~ a1@3", V: "d2@5 ~ d2 d2@8 ~", W: "a1@3 ~@3 a1 ~ c2 d2 ~ a1 ~@4",
  X: "g2 a2@2 g2@3 e2@3 d2@3 c2@3 ~", Y: "[d2@2 ~@6 d2@4 ~ c3 d3 d2@6 ~@3 d2@6 c2 ~]/2", Z: "ab1@4 ab2@6 ab1@3 ~ ab1 ~",
  AA: "~@2 bb2@3 bb1@2 bb2, bb1@3 ~@5", AB: "c2@3 ~ c2@3 ~ c2 ~ c2 c2@2 c2@2 ~", AC: "c2 ~",
  AD: "g2@4 g2@4 g2@3 eb2 ab1@3 ~", AE: "db2@4 db3@2 ~@2 bb2@3 ab2 ~@2 eb2 f2, ~@8 ab2 ~@7",
  AF: "db2@3 ~ db3@2 ~@3 bb2@2 ab2 ~@2 bb2 ab2, ~@4 ab2 ~@3", AG: "db2@3 ~ db3@3 ~ ab2 bb2@2 ab2 ~@2 eb2 f2",
  AH: "db2@4 db3 ~@3 f3@2 ~ db3 ~@2 ab2 bb2, ~@8 e3 ~@7", AI: "db2@4 db3@2 ~@2 bb2@3 ab2 ~ ab1@2 bb1, ~@8 ab2 ~@7",
  AJ: "db2@3 ~ db3@2 ~@2 bb2@3 ab2 ~@2 bb2@2, ~@8 ab2 ~@7", AK: "db2@4 db3@2 ~@2 bb2@3 ~@2 ab2 f2@2, ~@8 ab2 ~@7",
  AL: "db2@4 db3 ~@3 ab2 bb2 ~ db2@2 eb2 f2 ~", AM: "db2@4 db3 ~@3 eb3@3 db3 ~ ab2 ~ gb2",
  AN: "db2@3 ~ db3 ~@4 eb3 ~ db3 ~ db2 ~ ab2", AO: "b1@4 b2 ~@3 db3@3 b2 ~ gb2 ~ ab2",
  AP: "b1@3 ~ b2@2 ~@2 db3@3 b2 ~ b1 gb2@2", AQ: "bb1@4 bb2 ~@3 c3@3 bb2@2 ab2 ~ f2, ~@8 bb2 ~@7",
  AR: "bb1@4 bb2 ~@3 ab2@3 bb2@2 bb1 c3@2", AS: "ab1@4 ab2@2 ~@2 ab2@3 bb2@2 ab1 ab2@2",
  AT: "gb2@4 gb3@3 gb2 eb3 [eb3,e3] db3 eb3 db3 bb2 ab2 f2", // Emaj7
})).s("gm_acoustic_bass").gain(0.46)

// chords · epiano1 · "Wurlitz"
const epiano1 = note(`<
  A B C D E F G H 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 U V W X I J K L M N O P I J K L M N O
  P Q R S T U V W X U V W X ~@9 Y I J K L M N O P I J K L M N O P Q R S T Z AA AB AC Z AA AB AC Z AA AB AC Z AA AB AC Z
  AA AB AC Z AA AB AC AD AE AF AG AH AI AJ AK AD AE AF AG AH AI AJ AK AD AE AF AG AH AI AJ AK AD AE AF AG AH AI AJ AK AD
  AE AF AG AH AI AJ AK AD AE AF AG AH AI AJ AK ~@6
>`.pickRestart({
  A: "c3@2 c4 c3 c4@2 c3 ~ c3@2 c4 c3 c4@2 c3 ~", B: "c3@2 c4 c3 c4@2 c3 ~ c3@2 c4 c3 c4@2 c3@2",
  C: "bb2@2 bb3 bb2 bb3@2 bb2 ~ bb2@2 bb3 bb2 bb3@2 bb2 ~", D: "bb2@2 bb3 bb2 bb3@2 bb2 ~ bb2@2 bb3 bb2 bb3@2 bb2@2",
  E: "a2@2 a3 a2 a2@2 a3@2 a2@2 a3 a2 a3@2 a2 ~", F: "a2@2 a3 a2 a3@2 a2 ~ a2@2 a3 a2 a3@2 a2@2",
  G: "g2@2 g3 g2 g3@2 g2 ~ g2@2 g3 g2 g3@2 g2 ~", H: "g2@2 g3 g2 g3@2 g2 ~ g2@2 g3 g2 g3@2 g2@2",
  I: "[g4,c5,e5]@2 ~ c5@2 ~ [c5,e5]@3 ~ c5@2 ~ [c5,e5] ~@2, ~@3 g4 ~@12", // C
  J: "[g4,c5,f5]@3 [g4,c5,e5] ~@2 [g4,c5,e5]@9 ~", K: "[f4,bb4,d5]@2 ~ [f4,d5] ~@2 [f4,bb4,d5]@3 ~ f4@2 ~ d5 ~@2",
  L: "[f4,bb4,eb5]@3 [f4,bb4,d5]@2 ~ [f4,bb4,d5]@9 ~", // Ebsus2 Bb
  M: "[e4,a4,c5]@3 [e4,a4,c5] ~@2 [e4,a4,c5]@3 ~ [e4,a4,c5]@2 ~ [e4,a4,c5] ~@2", // Am
  N: "[e4,a4,d5]@3 [e4,a4] ~@2 [e4,a4,c5]@9 ~, ~@3 c5@2 ~@11", O: "[d4,g4,b4]@2 ~ [d4,g4,b4] ~@2 [d4,g4,b4]@10",
  P: "[f4,a4,c5]@2 ~ [f4,a4,c5] ~@2 [a4,c5]@2 [a4,c5]@7 ~, ~@6 f4 ~ f4@3 ~@5", Q: "[f3,a3,c4]@5 ~ [f3,a3,c4,f4]@9 ~",
  R: "[g3,b3,d4]@5 ~ [g3,b3,d4,g4]@9 ~", S: "[a3,c4,f4]@5 ~ [a3,c4,f4,a4]@7 ~@3",
  T: "[c4,d4,g4,c5]@3 [c4,d4,g4,c5] ~@3 [b3,g4]@8 ~, ~@3 [d4,b4]@4 ~", U: "[g3,c4,e4]@3 [a3,c4,f4]",
  V: "[g3,c4,e4]@15 ~", W: "[g3,c4,e4]@12 [g3,c4,e4]@3 ~", X: "[a3,c4,f4]@3 [g3,c4,e4]@5",
  Y: "~@12 [b4,c5,d5,e5,f5,g5] [a3,b3,c4,d4,e4,f4,g4,a4] [b2,c3,d3,e3,f3,g3] a2", Z: "[ab3,db4,f4]@3 [bb3,db4,gb4]",
  AA: "[ab3,db4,f4]@15 ~", AB: "[ab3,db4,f4]@12 [ab3,db4,f4]@3 ~", AC: "[bb3,db4,gb4]@3 [ab3,db4,f4]@5",
  AD: "[ab4,db5,f5]@2 ~ db5@2 ~ [db5,f5]@3 ~ db5@2 ~ [db5,f5] ~@2, ~@3 ab4 ~@12", // Db
  AE: "[ab4,db5,gb5]@3 [ab4,db5,f5] ~@2 [ab4,db5,f5]@9 ~", // Dbsus4 Db
  AF: "[gb4,b4,eb5]@2 ~ [gb4,eb5] ~@2 [gb4,b4,eb5]@3 ~ gb4@2 ~ eb5 ~@2", // B Ebm B
  AG: "[gb4,b4,e5]@3 [gb4,b4,eb5]@2 ~ [gb4,b4,eb5]@9 ~", // Esus2 B
  AH: "[f4,bb4,db5]@3 [f4,bb4,db5] ~@2 [f4,bb4,db5]@3 ~ [f4,bb4,db5]@2 ~ [f4,bb4,db5] ~@2", // Bbm
  AI: "[f4,bb4,eb5]@3 [f4,bb4] ~@2 [f4,bb4,db5]@9 ~, ~@3 db5@2 ~@11", // Ebsus2 Bb5 Bbm
  AJ: "[eb4,ab4,c5]@2 ~ [eb4,ab4,c5] ~@2 [eb4,ab4,c5]@10", // Ab
  AK: "[gb4,bb4,db5]@2 ~ [gb4,bb4,db5] ~@2 [bb4,db5]@2 [bb4,db5]@7 ~, ~@6 gb4 ~ gb4@3 ~@5", // Gb Bbm
})).s("gm_epiano1").gain(0.1).pan(1)

// chords · epiano1 · "Wurlitz" · soft notes
const epiano1_soft = note(`<
  ~@8 A ~ B ~@4 C A ~ B ~@4 C A ~ B ~@4 C ~@12 A ~ B ~@4 C A ~ B ~@4 C ~@22 A ~ B ~@4 C A ~ B ~@4 C ~@28 D ~ E ~@4 F D ~
  E ~@4 F D ~ E ~@4 F D ~ E ~@4 F D ~ E ~@4 F D ~ E ~@4 F ~@6
>`.pickRestart({
  A: "~@3 e5@2 ~ g4@3 ~ [g4,e5] ~@2 g4 ~@2", B: "~@3 bb4 ~@6 [bb4,d5]@2 ~ [f4,bb4] ~@2", C: "~@3 f4",
  D: "~@3 f5@2 ~ ab4@3 ~ [ab4,f5] ~@2 ab4 ~@2", E: "~@3 b4 ~@6 [b4,eb5]@2 ~ [gb4,b4] ~@2", F: "~@3 gb4",
})).s("gm_epiano1").gain(0.05).pan(1)

// chords · blown bottle · "Effecte"
const blown_bottle = note(`<
  A B C D E F G H 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 U V W X I J K L M N O P I J K L M N O
  P Q R S T U V W X U V W X ~@9 Y I J K L M N O P I J K L M N O P Q R S T Z AA AB AC Z AA AB AC Z AA AB AC Z AA AB AC Z
  AA AB AC Z AA AB AC AD AE AF AG AH AI AJ AK AD AE AF AG AH AI AJ AK AD AE AF AG AH AI AJ AK AD AE AF AG AH AI AJ AK AD
  AE AF AG AH AI AJ AK AD AE AF AG AH AI AJ AK ~@6
>`.pickRestart({
  A: "c4@2 c5 c4 c5@2 c4 ~ c4@2 c5 c4 c5@2 c4 ~", B: "c4@2 c5 c4 c5@2 c4 ~ c4@2 c5 c4 c5@2 c4@2",
  C: "bb3@2 bb4 bb3 bb4@2 bb3 ~ bb3@2 bb4 bb3 bb4@2 bb3 ~", D: "bb3@2 bb4 bb3 bb4@2 bb3 ~ bb3@2 bb4 bb3 bb4@2 bb3@2",
  E: "a3@2 a4 a3 a3@2 a4@2 a3@2 a4 a3 a4@2 a3 ~", F: "a3@2 a4 a3 a4@2 a3 ~ a3@2 a4 a3 a4@2 a3@2",
  G: "g3@2 g4 g3 g4@2 g3 ~ g3@2 g4 g3 g4@2 g3 ~", H: "g3@2 g4 g3 g4@2 g3 ~ g3@2 g4 g3 g4@2 g3@2",
  I: "[g5,c6,e6]@2 ~ c6@2 ~ [c6,e6]@3 ~ c6@2 ~ [c6,e6] ~@2, ~@3 g5 ~@12", // C
  J: "[g5,c6,f6]@3 [g5,c6,e6] ~@2 [g5,c6,e6]@9 ~", // Csus4 C
  K: "[f5,bb5,d6]@2 ~ [f5,bb5,d6] ~@2 [f5,bb5,d6]@3 ~ f5@2 ~ [bb5,d6] ~@2", // Bb
  L: "[f5,bb5,eb6]@3 [f5,bb5,d6]@2 ~ [f5,bb5,d6]@9 ~", // Ebsus2 Bb
  M: "[e5,a5,c6]@3 [e5,a5,c6] ~@2 [e5,a5,c6]@3 ~ [e5,a5,c6]@2 ~ [e5,a5,c6] ~@2", // Am
  N: "[e5,a5,d6]@3 [e5,a5] ~@2 [e5,a5,c6]@9 ~, ~@3 c6@2 ~@11", O: "[d5,g5,b5]@2 ~ [d5,g5,b5] ~@2 [d5,g5,b5]@10",
  P: "[f5,a5,c6]@2 ~ [f5,a5,c6] ~@2 [a5,c6]@2 [a5,c6]@7 ~, ~@6 f5 ~ f5@3 ~@5", Q: "[f4,a4,c5]@5 ~ [f4,a4,c5,f5]@9 ~",
  R: "[g4,b4,d5]@5 ~ [g4,b4,d5,g5]@9 ~", S: "[a4,c5,f5]@5 ~ [a4,c5,f5,a5]@7 ~@3",
  T: "[c5,d5,g5,c6]@3 [c5,d5,g5,c6] ~@3 [b4,g5]@8 ~, ~@3 [d5,b5]@4 ~", U: "[g4,c5,e5]@3 [a4,c5,f5]",
  V: "[g4,c5,e5]@15 ~", W: "[g4,c5,e5]@12 [g4,c5,e5]@3 ~", X: "[a4,c5,f5]@3 [g4,c5,e5]@5",
  Y: "~@12 [b5,c6,d6,e6,f6,g6] [a4,b4,c5,d5,e5,f5,g5,a5] [b3,c4,d4,e4,f4,g4] a3", Z: "[ab4,db5,f5]@3 [bb4,db5,gb5]",
  AA: "[ab4,db5,f5]@15 ~", AB: "[ab4,db5,f5]@12 [ab4,db5,f5]@3 ~", AC: "[bb4,db5,gb5]@3 [ab4,db5,f5]@5",
  AD: "[ab5,db6,f6]@2 ~ db6@2 ~ [db6,f6]@3 ~ db6@2 ~ [db6,f6] ~@2, ~@3 ab5 ~@12", // Db
  AE: "[ab5,db6,gb6]@3 [ab5,db6,f6] ~@2 [ab5,db6,f6]@9 ~", // Dbsus4 Db
  AF: "[gb5,b5,eb6]@2 ~ [gb5,b5,eb6] ~@2 [gb5,b5,eb6]@3 ~ gb5@2 ~ [b5,eb6] ~@2", // B
  AG: "[gb5,b5,e6]@3 [gb5,b5,eb6]@2 ~ [gb5,b5,eb6]@9 ~", // Esus2 B
  AH: "[f5,bb5,db6]@3 [f5,bb5,db6] ~@2 [f5,bb5,db6]@3 ~ [f5,bb5,db6]@2 ~ [f5,bb5,db6] ~@2", // Bbm
  AI: "[f5,bb5,eb6]@3 [f5,bb5] ~@2 [f5,bb5,db6]@9 ~, ~@3 db6@2 ~@11", // Ebsus2 Bb5 Bbm
  AJ: "[eb5,ab5,c6]@2 ~ [eb5,ab5,c6] ~@2 [eb5,ab5,c6]@10", // Ab
  AK: "[gb5,bb5,db6]@2 ~ [gb5,bb5,db6] ~@2 [bb5,db6]@2 [bb5,db6]@7 ~, ~@6 gb5 ~ gb5@3 ~@5", // Gb Bbm
})).s("gm_blown_bottle").gain(0.15).pan(1)

// chords · blown bottle · "Effecte" · soft notes
const blown_bottle_soft = note(`<
  ~@8 A ~ B ~@4 C A ~ B ~@4 C A ~ B ~@4 C ~@12 A ~ B ~@4 C A ~ B ~@4 C ~@22 A ~ B ~@4 C A ~ B ~@4 C ~@28 D ~ E ~@4 F D ~
  E ~@4 F D ~ E ~@4 F D ~ E ~@4 F D ~ E ~@4 F D ~ E ~@4 F ~@6
>`.pickRestart({
  A: "~@3 e6@2 ~ g5@3 ~ [g5,e6] ~@2 g5 ~@2", B: "~@10 [bb5,d6]@2 ~ f5 ~@2", C: "~@3 f5",
  D: "~@3 f6@2 ~ ab5@3 ~ [ab5,f6] ~@2 ab5 ~@2", E: "~@10 [b5,eb6]@2 ~ gb5 ~@2", F: "~@3 gb5",
})).s("gm_blown_bottle").gain(0.05).pan(1)

// chords · rock organ · "Organ"
const rock_organ = note(`<
  A@2 B@2 C@2 D E F G H I J K L M A@2 B@2 N@2 O P A@2 B@2 N@2 O P Q R S T U V U W X Y Z V A@2 B@2 N@2 O P A@2 B@2 N@2 O
  P Q R S T U V U W X Y Z V AA AB AC AD@2 AE AF AG AH AI A@2 B@2 N@2 O P A@2 B@2 N@2 O P Q R S AJ AK AL AK AM AN AO AP
  AL AK AL AK AM AN AO AP AL AK AL AK AM AN AO AP AL AQ@2 AR@2 AS@2 AT AU AQ@2 AR@2 AS@2 AT AU AQ@2 AR@2 AS@2 AT AU AQ@2
  AR@2 AS@2 AT AU AQ@2 AR@2 AS@2 AT AU AQ@2 AR@2 AS@2 AT AV@7
>`.pickRestart({
  A: "[g4,c5,e5] ~ [g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~ [g4,c5,e5]!3 ~ [g4,c5,e5]!2", // C
  B: "[f4,bb4,d5] ~ [f4,bb4,d5]!3 ~ [f4,bb4,d5]!3 ~ [f4,bb4,d5]!3 ~ [f4,bb4,d5]!2", // Bb
  C: "[e4,a4,c5] ~ [e4,a4,c5]!3 ~ [e4,a4,c5]!3 ~ [e4,a4,c5]!3 ~ [a4,c5] [e4,a4,c5]", // Am
  D: "[d4,g4,b4] ~ [d4,g4,b4]!3 ~ [d4,g4,b4]!3 ~ [d4,g4,b4]!3 ~ [d4,g4,b4]!2", // G
  E: "[f4,a4,c5] ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!2", // F
  F: "[g4,c5,e5] [c6,e6] [g4,c5,e5]!3 e6 [g4,c5,e5,c6] [g4,c5,e5]!2 ~ [g4,c5,e5,c6,e6] [g4,c5,e5]!2 ~ [g4,c5,e5,c6,e6]!2", // C
  G: "[g4,c5,e5] ~ [g4,c5,e5,c6,e6] [g4,c5,e5]!2 ~ [g4,c5,e5,c6,e6] [g4,c5,e5]!2 ~ [g4,c5,e5,c6,e6] [g4,c5,e5]!2 ~ [g4,c5,e5,c6,e6] [g4,c5,e5]", // C
  H: "[f4,bb4,d5] ~ [f4,bb4,d5,bb5,d6] [f4,bb4,d5]!2 ~ [f4,bb4,d5,bb5,d6] [f4,bb4,d5]!2 ~ [f4,bb4,d5,bb5,d6] [f4,bb4,d5]!2 ~ [f4,bb4,d5,bb5,d6]!2", // Bb
  I: "[f4,bb4,d5] ~ [f4,bb4,d5,bb5,d6] [f4,bb4,d5]!2 ~ [f4,bb4,d5,bb5,d6] [f4,bb4,d5]!2 ~ [f4,bb4,d5,bb5,d6] [f4,bb4,d5]!2 ~ [f4,bb4,d5,bb5,d6] [f4,bb4,d5]", // Bb
  J: "[e4,a4,c5] ~ [e4,a4,c5,a5,c6] [e4,a4,c5]!2 ~ [e4,a4,c5,a5,c6] [e4,a4,c5]!2 ~ [e4,a4,c5,a5,c6]!2 [e4,a4,c5] ~ [e4,a4,c5,a5,c6] [e4,a4,c5]", // Am
  K: "[e4,a4,c5] ~ [e4,a4,c5,a5,c6] [e4,a4,c5]!2 ~ [e4,a4,c5,a5,c6] [e4,a4,c5]!2 ~ [e4,a4,c5,a5,c6] [e4,a4,c5]!2 ~ [e4,a4,c5,a5,c6] [e4,a4,c5]", // Am
  L: "[d4,g4,b4] ~ [g4,b4,g5,b5] [d4,g4,b4,g5,b5] [d4,g4,b4] ~ [d4,g4,b4,g5,b5] [d4,g4,b4]!2 ~ [d4,g4,b4,g5,b5] [d4,g4,b4]!2 ~ [g4,b4,g5,b5] [d4,g4,b4]", // G
  M: "[f4,a4,c5] ~ [f4,a4,c5,g5,c6] [f4,a4,c5] [f4,a4] ~ [f4,a4,c5,g5,c6] [f4,a4,c5]!2 ~ [f4,a4,c5,g5,c6] [f4,a4,c5]!2 ~ [f4,a4,c5,g5,c6] [f4,a4,c5]", // F
  N: "[e4,a4,c5] ~ [e4,a4,c5]!3 ~ [e4,a4,c5]!3 ~ [e4,a4,c5]!3 ~ [e4,a4,c5]!2", // Am
  O: "[d4,g4,b4] ~ [g4,b4] [d4,g4,b4]!2 ~ [d4,g4,b4]!3 ~ [d4,g4,b4]!3 ~ [g4,b4] [d4,g4,b4]", // G
  P: "[f4,a4,c5] ~ [f4,a4,c5]!2 [f4,a4] ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!3 ~ [f4,a4,c5]!2", // F
  Q: "[f4,a4,c5]!2 ~ [f4,a4,c5]!3 ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5]!3 ~@2", // F
  R: "[g4,b4,d5]!2 ~ [g4,b4,d5]!3 ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5]!3 ~@2", // G
  S: "[a4,c5,f5]!2 ~ [a4,c5,f5]!3 ~ [a4,c5,f5] ~ [a4,bb4,c5,f5] ~ [a4,c5,f5]!3 ~@2", // F
  T: "[c5,d5,g5]!2 ~ [c5,d5,g5]!3 ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5]!3 ~@2", // Csus2 G
  U: "[g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2", // C
  V: "[g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,f5]!4", // C Csus4
  W: "[g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,f5]!2 [g4,c5,e5]!2", // C Csus4 C
  X: "[g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!4 [g4,c5,f5] [g4,c5,e5]", // C Csus4 C
  Y: "[g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!4 [g4,c5,f5]!2", // C Csus4
  Z: "[g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5]!2 [g4,c5,e5]@2 [g4,c5,e5] [g4,a4,c5,e5] [g4,c5,e5]@2 [g4,c5,e5]!2", // C Am7 C
  AA: "[a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] a4 [a4,d5,f5] a4", // Dm
  AB: "[a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] ~ [a4,d5,f5] a4", // Dm
  AC: "[a4,c5,e5] ~ [a4,c5,e5] a4 [a4,c5,e5] ~ [a4,c5,e5] a4 ~ [a4,c5,e5] ~ a4 [a4,c5,e5] ~ [a4,c5,e5] a4", // Am
  AD: "[[a4,c5,e5] ~ [a4,c5,e5] a4 [a4,c5,e5] ~ [a4,c5,e5] a4 [a4,c5,e5] a4 [a4,c5,e5] a4 [a4,c5,e5] a4 [a4,c5,e5] ~ [d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] a4 [a4,d5,f5] a4 [a4,d5,f5] a4 [a4,d5,f5] ~, ~@15 a4@2 ~@15]/2", // Am Dm
  AE: "[a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] ~ [a4,d5,f5] a4 [a4,d5,f5] a4 [a4,d5,f5] a4 [a4,d5,f5] a4 [a4,d5,f5] ~", // Dm
  AF: "[ab4,b4,c5] ~ [ab4,c5,eb5] ab4 [ab4,c5,eb5] ~ [ab4,c5,eb5] ab4 [ab4,c5,eb5] ~ [ab4,c5,eb5] ab4 [ab4,c5,eb5] ~ [ab4,c5,eb5] bb4, eb5 ~@7", // Ab
  AG: "[f4,bb4,d5] ~ [f4,bb4,d5] bb4 [f4,bb4,d5] ~ [f4,bb4,d5] bb4 [bb4,d5,f5] ~ [bb4,d5,f5] bb4 [bb4,d5,f5] ~ [bb4,d5,f5] bb4", // Bb
  AH: "[g4,c5,e5,g5] ~ [g4,c5,e5,g5] c5 [g4,c5,e5,g5] ~ [g4,c5,e5,g5] c5 [g4,c5,e5,g5] c5 [g4,c5,e5,g5] c5 [g4,c5,e5,g5] c5 [g4,c5,e5,g5] c5", // C
  AI: "[g4,c5,e5,g5] ~ [g4,c5,e5,g5] c5 [g4,c5,e5,g5] ~ [g4,c5,e5,g5] c5 [g4,c5,e5,g5] ~ [g4,c5,e5,g5] c5 [g4,c5,e5,g5] ~ [g4,c5,e5,g5] ~", // C
  AJ: "[c5,d5,g5]!2 ~ [c5,d5,g5]!3 ~ [b4,d5,g5] ~ [b4,d5,g5] ~ [b4,d5,g5] [c5,eb5,ab5]!2 ~@2", // Csus2 G Ab
  AK: "[ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2", // Db
  AL: "[ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,gb5]!4", // Db Dbsus4
  AM: "[ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,gb5]!2 [ab4,db5,f5]!2", // Db Dbsus4 Db
  AN: "[ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!4 [ab4,db5,gb5] [ab4,db5,f5]", // Db Dbsus4 Db
  AO: "[ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!4 [ab4,db5,gb5]!2", // Db Dbsus4
  AP: "[ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5]!2 [ab4,db5,f5]@2 [ab4,db5,f5] [ab4,bb4,db5,f5] [ab4,db5,f5]@2 [ab4,db5,f5]!2", // Db Bbm7 Db
  AQ: "[ab4,db5,f5] ~ [ab4,db5,f5]!3 ~ [ab4,db5,f5]!3 ~ [ab4,db5,f5]!3 ~ [ab4,db5,f5]!2", // Db
  AR: "[gb4,b4,eb5] ~ [gb4,b4,eb5]!3 ~ [gb4,b4,eb5]!3 ~ [gb4,b4,eb5]!3 ~ [gb4,b4,eb5]!2", // B
  AS: "[f4,bb4,db5] ~ [f4,bb4,db5]!3 ~ [f4,bb4,db5]!3 ~ [f4,bb4,db5]!3 ~ [f4,bb4,db5]!2", // Bbm
  AT: "[eb4,ab4,c5] ~ [ab4,c5] [eb4,ab4,c5]!2 ~ [eb4,ab4,c5]!3 ~ [eb4,ab4,c5]!3 ~ [ab4,c5] [eb4,ab4,c5]", // Ab
  AU: "[gb4,bb4,db5] ~ [gb4,bb4,db5]!2 [gb4,bb4] ~ [gb4,bb4,db5]!3 ~ [gb4,bb4,db5]!3 ~ [gb4,bb4,db5]!2", // Gb
  AV: "[[gb4,bb4,db5] ~ [gb4,bb4,db5]!2 [gb4,bb4] ~ [gb4,bb4,db5]!3 ~ [gb4,bb4,db5]!3 ~ [gb4,bb4,db5] [gb4,bb4]@84 ~@13, ~@15 db5@68 ~@29]/7", // Gb
})).s("gm_rock_organ").gain(0.25).pan(0.1)

// chords · string ensemble 2 · "Strings"
const string_ensemble_2 = note(`<
  ~@72 A@4 B C D E F@2 ~@20 G H I J G H I J G H I J G H I J G H I J G H I J ~@54
>`.pickRestart({
  A: "[~ d6 c6 e6, f5 ~, ~@7 a5@57]/4", B: "f5", C: "~@8 c6@4 d6@3 ~, a5", D: "[ab5,eb6]", E: "[bb5,f6]",
  F: "[[c6,g6]@15 ~]/2", G: "[ab4,db5,f5]@3 [bb4,db5,gb5]", H: "[ab4,db5,f5]@15 ~",
  I: "[ab4,db5,f5]@12 [ab4,db5,f5]@3 ~", J: "[bb4,db5,gb5]@3 [ab4,db5,f5]@5",
})).s("gm_string_ensemble_2").gain(0.31)

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

More by Stevie Wonder