Strudelify

I'll Play for You

Seals & Crofts

KeyG majorTempo90 bpm
0:00/0:00
// I'll Play for You — Seals & Crofts
// 90 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 92 bars on a 48-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/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 · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A B C D C D E F G H I J K@2 L M N@2 L O P Q@2 R S@2 T U V@2 W@6 X@3 Y Z@3 AA@8 AB@7 AC@2 AD@6 AE AF@2 AG AH AI@3 AJ
  AK@2 AL AM@5 AN@8 ~
>`.pickRestart({
  A: "g4 f#4 e4 d4 g4 f#4 e4 d4", B: "g4 f#4 e4 d4 g4 f#4 e4 [d4,g4]", C: "[c4,e4,g4]@3 a4", D: "[d4,f#4,g4,b4]@3 g4",
  E: "[c4,e4,g4,a4]", F: "g4", G: "b4 d4 f#4 d4 a4 d4 f#4 d4, d5", H: "c5 e4 g4 e4 c5 e4 g4 e4, e5",
  I: "~ d4 f#4 d4 b3 d4 f#4 d4, b4", J: "~@2 e4@2 g4@2 e4@2 c4@2 e4@2 g4@2 ~ b3, c5@7 e4",
  K: "[d4@2 d4!2 d4@2 d4 d4@3 d4@2 [f#3,b3,d4]@2 d4 e4@3 e4 e4@3 f#4 [c4,e4,g4]@8 d4, [f#3,b3]@12 ~@3 c4@8 ~@9]/2", // Bm C B5
  L: "[d4,f#4,b4]@6 g4 ~@3 b3@2 f#4@2 d4@2, ~@7 d4@5 ~@4", M: "[c4,e4,b4]@6 g4 d4 ~@2 c4@2 g4@2 ~ b3, ~@4 d4@2 ~ e4",
  N: "[d4 d4@2 d4 d4@2 d4 d4@3 d4@2 [f#3,b3,d4]@2 d4 e4 e4@2 e4@2 e4@2 f#4 g4@5 g4@3 d4, [f#3,b3]@12 ~@3 c4@8 [c4,e4]@8 ~]/2", // Bm B5 C
  O: "[c4,e4,b4]@6 g4 ~@3 c4@2 g4 b4 d5@2, ~@7 d4@5 ~@4", P: "~@2 f#4@2 b4@2 f#4@2 ~@2 b4@2 a4 g4@3, d5@5 ~@3, ~ d4",
  Q: "[~@2 c4@2 e4@2 c4 d4 [e4,g4,c5]@2 b4 g4@2 g4 ~@4 d4@2 ~ a4 b4 a4 ~@2 b3@2 f#4@2 d4@2, g4@7 ~@4 [c4,e4]@5 ~@4 f#4@4 g4@8, ~@14 b4@7 ~@11]/2", // C
  R: "~@2 e4@2 g4@2 e4@2 c4@2 e4@2 g4 b4 d5@2",
  S: "[[f#4,b4,d5]@2 e5 [f#4,b4,d5]@2 b4 a4 [c4,e4,g4]@6 b4 c5 [f#4,b4,d5]@2 e5@2 [b4,d5,g5]@3 e5 g4!2 b4 a4 [c4,e4,g4]@4 b4, ~@23 [e4,d5]@2 ~@7]/2", // Bm C Bm G C E7
  T: "[b4,d5] g5@2 [d5,f#5,b5]@4 b4 b4@2 [f#4,b4,d5]@5 b4, ~@7 [d5,g5]@3 ~@6", // Bm G5
  U: "[e4,g4,c5] b4 [c4,e4,g4]@10 [c4,e4,b4] a4 g4 a4", // C Cmaj7
  V: "[[b3,d4]@18 [b3,d4]@6 [b3,d4]@12 b4@6 c5@3 ~@9 [g4,b4]@6 ~@5 [g4,b4]@6 ~@18 [g4,b4]@6 ~, g4@36 ~@9 d5@26 ~@25]/2", // Bm G
  W: "[~@4 [f#4,b4]@6 ~@6 [f#4,b4]@6 ~@5 [f#4,b4]@6 ~@6 b4@3 c5@3 d5@6 [f4,b4,d5]@6 d5@5 d5@3 e5@9 [f4,b4,d5]@6 c5@6 b4@2 ~@9 [e4,g4]@6 ~@6 [e4,g4]@6 ~@11 g4@3 a4@6 ~@9 [d4,g4]@6 ~@5 [d4,g4]@6 ~@9 g4@3 a4@5 b4@3 c5@9 [e4,a4]@6 ~@6 [e4,a4]@6 ~@5 [e4,a4]@6 b4@6 c5@3 d5@9 [f#4,b4,d5]@5 d5@6 [f#4,b4,d5]@6 e5@6 [f#4,b4,d5]@6 c5@5 b4@3 a4@9 [c4,e4,a4]@5, ~@39 f#4@6 ~@17 [f4,b4]@6 ~@20 c5@26 ~@21 b4@26 ~@6 d4@6 ~@5 [d4,g4]@6 ~@6 c5@17 ~@18 [e4,a4]@6 ~@40 [d4,f#4]@6 ~@11]/6", // B5 Bdim Em G5 A5 Bm Am Fdim …
  X: "[~ a4@6 b4@2 c5@9 [c4,e4,a4]@6 b4@6 c5@3 ~@8 [g4,b4]@6 ~@6 [g4,b4]@6 ~@6 [g4,b4]@6 ~@2 b4@3 c5@3 e5@9 [f#4,b4]@6 ~@5 [f#4,b4,e5]@6 ~@6 [f#4,b4]@6 ~@6 b4@3 c5@3 d5@5 [f4,b4,d5]@6 d5@4, ~@7 [c4,e4]@6 ~@17 [e4,a4]@6 ~@40 g4@6 ~@41 f#4@6 ~@15, ~@33 d5@26 ~@29 d5@11 ~@45]/3", // Am G B5 Esus2 B5 Bdim C A5
  Y: "~@2 d5@3 e5@9 [f4,b4,d5]@5 c5@6 b4@3 c5@9 ~@3 a#4@3 a4@5, ~@2 [f4,b4]@6 ~@29 [e4,g4]@6 ~@5", // Bdim Fdim Em
  Z: "[[e4,g4]@6 ~@12 g4@6 a4@5 b4@6 [d4,g4]@6 ~@6 [d4,g4]@6 ~@8 g4@3 a4@6 [d4,g4,b4]@6 c5@6 [e4,a4]@6 ~@5 [e4,a4]@6 ~@6 [c4,e4]@6 a4@6 [c4,e4,g4]@5 e5@12 f5@6 [g4,c5,e5]@4, ~@35 b4@17 ~@6 d4@6 ~@18 c5@17 ~@23 [g4,c5]@18 ~@4]/3", // Em G5 G A5 C C5
  AA: "[~@2 [f4,a#4,d5]@12 c5@6 [f4,a#4]@6 [d4,g4,b4]@48 b4@6 d4@6 f#4@6 d4@6 a4@6 d4@6 f#4@6 d4@6 c5@6 e4@6 g4@6 e4@6 c5@6 g4@6 f#5@3 d5@3 a4@6 ~@6 d4@6 f#4@6 d4@6 b3@6 d4@6 f#4@6 d4@6 ~@6 e4@6 g4@6 e4@6 c4@6 e4@6 g4@6 ~@3 b3@3 d4@6 d4@3 d4@3 d4@6 d4@3 d4@9 d4@6 [f#3,b3,d4]@6 d4@3 e4@9 e4@3 e4@9 f#4@3 [c4,e4,g4]@24 d4@3 [d4,f#4,b4]@18 g4@3 d4, ~@74 d5@48 e5@36 ~@12 b4@48 c5@42 e4@6 [f#3,b3]@36 ~@9 c4@24 ~@49]/8", // A# A#5 G Bm C Bm B5
  AB: "[~@8 b3@6 f#4@6 d4@6 [c4,e4,b4]@18 g4@3 d4@3 ~@6 c4@6 g4@6 ~@3 b3@3 d4@3 d4@6 d4@3 d4@6 d4@3 d4@9 d4@6 [f#3,b3,d4]@6 d4@3 e4@3 e4@6 e4@6 e4@6 f#4@3 g4@15 g4@9 d4@3 [d4,f#4,b4]@18 g4@3 ~@9 b3@6 f#4@6 d4@6 [c4,e4,b4]@18 g4@3 ~@9 c4@6 g4@3 b4@3 d5@6 ~@6 f#4@6 b4@6 f#4@6 ~@6 b4@6 a4@3 g4@9 ~@6 c4@6 e4@6 c4@3 d4, ~@50 d4@12 ~@6 e4@6 [f#3,b3]@36 ~@9 c4@24 [c4,e4]@24 ~@24 d4@15 ~@33 d4@15 ~@12 d5@30 ~@40, ~@290 d4@24 g4@21 ~]/7", // Cmaj7 Bm Cmaj7 B5 C
  AC: "[~@2 [e4,g4,c5]@6 b4@3 g4@6 g4@3 ~@12 d4@6 ~@3 a4@3 b4@3 a4@3 ~@6 b3@6 f#4@6 d4@6 ~@6 e4@6 g4@6 e4@4, ~@11 [c4,e4]@15 ~@12 f#4@12 g4@24 ~@22, ~@20 b4@21 ~@55]/2", // C
  AD: "[~@2 c4@6 e4@6 g4@3 b4@3 d5@6 [f#4,b4,d5]@6 e5@3 [f#4,b4,d5]@6 b4@3 a4@3 [c4,e4,g4]@18 b4@3 c5@3 [f#4,b4,d5]@6 e5@6 [b4,d5,g5]@9 e5@3 g4@3 g4@3 b4@3 a4@3 [c4,e4,g4]@12 b4@3 [b4,d5]@3 g5@6 [d5,f#5,b5]@12 b4@3 b4@6 [f#4,b4,d5]@15 b4@3 [e4,g4,c5]@3 b4@3 [c4,e4,g4]@30 [c4,e4,b4]@3 a4@3 g4@3 a4@3 [b3,d4]@18 [b3,d4]@6 [b3,d4]@12 b4@6 c5@3 ~@9 [g4,b4]@6 ~@6 [g4,b4]@4, ~@95 [e4,d5]@6 ~@42 [d5,g5]@9 ~@66 g4@36 ~@9 d5@25]/6", // Bm C Bm G C Bm C Cmaj7 …
  AE: "~@19 [g4,b4]@6 ~@6 [f#4,b4]@6 ~@5 [f#4,b4]@6", // G B5
  AF: "[~@6 [f#4,b4]@6 ~@5 b4@3 c5@3 d5@6 [f4,b4,d5]@6 d5@6 d5@3 e5@8 [f4,b4,d5]@6 c5@6 b4@3 ~@8 [e4,g4]@6 ~@6 [e4,g4]@6 ~@3, ~@17 f#4@6 ~@18 [f4,b4]@6 ~@20 c5@26 ~@3]/2", // B5 Bdim Em Fdim
  AG: "~@9 g4@2 a4@6 ~@9 [d4,g4]@6 ~@6 [d4,g4]@6 ~@4, ~@17 b4@26 ~@5", // G5
  AH: "~@4 g4@3 a4@6 b4@3 c5@8 [e4,a4]@6 ~@6 [e4,a4]@6 ~@6, ~ d4@6 ~@6 [d4,g4]@6 ~@5 c5@17 ~@7", // A5 G5
  AI: "[[e4,a4]@5 b4@6 c5@3 d5@9 [f#4,b4,d5]@6 d5@5 [f#4,b4,d5]@6 e5@6 [f#4,b4,d5]@6 c5@6 b4@3 a4@8 [c4,e4,a4]@6 a4@6 b4@3 c5@9 [c4,e4,a4]@5 b4@6 c5@3 ~@9 [g4,b4]@6 ~@5 [g4,b4]@6 ~@6 [g4,b4]@5, ~@11 [e4,a4]@6 ~@41 [d4,f#4]@6 ~@17 [c4,e4]@6 ~@17 [e4,a4]@6 ~@34, ~@107 d5@26 ~@11]/3", // A5 Bm Am G A5 D C A5
  AJ: "~@4 b4@3 c5@2 e5@9 [f#4,b4]@6 ~@6 [f#4,b4,e5]@6 ~@5 [f#4,b4]@6 ~, ~@7 g4@6 ~@5 d5@12 ~@18", // B5 Esus2 B5
  AK: "[~@5 b4@3 c5@3 d5@6 [f4,b4,d5]@5 d5@6 d5@3 e5@9 [f4,b4,d5]@6 c5@5 b4@3 c5@9 ~@3 a#4@3 a4@6 [e4,g4]@6 ~@11 g4@4, ~@5 f#4@6 ~@17 [f4,b4]@6 ~@29 [e4,g4]@6 ~@27]/2", // Bdim Em Fdim Em
  AL: "~@2 a4@6 b4@6 [d4,g4]@6 ~@5 [d4,g4]@6 ~@9 g4@3 a4@5, ~@14 b4@17 ~@6 d4@6 ~@5", // G5
  AM: "[[d4,g4,b4]@6 c5@6 [e4,a4]@6 ~@6 [e4,a4]@6 ~@5 [c4,e4]@6 a4@6 [c4,e4,g4]@6 e5@12 f5@6 [g4,c5,e5]@6 [f4,a#4,d5]@12 c5@6 [f4,a#4]@6 [d4,g4,b4]@48 [f#4,b4,d5]@9 e5@3 d5@6 b4@3 g4@9 d4@6 g4@6 a4@3 [c4,e4,g4]@6 ~@40, ~@12 c5@17 ~@24 [g4,c5]@18 ~@169]/5", // G A5 C A# A#5 G Bm C …
  AN: "[~@5 [f#4,b4,d5]@9 e5@3 d5@6 b4@3 g4@9 d4@6 g4@6 a4@3 [c4,e4,g4]@6 ~@40]/2", // Bm C
})).s("gm_acoustic_guitar_steel").gain(0.4).pan(0.7)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A B@5 C D E D E D E D E D E D E D E D E F@4 G H@6 I J@6 K L@8 M@8 N@2 O@3 P Q R S@6 T U@3 V@8 W@7
>`.pickRestart({
  A: "g3 f#3 e3 d3 g2 a2 b2 c3", B: "d3@3 d3 d3@4", C: "d3@3 d3 d3@2 d3@2", D: "g2", E: "g3", F: "g2 g3",
  G: "g2@3 g2 g2@4",
  H: "[g2@12 d2@11 g2@12 d2@11 g2@12 d2@12 g2@11 d2@12 g2@12 d2@11 g2@12 a2@6 b2@5 c3@12 g2@12 c3@5 e2@6 f2@6 f#2@6 g2@11 d2@12 g2@12 d2@11 d2@12 a2@11 d2@12 a2@12 d2@9]/6",
  I: "~@2 d3@12 d2@12 d3@11 d2@11",
  J: "[~ d3@11 d2@12 d3@12 g2@11 d2@12 g2@11 d2@12 g2@12 d2@11 g2@12 d2@12 g2@11 d2@12 g2@11 a2@6 b2@6 c3@12 g2@11 c3@6 e2@6 f2@6 f#2@5 g2@12 d2@12 g2@11 d2@12 d2@11 d3@9]/6",
  K: "~@3 d2@12 d3@11 c3@18 c3@4", L: "[~ a#2@6 a#2@6 g2@24 g2@24 g3@24 g2@24 g3@24 g2@24 g3@24 g2@11]/8",
  M: "[~@13 g3@24 g2@24 g3@24 g2@24 g3@24 g2@24 g3@24 g2@11]/8", N: "[~@13 g3@24 g2@11]/2", O: "~ g3@12 g2@11",
  P: "~ g3@12 g2@9 g2@2", Q: "~ g2@12 g2@6 d2@5", R: "~@2 g2@11 d2@12 g2@11 d2@12",
  S: "[g2@12 d2@11 g2@12 d2@11 g2@12 a2@6 b2@6 c3@11 g2@12 c3@6 e2@6 f2@5 f#2@6 g2@12 d2@11 g2@12 d2@12 d2@11 a2@12 d2@11 a2@12 d2@12 d3@11 d2@12 d3@11 d2@12 d3@12 d2@9]/6",
  T: "~@2 d3@12 g2@12 d2@11 g2@11",
  U: "[~ d2@11 g2@12 d2@12 g2@11 d2@12 g2@11 d2@12 g2@12 a2@5 b2@6 c3@12 g2@12 c3@5 e2@6 f2@4]/3",
  V: "[~@2 f#2@6 g2@11 d2@12 g2@12 d2@11 d2@12 d3@11 d2@12 d3@12 c3@18 c3@6 a#2@12 a#2@12 g2@48 g2@48 g3@48 g2@48 g3@43]/8",
  W: "[~@5 g2@48 g3@48 g2@48 g3@48 g2@48 g3@48 ~@43]/7",
})).s("gm_electric_bass_finger").gain(0.35)

