Strudelify

Perfect World

Huey Lewis & The News

KeyC majorTempo56 bpm
0:00/0:00
// Perfect World — Huey Lewis & The News
// 56 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 46 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(56/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
const bass = note(`<
  A B C@2 D E F G H I J@2 K L M N D E F G H I J@2 K L M O P@2 Q R S@2 T@2 U V Q W X L Y Z AA@2
>`.pickRestart({
  A: "~@11 c3@2 d3 d2@10 ~@2 f2 ~@3 f2@2", B: "g2 ~@5 d3@2 d2@11 ~@2 g2 g2@2 ~@2 a2 a2@3 c3 ~, ~@5 c3@2 ~@25",
  C: "[d3@2 d2@10 ~ f2@2 ~@3 f2 g2@2 ~@3 c3@2 d3 d2@8 ~@2 g2@5 ~ a2@6 ~@2 d3 ~ d2@2 ~@9, ~@25 c3 ~@6]/2",
  D: "g2 ~@5 a2 ~@4 c3@2 ~ d2@2 ~@10 f2!2 ~ g2@3, ~@5 g2@2 ~@6 d3@2 ~@17",
  E: "~@2 c3 d3!2 a2 d2@3 ~@10 f2@2 ~@3 f2@2 g2 ~@3 c3 ~",
  F: "d3@2 d2@2 ~@9 g2!2 ~ a2@3 ~@2 c3 [c3,d3] d3 a2 ~ d2@3 ~@3", // Csus2
  G: "~@6 f2@2 ~@3 f2@2 g2 ~@4 d3 d3@2 d2 ~@10, ~@9 c3 ~@6", H: "g2 ~ g2 a2@3 ~@2 c3!2 d3 c3 ~ d2@3 ~@10 g2@2 ~@2 g2 ~",
  I: "a2@3 ~@3 d2@6 ~ e2@5 ~ f2@5 ~@2 g2@6",
  J: "[c3 ~ c3@3 c3@8 c3 c3@2 ~@2 c3@6 a2 g2 c3 c3@3 c3@7 ~ [a2,c3] ~ c3@2 ~ c3@4 ~ c3 a2 [e2,g2] c2 ~ c2@3 c2@6 c3 g2]/2", // Am Em
  K: "c2 ~ c2@3 c2@8 d2 f2 ~ d2 ~ f2@3 d2 ~@2 d2@2 f2!2 ~@2 f2 ~",
  L: "g2 ~ g2 ~@2 c3 [d2,d3] ~ f2 ~ d2 f2@3 d2 ~@3 f2@3 f2 ~@2 g2@3 g2 ~@2 c3 d3", // D
  M: "d2 ~ f2 d2 ~ f2@3 d2 ~@2 d2 ~ f2!2 ~@3 f2 g2 ~ g2 ~@2 c3 d3 d2 f2 ~ d2 f2@2",
  N: "~@2 d2 ~@2 g2@5 ~ a2@5 ~@2 c3 d3 ~ d2@2 ~@9", O: "~@2 d2 ~@2 g2@5 ~ a2@5 ~@2 c3!2 ~ c3@3 c3@8",
  P: "[c3 ~ c3@2 ~ c3@6 a2 g2 c3 c3@3 ~ c3@7 a2 c3 c3@2 ~ c3@4 ~ c3 a2 g2 [c2,e2] ~ c2@3 c2@7 [g2,c3] c2 ~ c2@3 c2@8]/2", // C C5
  Q: "d2 ~ f2 d2 ~ f2@3 d2 ~@2 f2@3 f2 ~@3 g2@3 g2 ~@2 c3 d3 d2 f2 ~ d2 f2@2",
  R: "~@2 d2 ~@2 f2@3 f2 ~@2 g2@3 g2 ~@3 [c3,d3] d2 ~ f2 d2 ~ f2@3 d2 ~@2 d2 ~", // Csus2
  S: "[f2 ~ f2 ~@2 f2 g2 ~ g2 ~@2 c3 d3 d2 f2 ~ d2 ~ f2@3 d2 ~@2 g2@5 ~ a2@8 c3 ~ c3@3 c3@8 c3 ~ c3@2 ~ c3@6 a2 g2]/2",
  T: "[c3 ~ c3@3 c3@7 a2 c3 c3@2 ~@2 c3@4 c3 a2 g2 e2 c2 c2@3 c2@7 c3 [c2,g2] ~ c2@3 c2@8 d2 ~ f2 d2 ~ f2@3 d2 ~@2 d2@2]/2", // C5
  U: "f2 ~ f2 ~@2 f2 g2 ~ g2 ~@2 c3 d3 d2 f2 ~ d2 ~ f2@3 d2 ~@2 f2@3 f2 ~@2 g2@2",
  V: "~@2 g2 ~@2 c3 [d2,d3] ~ f2 ~ d2 f2@3 d2 ~@4 f2 ~ f2 ~@2 f2 ~ g2!2 ~@2 c3 d3, ~@9 d2 ~@6", // D
  W: "~@2 d2 ~@3 f2 ~ f2 ~@2 f2 ~ g2!2 ~@3 [c3,d3] d2 ~ f2 d2 ~ f2@3 d2 ~@2 f2@2, ~@5 d2@2 ~@25", // Csus2
  X: "~@2 f2 ~@2 g2@3 g2 ~@2 c3 d3 d2 f2 ~ d2 ~ f2@3 d2 ~@2 d2@2 f2!2 ~@2 f2 ~",
  Y: "d2 ~ f2 d2 ~ f2@3 d2 ~@2 d2@2 f2!2 ~@3 f2 g2 ~ g2 ~@2 c3 d3 d2 f2 ~ d2 f2@2",
  Z: "~@2 d2 ~@2 f2@3 f2 ~@2 g2@3 g2 ~@3 [c3,d3] d2 ~ f2 d2 ~ f2@3 d2 ~@2 d2@2", // Csus2
  AA: "[f2 ~ f2 ~@2 f2 g2 ~ g2 ~@2 c3 d3 d2 f2 ~ d2 ~ f2@3 d2 ~@2 f2@3 f2 ~@2 g2@4 ~ g2!3 ~@26]/2",
})).s("gm_acoustic_bass").gain(0.62)

