Strudelify

Per sempre

Celentano

KeyC minorTempo160 bpm
0:00/0:00
// Per sempre — Celentano
// 160 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 9 string ensemble 2 (copy of ch 14 pad warm)
// note: Full arrangement: all 198 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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 · electric bass finger
const bass = note(`<
  A B A B A B A C D E A C D F A C G H I J G H I J G H I K L H I J G H I J G H I J G H I K L H I M N H I J N H I J N H I
  J N H I O G H I J G H I J G H I K L H I J N H I J N H I J N H I J N H I O P@2 Q@2 R S T@2 U@2 V@2 W@2 N H I J N H I J
  N H I X G H I J G H I J G H I K L H I J N H I J N H I J N H I J N H I O N H I J N H I J N H I J N H I O N H I J N H I
  J N H I J N H I O N H I J N H I J Y@4
>`.pickRestart({
  A: "c2@4 ~@2 c2@2 c2@3 ~ c2@4", B: "c1@5 ~ c1 ~ c1@4 ~@4", C: "c1@5 ~ c1 ~ c1@4 c1@2 eb1@2",
  D: "ab1@4 ~@2 ab1 ~ ab1@3 ~ ab1@3 ~", E: "g1@4 ~@2 g1 ~ g1@3 ~ g1@2 bb1@2", F: "g1@4 ~@2 g1 ~ g1@3 ~ g1@2 eb1@2",
  G: "ab1@4 ~@2 ab1@5 ~ ab1@3 ~", H: "g1@4 ~@2 g1@5 ~ g1@4", I: "c1@4 ~@2 c1@5 ~ c1@4", J: "c1@5 ~ c1@5 ~ c1@2 eb1@2",
  K: "c1@5 ~ c1@5 ~ c1@2 db1@2", L: "d1@4 ~@2 d1@5 ~ d1@3 ~", M: "c1@5 ~ c1@5 ~ c1@3 ~", N: "f1@4 ~@2 f1@5 ~ f1@3 ~",
  O: "c1@2 g1 eb1 c1@2 ~ eb1", P: "eb1/2", Q: "[d2@31 ~]/2", R: "c2", S: "bb1@15 ~", T: "[ab1@6 eb2 ab1]/2",
  U: "[g1@15 d2]/2", V: "[g2@30 g1 ~]/2", W: "[g1@29 ~ g1@2]/2", X: "c1@2 ab1@2 g1@2 f1@2 eb1@3 ~ d1@4", Y: "c1/4",
})).s("gm_electric_bass_finger").gain(0.43)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@96 A@2 B@2 C@2 D@2 E@7 ~@87>".pickRestart({
  A: "[~@7 g3, g2@19 ~@13, ~@4 bb2@15 ~ bb2@12, ~@2 eb3@3 ~ eb3@2, ~@3 g3@3 ~@2]/2",
  B: "[~@7 f3, ~@4 bb2@15 ~ bb2@12, ~@8 d3@11 ~@5 d3@8, ~@3 f3@3 ~@2]/2",
  C: "[~@12 g3@7 ~@9 g3@4, ~@2 c3@7 ~ bb2@6, ~@4 eb3@5 ~@3 eb3@4]/2",
  D: "[~@7 g3, ab2@7 ~ ab2@8, ~@4 c3@11 ~@5 c3@12, ~@2 eb3@3 ~ eb3@2, ~@3 g3@3 ~@2]/2",
  E: "[~@23 g3 ~@4, g2 g2 g2 g2 g2 g2 ~, ~@4 b2@15 ~ b2@15 ~ b2@15 ~ b2@15 ~ b2@15 ~ b2@15 ~@13, ~@2 d3@3 ~ d3@3 ~ d3@3 ~ d3@3 ~ d3@3 ~ d3@3 ~@3, ~@3 g3@3 ~ g3@3 ~ g3@3 ~ g3@3 ~ g3@3 ~@6]/7",
})).s("gm_acoustic_guitar_nylon").gain(0.33)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@32 A B@3 A B@3 A B@3 C B@3 ~@62 D@8 ~@4 A B@3 A B@3 A B@3 C B@3 E F ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@2 E F
  ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@2 E F ~@6
