Strudelify

Snowbound

Genesis

KeyG majorTempo125 bpm
0:00/0:00
// Snowbound — Genesis
// 125 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 60, 4/4 at bar 61) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 140 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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
const bass = note(`<
  ~@20 A@2 B@4 C@2 D@4 E@8 F@8 G@8 H I@2 J K L@2 J K L@2 J K L M N O P Q R S R T S@2 U V@2 W@2 V@2 W@2 X@2 Y@2 X@2 Y@2 Z
  AA@4 V@2 W@2 V@2 W@2 X@2 Y@2 X@2 Y@2 Z AA@4 V@2 W@2 V@2 W@2 X@2 Y@2 X@2 Y@2
>`.pickRestart({
  A: "[~@8 d2@17 ~@3 d2@4]/2", B: "[~@4 a1@3 ~ g1@16 g1@16 d2@17 ~@3 d2@4]/4", C: "[~@4 a1@3 ~ g1@16 g1@4 d2@2 e2@2]/2",
  D: "[g1@7 ~ c2@17 ~ g1@2 c2@12 e2@16 e3@2 b2@2 e2@4]/4",
  E: "[~@8 a#1@16 a1@16 a#1@16 b2@4 a1@12 a1@16 a1@16 a1@15 ~ c2@8]/8",
  F: "[~ c2@5 b1@3 b1@5 c2@3 c2@5 b1@3 b1@5 d2@2]/8", G: "[~ d2@5 a1@3 a1@5 d2@3 d2@5 a1@3 a1@5 f2@2]/8", H: "c2 a#1",
  I: "[a1@3 ~]/2", J: "d2", K: "~@4 d2@5 ~@3 a1@3 ~", L: "g1", M: "g1@4 d2@2 e2@2 g1@7 ~", N: "c2", O: "~ g1 c2@6",
  P: "e2", Q: "e3@2 b2@2 e2@11 ~", R: "a#1", S: "a1", T: "b2 a1@3", U: "a1@15 ~", V: "[c2@3 c2@5]/2",
  W: "[b1@3 b1@5]/2", X: "[d2@3 d2@5]/2", Y: "[a1@3 a1@5]/2", Z: "f2 c2", AA: "[a#1@8 a1@45 ~@11]/4",
})).s("gm_fretless_bass").gain(0.45)

// chords · pad warm
const pad_warm = note("<A@8 B@2 C@2 D@7 E@7 C@2 D@7 F@4 ~@20 G@8 H@2 I@2 J@7 K@3 ~@59>".pickRestart({
  A: "[~ [c4,e4]@4 [b3,d4,f#4]@4 [c4,e4]@4 [b3,d4,f#4]@3, ~ g4@15]/8", B: "[~ [c4,e4]@3]/2", C: "[~ [b3,d4,f#4]@3]/2",
  D: "[~ [c4,b4]@4 a4@2 [d4,e4]@2 [a#3,d4,f4]@2 [a3,c4,e4]@2 [a#3,d4,f4], ~ [e4,g4]@6 g4@7, ~@5 b3@4 ~@5]/7", // Cmaj7 Dsus2 A# Am A# Em
  E: "[~ [a3,c4]@2 c4@4 [b3,d4,f#4]@4 [c4,e4]@3, ~ e4@6 ~@7, ~@3 g4@11]/7", // Am Bm C
  F: "[~ [a3,c4]@2 c4@2 [a3,c#4]@2 ~, ~ e4@6 ~, ~@3 g4@4 ~]/4", G: "[[c4,e4] [b3,d4,f#4] [c4,e4] [b3,d4,f#4], g4]/8",
  H: "[c4,e4]/2", I: "[b3,d4,f#4]/2",
  J: "[[c4,b4]@2 a4 [d4,e4] [a#3,d4,f4] [a3,c4,e4] [a#3,d4,f4], [e4,g4]@3 g4@4, ~@2 b3@2 ~@3]/7", // Cmaj7 Dsus2 A# Am A# Em
  K: "[a3 ~ [a3,c#4], e4, c4@2 ~, ~ g4@2]/3", // A
})).s("gm_pad_warm").gain(0.25).pan(0.4)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@39 A@6 B@8 C@3 D E@2 ~@23 F@2 G@2 F@2 G@2 H@2 I@2 H@2 I@2 J K@4 F@2 G@2 F@2 G@2 H@2 I@2 H@2 I@2 J K@4 F@2 G@2 F@2
  G@2 H@2 I@2 H@2 I@2