// chords · banjo
const banjo = note("<A B ~@27 C D@6 E@3 F G@3 H@2 ~@20 I J K@2 L M N@3 O P@2 Q R@4 ~@10>".pickRestart({
  A: "g4 f#4 e4 d4 g4 f#4 e4 d4", B: "g4 f#4 e4 d4 g4 f#4 e4 [d4,g4]",
  C: "~@6 [g4,b4]@6 ~@5 [g4,b4]@6 ~@6 [g4,b4]@6 ~@6 [g4,b4]@6 ~", // G
  D: "[~@4 [f#4,b4]@6 ~@6 [f#4,b4]@6 ~@5 [f#4,b4]@6 ~@6 b4@3 c5@3 d5@6 [f4,b4,d5]@6 d5@5 d5@3 e5@9 [f4,b4,d5]@6 c5@6 b4@2 ~@9 [e4,g4]@6 ~@6 [e4,g4]@6 ~@5 [e4,g4]@6 g4@3 a4@6 ~@9 [d4,g4]@6 ~@5 [d4,g4]@6 ~@9 g4@3 a4@5 b4@3 c5@9 [e4,a4]@6 ~@6 [e4,a4]@6 ~@5 [e4,a4]@6 b4@6 c5@3 d5@9 [f#4,b4,d5]@5 d5@6 [f#4,b4,d5]@6 e5@6 [f#4,b4,d5]@6 c5@5 b4@3 a4@9 [c4,e4,a4]@5, ~@39 f#4@6 ~@17 [f4,b4]@6 ~@20 c5@26 ~@21 b4@26 ~@6 d4@6 ~@5 [d4,g4]@6 ~@6 c5@17 ~@18 [e4,a4]@6 ~@40 [d4,f#4]@6 ~@11]/6", // B5 Bdim Em G5 A5 Bm Am Fdim …
  E: "[~ a4@6 b4@2 c5@9 [c4,e4,a4]@6 b4@6 c5@3 ~@8 [g4,b4]@6 ~@6 [g4,b4]@6 ~@6 [g4,b4]@6 ~@2 b4@3 c5@3 e5@9 [f#4,b4]@6 ~@5 [f#4,b4,e5]@6 ~@6 [f#4,b4]@6 ~@6 b4@3 c5@3 d5@5 [f4,b4,d5]@6 d5@4, ~@7 [c4,e4]@6 ~@17 [e4,a4]@6 ~@40 g4@6 ~@41 f#4@6 ~@15, ~@33 d5@26 ~@29 d5@11 ~@45]/3", // Am G B5 Esus2 B5 Bdim C A5
  F: "~@2 d5@3 e5@9 [f4,b4,d5]@5 c5@6 b4@3 c5@9 ~@3 a#4@3 a4@5, ~@2 [f4,b4]@6 ~@29 [e4,g4]@6 ~@5", // Bdim Fdim Em
  G: "[[e4,g4]@6 ~@6 [e4,g4]@6 g4@6 a4@5 b4@6 [d4,g4]@6 ~@6 [d4,g4]@6 ~@8 g4@3 a4@6 [d4,g4,b4]@6 c5@6 [e4,a4]@6 ~@5 [e4,a4]@6 ~@6 [c4,e4]@6 a4@6 [c4,e4,g4]@5 e5@12 f5@6 [g4,c5,e5]@4, ~@35 b4@17 ~@6 d4@6 ~@18 c5@17 ~@23 [g4,c5]@18 ~@4]/3", // Em G5 G A5 C C5
  H: "[~ [f4,a#4,d5]@6 c5@3 [f4,a#4]@3 [d4,g4,b4]@24 ~@11]/2", I: "~@16 [g4,b4]@3 ~@3 [g4,b4]@2",
  J: "~@7 [g4,b4]@6 ~@6 [g4,b4]@6 ~@6 [f#4,b4]@6 ~@5 [f#4,b4]@6", // G B5
  K: "[~@6 [f#4,b4]@6 ~@5 b4@3 c5@3 d5@6 [f4,b4,d5]@6 d5@6 d5@3 e5@8 [f4,b4,d5]@6 c5@6 b4@3 ~@8 [e4,g4]@6 ~@6 [e4,g4]@6 ~@3, ~@17 f#4@6 ~@18 [f4,b4]@6 ~@20 c5@26 ~@3]/2", // B5 Bdim Em Fdim
  L: "~@3 [e4,g4]@6 g4@2 a4@6 ~@9 [d4,g4]@6 ~@6 [d4,g4]@6 ~@4, ~@17 b4@26 ~@5", // Em G5
  M: "~@4 g4@3 a4@6 b4@3 c5@8 [e4,a4]@6 ~@6 [e4,a4]@6 ~@6, ~ d4@6 ~@6 [d4,g4]@6 ~@5 c5@17 ~@7", // A5 G5
  N: "[[e4,a4]@5 b4@6 c5@3 d5@9 [f#4,b4,d5]@6 d5@5 [f#4,b4,d5]@6 e5@6 [f#4,b4,d5]@6 c5@6 b4@3 a4@8 [c4,e4,a4]@6 a4@6 b4@3 c5@9 [c4,e4,a4]@5 b4@6 c5@3 ~@9 [g4,b4]@6 ~@5 [g4,b4]@6 ~@6 [g4,b4]@5, ~@11 [e4,a4]@6 ~@41 [d4,f#4]@6 ~@17 [c4,e4]@6 ~@17 [e4,a4]@6 ~@34, ~@107 d5@26 ~@11]/3", // A5 Bm Am G A5 D C A5
  O: "~@4 b4@3 c5@2 e5@9 [f#4,b4]@6 ~@6 [f#4,b4,e5]@6 ~@5 [f#4,b4]@6 ~, ~@7 g4@6 ~@5 d5@12 ~@18", // B5 Esus2 B5
  P: "[~@5 b4@3 c5@3 d5@6 [f4,b4,d5]@5 d5@6 d5@3 e5@9 [f4,b4,d5]@6 c5@5 b4@3 c5@9 ~@3 a#4@3 a4@6 [e4,g4]@6 ~@5 [e4,g4]@6 g4@4, ~@5 f#4@6 ~@17 [f4,b4]@6 ~@29 [e4,g4]@6 ~@27]/2", // Bdim Em Fdim Em
  Q: "~@2 a4@6 b4@6 [d4,g4]@6 ~@5 [d4,g4]@6 ~@9 g4@3 a4@5, ~@14 b4@17 ~@6 d4@6 ~@5", // G5
  R: "[[d4,g4,b4]@6 c5@6 [e4,a4]@6 ~@6 [e4,a4]@6 ~@5 [c4,e4]@6 a4@6 [c4,e4,g4]@6 e5@12 f5@6 [g4,c5,e5]@6 [f4,a#4,d5]@12 c5@6 [f4,a#4]@6 [d4,g4,b4]@48 ~@43, ~@12 c5@17 ~@24 [g4,c5]@18 ~@121]/4", // G A5 C A# A#5 G C5
})).s("gm_banjo").gain(0.41).pan(0.3)

