Strudelify

At the Zoo

Paul Simon

KeyD minorTempo170 bpm
0:00/0:00
// At the Zoo — Simon Paul
// 170 bpm, 4/4, key D minor. 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 105 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(170/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 · pad choir · "Choir"
const pad_choir = note(`<
  A B C@3 D@2 E@2 F G H@7 I J K L M N O@3 P@2 Q R S@6 ~@4 T U@4 V@2 W@2 X@2 Y Z AA@2 AB@3 AC AD AC AE AC AF AG@2 AH AI
  AJ AK AL AM AN@2 AO@2 AL AP AJ AI AL AQ AR@2 AS@12 AT@3 ~@5
>`.pickRestart({
  A: "~@6 c4 d4", B: "~ e4@4 f4@4 g4@4 b4@3", C: "[~@2 g4@2 e4@2 c4@4 d4@4 e4@4 ~ c4@25 ~@4]/3",
  D: "[c4@4 ~ d5@4 d5@2 c5@8 a4@10 ~@3]/2", E: "[~@2 f4@4 ~ d5@4 c5@2 bb4@6 c5@2 d5@10 ~]/2",
  F: "~@9 [bb4,d5]@4 [c5,eb5]@3", G: "~ [d5,f5]@6 [bb4,d5]@9",
  H: "[~@11 [d5,f5]@4 [c5,eb5]@4 [bb4,d5]@4 [c5,eb5]@2 [bb4,d5]@10 ~@10 [bb4,d5]@2 [c5,eb5]@4 [f5,bb5]@8 [bb4,d5]@10 ~@10 [d5,f5]@4 [c5,eb5]@4 [bb4,d5]@2 [c5,eb5]@4 [bb4,d5]@10 ~@9]/7", // Dm Cm Bb Cm Bb Cm Bb5 Bb …
  I: "bb4 c5 d5 f5", J: "d5 c5@2 bb4@3 g4@2", K: "bb4 c5@2 d5@3 f5@2", L: "d5 c5@2 bb4@5", M: "~ bb4@2 c5 d5@2 bb4@2",
  N: "eb5 d5 c5 bb4", O: "[bb4 c5@2 c5@17 ~ [bb4,d5] [d5,f5] [c5,eb5]]/3",
  P: "[[d5,f5] [c5,eb5]@2 [bb4,d5]@2 [c5,d5]@2 [bb4,d5]@2 [bb4,d5] [c5,eb5]@2 [d5,f5]@2 [f5,bb5]@2]/2", // Dm Cm Bb Csus2 Bb Cm Dm Bb5
  Q: "[d5,f5] [c5,eb5] [bb4,d5]!2", R: "~ [bb4,d5]@2 [c5,eb5] [d5,f5]@2 f5@2",
  S: "[[d5,f5]@4 [c5,eb5]@4 [bb4,d5]@2 [g4,bb4]@4 [bb4,d5]@6 [c5,f5]@4 a4@25 ~@3 a4@4 a4@2 a4@4 g4@30 ~@4]/6", // Dm Cm Bb Gm Bb F5
  T: "~@4 c4@2 d4@2 e4@4 ~ f4@3", U: "[~ g4@4 b4@4 g4@2 ~ e4@2 c4@4 d4@2 e4@4 c4@27 ~@5 c4@4 d5@4]/4",
  V: "[~ d5@2 c5@8 a4@10 ~@5 f4@4 d5@2]/2", W: "[~ c5@4 bb4@4 c5@4 d5@10 ~@9]/2",
  X: "[[bb4,d5]@4 ~ [c5,eb5]@4 [f5,bb5]@6 [bb4,d5]@10 ~@7]/2", Y: "~@2 [d5,f5]@4 ~ [c5,eb5]@4 [bb4,d5]@2 [c5,eb5]@3",
  Z: "~ [bb4,d5]@10 ~@5", AA: "[~@4 [bb4,d5]@2 ~ [c5,eb5]@4 [f5,bb5]@8 [bb4,d5]@10 ~@3]/2",
  AB: "[~@6 [d5,f5]@4 ~ [c5,eb5]@4 [bb4,d5]@2 [c5,eb5]@4 d5@23 c5@4]/3", AC: "d5 f5 d5 c5", AD: "bb4 g4@2 bb4@3 c5@2",
  AE: "c5@2 bb4 c5", AF: "bb4 g4 bb4 c5", AG: "c5/2", AH: "~ [bb4,d5] [d5,f5] [bb4,d5] [d5,f5]@2 [c5,eb5]@2",
  AI: "[bb4,d5]@2 [g4,bb4] [bb4,d5]@3 [c5,eb5]@2", AJ: "[d5,f5] [f5,bb5] [d5,f5] [c5,eb5]",
  AK: "[c5,eb5] [bb4,d5]!2 [c5,eb5]", AL: "[d5,f5] f5 [d5,f5] [c5,eb5]",
  AM: "[bb4,d5] [g4,bb4]@2 [bb4,d5]@3 [c5,eb5]@2", AN: "[[f5,bb5]@2 [c5,f5] [d5,f5]@13]/2",
  AO: "[[d5,f5]@2 [f5,bb5]@2 [d5,f5]@2 [c5,eb5] [bb4,d5]@3 [g4,bb4]@2 [bb4,d5] [c5,eb5]@3]/2", // Dm Bb5 Dm Cm Bb Gm Bb Cm
  AP: "[bb4,d5] [g4,bb4]@2 [bb4,d5]@2 [c5,eb5]@3", AQ: "[bb4,d5]@2 [g4,bb4] [bb4,d5]@3 [bb4,d5]!2",
  AR: "[f5@2 d5@2 ~ [c5,eb5] [d5,f5] [c5,eb5] [bb4,d5]@2 [g4,bb4] [bb4,d5]@2 [bb4,d5]@2 [bb4,d5], bb5@5 ~@3]/2", // Cm Dm Cm Bb Gm Bb
  AS: "[[f5,bb5]@2 [c5,eb5] [d5,f5]@9 ~ [bb4,d5]@2 [bb4,d5]]/2", AT: "[[f5,bb5]@2 [c5,eb5] [d5,f5]@16 ~@5]/3",
})).s("gm_pad_choir").gain(0.4)