>`.pickRestart({
  A: "[~ [c3,c4,c5,e5,g5]@4 [g2,g3,b4,d5,f#5,g5]@4 [c3,c4,c5,e5,g5]@3]/6", // C Gmaj7 C
  B: "[~ [g2,g3,b4,d5,f#5,g5]@4 [d3,d4,d5,f#5,a5]@4 [a2,a3,c#5,e5,g#5,a5]@4 [d3,d4,d5,f#5,a5]@3]/8", // Gmaj7 D Amaj7 D
  C: "[~ [a2,a3,c#5,e5,g#5,a5]@4 [c5,f5,a5]]/3", D: "[g4,a4,c5,e5] [a#4,d5,f5]", E: "[[e4,a4,c5]@3 ~]/2",
  F: "[c3,c4,c5,e5,g5]/2", G: "[g2,g3,b4,d5,f#5,g5]/2", H: "[d3,d4,d5,f#5,a5]/2", I: "[a2,a3,c#5,e5,g#5,a5]/2",
  J: "[c5,f5,a5] [g4,a4,c5,e5]", K: "[[a#4,d5,f5]@8 [e4,a4,c5]@41 ~@15]/4",
})).s("gm_synth_strings_1").gain(0.12)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A@5 B@4 C D@7 E@3 F@6 G@7 H@8 I@8 J@7 K L@2 M@2 N@2 M@2 N@2 O@2 P@2 Q@2 R@2 S T S U V W@2 X@2 Y@2 Z@2 Y@2 AA@2 AB@2
  AA@2 AB@2 AC AD AE@2 AF X@2 Y@2 Z@2 Y@2 AA@2 AB@2 AA@2 AB@2 AC AD AE@2 AG X@2 Y@2 Z@2 Y@2 AA@2 AB@2 AA@2 AB@2
>`.pickRestart({
  A: "[~@18 d4 b3 ~@12 g2@4 g3@2 ~ c4, ~@8 c4@6 c4@8 c4@8 c4@9 ~@5 g2@12 g4@2 e4@2 d4@12 [c4,e4]@7 ~, ~@8 g3@4 g3@8 g3@8 g3@11 ~ [g3,b3]@8 [g3,b3]@24 ~@4 g3@4, ~@9 e4@7 [e4,g4]@8 e4@10 e4@5 ~@7 d3@26 ~@8, ~@24 g4@8 g4@7 ~ g4@12 d4@2 a4@18 ~@8]/5", // C G Em
  B: "[~@10 d4 b3 ~@12 g2@4 g3@2 ~ c4, [e4,g4]@8 e4@10 e4@5 ~@7 d3@12 e4@2 d4@12 [c4,e4]@7 ~, ~@4 g3@8 g3@11 ~ [g3,b3]@8 [g3,b3]@24 ~@4 g3@4, ~@6 c4@8 c4@9 ~@5 g2@12 g4@16 ~@8, ~@8 g4@8 g4@7 ~ g4@12 d4@2 a4@18 ~@8]/4", // Em C G
  C: "~@7 c4, [e4,g4]!2, ~ g3@2 g3, ~@3 c4@4 ~", // Em
  D: "[~@4 d4@2 b3@2 ~@24 g2@8 ~ g4@5 ~@8 c4@2 ~@14 b3@2 ~@30 b3@2 ~@6 g4@2, g4@7 ~ g4@12 d4@2 a4@4 e4@2 d4@12 b3@24 f#4@2 e4@2 d4@4 ~@4 e3@8 a3@14 b3@2 d4@4 ~@4 d4@4, ~@2 e4@5 ~ [g3,b3]@8 [g3,b3]@24 ~@6 g4@2 c5@24 ~@8 d4@10 b3@2 d4@2 e4@10 g4@6 ~@2, ~@6 g2@6 g4@8 e4@5 g4@3 [c3,c4]@8 e2@7 e3@9 a#2@4, ~@7 d3@13 c3@6 e4@5 g4@5 ~@3 b3@5 [e2,g4]@8 ~@4]/7", // G C Em
  E: "[~@3 a#3 ~@7 a3 ~@7 a#3 ~@3 a4, d5@4 ~@2 e3@3 e4 d4@2 ~@2 d4@4 g4@2 ~ c4@3, ~ a#4@3 g4@4 g4@4 g4@3 g4@2 a#4@3 a4@3 ~, ~ g4 a2@4 a#2@4 a2@2, ~@7 c4@5 ~@4 d5@4 ~@2 e4@2]/3",
  F: "[~@3 a4 ~@14 d4 b3 ~@12 g2@4 ~@11 g4, a2@8 g2@26 e4@5 ~@7 d3@12 e4@2 d4@12 d3@6 g4@6 e4@6 c4@6, ~@2 c4@6 [c4,e4]@6 c4@8 c4@6 g3@11 ~ [g3,b3]@8 [g3,b3]@24 d2@14 g4@6 e4@4, ~@4 e4@4 ~@4 g3@8 g3@4 g4@6 c4@9 ~@5 g2@12 g4@16 g4@4 e4@6 c4@6 d2@8, ~@16 [e4,g4]@8 e4@8 g4@7 ~ g4@12 d4@2 a4@18 ~@2 c4@6 d3@16]/6", // C G Em
  G: "[~@4 e4@2 g4@2 ~@28 b3@3 ~@2 g4@5 ~@8 c4@2 ~@14 b3@2 ~@30 b3@2 ~@6 g4@2, d3@6 ~@2 g2@16 g2@8 g4@2 d4@5 ~ b3@24 f#4@2 e4@2 d4@4 ~@4 e3@8 a3@14 b3@2 d4@4 ~@4 d4@4, ~@2 c4@4 ~@2 f#4@6 f#4@8 f#4@17 ~ e4@10 g4@6 [c3,c4]@16 e2@14 e3@18 a#2@8, ~@10 g3@8 g3@8 g3@13 ~ c3@12 e4@10 g4@10 ~@6 b3@10 [e2,g4]@16 ~@8, ~@12 d4@8 d4@8 d4@2 a4@9 ~@7 g4@2 c5@24 ~@8 d4@10 b3@2 d4@2 e4@10 g4@6 ~@2]/7", // C Em
  H: "[~@3 a#3 ~@7 a3 ~@7 a#3 ~@7 a4 ~@6 e4 a4 a2 ~ a3 a3@2 a3 [a3,c#4,g4] ~@2 a3 [a3,c#4,g4] ~@2 a3 [a1,a2,a3,c#4,g4]@2 ~@5 [c4,e4,g4] ~@4 [c4,e4] [c4,e4,g4], d5@8 ~@4 e3@6 e4@2 d4@4 ~@4 d4@8 g4@4 ~@2 c4@8 c4@6 ~@2 c4@8 c4@5 ~ [c#4,g4]@6 [c#4,g4]@6 ~@2 [c#4,g4]@6 ~@2 [c#4,g4]@6 ~@4 [c4,e4]@6 [c4,e4,g4]@4 ~@2 [c4,e4]@8 ~@4, ~@2 a#4@6 g4@8 g4@8 g4@6 g4@4 a#4@6 a4@6 a4@8 ~@2 a4@6 a4@8 ~@35 g4@5 ~@6 g4@10 ~@2, ~@4 g4@4 a2@16 a#2@16 a2@8 a2@8 a2@15 ~@3 a2@12 ~@2 a2@8 [a1,a2]@4 ~@4 g2@2 g2@14 g2@8, ~@7 c4@5 ~@4 d5@4 ~@2 e4@4 e4@2 ~@2 e4@4 ~@2 a3@2 ~@5 a3@2 ~@2 a3@2 ~@5 g3@2 g3@5 g3@3]/8", // A7 C C#dim C A
  I: "[c4@2 c4 [c4,e4,g4] g2 ~@4 [b3,d4,g4] ~@4 [b3,d4] [b3,d4,g4] b3@2 b3 [b3,d4,g4] g2 ~@4 [c4,e4,g4] ~@4 [c4,e4] [c4,e4,g4] c4@2 c4 [c4,e4,g4] g2 ~@4 [b3,d4,g4] ~@4 [b3,d4] [b3,d4,g4] b3@2 b3 [b3,d4,g4] a2 ~@4 [d4,f#4,a4] ~@4 [d4,f#4] [d4,f#4,a4], g2@4 ~ g2@7 g2@4 g2@4 ~ g2@7 g2@4 g2@4 ~ g2@7 g2@4 g2@4 ~ a2@7 a2@4, [e4,g4]@3 ~ [b3,d4,g4]@3 [b3,d4,g4]@2 ~ g4@5 ~@11 g4@5 ~ [e4,g4]@3 ~@7 g4@5 ~@11 a4@5 ~, ~@6 g3@2 g3@5 g3@7 ~@2 g3@2 g3@5 g3@7 ~@2 g3@2 g3@5 g3@7 ~@2 a3@2 a3@5 a3@3, ~@10 [b3,d4]@4 ~@2 [d4,g4]@3 ~ [c4,e4,g4]@3 [c4,e4,g4]@2 ~ [c4,e4]@4 ~@6 [b3,d4,g4]@3 [b3,d4,g4]@2 ~ [b3,d4]@4 ~@2 [d4,g4]@3 ~ [d4,f#4,a4]@3 [d4,f#4,a4]@2 ~ [d4,f#4]@4 ~@2]/8", // C G Bm G C G Bm G …
  J: "[d4@4 d4@2 [d4,f#4,a4]@2 a2@2 ~@8 [c#4,e4,a4]@2 ~@8 [c#4,e4]@2 [c#4,e4,a4]@2 c#4@4 c#4@2 [c#4,e4,a4]@2 a2@2 ~@8 [d4,f#4,a4]@2 ~@8 [d4,f#4]@2 [d4,f#4,a4]@2 d4@4 d4@2 [d4,f#4,a4]@2 a2@2 ~@8 [c#4,e4,a4]@2 ~@8 [c#4,e4]@2 [c#4,e4,a4]@2 c#4@4 c#4@2 [c#4,e4,a4]@2 [a3,c4,f4]@6 [a3,f4] ~, a2@4 ~ a2@7 a2@4 a2@4 ~ a2@7 a2@4 a2@4 ~ a2@7 a2@4 a2@4 ~@4, [f#4,a4]@3 ~ [c#4,e4,a4]@3 [c#4,e4,a4]@2 ~ a4@5 ~@11 a4@5 ~ [f#4,a4]@3 ~@7 a4@5 ~@9, ~@6 a3@2 a3@5 a3@7 ~@2 a3@2 a3@5 a3@7 ~@2 a3@2 a3@5 a3@7 ~@4, ~@10 [c#4,e4]@4 ~@2 [e4,a4]@3 ~ [d4,f#4,a4]@3 [d4,f#4,a4]@2 ~ [d4,f#4]@4 ~@6 [c#4,e4,a4]@3 [c#4,e4,a4]@2 ~ [c#4,e4]@4 ~@2 [e4,a4]@3 ~@5]/7", // D A C#m A D A C#m A …
  K: "[g3,c4,e4]@7 ~ [a#3,d4,f4]@5 ~ [a#3,f4] ~", // C A# A#5
  L: "[[a3,c4,e4]@7 ~@17 e4@8, ~@4 [c4,e4]@3 c4@3 a3@6, ~@3 e3@5, ~ a4, ~@8 e4@3 c4@5]/2", // Am C
  M: "[~@14 d4 b3, g2@26 e4@5 ~, [c4,e4]@6 c4@8 c4@6 g3@11 ~, ~@4 g3@8 g3@4 g4@6 c4@9 ~, ~@8 [e4,g4]@8 e4@8 g4@7 ~]/2", // C Em
  N: "[~@3 g2, g4@6 d4 a4@2 e4 d4@6, [g3,b3] [g3,b3]@3, ~ g2@3 g4@4, ~@3 d3@13]/2", // G
  O: "[~@14 e4 g4, d2@7 g4@3 e4@3 c4@2 ~, d3@3 g4@3 e4@3 c4@3 d3@3 ~, g4@2 e4@3 c4@3 d2@7 ~, ~ c4@3 d3@7 g4@4 ~]/2",
  P: "[~@28 b3@3 ~, g2@16 g2@8 g4@2 d4@5 ~, f#4@6 f#4@8 f#4@17 ~, ~@2 g3@8 g3@8 g3@13 ~, ~@4 d4@8 d4@8 d4@2 a4@9 ~]/2",
  Q: "[~ g4@5 ~@8 c4@2 ~@14 b3@2, b3@12 f#4 e4 d4@2, c3@6 e4@5 g4@5, e4@5 g4@3 [c3,c4]@8, ~@3 g4 c5@12]/2", // C
  R: "[~@15 b3, e2@7 e3@6 b3 d4@2, ~ e3@2 a3@5, ~@3 b3@5 [e2,g4]@8, ~@4 d4@5 b3 d4 e4@5]/2", // Em
  S: "~@7 a#3, a#2@3 g4, g4@3 g4@2 a#4@3, ~ d4@3, ~ d5", T: "~@7 a3, a2@5 e4 d4@2, g4!2, ~ e3@3, ~@3 c4@5",
  U: "~@7 a4, a2!2, a4@3 a4@4 ~, ~ c4@4 c4@3, ~ e4@2 e4",
  V: "~@6 e4 a4, a2@15 ~, a4@3 a4@4 ~, ~@2 c4@8 c4@5 ~, ~ e4@2 ~",
  W: "[a2 ~ a3 a3@2 a3 [a3,c#4,g4] ~@2 a3 [a3,c#4,g4] ~@2 a3 [a1,a2,a3,c#4,g4]@2, [c#4,g4]@3 [c#4,g4]@3 ~ [c#4,g4]@3 ~ [c#4,g4]@3 ~@2, a3@2 ~@5 a3@2 ~@2 a3@2 ~@3, ~ a2@6 ~ a2@4 [a1,a2]@2 ~@2]/2", // A7 C#dim A
  X: "[~@5 [c4,e4,g4] ~@4 [c4,e4] [c4,e4,g4] c4@2 c4 [c4,e4,g4], [c4,e4]@3 [c4,e4,g4]@2 ~ [c4,e4]@4 ~@6, g2 g2@7 g2@4 g2@4, ~ g4@5 ~@6 g4@10 ~@2 [e4,g4]@6 ~@2, ~@2 g3@2 g3@5 g3@7]/2", // C Em
  Y: "[g2 ~@4 [b3,d4,g4] ~@4 [b3,d4] [b3,d4,g4] b3@2 b3 [b3,d4,g4], [b3,d4,g4]@3 [b3,d4,g4]@2 ~ g4@5 ~@5, ~ g2@7 g2@4 g2@4, ~@2 g3@2 g3@5 g3@7, ~@6 [b3,d4]@4 ~@2 [d4,g4]@3 ~]/2", // G Bm G Bm G5
  Z: "[g2 ~@4 [c4,e4,g4] ~@4 [c4,e4] [c4,e4,g4] c4@2 c4 [c4,e4,g4], [c4,e4,g4]@3 [c4,e4,g4]@2 ~ g4@5 ~ [e4,g4]@3 ~, ~ g2@7 g2@4 g2@4, ~@2 g3@2 g3@5 g3@7, ~@3 [c4,e4]@2 ~@3]/2", // C Em C
  AA: "[a2 ~@4 [d4,f#4,a4] ~@4 [d4,f#4] [d4,f#4,a4] d4@2 d4 [d4,f#4,a4], [d4,f#4,a4]@3 [d4,f#4,a4]@2 ~ a4@5 ~ [f#4,a4]@3 ~, ~ a2@7 a2@4 a2@4, ~@2 a3@2 a3@5 a3@7, ~@3 [d4,f#4]@2 ~@3]/2", // D F#m D
  AB: "[a2 ~@4 [c#4,e4,a4] ~@4 [c#4,e4] [c#4,e4,a4] c#4@2 c#4 [c#4,e4,a4], [c#4,e4,a4]@3 [c#4,e4,a4]@2 ~ a4@5 ~@5, ~ a2@7 a2@4 a2@4, ~@2 a3@2 a3@5 a3@7, ~@6 [c#4,e4]@4 ~@2 [e4,a4]@3 ~]/2", // A C#m A C#m A5
  AC: "[a3,c4,f4]@6 [a3,f4] ~ [g3,c4,e4]@7 ~", AD: "[a#3,d4,f4]@5 ~ [a#3,f4] ~ [a3,c4,e4]@7 ~",
  AE: "[~@7 c4 ~@7 c4, [c4,e4]@3 c4@3 a3@8 a3@2, ~ e3@4 e3@3, ~ a4@2 [e4,a4], ~@4 e4@4 [c4,e4]@3 c4@4 ~]/2", // C A5 C
  AF: "~@2 a3@2 [a3,c#4,g4]@2 ~@4 a3@2 [a1,a2,a3,c#4,g4]@3 ~, a2@2 [a1,a2] ~, [c#4,g4]@2 ~ [c#4,g4]@3 ~@2, ~@3 a3@2 ~@3", // A7 A C#dim
  AG: "~ a3 [a3,c#4,g4] ~@2 a3 [a1,a2,a3,c#4,g4]@2, a2@2 [a1,a2] ~, [c#4,g4]@2 ~ [c#4,g4]@3 ~@2, ~@3 a3@2 ~@3", // A7 A C#dim
})).s("gm_acoustic_guitar_steel").gain(0.22).pan(0.2)

