Strudelify
Forrest Gump: San Francisco (Be Sure to Wear Some Flowers in Your Hair) cover art

Forrest Gump - The Soundtrack

Forrest Gump: San Francisco (Be Sure to Wear Some Flowers in Your Hair)

Scott McKenzie

KeyD majorTempo100 bpm
0:00/0:00
// Forrest Gump: San Francisco (Be Sure to Wear Some Flowers in Your Hair) — Scott McKenzie
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(100/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 · fretless bass · "Bass"
const bass = note(`<
  ~@2 A B C D E F G H I G J K L M N O H P F Q R A B Q H S G F T U M I V W X@4 Y@2 Z AA@3 AB Y AC AD AE I AF AG W A F AH
  D I AI AJ K AK AL AM K AN AO AP AQ AR AS AT@3 AU AV@2 AW@2 AU AX@3 AU AY@2 AZ BA@2
>`.pickRestart({
  A: "e2@5 ~ e2 ~ e2@4 d2@4", B: "c2@5 ~ c2 ~ c2@8", C: "g2@4 ~@2 g2 ~ g2@7 ~", D: "d2@2 ~ d2 f#2 g2 a2@2",
  E: "e2@5 ~ e2 ~ e2@4 d2@3 ~", F: "c2@5 ~ c2 ~ c2@5 ~ c2@2", G: "g2@4 ~@2 g2 ~ g2@5 ~ g2@2",
  H: "d2@5 ~ d2@2 f#2@2 g2@2 a2@2 d2@2", I: "e2@5 ~ e2 ~ e2@5 ~ e2@2", J: "c2@5 ~ c2@2 c2@5 ~ c2@2",
  K: "g2@4 ~@2 g2 ~ g2@5 ~ d2@2", L: "g2@4 ~@2 g2 ~ g2@2 e2@2 d2@2 e2@2", M: "b1@5 ~ b1 ~ b1@6 d2@2",
  N: "e2@5 ~ e2 ~ e2@5 ~ b1@2", O: "d2@5 ~ d2 ~ d2@5 ~ d2 ~", P: "e2@5 ~ e2 ~ e2@3 ~ d2@4",
  Q: "g2@5 ~ g2 ~ g2@5 ~ g2@2", R: "d2@5 ~ d2@2 f#2@2 g2@2 a2@4", S: "e2@5 ~ e2 ~ e2@7 ~", T: "g2@5 ~ g2 ~ g2@5 ~ d2@2",
  U: "g2@5 ~ g2 ~ g2@2 e2@2 d2@2 g1@2", V: "d2@4 ~@2 d2 ~ d2@5 ~ d2 ~", W: "d2@2 ~ d2 f#2 g2 a2 d2",
  X: "f2 c2 f2 c2 f2 c2 f2 c2", Y: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~",
  Z: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2 ~@2 g2@2", AA: "~ c2 ~ c2 ~ c2 ~ c2, f2!4", AB: "~ c2 ~ c2 ~ c2 f2 c2, f2!3 ~",
  AC: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2", AD: "d2 ~ d2 ~ d2 ~ d2 ~ d2@2 d2 ~ d2 ~ d2 ~",
  AE: "d2 ~ d2 ~ d2 ~ d2@2 f#2@2 g2@2 a2@2 d2@2", AF: "a1@4 ~@2 a1@2 c2@5 ~ c2@2", AG: "g1@4 ~@2 g1@2 b1@5 ~ b1@2",
  AH: "g2@5 ~ g2 ~ g2@7 ~", AI: "g2@4 ~@2 g2 ~ g2@5 ~ g1@2", AJ: "c2@5 ~ c2 ~ c2@4 ~@2 c2@2",
  AK: "g2@4 ~@2 g2 ~ g2@2 e2@2 d2@2 g1@2", AL: "b1@5 ~ b1 ~ b1@5 ~ d2@2", AM: "e2@4 ~@2 e2 ~ e2@5 ~ d2@2",
  AN: "g2@2 ~ g2 e2 d2 e2 g2", AO: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2",
  AP: "f#2 ~ f#2 ~ f#2 ~ f#2 ~ f#2@2 f#2 ~ f#2 ~ f#2 ~", AQ: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~",
  AR: "d2@2 d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2", AS: "a2 ~ a2 ~ a2 ~ a2 ~ a2@2 f#2@2 e2@2 c#2@2",
  AT: "[a1@6 ~@2 a2@2 f#2@2 e2@4 c#2@4 ~@2 c#2 ~ c#2@5 ~ c#2@2 f#1@4 ~@2 f#1 ~@7 g#1@2, ~ a1@7]/3",
  AU: "a1@3 a1 a1@3 a1", AV: "[a1@6 a1@2 ~@6 g#1@2 f#1@5 ~ f#1 ~ f#1@5 ~ f#1@2, ~ a1@3]/2",
  AW: "[a1@6 a1@2 a1@6 ~@2 d2@5 ~ d2 ~ d2@5 ~ d2@2, ~@7 a1@9]/2",
  AX: "[a1@6 ~@2 a2@2 f#2@2 e2@2 ~@2 c#2@4 ~@2 c#2@2 c#2@5 ~ c#2@2 f#1@4 ~@2 f#1@2 f#1@5 ~ g#1@2, ~@3 a1@4 a1@17]/3",
  AY: "[a1@6 ~@2 a2@2 f#2@2 e2@2 c#2@2 f#1@5 ~ f#1 ~ f#1@5 ~ f#1@2, ~@3 a1@13]/2", AZ: "a1@3 a1 ~@3 e1, ~ a1",
  BA: "[a1@3 ~]/2",
})).s("gm_fretless_bass").gain(0.22)

// chords · piano
const piano = note(`<
  ~@2 A B@2 C D E F G H I@2 J@2 K L M@3 N@2 O P@3 Q R S T U@2 V W X Y Z@2 AA@2 AB@3 AC@2 AA@2 AD@4 AE AF@3 AG@2 AH AI
  AJ@2 AK AL AM AN AO AP@2 AQ AR AS AT AU AV AW AX AY@3 AZ@2 BA BB BC BD BE@4 BF@2
>`.pickRestart({
  A: "~ b3 ~ b3 ~ b3 ~ b3, g3@7 ~, g4@6 ~@2 g4@7 ~, ~@2 e4@3 ~ e4@2",
  B: "[~@7 e4 ~@2 d4 ~@2 d4 g4 d4, g3@9 ~ g3@8 ~@2 g3@12, g4@4 e4@8 ~@12 b4@7 ~, ~@2 c4@9 ~ c4@4 ~@2 b3@4 ~@10, ~@3 g4@4 ~ g4@2 ~ g4@2 ~@3]/2",
  C: "~@7 f#4, f#3@15 ~, f#4@2 d4@3 ~ d4@2, ~@2 a3@7 ~ a3@5 ~, ~@3 f#4@3 ~@2",
  D: "~@2 b3@2 ~@2 b3@2 ~@2 b3@3 ~ b3@2, [e3,g4]@15 ~, ~@2 g3@5 ~, ~ e4", // Em
  E: "~@5 c4 ~ c4, g4@3 e4@2 ~ e4@2, ~ g3@6 ~, ~@2 c4@2 g4@3 ~",
  F: "~@6 d4 g4, g3, g4@2 d4@3 ~@3, ~@2 b3@7 ~ b3@6, ~@3 g4@3 ~@2",
  G: "f#4 ~@6 f#4, f#3@7 ~, ~@2 a3@7 ~ a3@5 ~, ~@4 d4@7 ~ d4@4, ~@3 f#4@3 ~@2",
  H: "~@5 b3 ~ e4, e3, g4@3 e4@3 ~@2, ~ g3@4 ~ g3@2, ~@2 b3@2 g4@3 ~",
  I: "[~@14 g4 c4, g4@6 d4@6 ~ d4@3 e4@8 ~@2 e4@6, ~@2 b3@7 ~ b3@6 ~@2 c4@6 c4@4 ~@4, ~@4 g3@7 ~ g3@6 ~@2 e3@9 ~@3, ~@7 g4@4 g3@4 ~]/2",
  J: "[d4@2 ~@22 b4 ~@5 g4@2, g3@6 g4@6 d4@7 ~@3 d4@5 ~ d4@4, ~@2 b3@7 g3@9 ~@2 g3@11 ~, ~@4 d4@6 b3@6 ~@2 b3@7 ~ b3@6, ~@14 g4@7 ~@11]/2",
  K: "~@7 f#4, f#3@8 ~ f#3@7, f#4@2 d4@3 ~ d4@2, ~@2 b3@7 ~ b3@6, ~@3 f#4@3 ~@2",
  L: "~@13 e4 g4@2, e4@11 ~ b3@4, g3@4 e3@11 ~, ~@2 b3@7 ~ g3@6, ~@6 g4@7 ~@3",
  M: "[~@5 d3 ~@15 b3 ~ b3, f#3@10 ~@2 f#3@5 ~ d3@6 ~ d3@5 f#4@4 ~@4 g4@8 ~@2, f#4@4 d4@11 ~@5 f#3@4 ~@2 f#3@6 e3@14 ~@2, ~@2 a3@11 ~ a3@7 ~ d4@5 a3@5 ~@2 g3@12 ~@2, ~@6 f#4@8 ~@2 f#4@11 ~ d4@5 ~@3 b3@5 ~@3 e4@4]/3",
  N: "[~@3 e4@2 ~@6 d4@2 ~@2 g4, e3@15 ~ d3@14 ~@2, g4@12 ~@2 g4@9 ~@5 d4@4, ~@2 c4@6 ~@2 c4@5 ~@3 b3@7 ~ b3@5 ~, ~@2 g3@3 ~ [g3,e4]@2 ~@2 g3@6]/2", // C
  O: "~@7 f#4, d3@7 ~, f#4 f#3@3, ~ a3@2 f#4@3 d4@2, ~@4 d4@6 a3@5 ~",
  P: "[~@13 e4 ~@4 c4@2 ~@8 e4@2 ~@6 b3@2 ~@7 d4 g4@2, e3@13 ~@19 d3@10 ~@6, g4@4 b3@6 ~@2 b3@4 ~@4 e4@5 ~ c4@4 ~@14 b3@2 ~@2, ~@2 g3@7 ~ g3@4 ~@8 g3@8 ~@4 g3@5 ~@3 g3@4 ~@2, ~@3 e4@3 ~ g4@6 ~@2 g4@2 ~@2 g4@3 ~@2]/3",
  Q: "~@13 d4 f#4@2, f#3@3 f#4@3 ~@2, f#4@4 d4@7 ~ a3@2 ~@2, ~ a3@4 f#3@2 ~",
  R: "~@2 b3 ~@4 e4, [e3,g4]@5 ~@5 e3@6, ~ g3@2 e4@3 g3@2, ~@13 b3@2 ~", // Em
  S: "~@6 d4@4 ~@3 b3 d4@2, g4@7 ~, ~@2 b3@9 ~ g3@4, ~@4 g3@5 ~ d3@4 ~@2",
  T: "g4 ~@12 e4 g4@2, e3@7 ~, ~@2 c4@7 ~@3 c4@2 ~@2, ~@2 g3@3 g3@2 ~, ~@3 e4@3 ~@2",
  U: "[g4@2 ~@2 d4@2 ~@2 b4 ~@3 d4@2 ~@4 b3@2 d4@2 b4@3 ~ b3@2 d4@2 g4@2, g3@7 ~ g3@8, ~ b3@2 g4@3 ~ g4@3 ~@6, ~@10 b3@5 ~@17]/2",
  V: "f#4 b3 ~ b4 ~@2 d4 f#4, f#3, ~ d4 f#4 ~, ~@10 b3@5 ~",
  W: "~@3 e4@2 ~ e4 g4, e3@13 ~@3, g4@11 ~@5, ~@2 b3@5 ~@3 b3@4 ~@2, ~@2 g3@5 ~",
  X: "~@5 a3 ~ a3, d3@15 ~, f#4 f#3@3, ~@2 a3@4 f#4@9 ~, ~@2 d4@3 ~ d4@2",
  Y: "~@10 a3@2 d4@2 a3 ~, d3@13 ~@3, f#4@4 f#3@9 ~@3, ~ a3@2 f#4@4 ~, ~@2 d4@3 ~@3", Z: "[[f3,a3,c4,f4]@15 ~]/2",
  AA: "[[f3,a3,c4,f4]@31 ~]/2", AB: "[[g3,b3,d4,g4]@43 ~@5]/3", AC: "[[f3,a3,c4,f4]@29 ~@3]/2",
  AD: "[[g3,b3,d4,g4]@15 ~ [d4,f#4]@16, ~@31 d3@29 ~@4, ~@8 a3@7 ~]/4", // G D
  AE: "e3!2 ~ e4 ~ b3 ~ b3, ~@4 g3@11 ~, ~@5 b3@3 g4@6 ~@2, ~@3 e4",
  AF: "[~@13 e4 ~@7 d4 g4@2 ~@4 d4@2 ~@9 e4 ~@2 e4@2 ~@2 a3@2, [e3,g4]@6 e4@4 ~@2 c4@2 g4@6 b3@3 ~ f#4@4 ~@2 f#4@6 ~@2 d4@2 f#4@8, ~@2 a3@5 ~ e3@6 ~@2 d3@15 ~ d3@14 ~@2, ~@4 c4@6 g3@5 ~@3 g3@6 f#3@8 ~@2 f#3@13 ~, ~@13 b3@3 ~@2 a3@4 d4@2]/3", // Em
  AG: "[~@6 b3 g3@2 ~@2 e4 ~@3 g3, e3@15 ~@3 e3@10 ~@4, ~@2 g3@7 ~@10 g3@9 c4@4, ~@4 b3@6 e4@6 ~@4 c4@5 ~ e4@6, ~@3 g4@6 ~@3 g4@4]/2",
  AH: "~@3 g4@2 b3 b4 b3, d3, ~ g3@7, ~@4 b3@5 ~@7", AI: "~@3 f#4@2 d4 e4 f#4, d3, ~ f#3@6 ~, ~@2 a3@5 ~",
  AJ: "[~@2 b3 ~@2 b3 e4 b3 ~@3 d4 ~@2 b3@2, e3@14 ~@4 d3@4 ~@4 d4@5 ~, ~ g3@6 ~@3 g3@4 ~@2, ~@6 g4@15 b3@2 ~ g4@6 ~@2]/2",
  AK: "~@3 e4 ~ e4 c4 g3, ~@2 e3@9 ~@5, ~ g3@2 ~, ~@5 c4@3 g4@5 ~@3",
  AL: "~@3 d4 g4 b3 d4 b3, d3@5 ~@3, ~@2 g3@9 ~@5, ~ b3 ~@2", AM: "~ b3 b4 b3 ~ b3 d4 b3, g3@7 ~, ~@4 g4@3 ~",
  AN: "~@2 b3@2 b4 ~ d4@2 b3@2 ~@4 d4@2, f#3@5 f#4@5 f#3@6, ~@3 b3",
  AO: "~@5 e4 ~@2 e4@2 ~@2 g3@2 e3@2, e3@5 ~@3, ~ g3@4 b3@3, ~@4 b3@2 g4@9 ~",
  AP: "[~@4 b3@2 d4@2 ~@2 b3@2 d4@2 b3@2 ~@2 b3@2 g4@2 b3@2 d4@2 b3@2 b4 ~ d4 b3, d3@5 ~@11, ~ g3@4 ~ g3@5 ~@5, ~@8 g4@4 ~@4 b4@4 ~@9 g4@2 ~]/2",
  AQ: "[e3,g3,e4,g4]@13 ~@3, b3 ~@15", AR: "[f#3,a3,c#4,f#4,a4]@7 ~", AS: "[e3,a3,c#4,e4,a4]@7 ~",
  AT: "[d3,a3,d4,f#4]@13 ~@3", AU: "[c#4,e4], [e3,a3]@13 ~@3",
  AV: "~@4 c#4@2 ~@6 a3@2 e3 ~, e3@3 ~, ~ a3@4 c#4@3, ~@3 a4@5, ~ e4",
  AW: "~@3 e4 ~ e4 ~ g#3, ~@2 e3@11 ~@3, ~ g#3@2 c#4, ~@5 c#4@3 g#4@4 ~@4",
  AX: "~@3 a3, f#3@5 ~@3, ~ a3@4 c#4@3, ~ c#4 f#4@2, ~@3 a4@5",
  AY: "[~@4 c#4@4 ~@2 c#4@2 e4@2 ~@6 c#4@2 c#5@2 ~@2 e4@2 ~@2 a3@2 ~@4 c#4@2 c#5 a4 f#4@2 ~@2 a3@2 f#3@2, e3@14 ~@2 e3@12 ~@4 f#3@9 ~@7, ~@2 a3@12 c#4@4 a3@10 c#4@6 a3@7 ~ c#4@6, ~@8 a4@7 ~@9 a4@4 ~@20]/3",
  AZ: "[~@3 e4 ~@7 a4 ~@2 a3 d3, ~@2 a3@9 ~ c#4@4 d3@13 ~@3, ~@4 c#4@4 c#5@2 e4@6 ~@8 f#4@7 ~, ~@9 a4@5 a3@4 ~@2 a3@5 ~ d4@5 ~]/2",
  BA: "~@3 e4 ~@2 c#4 a3, ~ a3@5 ~@2, ~@4 c#4@4 a4@7 ~, ~@10 e4@5 ~",
  BB: "~@3 c#5 ~@3 a3, ~ a3@5 c#4@2, ~@2 c#4@2 a4@3 ~, ~@5 e4@3", BC: "~@4 c#4 ~@2 c#4, ~@3 e3@5, ~@10 g#4@5 ~, ~@3 e4",
  BD: "~@2 c#4 ~@2 a3 f#3 a3, f#3@7 f#4@7 ~@2, ~@2 a3@4 a4@9 ~, ~@8 c#4@7 ~",
  BE: "[~@4 c#5@2 ~@2 c#4@2 ~@2 c#4@2 ~@4 c#4@2 ~@14 c#4@2 ~@2 c#4@2 ~@2 c#4@2 f#4@2 ~@10 e4@2 c#4@3 ~@3, e3@23 ~ e3@6 ~@2 f#3@14 ~@2 e3@13 ~@3, ~@2 c#4@4 a4@8 a3@9 ~@3 a3@4 a4@4 ~@6 a4@7 ~@7 a4@5 ~@5, ~@10 e4@6 a4@6 c#4@4 ~@2 c#4@3 ~@5 a3@12 ~@2 a3@11 ~@3, ~@20 e4@4 ~@5 e4@2 ~@15 c#4@4 ~@2 c#4@4 ~@8]/4",
  BF: "[[c#4,f#4,b4]@19 ~@13]/2", // F#sus4
})).s("gm_piano").gain(0.22)

// chords · electric guitar muted · "E-Guitar"
const electric_guitar_muted = note("<~@36 A@4 B@3 A@4 B@2 C@2 D ~@16 E F G H G I ~@17>".pickRestart({
  A: "[f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~ [f3,c4] ~", // F5
  B: "[g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~", // G5
  C: "[d4,a4] ~ [d4,a4] ~ [d4,a4] ~ [d4,a4] ~ [d4,a4] ~ [d4,a4] ~ [d4,a4] ~ [d4,a4] ~", D: "[e4,b4]@9 ~@7",
  E: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~", F: "f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~ f#3 ~",
  G: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~", H: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", I: "[a3,e4]@9 ~@7",
})).s("gm_electric_guitar_muted").gain(0.19)

// other · celesta · "Bells"
const celesta = note(`<
  ~@2 A B C D E B C F E G B C H I E F J E B C K E B C F E G B C@2 I E L M N ~ O ~ P ~@2 Q ~ R ~ S ~ T@2 E U V W E B C F
  E C B C@2 I E C X ~@5 Y Z AA Y@2 AB Y J Y@2 Z AA Y@2 AB Y AC ~
>`.pickRestart({
  A: "~@2 b5 ~ g5 ~ e5 ~@5 g5 ~ e5 ~", B: "~@2 c6 ~ g5 ~ e5 ~@3 c6 ~ g5 ~ e5 ~",
  C: "~@2 b5 ~ g5 ~ d5 ~@3 b5 ~ g5 ~ d5 ~", D: "~@2 d6 ~ a5 ~@5 d6 ~@3 a5 ~", E: "~@2 b5 ~ g5 ~ e5 ~@3 b5 ~ g5 ~ e5 ~",
  F: "~@2 a5 ~ f#5 ~ d5 ~@3 d6 ~@3 a5 ~", G: "~@2 b5 ~ g5 ~ d5 ~@3 b5 ~ g5 ~@3", H: "~@2 b5 ~ g5 ~@5 b5 ~ g5 ~ d5 ~",
  I: "~@2 b5 ~ f#5 ~ d5 ~@3 b5 ~ f#5 ~ d5 ~", J: "~@2 d6 ~ a5 ~ f#5 ~@3 d6 ~ a5 ~ f#5 ~",
  K: "~@2 [d5,d6] ~@5 [d5,d6] ~@3 a5 ~ d5 ~", L: "~@2 d6 ~@3 a5 ~@3 d6 ~ a5 ~ d5 ~",
  M: "~@2 d6 ~ a5 ~ d5 ~@3 d6 ~ a5 ~@3", N: "[f4,f5] ~@15", O: "[f4,f5]@3 ~@13", P: "[g4,g5]@3 ~@13", Q: "[f4,f5] ~@7",
  R: "f4 ~@7, f5 ~@15", S: "[g4,g5] ~@15", T: "~@2 d5 ~@3 c5 ~ d5 ~ c5 ~@3 d5 ~",
  U: "~@2 c6 ~ a5 ~ e5 ~@3 c6 ~ g5 ~ e5 ~", V: "~@2 b5 ~ g5 ~ d5 ~@3 b5 ~ f#5 ~ d5 ~",
  W: "~@2 a5 ~ f#5 ~ d5 ~@3 a5 ~ f#5 ~ d5 ~", X: "~@2 b5 ~ g5 ~ d5 ~@3 b5 ~@3 g5 ~",
  Y: "~@2 c#6 ~ a5 ~ e5 ~@3 c#6 ~ a5 ~ e5 ~", Z: "~@2 c#6 ~ g#5 ~ e5 ~@3 c#6 ~ g#5 ~ e5 ~",
  AA: "~@2 c#6 ~ a5 ~ f#5 ~@3 c#6@2 a5 ~ f#5 ~", AB: "~@2 c#6 ~ a5 ~ f#5 ~@3 c#6 ~ a5 ~ f#5 ~", AC: "a5 ~@15",
})).s("gm_celesta").gain(0.14)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@6 B@4 C@7 D@2 E@3 F G@3 F H@7 I@2 J@4 K@3 L@8 M@2 N@2 G@3 F O@7 P@2 Q R@6 S@3 T@3 U@8 V@2
>`.pickRestart({
  A: "[d4@16 ~@8 c4@7 ~ b3@8 [a3,f#4]@8, g4@5 ~, b3@47 ~@49, ~ e4 d4]/6", // D
  B: "[b3@16 c4@15 ~ b3@15 ~ [a3,f#4]@16, g4@3 ~, e4 d4]/4", // D
  C: "[e4@16 d4@16 e4@16 ~@31 f#4@16 ~ [e4,g4]@16, g4@5 ~@2, b3@32 c4@14 ~@2 b3@63 ~, ~@3 d4@3 ~]/7", // Em
  D: "[a3,d4,f#4]/2", E: "[b3@15 ~ c4@15 ~ [b3,d4]@16, g4, e4@2 ~]/3", F: "[a3,d4,f#4]",
  G: "[b3@16 c4@15 ~ [b3,d4]@15 ~, g4, e4@2 ~]/3", // Bm
  H: "[e4 d4 [c4,e4] ~@2 f#4 [e4,g4], g4@5 ~@2, b3@15 ~@9 b3@32, ~@48 d4@49 ~@15]/7", I: "[[a3,d4,f#4]@31 ~]/2",
  J: "[a3,c4,f4]/4", K: "[b3,d4,g4]/3", L: "[[a3,c4,f4]@2 g4 [a3,f#4], ~ d4, ~@64 b3@31 ~@33]/8",
  M: "[[b3,g4]@2 a3 g3, e4, ~@16 c4@15 ~]/2", N: "[g4 ~ a3@2, d4, b3 ~, ~ f#4@3]/2",
  O: "[e4 d4 [c4,e4] ~@2 f#4 [e4,g4], g4@5 ~@2, b3@32 ~@16 b3@63 ~, ~@3 d4@3 ~]/7", P: "[[b3,d4,g4]@31 ~]/2",
  Q: "[g3,e4], b3@7 ~", R: "[f#4@16 e4@16 [d4,f#4]@15 ~@33 g#3@16, a3@5 ~, c#4@30 ~@17 e4@48 ~, ~ c#4]/6",
  S: "[f#4@16 e4@31 ~, [a3,c#4]]/3", T: "[f#4 e4 [d4,f#4], a3, c#4@11 ~@5]/3",
  U: "[~@16 g#3@8 f#4@8 e4@16 f#4@8 e4@7 ~, c#4, e4@3 a3@5]/8", V: "[~@5 e3@13 ~@14]/2",
})).s("gm_string_ensemble_1").gain(0.14)

// chords · acoustic guitar steel · "Ak.Guit"
const acoustic_guitar_steel = note(`<
  ~@11 A B ~@2 C D ~ E F ~@10 G H I ~ J@2 K ~ L ~ M ~@2 N ~ O ~ P Q R S T U V W X Y Z@2 ~ AA ~ AB@2 AC@2 AD@3 AE AF AG
  AH AI@2 AJ@2 AK@3 AL AM AN AO@2 AP@2 AQ@2 AR ~
>`.pickRestart({
  A: "~@6 b4 c5 b4@2 g4@3 d4@2 ~", B: "e4@5 ~@3", C: "~@8 [e4,f#4] e4 d4 b3@3 d4@2", D: "e4@9 ~@7",
  E: "~@8 g4 f#4 d4 a3@3 d4@2", F: "e4 ~", G: "~@10 b4 c5 b4 g4 d4@2", H: "e4 g4@5 ~@2",
  I: "~@6 [e4,f#4] e4 d4 b3 d4@5 ~", J: "[~@9 f#4@3 ~@4, ~@5 d4@7 ~@4, ~@6 e4@3 ~@7, ~@7 a4@5 ~@4]/2",
  K: "[a3,c4,f4] ~", L: "[a3,c4,f4]@13 ~@3", M: "[b3,d4,g4]@3 ~", N: "[a3,c4,f4]@11 ~@5", O: "[a3,c4,f4]",
  P: "[b3,d4,g4]", Q: "~@12 [b3,d4,g4]@3 ~", R: "~@2 d4 ~@2 c4 ~@2 d4 ~@2 c4 ~ c4 d4 ~",
  S: "~@2 [d4,d5]@2 ~ [c4,c5]@2 ~ [d4,d5]@2 ~ [c4,c5]@3 [d4,d5] ~", // D C D C D
  T: "~@3 b4@2 g4 e4 b3 ~@3 b4@2 g4 ~ b3, e3@2 ~@2 e3@3 ~, ~ b3@3 ~@5 b3@5 ~@2, ~@2 e4@3 ~@5 e4@3 ~ e4@2",
  U: "~@3 c5@2 a4 ~ c4 ~@3 c5@2 g4 ~ c4, e3@3 ~ e3@3 ~, ~ c4@5 ~@3 g3@4 ~@3, ~@2 e4@3 ~ e4@2 ~@2 c4@4 e4@2",
  V: "~ d4@2 b4@2 g4 d4 ~@4 b4@2 f#4 ~ b3, g3@7 b3@2 ~ [b3,d4]@4 d4@2, ~@8 f#3@5 ~@3", // Bm
  W: "~@4 f#4@6 g4 f#4 e4 d4 a3 ~, ~ d3@10 ~@5, ~@2 a3@9 ~@5, ~@3 d4@8 ~@5", X: "d4 ~@5 b3@6 ~@2 b3 ~, ~ e4@7",
  Y: "~@10 e4@5 ~, ~@2 a3@7 ~@7, ~@4 c4@11 ~, ~@6 g4@9 ~",
  Z: "[~@12 b4 c5 ~@12 e4@3 d4@3, ~@7 b4@3 ~@6, ~@15 g4@5 ~@2 f#4@10, ~@17 d4@9 ~@6]/2",
  AA: "~@13 g4 ~@2, ~ g3, ~@9 b3@7, ~@5 d4@3", AB: "[~@8 b4 c5 ~@3 d4@10 ~@9, ~@5 b4@3 ~@8, ~@11 g4@5 ~@16]/2",
  AC: "[~@6 f#4 e4 d4 b3@2 d4@3 e4@10 ~@8]/2",
  AD: "[~@20 c5@2 ~@4 d4@4 ~@2 [g3,b3]@11 ~@4 f#3, ~@10 d4@14 g4@7 e3@12 ~@5, ~@18 g4@4 b4@9 ~ e4 ~@15]/3", // G
  AE: "~ f#4@12 ~@3, [a3,c#4]@13 ~@3", AF: "[a3,c#4,e4] ~", AG: "[a3,d4,f#4]@9 ~@7", AH: "[c#4,e4]@5 ~@3, a3 ~",
  AI: "[~@5 a4 ~ d5@3 ~@4 e4@7 ~@5 e4 ~ c#4@3 ~, ~@4 c#5@2 e4@6 a4@8 ~@2 g#4@9 ~, ~@5 c#5@5 ~@6]/2",
  AJ: "[~@12 [e4,f#4] e4 c#4 e4@3 f#4@2 ~@2 c#4@5 ~@5, ~@5 e4@2 ~]/2", // Esus2
  AK: "[~@2 c#4 ~@2 b4@2 ~@7 c#4@12 f#4 g#4 a4 c#5 a4 f#4@3 ~@4 c#4@10, ~@3 e4@7 a4@4 ~@34, ~@4 a4@2 ~ c#5@7 ~@34, ~@12 e4@5 ~@17 e4@13 ~]/3",
  AL: "~@7 d4, ~@3 f#4", AM: "e4 ~ c#4 e4@4 ~, ~@2 a4@5 ~@9",
  AN: "~@7 c#4@7 ~@2, ~@4 c#5@7 ~@5, ~@5 a4@7 ~@4, ~@6 e4@9 ~",
  AO: "[~@4 [f#4,g#4] f#4 e4 c#4@2 e4 f#4@2 g#4@2 e4@4 c#4@4 e4@2 a4@3 g#4@2 e4@3]/2", // F#sus2
  AP: "[c#4@4 ~ a4 e4 d5@2 ~@5 e4@11 c#4 ~@3 a4 e4@2, ~@4 c#5@2 ~@3 c#5@16 ~@2 d5@2 ~@3, ~@12 a4@14 e4@2 c#5@3 ~]/2",
  AQ: "[~@5 f#4@5 e4 a4@2 c#4@2 ~, f#4@4 f#4@5 ~@23, ~@2 c#4@15 ~@15, ~@3 c#5@3 ~@10]/2", AR: "[c#4,f#4,b4]@15 ~, a3 ~",
})).s("gm_acoustic_guitar_steel").gain(0.17)

// drums · kick
const kick = s("bd").struct("<~@2 [x ~@2 x!2 ~@3]!34 [x!4]!15 [x ~@2 x!2 ~@3]!17 ~@5 [x ~@2 x!2 ~@3]!16 x ~>")
  .gain(0.36)

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

// drums · clap
const clap = s("cp").struct("<~@19 [~ x ~ x]!17 ~@15 [~ x ~ x]!17 ~@5 [~ x ~ x]!16 ~@2>").gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@50 A ~@16 A ~@4 B ~@15 C ~@2>".pickRestart({
  A: "~@7 x", B: "~@3 x", C: "~@15 x",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<~ A B@66 C ~@3 D B@16 C ~>".pickRestart({
  A: "~@6 x!2", B: "x!8", C: "x", D: "~@7 x",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@48 B ~@16 C ~@4 D ~@15 E ~@2>".pickRestart({
  A: "~@6 x!2", B: "~@3 x", C: "~@13 x ~@2", D: "~@10 x ~@2 x ~@2", E: "~@7 x",
// … 20 more lines