>`.pickRestart({
  A: "ab3", B: "g3/3", C: "a3", D: "[eb4@61 ~@3]/4", E: "eb4", F: "d4",
})).s("gm_string_ensemble_2").gain(0.14).pan(0.7)

// chords · piano
const piano = note(`<
  A@8 B@2 C@2 D@4 ~@3 E F ~@5 G H@2 I@4 ~@2 J@2 ~@5 K L@4 M ~@8 N O P Q R S@2 T@2 ~@2 U@2 ~ V@3 ~@7 W@2 ~@2 X@2 Y Z AA
  AB AC AD AE AF@4 AG AH@2 AI@2 AJ@2 AK@2 AL AM AN@2 AO AP@2 AQ AR AS AT@2 AU@2 AV@3 ~ AW AX AY ~ AZ@3 ~ BA BB@2 ~ BC BD
  BE BF BG BH BI BJ BK@2 BL@2 BM BN BO BP@2 BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD@4 CE CF CG CH CI CJ@2 ~ CK CL CM
  CN CO CP CQ CR CS@3 CT ~@8
>`.pickRestart({
  A: "[~@14 [g3,g5]@28 eb5@2 [f3,f5]@30 [g3,g5]@4 eb5@33 ~@7 d5@4 c5@4 g4@2, ~@42 eb3 ~@35 eb3@44 ~@6]/8", // G F G
  B: "[~ ab3@2 ~@3 [ab3,c4]@8 ~@2 [g3,c4]@4 ~@2 [g3,b3]@8 [f4,ab4]@2, c4 ~@15, ~ f4@13 g4@16 ~@2]/2", // Ab C5 G Fm
  C: "[eb4@6 [b3,d4]@8 ~@8 [d4,f4] ~ [eb4,g4] ~@3 [eb4,g4,c5] ~@3, g4@21 ~@11, ~@14 [c4,eb4]@7 ~@11, ~@9 g3@6 ~]/2", // Bm Dm Eb Cm
  D: "[eb5@5 ~ d5@4 c5@3 ~@5 d5@3 c5@2 ~ [f3,b3,eb5]@5 ~@9 c5@22 ~@4, [ab3,c4]@7 eb5@2 ~@6 d5@4 ~@13, [g4,ab4]@13 ~ [g4,ab4]@9 ~ [f4,ab4]@6 ~@34, ~@16 [ab3,c4]@7 ~@9 [eb3,g3,c4,eb4,g4]@28 ~@4]/4", // Fm7b5 Ab Abmaj7 Fm Ab Cm
  E: "~ d5 eb5 d5 f5 d5 eb5 c5", F: "g4@2 ~ f4@2 ~ f4@10", G: "~@10 eb4@2 f4@2 g4 ~",
  H: "[g4 ab4@3 g4@2 f4@3 ~ eb4@3 ~ [gb3,c4,d4]@17 ~]/2", // D7
  I: "[~@8 b3@6 ~@12 eb4@3 ~@3 c5@3 eb5@2 f5 g5@3 f5@3 eb5@2 b4@5 c5@11 ~@2, ~@7 eb3@24 ~, ~@18 g3@43 ~@3, ~@11 c4@20 ~, ~@30 g4@33 ~]/4",
  J: "[~@4 d5@2 c5 f4@7 ~@2]/2", K: "~@6 [d4,f4]@9 ~",
  L: "[~@2 eb4@2 ~ f4 g4@3 f4@2 eb4@3 ~@4 ab4@11 ~ [b3,d4,g4]@16 f4@4 eb4@4 b3@4 c4@3 ~ eb4@2, ~@7 [gb3,c4,d4]@8 ~@17]/4", // G D7
  M: "g4 ~@7", N: "~@3 c6@2 ~ d6@2 eb6@2 ~ c6@2 ~ g5 ~", O: "f5 g5 ~ f5@7 ~@6",
  P: "~@3 g5@2 ~ g5 ~ g5@2 gb5 ~ ab5@2 gb5@2, ~@3 gb5 ~@12", Q: "g5@2 eb5@2 c5@3 ~@9",
  R: "~@3 c4@2 ~ d4@2 eb4@2 ~ f4@2 ~ g4@2",
  S: "[ab4@2 ~ bb4@2 ~ b4@2 c5@2 ~ d5@2 ~ eb5@7 ~ [eb5,g5] ~ [d5,f5] ~@3 [c5,eb5] ~@3]/2", // Eb Dm Cm
  T: "[[eb5,g5]@2 ~@2 c5@2 ~@2 g4@2 ~@2 eb4 ~ [ab3,c4,f4]@14 ~@4, ~@4 eb5 ~@27]/2", // Eb Fm
  U: "[~@5 a3 eb4 d4 a3@4 ab3@2 g3@4 ab3@8 ~@6]/2",
  V: "[~@10 b3@2 d4@2 g3@4 c4@2 eb4@2 ab3@4 c4@2 eb4 ~ b3@4 c4@10 ~@4]/3", W: "[~@4 f4@6 eb4@4 d4@17 ~, c5@31 ~]/2",
  X: "[~@4 f4@6 eb4@4 d4@17 ~]/2", Y: "~@6 eb6 d6 c6 ~ ab5 g5 f5 ~ eb5 d5",
  Z: "c5 ~ ab4 g4 f4@2 ~@4 c4 ~ c4@4, ~@3 g4@3 ~@2",
  AA: "~ d4 ~@2 e4 eb4 ~ d4 c4@2 ab4 ~ d5 ~ f5 ab5, ~@3 f4@2 ~@6 c5@2 ~@3", AB: "bb5@2 ab5 bb5 g5@10 ~@2",
  AC: "~@6 eb6 d6 b5@2 c6@2 d6@2 eb6@2, ~@8 c6 ~@7", AD: "c6@3 g5@2 ~ eb5@2 d5@2 ~ c5@3 d5@2",
  AE: "c5@3 f5@3 g5@2 ab5@3 g5@2 ~ f5@2",
  AF: "[ab5@3 ~ ab5@2 g5@2 ~ b5@3 ab5@2 ~@2 [c3,c4]@6 [d3,d4]@4 [eb3,eb4,eb5,g5]@4 [f3,f4]@4 [g3,g4]@4 [ab3,ab4]@4 [bb3,bb4]@3 ~ [bb3,bb4]@13 ~@5, ~@14 g5@11 ~@5 [d5,f5]@8 [c5,eb5]@9 ~@17]/4", // C D Eb F G Ab Bb Dm …
  AG: "g4@3 bb4@3 d5@8 c5@2, ~@6 c5 ~@9", AH: "[~ g4@2 bb4@2 ~@2 bb4@11 ab4@2 ~ g4@3 bb4@5 ab4@2 ~]/2",
  AI: "[ab4@4 ~ gb4 ab4 ~ g4@10 f4@3 eb4 ~ d4 f4@5 eb4 ~ d4, ~@2 g4 ~@13]/2", AJ: "[b3@6 c4 d4 ~ c4@15 ~@8]/2",
  AK: "[~@3 f3@2 ~ d4@2 f4@2 b4@2 d5 ~ eb5@4 d5@4 f5@4 d5@4 ~@2, ~@5 b3@2 ~@25]/2",
  AL: "~@2 f3@2 b3@2 d4@2 f4@2 b4@2 ~ d5@2 ~", AM: "eb5@3 d5@2 ~ c5@2 b4@3 ~ g4@4",
  AN: "[~@6 f4@2 b4@3 d5@2 ~ [eb5,g5] ~@2 d5@2 ~ [c5,eb5]@2 ~@2 [b4,d5]@4 ~ f5@3, f3, ~ b3@15, ~ d4@7, ~@16 f5@2 ~@10 d5@3 ~]/2", // Eb Cm Bm
  AO: "[c5,eb5]@4 g4 ~@9 g4 ~", // Cm
  AP: "[[b4,eb5]@4 g4 ~@7 b4 ~ db5 d5@3 [c5,eb5]@4 [b4,d5] ~ [c5,eb5]@4 g4@3 ~, ~@14 f5@3 ~@15]/2", // B Cm Bm Cm
  AQ: "f4@3 ~ eb4@2 [c3,g3]@2 ~@2 c4@3 eb4 g4 c5, ~@6 eb3 ~@9", AR: "e4@4 f4 ab4 c5 ~ g4@2 ab4@2 c5@2 eb5@2",
  AS: "b4@2 ~ [d5,g5]@2 ~ [d5,ab5]@2 [f5,b5]@3 [g5,eb6] ~@2 [g5,eb6]@2", // G5 Ddim Fdim Cm
  AT: "[~@2 [f5,d6]@3 ~ [eb3,g3,c4,eb5,c6]@4 [eb3,g3,c4,c5,g5]@4 [eb3,g3,c4,d5,f5]@4 [eb3,g3,c4,c5,eb5]@4 [eb3,g3,c4,eb5,g5]@4 c5 d5 eb5 d5 c5@2, [eb3,g3,c4]@5 ~@21 [eb3,g3,c4]@3 ~@3]/2", // Dm Cm
  AU: "[f4@3 ~@3 [f3,g3,ab3,c4]@4 ~@2 b5 eb6@2 ~ db6 c6 ~@2 g5 f5 ~ eb5 d5 ~ c5 ~ g4 f4 ~ eb4, ~@12 [f3,g3,ab3,c4]@2 ~ d6@2 ~@2 ab5@2 ~@6 ab4@2 ~@3]/2", // Fm
  AV: "[f4 ~ g4 eb4 ~@20 eb5@4 ~@2 [ab4,c5,eb5,c6]@13 ~@5, ~@2 c4@6 g4@7 ~@9, ~@2 eb4@3 ~@3, ~@20 c5@8 g5@15 ~@5]/3", // Ab
  AW: "~@14 g4 ~", AX: "~ c5@2 ~ eb5@2 c5@2 ~ g4@2 ~ eb4@2 c4@2", AY: "~ g3@3 ~@12",
  AZ: "[~@6 [b2,b3]@4 [c3,c4]@4 [d3,d4]@4 [eb3,eb4]@4 [c3,eb3,g3,a3,g4]@4 [c3,eb3,g3,b3,b4]@4 ~ c4@15 ~@2, ~@10 c5@5 ~]/3", // B C D Eb Am7b5 Cm
  BA: "~@7 c6", BB: "[~ ab5@3 g5@2 ~ eb5@3 c5@3 ~@9 gb4@2 ~ f4@6 ~, ~@7 d5@5 ~@4]/2",
  BC: "~@2 d4 c4 b3 ~ c4 ~ eb4@2 ~@2 g4@2 ~@2", BD: "c5 ~ g4 ~@5, ~@4 eb4 ~@11",
  BE: "~@6 [eb5,c6]@2 [c5,ab5]@3 ~ [eb5,c6]@3 ~", BF: "~@5 [ab4,b4,f5,ab5]@2 ~, ~@3 [d4,d5,d6]@4 ~",
  BG: "~@6 d6 ~ d6 eb6@3 c6 ~ eb6 ~", BH: "c6@5 ~@11", BI: "~ eb7 ~ d7 c7 ~ ab6 g6 f6@2 eb6 d6 c6 ~ ab5 g5",
  BJ: "f5 ~ eb5 d5 ~ c5 ab4 g4 f4 ~ eb4 d4 c4 b3 ~ c4",
  BK: "[~@4 c4@2 eb4@4 [eb4,g4]@4 [eb4,g4,c5]@4 [eb4,g4,c5]@4 c5@4 [c5,g5]@5 ~, d4@22 [g4,eb5]@9 ~, ~@3 c4@8 ~@5]/2", // Eb Cm C5 Cm
  BL: "[~@3 c6@2 ~ d6@2 ~ eb6@2 c6 ~ f6 ~ g6@2 f6@12 ~@3]/2",
  BM: "~@2 [g5,eb6] ~ [g5,eb6] ~ [g5,eb6] ~ [g5,eb6] ~ [g5,eb6] ~ [f5,d6] ~ [f5,d6] ~", BN: "[eb5,c6] ~@3 [c5,g5] ~@11",
  BO: "~@8 [f3,ab3,c4]@3 [f3,ab3,c4]@2 ~ f3@2, ~@2 [f3,ab3,c4]@5 ~ eb4@8, ~@5 d4@11, ~@8 g4@5 [ab3,c4,g4,bb4]@3, ~@11 [f4,ab4]@5", // Fm Abmaj7 Fm
  BP: "[[f3,b3,eb4]@3 [f3,b3,eb4,bb4,d5]@2 [f3,eb4,c5,eb5]@2 [eb3,g3,bb3,d4,bb4,d5,f5]@4 ~ [c3,eb3,g3,bb3]@2 [c3,eb3,g3,bb3,eb5,g5,eb6]@2, [ab4,c5]@10 b3 ~@13 bb5@8, ~@12 [g5,g6] ~@3]/2", // Fm7b5 Bb F7 Ebmaj7 Cm7 Ab G
  BQ: "[c3,eb3,g3,bb3,c5,eb5,c6] ~ [c3,eb3,g3,g5]@2 [c3,eb3,g3,g5,bb5,g6]@4, ~ [bb3,eb5,eb6]@3", // Cm7 Cm Cm7 Eb5
  BR: "~@2 [ab3,c4,f4] ~ g4 ~@2 [c4,ab4]", BS: "~@6 [g4,b4]@9 ~, ~@2 [g1,g2]@11 ~@3",
  BT: "~@2 [c2,eb2,g2,c3,c4,eb4,g4,c5]@8 [eb3,c4,g4] [f3,f4] [eb3,eb4] ~ g5 ~, ~@5 g3 ~@2", // Cm F Eb
  BU: "c6 ~ d6 ~ eb6 ~ c6@2 g5@2 d6@2 c6@2 f5@2", BV: "g5 ab5 ~ g5 f5 ~ g5@2 ab5@2 bb5 ~ b5@2 d6 ~, [f3,ab3,c4]@15 ~",
  BW: "g6 ab6 d6 ~ f6 d6 eb6@2 d6 b5 ~ bb5 ab5 g5 ~ f5", BX: "~ f5 ~ g5 eb5 ~ c5@6 b3 c4 b3 c4, eb5 ~@7",
  BY: "d4 eb4 d4 eb4 gb4 g4 gb4 g4 b4 c5 b4 c5 d5 eb5 d5 eb5", BZ: "ab5 bb5 ~ c6 ~@2 ab5@2 ~@2 [ab3,c4,d4] ~ f5@2 ~@2",
  CA: "eb6 f6 g6 ~@2 ab5 ~@2 [ab3,d4,g4]@2 ~ f5@2 ~ eb6@2", CB: "f6@2 g6@2 eb6 ~ c6 g5 eb5 ~@2 f5 ~ g5 f5 g5",
  CC: "f5@2 eb5@2 c5 ~ ab4 ~ g4@4 f4@2 eb4@2",
  CD: "[~@2 [f3,b3,eb4]@4 [f3,b3,eb4]@4 [f3,b3,eb4,ab4]@4 [f3,b3,eb4,g4,bb4]@4 [f3,b3,eb4,ab4,b4]@3 ~@5 [b3,d4,b4,d5]@4 ~@16 [d4,d6] ~@12 [ab4,ab5,ab6]@3 [f4,f5,f6]@2, ~@2 f4@12 ~@8 [g3,g4,g5]@9 ~@3 [eb4,eb5]@10 [g4,g5]@6 [eb4,eb5,eb6]@3 f5 [f4,f6]@2 [g4,g5,g6]@6 ~@2, ~@3 g4@4 ~@8 [ab3,ab4,ab5]@7 ~ d5@8 ~, ~@17 [c4,c5]@3 [c4,c5,c6]@11 ~, ~@38 [bb3,bb4,bb5]@6 [eb4,eb5]@3 [d4,d6]@15 ~@2]/4", // Fm7b5 Eb Fm7b5 Bm D Ab F G …
  CE: "~ [f3,ab3,c4,eb4]@4 ~@3", CF: "~@3 [g5,g6] ~ [g5,g6] ~ [eb5,eb6], [f3,b3,d4]@13 ~@3",
  CG: "~@2 [c5,eb5,c6] ~@3 g4 eb4 c4@3 ~ g4 ~ c5 ~, [c3,eb3,g3,bb3]", // Cm Cm7
  CH: "eb5 ~ [ab4,ab5] ~ [g4,g5] ~ [eb4,eb5] ~ [c4,c5]@3 ~ [g3,g4]@2 ~@2", CI: "f4 ~ g4 f4 e4 ~ f4 ~ g4 ~ ab4 ~@3 f4 ~",
  CJ: "[ab4@2 bb4 ~ b4 ~ d5 ~@3 f5@3 eb5 gb5 g5@2 ~ eb5@2 c5@2 ~@10]/2", CK: "~@12 b3 c4 d4 f4",
  CL: "g4 bb4 a4 ab4 g4 bb4 g4 ab4 bb4 c5 d5 eb5 f5 g5 ab5 bb5",
  CM: "b5 ~ d6 eb6 c6 ~ g6 ~ d6 ~ f6 ~ d6 ~ eb6 ~, ~ c6@2 ~@13", CN: "g5 ~ c6 ~ eb6 ~ g6 ~ d7 eb7 g6 ~ f6 ~ ab6 ~",
  CO: "~@2 g6@2 f6@2 bb5 ~@3 eb6@2 ~@2 d6@2, c6@5 ~@3 ab5@4 g5@4",
  CP: "f5 c6 eb5 b5 ab5 f5 d5 b4, ~@2 [f3,b3,e4]@2 ~ [f3,b3,e4]@2 ~", // E
  CQ: "ab4 b4 ab4 ~ g4 ab4 g4 ~ f4 ~ f4@2 eb4@4, ~@9 g4@2 ~@5", CR: "~@6 d4@3 eb4@3 f4@2 g4@2, ~@3 c4@12 ~",
  CS: "[[f3,ab3,c4]@9 ~ [f3,ab3,c4]@3 ~@5 f5@4 ~@4 [f3,b3,d4,f5]@3 ~ eb5@4 ~@4 [c3,eb3,g3]@9 ~, ~@7 [f3,b3,d4]@6 ~@2 [c3,eb3,g3]@4 ~@5, ~@22 c5@8 ~@4 c5@13 ~]/3", // Fm Bdim Cm Bdim Cm
  CT: "~@2 [eb5,ab5] ~ [d5,g5] ~ [c5,f5] ~ [bb4,eb5]@3 ~ [g4,c5]@4", // Ab5 G5 F5 Eb5 C5
})).s("gm_piano").gain(0.51).pan(0.6)

// chords · pad warm
const pad_warm = note(`<
  ~@16 A@12 B@2 C@2 A@12 B@2 C@2 D E@3 D E@3 D E@3 D E@3 A@12 B@2 C@2 D E@3 D E@3 D E@3 D E@3 F@3 G@5 H@6 D E@3 D E@3 D
  E@3 A@12 B@2 C@2 D E@3 D E@3 D E@3 D E@3 D E@3 D E@3 D E@3 D E@3 D E@3 D E@3 D E@3 D E@3 D E@3 D I@7