// other · piccolo
const piccolo = note("<A B C D E B C D E B C D F ~@7 G@4 H@5 ~@5 I J ~@23 K L M N K L M N ~@73>".pickRestart({
  A: "~@8 g6@3 ~ c6@2 e6@2", B: "g6@2 c6 e6 g6@2 c6 e6", C: "g6 e6 d6 b5 g5@2 b5 d6",
  D: "b5@3 ~ d6@2 a6@2 g6@2 e6@2 d6@3 ~", E: "b5@4 ~@4 g6@3 ~ c6@2 e6@2", F: "b5 ~@3",
  G: "[~@5 c6 e6 g6@2 c6 e6 b6@2 c6 e6 g6@2 c6 e6 b6 ~ b5 d6 f#6@2 b5 d6 b6@2 b5 d6 a6]/4",
  H: "[g6 e6 d6 ~@2 c6 e6 g6@2 c6 e6 b6@2 c6 e6 g6@2 c6 e6 g6 ~ b5 d6 f#6@2 b5 d6 b6@2 b5 d6 a6@2 b5 f#6 g6 ~@4]/5",
  I: "~@5 d6@2 a#5", J: "a5 g5 d5 c5@5", K: "g6@3 ~ c6@2 e6@2 g6@4 c6@2 e6@2", L: "g6@2 c6 e6 g6 e6 d6 b5",
  M: "g5@4 b5@2 d6@2 b5@3 ~ d6@2 a6@2", N: "g6@2 e6@2 d6@3 ~ b5@4 ~@4",
})).s("gm_piccolo").gain(0.06)