// chords · piano
const piano = note(`<
  ~@2 A B A B C D E F G H ~@8 I ~ I J K@2 L M N ~@7 O P@2 Q R@3 S@2 ~@28 T U V@2 W X@4 Y@10
>`.pickRestart({
  A: "[c4,e4,g4]@3 a4", B: "[d4,f#4,g4,b4]@3 g4", C: "[c4,e4,g4,a4]", D: "g4", E: "b4 d4 f#4 d4 a4 d4 f#4 d4, d5",
  F: "c5 e4 g4 e4 c5 e4 g4 e4, e5", G: "~ d4 f#4 d4 b3 d4 f#4 d4, b4",
  H: "~@2 e4@2 g4@2 e4@2 c4@2 e4@2 g4@2 ~ b3, c5@7 e4", I: "~ d6@2 ~@5, g5 ~@3, ~ b5@4 ~@11",
  J: "~@12 g4 b4 [d5,g5]@2, ~@6 d5 ~, ~@13 f#5@2 ~", // G5
  K: "[[f#4,b4]@2 ~ [f#4,b4]@2 b4 a4 [e4,g4]@6 b4 c5 [b4,d5]@2 e5@2 [d5,g5]@3 e5 g4!2 b4 a4 [c4,e4,g4]@4 b4, ~@23 d5@2 ~@7]/2", // B5 Em Bm G5 C
  L: "[b4,d5] g5@2 [d5,f#5,b5]@4 b4 b4@2 [f#4,b4,d5]@5 b4, ~@7 [d5,g5]@3 ~@6", // Bm G5
  M: "[e4,g4,c5] b4 [c4,e4,g4]@10 [c4,e4,b4] a4 g4 a4", N: "[b3,d4]@6 [b3,d4]@2 [b3,d4]@4 b4@2 c5 ~, g4@3 ~",
  O: "~@41 [g4,b4]@6 ~", // G
  P: "[~@5 [g4,b4]@6 ~@6 [g4,b4]@6 ~@2 b4@3 c5@3 e5@9 [f#4,b4]@6 ~@5 [f#4,b4,e5]@6 ~@6 [f#4,b4]@6 ~@6 b4@3 c5@3 d5@5 [f4,b4,d5]@6 d5@4, ~@28 g4@6 ~@6 d5@11 ~@24 f#4@6 ~@15]/2", // G B5 Esus2 B5 Bdim
  Q: "~@2 d5@3 e5@9 [f4,b4,d5]@5 c5@6 b4@3 c5@9 ~@3 a#4@3 a4@5, ~@2 [f4,b4]@6 ~@29 [e4,g4]@6 ~@5", // Bdim Fdim Em
  R: "[[e4,g4]@6 ~@12 g4@6 a4@5 b4@6 [d4,g4]@6 ~@6 [d4,g4]@6 ~@8 g4@3 a4@6 [d4,g4,b4]@6 c5@6 [e4,a4]@6 ~@5 [e4,a4]@6 ~@6 [c4,e4]@6 a4@6 [c4,e4,g4]@5 e5@12 f5@6 [g4,c5,e5]@4, ~@35 b4@17 ~@6 d4@6 ~@18 c5@17 ~@23 [g4,c5]@18 ~@4]/3", // Em G5 G A5 C C5
  S: "[~ [f4,a#4,d5]@6 c5@3 [f4,a#4]@3 [d4,g4,b4]@24 ~@11]/2", // A# A#5 G
  T: "~@20 [g4,b4]@6 ~@5 [g4,b4]@6 ~@6 [g4,b4]@5, ~@11 d5@26 ~@11", // G
  U: "~@4 b4@3 c5@2 e5@9 [f#4,b4]@6 ~@6 [f#4,b4,e5]@6 ~@5 [f#4,b4]@6 ~, ~@7 g4@6 ~@5 d5@12 ~@18", // B5 Esus2 B5
  V: "[~@5 b4@3 c5@3 d5@6 [f4,b4,d5]@5 d5@6 d5@3 e5@9 [f4,b4,d5]@6 c5@5 b4@3 c5@9 ~@3 a#4@3 a4@6 [e4,g4]@6 ~@11 g4@4, ~@5 f#4@6 ~@17 [f4,b4]@6 ~@29 [e4,g4]@6 ~@27]/2", // Bdim Em Fdim Em
  W: "~@2 a4@6 b4@6 [d4,g4]@6 ~@5 [d4,g4]@6 ~@9 g4@3 a4@5, ~@14 b4@17 ~@6 d4@6 ~@5", // G5
  X: "[[d4,g4,b4]@6 c5@6 [e4,a4]@6 ~@6 [e4,a4]@6 ~@5 [c4,e4]@6 a4@6 [c4,e4,g4]@6 e5@12 f5@6 [g4,c5,e5]@6 [f4,a#4,d5]@12 c5@6 [f4,a#4]@6 [d4,g4,b4]@48 ~@43, ~@12 c5@17 ~@24 [g4,c5]@18 ~@121]/4", // G A5 C A# A#5 G C5
  Y: "[~@8 d5@6 a5@3 d5@6 b5@9 c6@3 b5@3 [c5,e5,g5]@15 ~@43]/2", // C
})).s("gm_piano").gain(0.29)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note("<~ A B C B C D E F G H I ~@32 J@8 K@8 L@6 ~@15 M@8 ~@3>".pickRestart({
  A: "g4 f#4 e4 d4 g4 f#4 e4 [d4,g4]", B: "[c4,e4,g4]@3 a4", C: "[d4,f#4,g4,b4]@3 g4", D: "[c4,e4,g4,a4]", E: "g4",
  F: "b4 d4 f#4 d4 a4 d4 f#4 d4, d5", G: "c5 e4 g4 e4 c5 e4 g4 e4, e5", H: "~ d4 f#4 d4 b3 d4 f#4 d4, b4",
  I: "~@2 e4@2 g4@2 e4@2 c4@2 e4@2 g4@2 ~ b3, c5@7 e4",
  J: "[~@26 b4@6 d4@6 f#4@6 d4@6 a4@6 d4@6 f#4@6 d4@6 c5@6 e4@6 g4@6 e4@6 c5@6 g4@6 f#5@3 d5@3 a4@6 ~@6 d4@6 f#4@6 d4@6 b3@6 d4@6 f#4@6 d4@6 ~@6 e4@6 g4@6 e4@6 c4@6 e4@6 g4@6 ~@3 b3@3 d4@6 d4@3 d4@3 d4@6 d4@3 d4@9 d4@6 [f#3,b3,d4]@6 d4@3 e4@9 e4@3 e4@9 f#4@3 [c4,e4,g4]@24 d4@3 [d4,f#4,b4]@18 g4@3 ~@9 b3@6 f#4@6 d4@6 [c4,e4,b4]@18 g4@3 d4, ~@26 d5@48 e5@36 ~@12 b4@48 c5@42 e4@6 [f#3,b3]@36 ~@9 c4@24 ~@48 d4@15 ~@34]/8", // Bm C Bm Cmaj7 B5
  K: "[~@8 c4@6 g4@6 ~@3 b3@3 d4@3 d4@6 d4@3 d4@6 d4@3 d4@9 d4@6 [f#3,b3,d4]@6 d4@3 e4@3 e4@6 e4@6 e4@6 f#4@3 g4@15 g4@9 d4@3 [d4,f#4,b4]@18 g4@3 ~@9 b3@6 f#4@6 d4@6 [c4,e4,b4]@18 g4@3 ~@9 c4@6 g4@3 b4@3 d5@6 ~@6 f#4@6 b4@6 f#4@6 ~@6 b4@6 a4@3 g4@9 ~@6 c4@6 e4@6 c4@3 d4@3 [e4,g4,c5]@6 b4@3 g4@6 g4@3 ~@12 d4@6 ~@3 a4@3 b4@3 a4@3 ~@6 b3@6 f#4@6 d4@6 ~@6 e4@6 g4@6 e4@4, ~@2 d4@12 ~@6 e4@6 [f#3,b3]@36 ~@9 c4@24 [c4,e4]@24 ~@24 d4@15 ~@33 d4@15 ~@12 d5@30 ~@60 b4@21 ~@55, ~@242 d4@24 g4@21 ~@12 [c4,e4]@15 ~@12 f#4@12 g4@24 ~@22]/8", // Bm Cmaj7 C B5 C
  L: "[~@2 c4@6 e4@6 g4@3 b4@3 d5@6 [f#4,b4,d5]@6 e5@3 [f#4,b4,d5]@6 b4@3 a4@3 [c4,e4,g4]@18 b4@3 c5@3 [f#4,b4,d5]@6 e5@6 [b4,d5,g5]@9 e5@3 g4@3 g4@3 b4@3 a4@3 [c4,e4,g4]@12 b4@3 [b4,d5]@3 g5@6 [d5,f#5,b5]@12 b4@3 b4@6 [f#4,b4,d5]@15 b4@3 [e4,g4,c5]@3 b4@3 [c4,e4,g4]@30 [c4,e4,b4]@3 a4@3 g4@3 a4@3 [b3,d4]@18 [b3,d4]@6 [b3,d4]@12 ~@34, ~@95 [e4,d5]@6 ~@42 [d5,g5]@9 ~@66 g4@36 ~@34]/6", // Bm C Bm G C Bm C Cmaj7 …
  M: "[~ g6@95]/8",
})).s("gm_string_ensemble_1").gain(0.17)