>`.pickRestart({
  A: "[[eb3,ab3,c4] [f3,b3] [eb3,g3,c4]@2, eb4]/4", B: "[[d3,gb3,a3] [f3,b3], d4]/2", C: "[eb3,g3,c4]/2",
  D: "[f3,ab3,c4]", E: "[[b3,d4] [eb3,c4]@2, g3]/3", F: "[[eb3,g3,eb4]@31 [d3,f4]@17, bb3]/3",
  G: "[~@15 c3@16 ~ bb2@16 ab2@32, ~@3 [g3,c4,eb4]@13]/5", H: "[g2,b3,d4]/6", I: "[[b3,d4] [eb3,c4]@6, g3]/7",
})).s("gm_pad_warm").gain(0.13)

// chords · epiano2
const epiano2 = note(`<
  A ~ B C A ~ A ~ D E F C D E F C D E F C D E F C D E F ~ G H F ~ I E F ~ I E F C D E F ~ G J K@2 L M N O L M N O L M N
  O L M N P I E F ~ I E F C D E F ~ G J K@2 Q@2 N O R@2 N O S@2 N O L M N P T@2 U@2 V W X@2 Y@3 ~@3 Z M N O L M N O L M
  N O I E F ~ I E F C D E F ~ G J K@2 AA@2 N O AB@2 N O AB@2 N O L M N O AC@2 N O AB@2 N O AB@2 N O AB@2 N O AC@2 N O
  AB@2 N O AB@2 N O AB@2 N O AC@2 N O AB@2 N O AD@4