// chords · piano · "Groovy Piano"
const piano = note("<A B@4 C@4 D E@8 F G H I J K L@5 M@2 N O@2 P@7 ~@64>".pickRestart({
  A: "~@6 c4 d4", B: "[~ e4@4 f4@4 g4@4 b4@4 ~ g4@2 e4@2 c4@4 d4@4 e4@4 ~ c4@25 ~@4, ~@9 e4@11 ~@44]/4",
  C: "[c4@4 ~ [d4,f4,d5]@4 [d4,f4,d5]@2 [e4,a4,c5]@8 [c4,e4]@6 ~ [c4,e4]@4 ~@4 f4@4 ~ [bb4,d5]@4 [a4,c5]@2 [g4,bb4]@6 [a4,c5]@2 [g4,bb4,d5]@11, ~@19 a4@11 d4@8 ~ f4@6 d4@8 ~@11]/4", // Dm Am C Bb Am Gm Am Gm
  D: "[bb3,d4]@8 ~ [g4,bb4]@4 [a4,c5]@3, ~@9 d4@7", // Bb Gm Am
  E: "[~ [bb4,d5,f5]@6 [f4,bb4]@6 ~ [d4,bb4]@4 [d4,f4,bb4]@8 ~ [f4,d5]@4 [f4,bb4]@4 [g4,bb4]@4 [a4,c5]@2 g4@6 ~ [d4,f4]@4 [bb3,d4,g4]@8 ~ [g4,bb4]@2 c5@4 [bb4,d5,f5]@8 [f4,bb4]@6 ~ [f4,bb4]@4 [d4,f4,bb4]@8 ~ [f4,d5]@4 [f4,bb4]@4 [g4,bb4]@2 [a4,c5]@4 g4@6 ~ [d4,g4]@4 ~@4 f2@4, ~@7 d5@11 ~@9 d4@8 d4@13 ~@13 d4@6 ~@28 d4@8 d4@13 ~@4 [bb3,d4,g4]@8, ~@41 bb4@11 ~@23 d5@11 ~@23 bb4@11 ~@8]/8", // Bb Bb5 Gm Bb Dm Bb5 Gm Am …
  F: "[g2,g4,bb4] [a2,a4,c5] [bb2,d3,f4,bb4,d5] [f2,bb4,d5,f5], d4 ~", // Gm Am Bb
  G: "[f4,bb4,d5] ~@3 g2@2 [d2,bb3,d4,g4]@2, bb2 a2 ~@2, ~ [d4,a4,c5]@2 [d4,g4,bb4]@3 ~@2", // Bb Gm D7 Gm
  H: "[g4,bb4] ~@3 bb2@2 [f2,bb4,d5,f5]@2, d4@3 [f4,bb4,d5]@3 ~@2, g2 a2 ~@2, ~ [a4,c5]@2 ~@5", // Gm Bb Am
  I: "[f4,bb4,d5] ~@3 g2@2 [d2,d4,g4]@2, bb2 a2 ~@2, ~ [d4,a4,c5]@2 bb4@5, ~@3 [d4,g4]@3 ~@2", // Bb G5 D7 G5
  J: "~@3 c5 [bb2,f4,bb4,d5]@2 [f2,d4,f4,bb4]@2, g2 a2 ~@2, ~ d4@3 ~@4, ~ [g4,bb4]@2 ~@5", // Bb Gm
  K: "[bb2,f4,bb4,eb5] [a2,d4,bb4,d5] [g2,d4,g4,c5] [d2,d4,g4,bb4]", // Bbsus4 Bbmaj7 Gsus4 Gm
  L: "[[d4,g4,bb4] ~@3 f2@2 [f3,f4,a4]@2 eb3@2 [c3,f4,a4]@2 f2@2 [a2,f4,a4]@2 c3@2 [f2,f4,a4]@2 ~ [f4,bb4] [bb4,d5] [a4,c5] [bb4,d5] ~@8 [g4,bb4] [a2,a4,c5]@2 [bb2,f4,bb4,d5]@2 [f2,bb4,d5,f5]@2, g2 a2 ~@8 bb2 f2 bb2 a2 g2 d2 g2 ~@3, ~ [d4,a4,c5]@2 c5@17 ~@5 [a4,c5]@2 [g4,bb4]@2 [a4,c5]@2 [g4,bb4]@2 ~@7, ~@3 [f4,a4]@3 ~@14 d4@16 ~@4]/5", // Gm F Dm F Bb5 Bb Am Bb …
  M: "[[bb2,f4,bb4,d5]@2 [a2,d4,f4,bb4]@2 [g2,g4,bb4]@2 [d2,g4,bb4]@2 ~@3 [a4,c5] [bb2,f4,bb4,d5]@2 [f2,bb4,d5,f5]@2, ~ d4@2 ~, ~@4 g2 a2 ~@2, ~@9 [g4,bb4]@2 ~@5]/2", // Bb Bbmaj7 Gm Am Bb Gm
  N: "[bb2,f4,bb4,d5]@2 [a2,d4,f4,c5]@2 [g4,bb4] ~@2 [g4,bb4], ~ d4, ~@2 g2 d2, ~@5 g4@2 ~", // Bb Dm7 Gm
  O: "[g2@4 [d3,a4,c5]@4 [c4,e4,g4,a4]@23 [c4,e4]]/2", // D7 Am7 C
  P: "[~@2 a4@2 a4 [bb3,d4,g4]@17 [c4,e4,g4,a4]@17 [bb3,d4,g4]@17]/7", // Gm Am7 Gm
})).s("gm_piano").gain(0.4)