// chords · pad choir
const pad_choir = note("<~@12 A@8 B@8 C@7 D@5 ~@31 E@7 F@4 ~@58>".pickRestart({
  A: "[~ [c3,c5,b5]@4 [b4,a5]@2 [b4,d5,e5]@2 [a#2,a#4,d5,f5]@2 [a2,a4,c5,e5]@2 [a#2,a#4,d5,f5]@2 [a2,c5,e5,a5], ~ [e5,g5]@6 g5@8 ~, ~@5 e3@4 ~@7]/8", // Cmaj7 B7 E7 A# Am A# Am Em
  B: "[~ [d3,c5,e5]@4 [g2,b4,d5,f#5]@4 [d3,c5,e5]@4 [g2,b4,d5,f#5]@3, ~ g5@15]/8", // C Gmaj7 C Gmaj7
  C: "[~ [c3,c5,b5]@4 a5@2 [d5,e5]@2 [a#2,a#4,d5,f5]@2 [a2,a4,c5,e5]@2 [a#2,a#4,d5,f5], ~ [e5,g5]@6 g5@7, ~@5 [e3,b4]@4 ~@5]/7", // Cmaj7 Dsus2 A# Am A# Em E5
  D: "[~ [a2,a5]@2 [a2,a5]@2 [a2,a4,c#5,e5]@4 ~, ~ [c5,e5]@4 ~@5]/5", // A C
  E: "[[c3,c5,b5]@2 a5 [d5,e5] [a#2,a#4,d5,f5] [a2,a4,c5,e5] [a#2,a#4,d5,f5], [e5,g5]@3 g5@4, ~@2 [e3,b4]@2 ~@3]/7", // Cmaj7 Dsus2 A# Am A# Em E5
  F: "[[a2,a5] c3 [a2,a4,c#5]@2, e5, c5 ~, ~ g5@3]/4", // A
})).s("gm_pad_choir").gain(0.09).pan(0.8)