>`.pickRestart({
  A: "[g3,c4]@4 ~@2 [g3,c4]@4 ~@2 [g3,c4]@3 ~", B: "[g3,c4]@2 ~ [g3,c4]@2 ~ [g3,c4]@2", C: "~@6 [bb3,eb4] ~",
  D: "[ab3,c4]@2 ~ [ab3,c4]@2 ~@3", E: "[g3,c4]@4 ~@2 [g3,c4]@3 ~@7", F: "[g3,c4]@3 ~@3 [g3,c4]@3 ~@3 [g3,c4]@3 ~",
  G: "[a3,d4]@3 ~@3 [a3,d4]@3 ~@7", H: "[g3,d4]@4 ~@2 [g3,b3]@3 ~@7", I: "[ab3,c4]@4 ~@2 [ab3,c4]@3 ~@3 [ab3,c4]@2 ~@2",
  J: "[g3,d4]@4 ~@2 [g3,d4]@3 ~@7", K: "[g3,c4]@3 ~@3 [g3,c4]@3 ~@7", L: "~@6 [f3,ab3,c4]@3 ~@3 [f3,ab3,c4]@4",
  M: "~@6 [g3,b3,d4]@3 ~@3 [g3,b3,d4]@2 ~@2", N: "[g3,c4,eb4]@3 ~@3 [g3,c4,eb4]@4 ~@2 [g3,c4,eb4]@3 ~",
  O: "~@6 [g3,c4,eb4]@3 ~@3 [g3,c4,eb4]@3 ~", P: "~@4 [eb3,g3,c4]@3 ~@5 [g3,c4,eb4]@3 ~",
  Q: "[~@6 [f3,ab3,c4]@3 ~@5 d4@8 [g3,b3,d4]@3 ~@3 [g3,b3,d4]@2 ~@2, c5@13 ~@3, ~@2 f4@3 eb4@2 ~@9, ~@3 [f3,ab3,c4] ~@4]/2", // Fm G Fm
  R: "[~@6 [f3,ab3,c4]@3 ~@5 d4@8 [g3,b3,d4]@3 ~@3 [g3,b3,d4]@2 ~@2, ~@4 f4@27 ~, ~@5 eb4@2 ~@9, ~@3 [f3,ab3,c4] ~@4]/2", // Fm G Fm
  S: "[~@6 [f3,ab3,c4]@3 ~@3 [f3,ab3,c4]@3 d4@7 [g3,b3,d4]@3 ~@3 [g3,b3,d4]@2 ~@2, ~@2 f4@13 ~, ~@5 eb4@2 ~@9]/2", // Fm G
  T: "[eb3,bb3,eb4,g4]/2", U: "[d3,bb3,f4,bb4]/2", V: "[c3,c4,eb4,g4]", W: "[bb2,c4,eb4,g4]", X: "[ab2,ab3,c4,eb4]/2",
  Y: "[[g2,g3,b3,d4]@7 ~]/3", Z: "[f3,ab3,c4]@3 ~@3 [f3,ab3,c4]@3 ~@3 [f3,ab3,c4]@4",
  AA: "[[f3,ab3,c4]@3 ~@3 [f3,ab3,c4]@3 ~@5 d4@7 ~ [g3,b3,d4]@3 ~@3 [g3,b3,d4]@2 ~@2, c5@15 ~, ~@2 f4@3 eb4@2 ~@9, ~@3 [f3,ab3,c4] ~@4]/2", // Fm G Fm
  AB: "[~@6 [f3,ab3,c4]@3 ~@5 d4@8 [g3,b3,d4]@3 ~@3 [g3,b3,d4]@2 ~@2, c5@9 ~@7, ~@2 f4@3 eb4@2 ~@9, ~@3 [f3,ab3,c4] ~@4]/2", // Fm G Fm
  AC: "[[f3,ab3,c4]@3 ~@3 [f3,ab3,c4]@3 ~@5 d4@8 [g3,b3,d4]@3 ~@3 [g3,b3,d4]@2 ~@2, c5@9 ~@7, ~@2 f4@3 eb4@2 ~@9, ~@3 [f3,ab3,c4] ~@4]/2", // Fm G Fm
  AD: "[eb3,g3,c4]/4", // Cm
})).s("gm_epiano2").gain(0.31).pan(0.6)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@80 A@2 ~@2 B@2 ~@2 C@2 ~@48 A@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 A@2 ~@2 D@2 ~@2 D@2 ~@2 D@2 ~@2 A@2 ~@2 D@2 ~@2 D@2 ~@2
  D@2 ~@2 A@2 ~@2 D@2 ~@6
>`.pickRestart({
  A: "[~@2 f4@3 eb4@2 d4@9, c5 ~]/2", B: "[~@10 eb4@4 d4@17 ~, ~ f4@3 ~@4]/2",
  C: "[~@10 eb4@4 ~ d4@15 ~@2, ~@4 f4@13 ~@15]/2", D: "[~@2 f4@3 eb4@2 d4@9]/2",
})).s("gm_distortion_guitar").gain(0.24).pan(0.2)

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

// drums · rim
const rim = s("rim").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~@4
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2",
})).gain(0.56)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@96 [x ~ x!3 ~ x!2]!14 ~@88>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@32 A@15 B A@14 C A@16 ~ A@15 D ~@14 A@7 C A@19 ~ A@15 D A@40 ~@4>".pickRestart({
  A: "~ x", B: "~@4 x!2 ~@2", C: "~@4 x ~@2 x", D: "x!2",
})).gain(0.56)

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

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4]!96 ~@14 [x!4]!84 x ~@3>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
// … 51 more lines

More by Celentano