// chords · piano · "Groovy Piano"
const piano_2 = note(`<
  ~@45 A B@4 C@2 D@7 E F G H I J K@2 L@2 G M N O P@2 Q@2 R S T U V W X Y Z@10 AA AB@8 ~
>`.pickRestart({
  A: "~@2 c4 [d4,f4,d5]", // Dm
  B: "[~ [d4,f4,d5]@2 [e4,a4,c5]@8 [c4,e4]@6 ~ [c4,e4]@4 ~@4 f4@4 [bb4,d5]@2 ~ [a4,c5]@4 [g4,bb4]@4 [a4,c5]@4 [g4,bb4,d5]@11 [bb3,d4]@8, ~@11 a4@11 d4@8 f4@6 ~ d4@8 ~@19]/4", // Dm Am C Bb Am Gm Am Gm …
  C: "[[g4,bb4]@4 ~ [a4,c5]@4 [bb4,d5,f5]@6 [f4,bb4]@6 ~ [d4,bb4]@4 [d4,f4,bb4]@6, d4@8 ~@7 d5@11 ~@6]/2", // Gm Am Bb Bb5 Gm Bb
  D: "[~@2 [f4,d5]@4 ~ [f4,bb4]@4 [g4,bb4]@2 [a4,c5]@4 g4@6 ~ [d4,g4]@4 [bb3,d4,g4]@8 [g4,bb4]@2 ~ [a4,c5]@4 [bb4,d5,f5]@8 [f4,bb4]@6 ~ [f4,bb4]@4 [d4,f4,bb4]@8 [f4,d5]@4 ~ [f4,bb4]@4 [g4,bb4]@2 [a4,c5]@4 g4@6 ~ [d4,g4]@4 ~@4 f2@4 [g2,g4,bb4]@4 [a2,e4,a4,c5]@4, ~@2 d4@8 ~ d4@13 ~@12 d4@6 ~@28 d4@8 ~ d4@13 ~@4 d4@12 ~@4, ~@17 bb4@11 ~@23 d5@11 ~@23 bb4@19 ~@8, ~@12 g4 ~]/7", // Dm Bb5 Gm Am G5 Gm Am Bb …
  E: "[bb2,d3,f4,bb4,d5] [f2,bb4,d5,f5] [bb2,f4,bb4,d5] [a2,d4,g4,bb4]", // Bb Gm
  F: "[d4,g4,bb4] ~@3 g2@2 [a2,bb4,d5]@2, g2 d2 ~@2, ~ [bb3,d4,g4]@2 d4@5, ~@3 [g4,bb4]@3 ~@2", // Gm Bbmaj7 Gm
  G: "[bb2,f4,bb4,d5] [f2,bb4,d5,f5] [bb2,f4,bb4,d5] [a2,d4,f4,bb4]", H: "g2 [d2,d4,g4] [g2,g4,bb4] [a2,g4,d5], c5 d4",
  I: "[bb2,f4,bb4,d5] [f2,bb4,d5,f5] [bb2,f4,bb4,d5] [a2,d4,bb4,d5]", // Bb Bbmaj7
  J: "[g2,d4,g4,bb4] [d2,bb3,d4,g4] [g2,d4,g4,bb4] [a2,d4,g4,d5]", // Gm Dsus4
  K: "[f2 [f3,f4,a4] eb3 [c3,f4,a4] f2 [a2,f4,a4] c3 [f2,f4,a4], c5]/2", // F Dm F
  L: "[~ [f4,bb4] [bb4,d5] [a4,c5] [bb2,bb4,d5]@2 [a2,f4,bb4]@2 [g2,g4,bb4]@2 [a4,c5] ~ g2@2 [a2,a4,c5]@2, d4, bb2 f2 ~@3 d2 ~@2, ~@11 [g4,bb4]@3 ~@2]/2", // Bb5 Bb Am Bb Bbmaj7 Gm Am Gm
  M: "[g2,c5] [d2,bb4] [g2,bb4] [a2,d4,g4,c5], [d4,g4]@3 ~", // C5 Gm Am7 G5
  N: "[bb2,f4,bb4,d5] [f2,bb4,d5,f5] [bb2,f4,bb4,d5] [a2,d4,f4,c5]", // Bb Dm7
  O: "[g4,bb4] ~@3 g2@2 [a2,g4,c5]@2, d4, g2 d2 ~@2, ~ g4@2 [g4,bb4]@3 ~@2", // Gm Am7 Gm
  P: "[[bb2,bb4,d5,f5] f2 bb2 a2 g2 [d2,g4,bb4] g2 [a2,g4,bb4], ~ f5@7]/2", // Bb Gm Eb
  Q: "[[bb2,f4,bb4,d5]@2 [f2,bb4,d5,f5]@2 [bb2,f4,bb4,d5]@2 [d4,f4,bb4] ~ g2@2 [d2,bb3,d4,g4]@2 g4 ~ a2@2, ~@3 a2 ~@2 g2 ~, ~@7 bb4@5 ~ [a4,c5]@3, ~@7 [d4,g4]@3 ~@2 [d4,bb4]@4]/2", // Bb Gm Am G5 Gm
  R: "[b2,f4,bb4,d5] [f2,bb4,d5,f5] [g2,f4,bb4,d5] [a2,d4,f4,bb4]", // Bb Gm7 Bbmaj7
  S: "g4 ~@5 a2@2, d4, bb4@3 bb4@5, g2 d2 g2 ~, ~ g4@2 g4@2 [a4,c5]@3", // Am
  T: "[bb2,f4,bb4,d5] [f2,bb4,d5,f5] [bb2,f4,d5] [a2,d4,f4,c5], ~ bb4", // Bb Dm7
  U: "[g2,d4,g4]@2 [bb3,d4,g4] ~ g2@2 [a2,g4,c5]@2, bb4@3 [d4,bb4]@5, ~ d2 ~@2, ~@3 g4@3 ~@2", // G5 Gm Am7 Gm
  V: "[bb2,f4,bb4,d5] [f2,bb4,d5,f5] [bb2,f4,bb4,d5] [a2,f4,bb4,c5]", // Bb F
  W: "[g2,d4,g4]@2 [bb3,d4,g4] ~ g2@2 [d4,g4,bb4] bb4, bb4@3 [d4,g4,bb4]@3 ~@2, ~ d2 ~ g2", // G5 Gm
  X: "[bb2,bb4,d5,f5]@2 [f2,f4,d5]@2 ~ [a4,c5] d5 [a4,c5], ~ bb4@2 ~, ~ d4, ~@2 bb2 [a2,bb4]", // Bb Dm Am Bbmaj7
  Y: "[g2,d4,g4]@2 [bb3,d4,g4] ~@4 [d4,g4,bb4], bb4@3 [d4,g4,bb4]@2 [d4,g4,bb4]@2 ~, ~ d2 g2 a2", // G5 Gm
  Z: "[[bb2,bb4,d5,f5]@2 [f2,f4]@2 bb2@2 [a2,f4,bb4]@2 [g2,g4,bb4]@2 [d2,g4]@2 ~@3 [g4,bb4], ~ d5@5 d4@2, ~@2 bb4@4 ~@4 bb4@3 [g4,bb4]@2 ~, ~@6 g2 a2]/2", // Bb F Bbmaj7 Gm G5 Gm
  AA: "[bb2,bb4,d5,f5] [f2,f4] bb2 [a2,f4,bb4], ~ d5@3, ~ bb4@2 ~", // Bb F Bbmaj7
  AB: "[[g2,g4,bb4]@2 [d2,g4]@2 ~@3 bb4@57, ~@2 bb4@3 [g4,bb4]@2 g4 ~@56, ~ d4 ~@14, ~@2 g2 a2 ~@28]/8", // Gm G5 Gm
})).s("gm_piano").gain(0.4)