// chords · percussive organ
const percussive_organ = note(`<
  ~ A ~ B C D E F G H I@2 J K L M C D E F G H I@2 J K L N O@2 L P Q@2 R@2 S T U V W K L X Y@2
>`.pickRestart({
  A: "~@17 [a1,a#1,b1,c2,c#2,d2,e2] [d#2,f2,f#2,g2,g#2,a2,a#2,b2,c3] [c#3,d3,d#3,e3,f3,f#3,g3,g#3,a3,b3,c4] [a#3,c#4,d4,e4] [c4,f4,a4] [c4,f4,a4]@3 ~ [d4,g4,b4] [d4,g4,b4]@5", // A A#dim F G
  B: "~@5 [c4,f4,a4]@6 [d4,g4,b4]@8 ~@13", C: "~@10 [d4,g4,b4]!3 d4 [c4,f4,a4] ~@17, ~@13 [g4,b4]@2 ~@17",
  D: "~@5 [b3,d4,g4]@3 [a3,c4,f4] ~@20 [d4,g4,b4]!3", // G F G
  E: "[g4,b4]@2 [c4,f4,a4] ~@21 [b3,d4,g4]@3 [a3,c4,f4] ~@4, d4 ~@31", // G F G F
  F: "~@16 [d4,g4,b4]!3 [g4,b4]@2 [c4,f4,a4] ~@10, ~@19 d4 ~@12", G: "~@11 [b3,d4,g4]@3 [a3,c4,f4] ~@17",
  H: "~@6 [a3,c4,f4]@6 ~ [b3,d4,g4]@6 [c4,f4,a4]@6 ~ [d4,g4,b4]@6", // F G F G
  I: "[[g3,c4,e4]@5 [a3,c4,f4]@8 [a3,c4,f4]@5 [b3,d4,g4]@8 [g3,c4,e4]@4 [a3,c4,f4]@8 [a3,c4,f4]@5 [b3,d4,g4]@8 [g3,c4,e4]@5 [a3,c4,f4]@8]/2", // C F G C F G C F
  J: "[a3,c4,f4]@5 [b3,d4,g4]@8 ~ [a3,d4,f4] ~@3 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~", // F G Dm F
  K: "~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4]@2", // G Dm F G
  L: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~", // Dm F G Dm
  M: "~@2 [a3,c4,f4] ~@2 [c4,f4,a4]@6 [d4,g4,b4]@8 ~@13", // F G
  N: "~@2 [a3,c4,f4] ~@2 [c4,f4,a4]@6 [d4,g4,b4]@8 [g3,c4,e4]@5 [a3,c4,f4]@8", // F G C F
  O: "[[a3,c4,f4]@5 [b3,d4,g4]@8 [g3,c4,e4]@5 [a3,c4,f4]@8 [a3,c4,f4]@4 [b3,d4,g4]@8 [g3,c4,e4]@5 [a3,c4,f4]@8 [a3,c4,f4]@5 [b3,d4,g4]@8]/2", // F G C F G C F G
  P: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@3 [b3,d4,g4]@3 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~", // F G Dm F
  Q: "[~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [c4,f4,a4]@6 [d4,g4,b4]@8 [g3,c4,e4]@5 [a3,c4,f4]@8 [a3,c4,f4]@5 [b3,d4,g4]@8]/2", // F G Dm F G C F G
  R: "[[g3,c4,e4]@5 [a3,c4,f4]@8 [a3,c4,f4]@5 [b3,d4,g4]@8 [g3,c4,e4]@4 [a3,c4,f4]@8 [a3,c4,f4]@5 [b3,d4,g4]@8 ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~]/2", // C F G C F G Dm F
  S: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~", // F G Dm F
  T: "~@2 [b3,d4,g4] ~@2 [b3,d4,g4]@2 ~ [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~", // G Dm F G
  U: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4]@2 ~ [a3,d4,f4] ~@2 [a3,d4,f4] ~", // Dm F G Dm
  V: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~", // F G Dm F
  W: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4]@2 ~ [a3,d4,f4] ~@3 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~", // F G Dm F
  X: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@3 [b3,d4,g4]!2 ~ [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~", // F G Dm F
  Y: "[~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@2 [a3,c4,f4] ~@2 [c4,f4,a4]@6 [d4,g4,b4]@6 ~@28]/2", // F G Dm F G
})).s("gm_percussive_organ").gain(0.26)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B C D E F G H I J K@2 L M N O E F G H I J K@2 L M N P Q@2 R S T U V@2 W X Y Z AA M R AB AC ~
>`.pickRestart({
  A: "~@14 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~", // F
  B: "~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [c4,f4,a4] [c4,f4,a4]@2 ~@2 [d4,g4,b4] [d4,g4,b4]@4 ~", // G F G
  C: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~", // F G F
  D: "~@2 [a3,c4,f4] ~@8 [d4,g4,b4]@7 ~@3 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~, ~@5 [c4,f4,a4]@9 ~@18", // F G Dm F
  E: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4] ~", // Dm G Dm G
  F: "~@2 [b3,d4,g4] ~@2 [b3,d4,g4]@3 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@3 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~", // G Dm G
  G: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@3 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4]@3 [a3,d4,f4] ~@2 [a3,d4,f4] ~", // Dm G Dm
  H: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~", // Dm G Dm
  I: "~@2 [a3,d4,f4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [b3,d4,g4]@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~", // Dm G Dm
  J: "~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@4 [a3,d4,f4]@4 ~@2 [b3,d4,g4]@3 ~@3 [a3,c4,f4]@4 ~@3 [b3,d4,g4]@3", // G Dm G F G
  K: "[[c3,g3]@5 [c3,a3]@8 [c3,a3]@4 ~ [c3,b3]@8 [c3,g3]@4 [c3,a3]@8 [c3,a3]@4 ~ [c3,b3]@8 [c3,g3]@5 [c3,a3]@8]/2", // C5 F Cmaj7 C5 F Cmaj7 C5 F
  L: "[c3,a3]@4 ~ [c3,b3]@8 ~ [a3,d4,f4]!2 ~@2 [a3,d4,f4] ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~@2 [a3,d4,f4] [d4,f4] ~ [a3,d4,f4] ~", // F Cmaj7 Dm
  M: "~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [d4,f4]!2 ~ [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~", // G Dm G
  N: "~@2 [d4,f4] ~@2 [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~@2 [d4,f4]!2 ~@2 [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~@2 [d4,f4]!2 ~ [a3,d4,f4] ~", // Dm G Dm
  O: "~@2 [a3,d4,f4] ~@18 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~", // Dm
  P: "~@2 [a3,d4,f4] ~@16 [c3,g3]@5 [c3,a3]@8", // Dm C5 F
  Q: "[[c3,a3]@4 ~ [c3,b3]@8 [c3,g3]@4 ~ [c3,a3]@8 [c3,a3]@4 [c3,b3]@8 [c3,g3]@5 [c3,a3]@8 [c3,a3]@4 ~ [c3,b3]@8]/2", // F Cmaj7 C5 F Cmaj7 C5 F Cmaj7
  R: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~@2 [a3,d4,f4] [d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~@2 [d4,f4]!2 ~ [a3,d4,f4] ~", // Dm G Dm
  S: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~@2 [b3,d4,g4] ~@2 [d4,f4]!2 ~ [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~", // Dm G Dm
  T: "~@2 [d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~@2 [d4,f4]!2 ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] [d4,f4] ~@9", // Dm G Dm
  U: "~@6 [c3,g3]@5 [c3,a3]@8 [c3,a3]@4 ~ [c3,b3]@8", // C5 F Cmaj7
  V: "[[c3,g3]@4 ~ [c3,a3]@8 [c3,a3]@4 ~ [c3,b3]@8 [c3,g3]@4 [c3,a3]@8 [c3,a3]@4 ~ [c3,b3]@8 ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~]/2", // C5 F Cmaj7 C5 F Cmaj7 Dm
  W: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~@2 [d4,f4]!2 ~@2 [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~", // Dm G Dm
  X: "~@2 [b3,d4,g4] ~@2 [b3,d4,g4] ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~@2 [a3,d4,f4]!2 ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] [d4,f4] ~ [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~", // G Dm G
  Y: "~@2 [d4,f4] ~@2 [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~", // Dm G Dm
  Z: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] [d4,f4] ~ [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~@2 [b3,d4,g4] ~@2 [d4,f4]!2 ~ [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~", // Dm G Dm
  AA: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~@2 [a3,d4,f4]!2 ~@2 [a3,d4,f4] ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~@2 [a3,d4,f4] [d4,f4] ~ [a3,d4,f4] ~", // Dm G Dm
  AB: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [d4,f4] [a3,d4,f4] ~ [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~@2 [b3,d4,g4] ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~@2 [a3,d4,f4]!2 ~ [a3,d4,f4] ~", // Dm G Dm
  AC: "~@2 [a3,d4,f4] ~@2 [a3,d4,f4] ~@2 [b3,d4,g4]!2 ~ [b3,d4,g4] ~@2 [d4,f4]!2 ~@2 [a3,d4,f4] ~@2 [a3,d4,f4] [d4,f4] ~@9", // Dm G Dm
})).s("gm_electric_guitar_clean").gain(0.26)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note("<~@12 A B C ~@9 A B C ~@3 D E F ~@3 G H I J A B D K L ~>".pickRestart({
  A: "~@28 a3 ~@3", B: "~@8 a3!2 ~@4 a3 ~@6 a3 ~@10", C: "~@2 a3 ~@5 a3 ~@5 a3!2 ~@11 a3!2 ~@3",
  D: "~@15 a3 ~@11 a3!2 ~@3", E: "~@8 a3 ~@12 a3!2 ~@4 a3 ~@4", F: "~@2 a3 ~@11 a3!2 ~@6 a3 ~@9",
  G: "~@14 a3!2 ~@5 a3 ~@5 a3 ~@4", H: "~@22 a3 ~@9", I: "~@2 a3 ~@5 a3 ~@5 a3 ~@17", J: "~@9 a3 ~@11 a3!2 ~@4 a3 ~@4",
  K: "~@8 a3 ~@23", L: "~@14 a3!2 ~@6 a3 ~@9",
})).s("gm_electric_guitar_clean").gain(0.15)

// other · trumpet
const trumpet = note("<~@2 A@2 ~@5 B C@3 D@2 E ~@5 B C@3 D@2 F G@2 H@2 I@2 J@2 K L M N O P@3 Q@2>".pickRestart({
  A: "[~@2 f5 d5 ~ f5@3 d5 ~@2 c5@3 c5 ~ d5 ~@2 d5 ~ b4@3 a4@13 ~@27, ~@9 e5 ~@22]/2",
  B: "~@6 [d4,f4]@6 ~ [e4,g4]@6 [f4,a4]@6 ~ [g4,b4]@6", // Dm Em F G
  C: "[~@22 [e4,e5]@2 [d4,d5] [c4,c5] [c4,c5]@10 ~@12 [d4,d5] [d4,e4,d5] e5 [g4,g5]@23 ~@22]/3", // E D C D Dsus2 G
  D: "[~@8 f5@2 [d4,d5] [f4,f5]@3 [d4,d5] ~@3 [c4,c5]@3 [c4,c5] [d4,d5] ~ [e4,e5] ~ [d4,d5] [b3,b4]@3 [a3,a4]@12 ~@17 f5@2 [d4,d5] [f4,f5]@2, ~@8 f4 ~@50 f4 ~@4]/2", // D F D C D E D B …
  E: "~@2 [d4,d5] ~@2 [c4,c5,f5]@6 [d4,d5,g5]@8 ~@13", // D F5 G5
  F: "~@2 [d4,d5] ~@2 [c4,c5,f5]@6 [d4,d5,g5]@8 ~@2 [c4,c5]!2 ~ [d4,d5]@3 [e4,e5]@2 ~ [g3,g4] [a3,a4]", // D F5 G5 C D E G A
  G: "[[c4,c5] ~ [c4,c5]@3 [a3,a4]@3 [g3,g4]@3 ~@3 [c4,c5] ~ c5@2 [d4,d5]@3 [e4,e5] ~@2 [g3,g4] [a3,c4,a4,c5] ~ [c4,c5]@3 [c4,c5]@7 ~@3 g5@2 [e4,e5] [a4,a5]@3 [g4,g5] ~ [e4,e5] [c4,d4,d5] c5 [a3,a4]@2 [c4,c5] [e4,e5] ~ [d4,d5]@3 [g4,g5] ~ [a4,c5,a5] c6@2, ~@16 c4 ~@23 g4 ~@23]/2", // C A G C D E G Am …
  H: "[~@2 f4 [d4,d5] ~ [f4,f5]@3 [d4,d5] ~@2 [c4,c5]@3 [c4,c5] ~ [d4,d5] ~ [e4,e5] [d4,d5] ~ [b3,b4]@3 [a3,a4]@12 ~@17 f4 [d4,d5] ~ [f4,f5]@3 [d4,d5] ~@2 [c4,c5]@2, ~@2 f5@2 ~@49 f5@2 ~@9]/2", // D F D C D E D B …
  I: "[~ c4 c5 [d4,d5]@2 e5 [d4,d5] ~ [b3,b4]@3 [a3,a4]@11 ~@2 [c4,c5,f5]@6 [d4,d5,g5]@8 ~@24 [d4,d5] [c4,c5], ~@5 e4@2 ~@54 [e4,e5]@2 ~]/2", // D B A F5 G5 D C E
  J: "[[c4,c5]@10 ~@12 [d4,d5]!2 [e4,e5] [g4,g5]@23 ~@16]/2", // C D E G
  K: "~@14 f5@2 [d4,d5] [f4,f5]@4 [d4,d5] ~@2 [c4,c5]@3 [c4,c5] ~ [d4,d5] [e4,e5] ~, ~@14 f4 ~@17", // D F D C D E
  L: "[d4,d5] ~ [b3,b4]@3 [a3,a4]@7 ~@20", // D B A
  M: "~@2 f4 [d4,d5] ~ [f4,f5]@3 [d4,d5] ~@2 [c4,c5]@3 [c4,c5] ~ [d4,d5] e5 e4 [d4,d5] ~ [b3,b4]@3 [a3,a4]@7 ~, ~ f5 ~@14", // D F D C D B A
  N: "~@21 f4 [d4,d5] ~ [f4,f5]@3 [d4,d5] ~@2 [c4,c5]@2, ~@21 f5@2 ~@9", // D F D C
  O: "~@2 [c4,c5] [d4,d5] ~ [e4,e5] [d4,d5] ~ [b3,b4]@3 [a3,a4]@7 ~@14", // C D E D B A
  P: "[~@8 f5@2 [d4,d5] [f4,f5]@3 [d4,d5] ~@3 [c4,c5]@3 [c4,c5] [d4,d5] ~ [e4,e5] ~ [d4,d5] [b3,b4]@3 [a3,a4]@7 ~@22 f5@2 [d4,d5] [f4,f5]@4 [d4,d5] ~@2 [c4,c5]@3 [c4,c5] ~ [d4,d5] [e4,e5] ~ [d4,d5] [b3,b4]@3 ~ a3@2 ~ f4 [d4,d5] ~ [f4,f5]@3 [d4,d5] ~@2 [c4,c5]@2, ~@8 f4 ~@50 f4 ~@21 a4@2 ~@2 f5@2 ~@9]/3", // D F D C D E D B …
  Q: "[~ c4 c5 [d4,d5]@2 e5 [d4,d5] ~ [b3,b4]@3 [a3,a4]@11 ~@2 [c4,c5,f5]@6 [d4,d5,g5]@5 [d4,d5,g5]!3 ~@26, ~@5 e4@2 ~@57]/2", // D B A F5 G5
})).s("gm_trumpet").gain(0.36)

// chords · electric guitar clean
const electric_guitar_clean_3 = note("<A@2 B C ~@42>".pickRestart({
  A: "[~@13 d4@22 ~@5 [a3,c4,f4] ~ [a3,c4,f4] ~@2 [a3,c4,f4]!3 ~@2 [a3,c4,f4] ~@13]/2", // F
  B: "d4@13 ~@14 [a3,c4,f4] ~ [a3,c4,f4]!2 ~", C: "[a3,c4,f4] ~ [a3,c4,f4] ~@2 [a3,c4,f4] ~@26",
})).s("gm_electric_guitar_clean").gain(0.24)

// other · trumpet
const trumpet_2 = note("<~@2 A@2 ~@5 B C@2 ~@3 D ~@5 B E@2 ~ F@2 G ~@2 H@2 I@2 J@2 K L ~ M N ~ O P ~@2>".pickRestart({
  A: "[~@3 d3@2 f3@3 d3 ~@2 c3@3 c3 ~ d3@2 ~ d3 ~ b2@3 a2@13 ~@14 d3 ~@12, ~ f3 ~@7 e3 ~@15 c3 ~@6]/2",
  B: "~@6 d3@6 ~ e3@6 f3@6 ~@7", C: "[[c4,e4]@5 c4@8 c4@4 d4@8 ~@5 c4@8 ~@18 c4@8, ~@5 f4@12 ~@47]/2",
  D: "~@19 d3 ~@12", E: "[[c4,e4]@5 c4@7 ~ c4@4 d4@8 ~@5 c4@8 ~@18 c4@8, ~@5 f4@12 ~@47]/2",
  F: "[~@8 f3@2 ~ f3@3 d3 ~@2 c3@3 ~ c3 d3@2 e3@2 d3 b2@3 a2@13 ~@16 f3@2 ~ f3@2, ~@10 d3@2 ~@49 d3@2 ~]/2",
  G: "~ d3 ~@30",
  H: "[~@3 d3@2 f3@3 d3 ~@2 c3@3 c3 ~ d3@2 ~ d3 ~ b2@3 a2@13 ~@17 d3@2 f3@3 d3 ~@2 c3@2, ~@2 f3@2 ~@14 e3@2 ~@33 f3@2 ~@9]/2",
  I: "[~ c3 ~ d3@2 ~ d3 ~ b2@3 a2@13 ~@2 f3@4 g3@6 ~@2 [c4,e4]@5 c4@7 ~ c4@5 d4@8, ~@5 e3@2 ~@36 f4@12 ~@9]/2", // C
  J: "[~@5 c4@8 ~@17 c4@8 ~@26]/2", K: "~@16 d3@2 f3@3 d3 ~@2 c3@3 c3 ~@2 e3@2, ~@15 f3@2 ~@12 d3@2 ~",
  L: "d3 ~ b2@3 a2@13 ~@14", M: "~@22 d3@2 f3@3 d3 ~@2 c3@2, ~@21 f3@2 ~@9",
  N: "~ c3 ~ d3@2 ~ d3 ~ b2@3 a2@13 ~@8, ~@5 e3@2 ~@25", O: "~@27 f3@2 ~ f3@2, ~@29 d3@2 ~",
  P: "~ d3 ~@3 c3@3 c3 d3@2 e3@2 d3 b2@3 ~ a2@13 ~",
})).s("gm_trumpet").gain(0.31)

// other · trumpet · soft notes
const trumpet_soft = note("<~@9 A B@2 C ~@8 A B@2 C ~@8 D E@2 ~@10>".pickRestart({
  A: "~@13 g3@3", B: "[~@17 g4@8 ~ [c4,e4]@4 f4@8 [c4,f4]@5 [d4,g4]@7 ~ [c4,e4]@5 f4@8]/2",
  C: "[c4,f4]@4 ~ g4@5 ~@22, ~@4 d4@5 ~@23", D: "~@3 g4",
  E: "[[c4,e4]@5 f4@8 [c4,f4]@4 [d4,g4]@7 ~@2 e4@4 f4@8 [c4,f4]@4 ~ [d4,g4]@5 ~@16, ~@25 c4@5 ~@34]/2", // C F5 G5 F5 G5
})).s("gm_trumpet").gain(0.18)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~@9 B@2 C ~@9 B@2 C ~@2 D B@2 ~@3 E B F ~@10>".pickRestart({
  A: "~@5 x!2 ~@9", B: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~",
  C: "~@2 x ~@2 x ~@2 x ~@2 x ~@20", D: "~@21 x ~@2 x ~@2 x ~@2 x ~",
  E: "~@8 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~", F: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@13",
})).gain(0.08)

// drums · low tom
const low_tom = s("lt").struct("<~@29 A ~@5 B ~@2 C ~@2 D ~@4>".pickRestart({
  A: "~@31 x", B: "~@9 x ~@6", C: "~@24 x!2 ~@6", D: "~@30 x!2",
})).gain(0.31)

// drums · hihat
const hihat = s("hh").struct(`<
// … 67 more lines

More by Huey Lewis & The News