// chords · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note(`<
  ~@2 A B A B C D E ~@6 F ~@3 F ~@24 G@7 H@5 I@8 ~@17 J@2 K@2 L@4 K@2 ~
>`.pickRestart({
  A: "[c4,e4,g4]@3 a4", B: "[d4,f#4,g4,b4]@3 g4", C: "[c4,e4,g4,a4]", D: "g4", E: "d5, b4 ~@7", F: "b4@6 g4 d4@9",
  G: "[~@26 [f#4,b4]@48 [e4,a4]@36 ~@12 [f#4,b4]@48 [e4,a4]@45 ~@4 b4@47 ~ a4@47 [d4,f#4,b4]@18 ~@4, ~@218 f#4@48 e4@47 ~@23]/7", // B5 A5 B5 A5 Bm
  H: "[~@26 b4@18 g4@3 d4@27 [f#4,b4]@48 [e4,a4]@36 ~@12 [f#4,b4]@48 b4@18 g4@3 d4, ~@85 d4@9 ~@26]/5", // B5 A5 B5
  I: "[~@8 c4@6 ~@12 [f#4,b4]@48 [e4,a4]@36 ~@12 [f#4,b4]@48 [e4,a4]@36 ~@33 [c4,e4,g4]@18 b4@9 ~@33 [c4,e4,g4]@12 ~@33 [f#4,b4,d5]@15 b4@3 ~@22, ~@109 f#4@24 [f#4,b4]@24 [e4,a4]@18 ~@17, ~@218 b4@39 ~@127]/8", // B5 A5 B5 A5 C Bm B5 A5
  J: "[~@5 [f#4,b4]@48 [e4,a4]@36 ~@7]/2", K: "[~@5 [f#4,b4]@48 [e4,a4]@43]/2",
  L: "[~@5 [f#4,b4]@48 [e4,a4]@47 ~ [f#4,b4]@48 [e4,a4]@36 ~@7]/4", // B5 A5 B5 A5
})).s("gm_electric_guitar_jazz").gain(0.51)

// chords · brass section · "Brass"
const brass_section = note("<~@29 A@7 B@7 C@2 ~@20 D@7 E@7 F@3 ~@10>".pickRestart({
  A: "[~@17 b4@3 c5@3 [b4,d5]@17 ~@24 b4@3 c5@3 [a4,d5]@17 ~@6 f3@46 e3@46 ~@12 b4@6 c5@3 b4@4 ~@34 [a4,c5]@6 [b4,d5]@3 [a4,c5]@4 ~@10 [g#4,b4]@4 [a4,c5]@7 ~@7 [b4,d5]@17 [c5,e5]@6 [b4,d5]@4 ~@13 a4@11, g3@23 f#3@23 ~@47 g3@23 a3@23 ~@29]/7", // Bm D5 Am Bm Am G#m Am Bm …
  B: "[~@12 c5@23 ~ g3@46 f#3@46 ~ f3@46 e3@46 g3@46 ~ a3@46 c4@22]/7", C: "[~ a#3@12 g3@24 ~@11]/2",
  D: "[~@44 b4@3 c5@3 [b4,d5]@17 ~@23 b4@3 c5@3 [a4,d5]@17 ~@6 f3@46 ~ e3@46 ~@12 b4@6 c5@2 b4@4 ~@34 [a4,c5]@6 [b4,d5]@3 [a4,c5]@4 ~@10 [g#4,b4]@4 ~ [a4,c5]@7 ~@6 [b4,d5]@17 [c5,e5]@6 [b4,d5]@2, ~@26 g3@46 ~ f#3@46 ~@93 g3@46 ~ a3@46 ~@31]/7", // Bm D5 Am Bm Am G#m Am Bm …
  E: "[~@15 a4@23 ~ c5@23 g3@46 f#3@46 ~ f3@46 e3@46 ~ g3@46 a3@42]/7", F: "[~@5 c4@24 a#3@24 g3@48 ~@43]/3",
})).s("gm_brass_section").gain(0.41).pan(0.3)

// other · clarinet
const clarinet = note("<~@36 A@2 B C D@2 E ~@30 F@3 G H I J ~@12>".pickRestart({
  A: "[~@41 g5@6 e5@3 d5@3 b4@3 c5@3 d5@3 g5@3 e5@3 g5@8 a5@3 a#5@3 d6@6 c6@3 b5@3 a5@2]/2",
  B: "~ g5@2 e5@3 e5@3 g5@6 e5@6 d5@6 ~@6 d5@5 e5 ~ f5 f#5 ~ f5 e5@4",
  C: "~@2 d#5 d5 ~ c#5 b4 ~ d5@6 ~@5 c#6 ~ c6 b5 ~ a5 f#5 ~@2 g5@3 c5@6 e5@6 c#5@2 e5@3",
  D: "[g5@3 d5@3 c5@6 ~@29 b4@6 e5@3 g5@6 ~@2 a#5 ~ b5 c6 ~ c#6 d6 ~ c#6 c6 ~ b5 ~@2 a5 g5@3 ~@6 g#5 a5 ~ a#5 b5 c6@6 d6@3]/2",
  E: "c6@4 ~@2 b5@3 ~@3 a5@3 ~@4 g5 ~ f#5 f5 e5 ~ d#5 ~@22",
  F: "[~@20 g5@6 e5@2 d5@3 b4@3 c5@3 d5@3 g5@3 e5@3 g5@9 a5@2 a#5@3 d6@6 c6@3 b5@3 a5@3 g5@3 e5@3 e5@3 g5@5 e5@6 d5@6 ~@6 d5@6 e5 f5 ~ f#5 f5 e5@6 d#5 ~ d5 c#5 ~ b4 d5@6 ~@6 c#6 c6]/3",
  G: "~ b5 a5 f#5 ~@2 g5@3 c5@6 e5@6 c#5@3 e5@3 g5@3 d5@3 c5@6 ~@9",
  H: "~@19 b4@6 e5@3 g5@6 ~@3 a#5 b5 ~ c6 c#6 ~ d6 c#6 c6 ~ b5",
  I: "~@2 a5 g5@3 ~@6 g#5 a5 ~ a#5 b5 ~ c6@6 d6@3 c6@4 ~ b5@3 ~@3 a5@3 ~@4 g5 ~ f#5", J: "f5 ~ e5 d#5 ~@44",
})).s("gm_clarinet").gain(0.37).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@6 ~@20 A B C D E F G H I J K L M N O P ~@4 Q R@15 S T U B C D E F V H W J K L M X Y Z@10 ~
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@11 x ~@10 x ~@11 x ~@10 x ~", C: "~@10 x ~@11 x ~@10 x ~@11 x ~@2",
  D: "~@9 x ~@10 x ~@11 x ~@10 x ~@4", E: "~@7 x ~@11 x ~@10 x ~@11 x ~@5", F: "~@5 x ~@11 x ~@11 x ~@10 x ~@7",
  G: "~@4 x ~@10 x!2 ~@10 x ~@11 x ~@8", H: "~@2 x ~@11 x ~@11 x ~@10 x ~@10", I: "~ x ~@10 x!2 ~@10 x ~@11 x ~@10 x",
  J: "~@11 x ~@10 x ~@11 x ~@11 x ~", K: "~@9 x ~@11 x ~@11 x ~@10 x ~@3", L: "~@8 x ~@10 x ~@11 x ~@11 x ~@4",
  M: "~@6 x ~@11 x ~@10 x ~@11 x ~@6", N: "~@5 x ~@10 x ~@11 x ~@10 x ~@8", O: "~@3 x ~@11 x ~@10 x ~@17 x ~@3",
  P: "~ x ~@5 x ~@5 x ~@10", Q: "~@26 x ~@20 x", R: "~@2 x ~@5 x ~@17 x ~@20 x", S: "~ x ~@2 x ~@8 x ~@8 x ~",
  T: "~ x ~@11 x ~@5 x ~@4", U: "~@2 x ~@10 x ~@11 x ~@10 x ~@11", V: "~@4 x ~@10 x ~@11 x ~@11 x ~@8",
  W: "~ x ~@10 x ~@11 x ~@11 x ~@10 x", X: "~@5 x ~@17 x ~@5 x ~@11 x ~@6", Y: "~@5 x ~@42",
  Z: "~@5 x ~@20 x ~@2 x ~@5 x ~@12",
})).gain(0.25)

// drums · rim
const rim = s("rim").struct("<~@29 A B C D E F G H ~@11 I C@15 J K L A B C D E F M ~@7 A@10 ~>".pickRestart({
  A: "~@17 x ~@23 x ~@6", B: "~@16 x ~@22 x ~@8", C: "~@7 x ~@11 x ~@4", D: "~@13 x ~@22 x ~@11",
  E: "~@11 x ~@22 x ~@13", F: "~@10 x ~@22 x ~@14", G: "~@8 x ~@22 x ~@16", H: "~@7 x ~@22 x ~@17", I: "~@19 x ~@4",
  J: "~@7 x ~@16", K: "~@11 x", L: "~@19 x ~@22 x ~@5", M: "~ x ~@4",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@28 A ~@7 B ~@5 C ~@21 C ~@7 D ~@6 E ~@12>".pickRestart({
  A: "~ x ~@2", B: "~@3 x ~@4", C: "~@19 x ~@4", D: "~@15 x", E: "~@17 x ~@30",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@29 A B C D E F G H I J K L M N ~@22 O P A B C D E F Q R I J K L ~@13>".pickRestart({
  A: "~@6 x ~@22 x ~@18", B: "~@4 x ~@22 x ~@20", C: "~@3 x ~@22 x ~@21", D: "~ x ~@22 x ~@23", E: "x ~@22 x ~@22 x ~",
  F: "~@7 x ~@7 x", G: "~@20 x ~@22 x ~@4", H: "~@18 x ~@11 x ~@10 x ~@6", I: "~@5 x ~@11 x ~@10 x ~@11 x ~@7",
  J: "~@3 x ~@11 x ~@11 x ~@10 x ~@9", K: "~@2 x ~@11 x ~@10 x ~@11 x ~@10", L: "x ~@11 x ~@11 x ~@10 x ~@11 x",
  M: "~@10 x ~@11 x ~@11 x ~@10 x ~@2", N: "~@3 x ~@3 x ~@8", O: "~@2 x", P: "~@7 x ~@23 x ~@16",
  Q: "~@8 x ~@11 x ~@10 x ~@11 x ~@4", R: "~@7 x ~@10 x ~@11 x ~@10 x ~@6",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@2 A@17 B C@4 D ~@23 E F@15 G ~@16 H@10 ~>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!4", D: "x!3 ~", E: "~@13 x ~@2 x ~@2 x ~@2 x ~",
  F: "~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~", G: "~ x ~@2 x ~@2 x ~@2 x ~@13",
  H: "~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x",
})).gain(0.35)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@36 x!2 ~@4 x!2 ~@4] ~ [~@36 x ~ x!2 ~ x ~@6] ~@86>").gain(0.4)
// … 26 more lines

More by Seals & Crofts