// chords · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  A@7 B@2 C@4 D@4 E@7 F@8 G@3 H I@3 J K@8 L@6 M@8 N@8 O@16 P@8 Q@2 R@8 ~
>`.pickRestart({
  A: "[~@19 g4@2 ~@15 g4@2 ~@68 c4@2 f4@2 bb2@2, ~@8 c3@17 c3@17 c3@15 e4@8 e4@7 bb3@8 c4@8 ~ c4@6 a4@8 ~ a4@8, ~@10 g4@7 g3@8 ~@2 g4@7 g3@8 ~@2 g4@7 g3@8 c3@15 e4@8 f4@8 ~ f4@6 c4@8 ~@7, ~@12 b3@8 ~ b3@8 b3@8 ~ b3@8 bb3@7 g4@8 g4@7 g3@8 f3@8 ~ c3@17 c3@8 ~@2, ~@14 e4@8 ~ e4@8 e4@8 ~ e4@8 e4@7 bb3@8 bb3@7 g4@8 a4@8 ~ a4@6 f3@6 f4@8 ~@5]/7",
  B: "[~@11 f3@2 bb3@2 ~@2 g4@2 bb3@2 d4@2 ~@3 g4@2 bb3@2 d4@2, d4@7 bb2@8 g2@8 ~ g2@8, ~@2 f3@7 d4@8 ~@15, ~ bb3@2 ~@5]/2",
  C: "[~@28 d4@2 bb3@2 ~@15 f3@2 bb3@2 ~@11 g4@2, g2@8 ~ g2@8 bb2@8 ~ bb2@8 bb2@8 ~ bb2@8 g2@8 ~ g2@4, ~@2 g4@8 ~ g4@8 ~@4 bb3@7 ~@2 bb3@6 ~@2 bb3@8 ~@5 g4@8 ~@3, ~@4 bb3@8 ~ bb3@8 f3@8 ~ [f3,bb4,d5,f5]@8 f3@8 ~@9 bb3@8 ~, ~@6 d4@8 ~ d4@4 d4@8 ~@3 d4@6 d4@9 d4@12 d4@7]/4", // Bb
  D: "[d4@2 ~@30 d4@2 bb3@2 ~@15 f3@2 bb3@2 ~@6 d4@3, [g3,bb3,bb4,d5,g5]@8 bb3@8 ~ bb3@8 f3@8 ~ [f3,bb4,d5,f5]@6 d4@7 bb2@8 g2@8 ~, g4@6 g4@9 g4@42 g4@7, ~@2 d4@8 d4@9 d4@4 d4@7 bb2@6 bb3@6 f3@7 d4@12 ~@3, ~@4 g2@8 ~ g2@8 bb2@6 bb3@7 d4@4 bb2@6 bb3@8 ~@7 bb3@5]/4", // Gm Bb
  E: "[~ g4 d4 ~@15 f3 bb3 ~@14 f3 bb3 ~@14 f3 bb3 ~@3 d4, g2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@6 d4@4 d4@2 d4@3 bb2@4 g2@4, ~@2 [g3,bb3,bb4,d5,g5]@4 bb3@4 bb3@4 f3@3 d4@6 d4@4 d4@2 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@2, ~@2 g4@3 g4@4 g4@12 g4@4 g4@12 g4@4 g4@12 g4@3, ~@3 d4@4 d4@4 d4@2 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@6 ~]/7", // Gm
  F: "[~@18 c4 f4 ~@6 f3 bb3 ~@14 f3 bb3 ~@14 f3 bb3 ~@3 d4, g2@4 f3@2 c4@2 c3@5 a4@2 f4@2 a4@4 ~ f3@3 d4@6 d4@4 d4@2 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@2, ~ g4@28 g4@4 g4@12 g4@4 g4@12 g4@3, ~@2 bb3@3 a4@2 f4@2 a4 c4 f4 f3@2 c4@2 c3@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@6 d4@4 d4@2 d4@3 bb2@4 g2@4, ~@3 d4@18 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@6 ~]/8",
  G: "[~@23 bb3, g2@8 c3@11 a4@2 c4@2 e4@2 c3@11 a4@2 c4@4 g2@2 g4@4, ~ g4@19 e4@4, ~@4 bb3@6 a4@2 c4@2 e4@2 g3@11 a4@2 c4@2 e4@2 g3@15, ~ d4@7]/3",
  H: "~@13 g4@2 bb3, d4@9 d4@7, ~ g3@7, ~@5 g4@6 g2@5, ~@7 bb3@8 ~",
  I: "[~@23 g2, ~ d4@9 d4@32 c4@2 e4@4, ~@3 g3@11 a4@2 c4@2 e4@2 g3@11 a4@2 c4@2 e4@2 g3@11, ~ g4@7, ~@8 bb3@4 c3@11 a4@2 c4@2 e4@2 c3@11 a4@8]/3",
  J: "~@13 d4@2 g2, g4@9 g4@7, ~@2 bb3@8 ~ bb3@5, ~@4 d4@9 ~@3, ~@3 g3@5",
  K: "[~@41 e4 ~@15 c4 f4 ~@4 bb2, ~ g4@9 g4@6 c3@13 b3@4 c3@13 b3@4 c3@13 bb3@4 c3@17 f3@4 c4@4 c3@11 a4@4 f4@5 a4@8 ~@2 f3@6, ~@3 bb3@8 ~ bb3@6 g4@4 e4@5 g4@4 e4@4 g4@4 e4@5 g4@4 e4@4 g4@4 e4@5 g4@4 e4@4 g4@4 e4@5 g4@50, ~@5 d4@9 d4@106 d4@8, ~@7 g3@13 b3@4 g3@13 b3@4 g3@13 bb3@4 g3@13 bb3@4 g3@5 bb3@4 ~@2 a4@4 f4@5 a4@2 c4@2 f4@2 f3@4 c4@4 c3@8 ~ bb2@6 bb3@4]/8",
  L: "[~@3 f3@2 bb3@2 ~@4 bb3@2 ~@7 bb3@2 ~@30 d4@2 bb3@2 ~@15 f3@2 bb3@2 ~@11 g4@2 d4@2 ~@4 g4@2, ~ d4@12 d4@9 d4@8 d4@9 d4@4 d4@6 bb2@7 bb3@4 d4@6 bb2@8 ~ g2@8 g2@8 ~ g2@4, ~@7 g2@8 g2@8 ~ g2@8 g2@8 ~ bb2@6 bb3@7 d4@4 bb2@6 bb3@8 ~@7 bb3@8 ~ [g3,bb3,bb4,d5,g5]@8, ~@9 g4@9 g4@8 g4@9 g4@42 g4@9 ~@2 g4@6 ~@2, ~@28 bb3@8 ~ bb3@8 f3@8 ~ [f3,bb4,d5,f5]@8 f3@7 d4@12 d4@7 ~@2 d4@6]/6", // Gm Bb
  M: "[~@24 d4@2 bb3@2 ~@15 f3@2 bb3@2 ~@11 g4@2 d4@2 ~@30 f3@2 bb3@2 ~@28 f3@2 bb3@2, bb3@7 g4@42 g4@9 ~@2 g4@6 g4@8 g4@24 g4@8 g4@22, ~@2 d4@9 d4@4 d4@6 bb2@7 bb3@4 d4@6 bb2@8 ~ g2@8 g2@8 ~ g2@8 g2@8 bb2@6 bb3@8 ~@6 bb3@8 bb3@8 f3@6 d4@6, ~@4 g2@8 ~ bb2@6 bb3@7 d4@4 bb2@6 bb3@8 ~@7 bb3@8 ~ [g3,bb3,bb4,d5,g5]@8 bb3@8 bb3@8 f3@6 d4@12 d4@8 d4@4 d4@6 bb2@8, ~@9 bb3@8 f3@8 ~ [f3,bb4,d5,f5]@8 f3@7 d4@12 d4@7 ~@2 d4@8 d4@8 d4@4 d4@6 bb2@8 g2@8 g2@8 bb2@6 bb3@8 ~@2]/8", // Gm Bb
  N: "[~@14 f3 bb3 ~@22 c4 f4 ~@6 f3 bb3 ~@14 f3 bb3, g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@3 a4@2 f4@2 a4 c4 f4 f3 a4@2 f4@2 a4@4 ~ f3@3 d4@6 d4@4 d4@2 d4@3 bb2@4, ~ g4@4 g4@12 g4@4 g4@28 g4@4 g4@11, ~@2 bb3@4 bb3@4 f3@3 d4@6 d4@4 d4@18 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~, ~@3 d4@4 d4@2 d4@3 bb2@4 g2@4 g2@4 f3@2 c4@2 c3@6 c4@2 c3@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@3]/8",
  O: "[~@14 f3 bb3 ~@14 f3 bb3 ~@14 f3 bb3 ~@14 f3 bb3, g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@6 d4@4 d4@2 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~, ~ g4@4 g4@12 g4@4 g4@12 g4@4 g4@12 g4@4 g4@11, ~@2 bb3@4 bb3@4 f3@3 d4@12 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@3, ~@3 d4@4 d4@2 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@12 d4@3 bb2@4]/8",
  P: "[~@6 d4 ~@7 f3 bb3 ~@6 d4 ~@7 f3 bb3 ~@6 d4 ~@7 f3 bb3 ~@6 d4 ~@7 f3 bb3, g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@6 d4@3 ~ d4@2 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~, ~ g4@4 g4@12 g4@4 g4@12 g4@4 g4@12 g4@4 g4@11, ~@2 bb3@4 bb3@4 f3@3 d4@6 d4@3 ~ d4@2 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@3, ~@3 d4@3 ~ d4@2 d4@3 bb2@4 g2@4 g2@4 bb2@3 bb3@4 ~@3 bb3@4 bb3@4 f3@3 d4@6 d4@3 ~ d4@2 d4@3 bb2@4]/8",
  Q: "[~@6 d4 ~@7 f3 bb3, g2@4 g2@4 bb2@3 bb3@4 ~, ~ g4@4 g4@11, ~@2 bb3@4 bb3@4 f3@3 d4@3, ~@3 d4@3 ~ d4@2 d4@3 bb2@4]/2",
  R: "[~@6 d4 d4@57, g2!2 ~@14, ~ g4@4 g4@59, ~ bb3@2 bb3@2 ~@27, ~@3 d4@3 ~@58]/8",
})).s("gm_acoustic_guitar_steel").gain(0.4)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B C@3 D E@3 F G@3 H I J@3 K L M L M L N O P L M L M L Q R@2 S T U@2 V W X Y@3 Z AA AB@3 AC@3 AD AE@4 AF AG AH AG AH
  AG AH AI AJ AG AH AG AH AG AH AG AH AG AH AK AH AG AH AG AL AG AH AG AH AG AH AG AH AG AH AG AH AG AH ~@8
>`.pickRestart({
  A: "~@2 c2 g2", B: "~ c3@4 g2@4 c2@4 g2@3", C: "[~@2 c3@4 g2@4 c2@4 g2@4 ~ bb2@4 g2@4 c2@4 g2@4 ~ bb2@4 g2@4 f1@4]/3",
  D: "c2@4 ~ f2@4 c2@4 f1@3", E: "[~ c2@4 ~ f2@4 c2@4 bb1@4 f1@4 ~ bb1@4 a1@4 g1@4 d2@4 ~ g2@4 d2@4]/3",
  F: "g1@4 d2@4 ~ g2@4 d2@3", G: "[~ bb1@6 f2@6 ~ f2@4 bb1@4 f2@4 ~ bb2@4 a2@4 g2@6 g2@6 ~]/3",
  H: "d2@4 g1@4 d2@4 ~ g2@3", I: "~ d2@4 bb1@6 f2@5",
  J: "[~@2 f1@4 bb1@4 f2@4 ~ bb2@4 a2@4 g2@6 g2@6 ~ d2@4 g1@4 d2@4]/3", K: "g2 d2 bb1 f1", L: "bb1 a1 g1 d1",
  M: "g1 a1 bb1 f1", N: "g1 a1 f1 f2", O: "eb2 c2 f1 a1", P: "c2 f1 bb1 f1", Q: "g1@2 d2@2 c2 ~@2 c2",
  R: "[c2@2 ~ c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 c2@2 ~@7 g1@2 ~@4]/2", S: "g1@2 g1@2 ~ g1@2 ~@2 g1@2 ~@2 g1@2 ~",
  T: "~ g1@2 g1@2 ~@7 c2@2 ~@2", U: "[~@2 c2@2 c2@2 ~ c2@2 ~@2 c2@2 ~@2 c2@2 ~@2 c2@2 c2@2 ~@7 g1@2]/2",
  V: "~@4 g1@2 g1@2 ~ g1@2 ~@2 g1@2 ~", W: "~ g1@2 ~@2 g1@2 g1@2 ~@7", X: "c2@4 g2@4 c3@4 ~ g2@3",
  Y: "[~ c2@4 g2@4 c3@4 ~ g2@4 c2@4 g2@4 bb2@4 ~ g2@4 c2@4 g2@4 bb2@4 ~]/3", Z: "g2 f1 c2 f2",
  AA: "~ c2@4 f1@4 c2@4 f2@3", AB: "[~@2 c2@4 bb1@4 f1@4 bb1@4 ~ a1@4 g1@4 d2@4 g2@4 ~ d2@4 g1@4 d2@4]/3",
  AC: "[g2@4 ~ d2@4 bb1@6 f2@6 ~ f2@4 bb1@4 f2@4 bb2@4 ~ a2@4 g2@5]/3", AD: "~ g2@6 ~ d2@4 g1@4",
  AE: "[d2@4 g2@4 ~ d2@4 bb1@6 f2@6 ~ f1@4 bb1@4 f2@4 bb2@4 ~ a2@4 g2@6 g2@6 ~ d2@4]/4", AF: "g2@3 g2@3 f2@2",
  AG: "bb1 f1 bb1 a1", AH: "g1 d1 g1 a1", AI: "f1 f2 eb2 c2", AJ: "f1 a1 c2 f1", AK: "bb1 f1 g1 a1", AL: "g1 d1 g1!2",
})).s("gm_electric_bass_pick").gain(0.45)