// other · piccolo
const piccolo_2 = note(`<
  A@2 B@3 ~@36 C D E ~ C D E ~ F G H ~ F G I J K@2 L@2 M@2 ~@18 N ~@2 D@2 ~@2 D@2 ~@2 G@2 ~@2 G@2 O P@2 Q@2 ~@2 D@2 ~@2
  D@2 ~@2 G@2 ~@2 G@2 O P@2 Q@2 ~@2 D@2 ~@2 D@2 ~@2 G@2 ~@2 G@2
>`.pickRestart({
  A: "[~@2 e5@5 f#5]/2", B: "[g5@4 a5@4 f#5@6 d5@25 ~@9]/3", C: "~@8 d6 g5 d6 f#5 d6 g5 d6 f#5",
  D: "d6 g5 d6 f#5 d6 g5 d6 f#5 d6 g5 d6 f#5 d6 g5 d6 f#5", E: "d6 g5 d6 f#5 d6 g5 d6 f#5 ~@8",
  F: "~@8 e6 a5 e6 g#5 e6 a5 e6 g#5", G: "e6 a5 e6 g#5 e6 a5 e6 g#5 e6 a5 e6 g#5 e6 a5 e6 g#5",
  H: "e6 a5 e6 g#5 e6 a5 e6 g#5 ~@8", I: "e6 a5 e6 g#5 e6 a5 e6 g#5 a5@4 g5@2 f5@2", J: "e5@2 c5@2 f5@2 e5 d5",
  K: "[c5@3 a4@3 d5@3 a4@3 e5@2 d5@2]/2", L: "[e5@5 f#5 g5 a5]/2", M: "[f#5@3 d5@9 ~@4]/2", N: "e5 a5",
  O: "a5@2 g5 f5 e5@2 c5@2", P: "[f5@2 e5 d5 c5@3 a4@3 d5@3 a4@3]/2", Q: "[e5@2 d5@3 ~@7 e6@4, ~@5 e5@11, ~ a5]/2",
})).s("gm_piccolo").gain(0.18).pan(0.6)