// other · tinkle bell · "Bell"
const tinkle_bell = note("<~ A@2 B@2 C D E@2 ~@32 F@2 G@2 H@2 I J@2 ~@55>".pickRestart({
  A: "[~@5 [e6,g6]@2 f6@2 [e6,f6]@2 e6@2 d6@2 e6@2 ~ e6@2 ~@2 e6@2 e6@2 [d6,f6]@2 e6@2 d6@2]/2", // Em Fmaj7 Dm
  B: "[e6@2 ~@3 [c6,e6]@2 e6@2 e6@2 f6@2 e6@2 e6@2 e6@2 ~ e6@2 ~@2 e6@2 f6@2 [d6,e6,f6]@2 ~@2]/2", // C Dm
  C: "~@2 [c6,e6]@2 ~ e6@2 [c6,e6]@2 ~@4 [e6,f6]@2 ~", D: "~ e6@2 c6@2 ~ e6@2 [c6,f6]@2 g6@2 ~@2 e6@2",
  E: "[~@2 d6@2 e6@2 ~ e6@2 ~@4 f6@2 [d6,f6]@2 e6@2 ~@2 e6@2 ~ e6@2 c6@2 d6@2 e6@2]/2", // Dm
  F: "[~@13 [e6,g6]@2 f6@2 [e6,f6]@2 e6@2 d6@2 e6@2 e6@2 ~@3 e6@2]/2", // Em Fmaj7
  G: "[e6@2 [d6,f6]@2 e6@2 d6@2 e6@2 ~@3 [c6,e6]@2 e6@2 e6@2 f6@2 e6@2 e6@2 e6@2 e6@2 ~@3]/2", // Dm C
  H: "[e6@2 f6@2 [d6,e6,f6]@2 ~@4 [c6,e6]@2 e6@2 ~ [c6,e6]@2 ~@4 [e6,f6]@2 ~@2 e6@2 c6@2 e6@2 ~]/2", // Dm C Fmaj7
  I: "[c6,f6] g6 ~ e6 ~ d6 e6!2", J: "[~@5 f6@2 [d6,f6]@2 e6@2 ~@2 e6@2 e6@2 ~ c6@2 d6@2 e6@2 ~@8]/2",
})).s("gm_tinkle_bell").gain(0.15).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@10 A ~ B ~ C ~@2 D E F@13 D ~@18 G ~ H ~ I ~ J ~ F@38 ~@8>".pickRestart({
  A: "~@5 x ~@2", B: "~@3 x", C: "~@7 x", D: "x", E: "~ x", F: "x!2", G: "~ x ~@14", H: "~@3 x ~@12", I: "~@5 x ~@10",
  J: "~@7 x ~@8",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@18 A B@7 C B@5 D ~@26 B@7 E B@30 ~@8>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x!3 ~@2 x ~", D: "~ x ~@2", E: "~@2 x ~@2 x!3",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@37 [~@13 x ~@2] [~ x ~@3 x ~@4 x ~@5] ~@36 [~ x ~ x]!22 ~@8>").gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@18 A B@13 C ~@26 B@20 D B@17 ~@8>".pickRestart({
  A: "~@2 x!2", B: "x!4", C: "x!2 ~@2", D: "~ x!3",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@10 A ~ B ~ C ~ D ~@9 E ~@5 E ~@17 F ~ G ~@2 H ~ I ~@9 J ~@37>".pickRestart({
  A: "~@5 x ~@10", B: "~@7 x ~@8", C: "~@9 x ~@6", D: "~@11 x ~@4", E: "~ x", F: "~@13 x ~@2", G: "~@15 x",
  H: "~ x ~@14", I: "~@3 x ~@12", J: "x",
})).gain(0.5)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@33 A B C D E F G H ~@64>".pickRestart({
  A: "~@11 x ~ x ~ x", B: "~ x ~@2 x ~ x ~ x ~ x ~ x ~ x ~", C: "x ~ x ~@2 x ~ x ~ x ~ x ~ x ~ x",
  D: "~ x ~ x ~@2 x ~ x ~ x ~ x ~ x ~", E: "x ~ x ~ x ~@2 x ~ x ~ x ~ x ~ x", F: "~ x ~ x ~ x ~@2 x ~ x ~ x ~ x ~",
  G: "x ~ x ~ x ~ x ~@2 x ~ x ~ x ~ x", H: "~ x ~ x ~@12",
})).gain(1.76)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~@32 [~@4 x!4] [x ~@2 x ~ x ~ x ~ x ~@6] ~@71>").gain(1.01)

// drums · shaker
const shaker = s("sh").struct("<~@18 [~@5 x ~ x] [~ x ~ x ~ x ~ x]!13 [~ x ~ x ~@4] ~@26 [~ x ~ x ~ x ~ x]!38 ~@8>")
  .gain(0.3)

stack(
  pad_choir, piano, piano_2, acoustic_guitar_steel, bass, tinkle_bell, kick, snare, clap, hihat, crash, cabasa,
  cabasa_soft, shaker
)

More by Paul Simon