// chords · lead 2 sawtooth
const lead_2_sawtooth = note("<~@38 A@2 ~@41 B ~@20 B ~@20 B ~@16>".pickRestart({
  A: "[~ [a4,c#5,e5,g5]@2 ~]/2", B: "[a4,c#5,e5,g5]",
})).s("gm_lead_2_sawtooth").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@39 A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B A C ~@23 B C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ A@2 D ~ B C ~ C ~ C ~ C ~ C ~ C ~ C
  ~ C ~ A@2 D ~ B C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~
>`.pickRestart({
  A: "x!2", B: "~ x", C: "x", D: "~@3 x",
})).gain(0.29)

// drums · snare
const snare = s("sd").struct(`<
  ~@40 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@27 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@3 B ~@2 B ~ B ~ B ~ B C B ~ B ~ B ~ B ~@3 B
  ~@2 B ~ B ~ B ~ B C B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~ x",
})).gain(0.29)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@47 A ~@6 B C D ~@24 E ~@7 F ~@6 G H I J ~ G K ~@7 L ~@6 G M I J ~ G K ~@7 L ~@6 G M
>`.pickRestart({
  A: "~ x!2 ~@5", B: "~@3 x!2 ~ x!2", C: "~ x!2 ~@3 x!2", D: "~@2 x ~@3 x!2", E: "~@3 x", F: "~@2 x!5 ~", G: "~@7 x",
  H: "x ~@3 x ~ x ~@3 x ~ x ~ x!2", I: "~@2 x!2 ~@2 x ~", J: "~@2 x!2 ~@4", K: "x ~@2 x ~ x!3", L: "~@2 x!2 ~@3 x",
  M: "x ~ x!2 ~ x!2 ~",
})).gain(0.29)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@39 A ~@6 B A ~@6 C D E ~@24 F ~@7 G ~@6 H I J K ~ L M ~@7 N ~@6 H O J K ~ L M ~@7 N ~@6 H O
>`.pickRestart({
  A: "~ x!2 ~@5", B: "~@6 x!2", C: "~@3 x!2 ~ x!2", D: "~ x!2 ~@3 x!2", E: "~ x ~ x", F: "~@5 x!2 ~",
  G: "~@2 x!2 ~ x!2 ~", H: "~@7 x", I: "x ~@3 x ~ x ~@2 x ~@6", J: "~@2 x!2 ~@2 x ~", K: "~ x ~@2", L: "~@2 x ~@3 x!2",
  M: "x ~ x ~@2 x!2 ~", N: "~@2 x ~ x ~ x ~@3 x!3 ~ x ~", O: "x ~ x!2 ~@4",
})).gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@101 [~ x ~ x] ~@20 [~ x ~ x] ~@17>").gain(0.19)

// drums · ride
const ride = s("rd").struct(`<
  ~@22 A ~ B C ~ D E ~ C@3 ~@2 E F G E H I@3 J I J A H I@3 J I J B ~@25 K ~ L I@3 L I L C L I@3 L I L ~@6 L I@3 L I L C
  L I@3 L I L ~@6 L I@3 L I L C L I@3 L I L ~
>`.pickRestart({
  A: "x!3 ~", B: "x!2 ~@2", C: "x", D: "~ x", E: "x!2", F: "~@3 x!2 ~@2 x", G: "x ~ x!2", H: "~@3 x", I: "x!4",
  J: "x!2 ~ x", K: "~@3 x ~@2 x!2", L: "~ x!3",
})).gain(0.19)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@12 A B@4 C B@4 ~ B A@2 B D E B A@3 B@2 F D ~ E ~@32 B@9 D ~@59>".pickRestart({
  A: "~ x", B: "x!2", C: "x!3 ~", D: "x", E: "~ x ~@2", F: "~@7 x",
})).gain(0.1)

// drums · splash
const splash = s("cr").struct(`<
  ~@39 A ~@3 B ~ B ~ B ~@3 B ~ B ~ B A C ~@23 B C ~@3 C ~ C ~ C ~@3 C ~ C ~ A@2 ~@2 B C ~@3 C ~ C ~ C ~@3 C ~ C ~ A@2
  ~@2 B C ~@3 C ~ C ~ C ~@3 C ~ C ~
>`.pickRestart({
  A: "x!2", B: "~ x", C: "x",
})).gain(0.22)

// drums · splash · soft notes
const splash_soft = s("cr").struct("<~@57 [~@8 x!8] [x!16] [x!4 ~@12] ~@80>").gain(0.06)

stack(
  bass, pad_warm, synth_strings_1, acoustic_guitar_steel, piccolo, pad_choir, piccolo_2, lead_2_sawtooth, kick, snare,
  low_tom, mid_tom, high_tom, ride, ride_soft, splash, splash_soft
)

More by Genesis