Strudelify

Little Jeanie

Elton John

KeyB♭ majorTempo143 bpm
0:00/0:00
// Little Jeanie — John Elton
// 143 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 3 pad bowed (copy of ch 2 epiano1); ch 12 trombone (copy of ch 9 trumpet); ch 8 baritone sax (copy of ch 13 tenor sax)
// note: Full arrangement: all 149 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(143/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 · lead 3 calliope
const lead_3_calliope = note(`<
  ~@13 A B C D@2 E B F G@2 H@3 ~ A B C D@2 E B F G@2 H@3 I J@2 ~ K@2 L@2 M@2 N O@2 P@2 E B C D@2 E B F G@2 H@3 Q R S C
  D@2 E B F G@2 H@3 I J@2 ~ K@2 L@2 M@2 N O@2 P@2 ~@13 I J@2 ~ K@2 L@2 M@2 N O@2 T@2 U V@2 W@2 X@2 Y@2 Z T@2 U V@2 W@2
  AA ~@6
>`.pickRestart({
  A: "~@6 d5@5 ~ c5@2 bb4@2", B: "c5@2 bb4@5 ~@9", C: "~@5 g4 bb4 ~", D: "[d5@5 ~ c5@5 ~ c5@6 bb4@5 ~@9]/2",
  E: "~@6 c5 bb4", F: "~@6 g4 bb4", G: "[c5@3 ~ c5@2 c5@4 bb4@2 ~@2 bb4@4 g4@5 ~@7 g4@2]/2",
  H: "[g5@3 ~ f5@2 f5@5 ~ d5@2 g5@9 ~ d5@3 ~ c5@11 ~@9]/3", I: "~@6 bb4!2",
  J: "[[ab4,eb5,ab5]@2 [ab4,eb5,ab5]@2 [ab4,eb5,ab5]@2 [g4,eb5,g5]@4 [c5,eb5]@3 ~ [bb4,d5]@4 bb4@2 [bb4,d5]@7 ~@5]/2", // Ab5 Cm Bb
  K: "[[ab4,eb5,ab5]@2 [ab4,eb5,ab5]@2 [ab4,eb5,ab5]@2 [g4,eb5,g5]@4 [c5,eb5]@3 ~ [bb4,d5]@4 ~@2 [d4,f4,bb4]@11 ~]/2", // Ab5 Cm Bb
  L: "[~@3 g5@2 d5 c5 c5@2 bb4 ~@6]/2", M: "[a4@2 bb4@2 ~@2 c5@4 d5@2 ~@2 c5@4 bb4@2 a4@3 ~@9]/2", N: "~@7 g4",
  O: "[eb5@6 d5@4 d5@4 bb4@5 ~@13]/2", P: "[~@10 g4@2 bb4@2 eb5@4 d5@3 ~ c5@4 bb4@2 c5@2 bb4@2]/2", Q: "~@4 f5@2 d5 c5",
  R: "d5 c5 bb4@2 ~@8 [g4,c5]@2 [g4,bb4]@2", S: "[g4,c5]@2 [g4,bb4]@5 ~@9",
  T: "[~@12 g4@2 eb5@4 d5@3 ~ d5@4 bb4@2 c5@2 ~@2]/2", U: "[bb4,d5]@7 ~ [bb4,d5]@2 ~@6",
  V: "[[bb4,d5]@2 [c5,eb5]@2 [d5,f5]@2 [d5,f5]@4 [c5,eb5]@2 [bb4,d5]@2 [f4,c5]@9 ~ [f4,c5]@2 ~@6]/2", // Bb Cm Dm Cm Bb F5
  W: "[[a4,c5]@2 [bb4,d5]@2 [c5,eb5]@2 [c5,eb5]@4 [bb4,d5]@2 [a4,c5]@2 [g4,bb4]@9 ~ [g4,bb4]@2 ~@6]/2", // Am Bb Cm Bb Am Gm
  X: "[[g4,bb4]@2 [a4,c5]@2 [bb4,d5]@2 [bb4,d5]@4 [a4,c5]@2 [g4,bb4]@2 [f4,a4,c5]@17 ~]/2", // Gm Am Bb Am Gm F
  Y: "[~@10 d5@3 ~ c5@4 bb4@9 ~ [f4,f5]@2 [g4,g5]@2]/2", Z: "[bb4,bb5]@3 ~ [g4,g5]@11 ~",
  AA: "[g4,bb4] [a4,c5] [bb4,d5] [bb4,d5]@2 ~@3", // Gm Am Bb
})).s("gm_lead_3_calliope").gain(0.8)

// chords · lead 3 calliope · soft notes
const lead_3_calliope_soft = note("<~@142 A@2 B@2 C D@2>".pickRestart({
  A: "[~@10 [a4,c5]@2 [g4,bb4]@2 [f4,a4,c5]@17 ~]/2", B: "[~@10 d5@3 ~ c5@4 bb4@9 ~ [f4,f5]@2 [g4,g5]@2]/2",
  C: "[bb4,bb5]@3 ~ [g4,g5]@11 ~", D: "[~@12 g4@2 eb5@4 d5@3 ~ d5@4 bb4@2 c5@2 ~@2]/2",
})).s("gm_lead_3_calliope").gain(0.16)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A@2 B@2 C@2 D@2 E@4 A@3 F C@4 G E A H B@2 A@3 F C@4 G E A H B@2 I A@2 I A J C B K@2 E@4 A@3 F C@4 G E A H B@2 A@3 F
  C@4 G E A H B@2 I A@2 I A J C B K@2 E@4 A@3 F C@4 G E A H B@2 I A@2 I A J C B K@2 E@4 A@2 B@2 C@2 D@2 E@4 A@2 B@2 C@2
  D@2 E@4
>`.pickRestart({
  A: "[f4,bb4,d5]@2 [f4,bb4,d5]@2 [f4,bb4,d5]@3 ~ [f4,bb4,d5]@2 [f4,bb4,d5]@2 [f4,bb4,d5]@2 [f4,bb4,d5]@2", // Bb
  B: "[f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@3 ~ [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2", // F
  C: "[g4,bb4,d5]@2 [g4,bb4,d5]@2 [g4,bb4,d5]@3 ~ [g4,bb4,d5]@2 [g4,bb4,d5]@2 [g4,bb4,d5]@2 [g4,bb4,d5]@2", // Gm
  D: "[d4,f4,a4,c5]@2 [d4,f4,a4,c5]@2 [d4,f4,a4,c5]@3 ~ [d4,f4,a4,c5]@2 [d4,f4,a4,c5]@2 [d4,f4,a4,c5]@2 [d4,f4,a4,c5]@2", // Dm7
  E: "[eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@3 ~ [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2", // Eb
  F: "[f4,bb4,d5]@2 [f4,bb4,d5]@2 [f4,bb4,d5]@3 ~ [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5]@2", // Bb F
  G: "[ab4,c5,eb5]@2 [ab4,c5,eb5]@2 [ab4,c5,eb5]@3 ~ [ab4,c5,eb5]@2 [ab4,c5,eb5]@2 [ab4,c5,eb5]@2 [ab4,c5,eb5]@2", // Ab
  H: "[eb4,g4,c5]@2 [eb4,g4,c5]@2 [eb4,g4,c5]@3 ~ [eb4,g4,c5]@2 [eb4,g4,c5]@2 [eb4,g4,c5]@2 [eb4,g4,c5]@2", // Cm
  I: "[ab4,c5,eb5]@2 [ab4,c5,eb5]@2 [ab4,c5,eb5]@3 ~ [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2 [eb4,g4,bb4]@2", // Ab Eb
  J: "[f4,bb4,d5]@2 [f4,bb4,d5]@2 [f4,bb4,d5]@3 ~ [f4,bb4,d5]@2 [f4,bb4,d5]@2 ~@4", // Bb
  K: "[e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@3 ~ [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@2", // C
})).s("gm_acoustic_guitar_steel").gain(0.4)

// chords · epiano1
const epiano1 = note(`<
  ~ A B C D E F G@2 H@2 I J K@2 L@3 M@2 N O@2 P@4 K@2 L@3 M@2 N O@2 Q@4 R@6 S T@3 U@2 V@2 K@2 L@3 M@2 N O@2 P@4 K@2 L@3
  M@2 N O@2 Q@4 R@6 S T@3 U@2 V@2 K@2 L@3 M@2 N W@2 Q@4 R@6 S T@3 U@2 V@2 X@7 Y Z AA AB@2 X@7 Y Z AA AB@2
>`.pickRestart({
  A: "[f4,bb4,d5]@7 ~ [f4,bb4,d5]@7 ~", B: "[f4,bb4,d5]@2 eb5@2 f5@2 [f4,bb4,f5]@4 eb5@2 d5@3 ~",
  C: "[c4,f4,c5]@7 ~ [c4,f4,c5]@7 ~", D: "[c4,f4,c5]@2 d5@2 eb5@2 [f4,c5,eb5]@4 d5@2 c5@3 ~",
  E: "[d4,g4,bb4]@7 ~ [d4,g4,bb4]@7 ~", F: "[g4,bb4]@2 [a4,c5]@2 [bb4,d5]@2 [bb4,d5]@4 [a4,c5]@2 [g4,bb4]@3 ~",
  G: "[[c4,f4,a4,c5]@5 ~ g4@2 a4@2 [c4,f4]@16 f4@2 g4@2 a4@2, ~@3 c5@10 ~@3]/2", // F F5
  H: "[[eb4,g4]@3 ~ bb4@2 [a4,c5]@4 [bb4,d5]@3 ~ [c5,eb5]@4 [d5,f5]@3 ~ [eb5,g5]@4 bb4@2 g4@2 eb4@2]/2", // Eb Am Bb Cm Dm Eb
  I: "[eb4,g4,bb4]@11 ~ g4@2 bb4@2", J: "[g4,bb4,eb5]@3 ~ bb4@2 [f4,d5]@4 [eb4,g4,bb4]@5 ~",
  K: "[[f4,bb4,d5]@27 ~ [g4,bb4,eb5]@3 ~]/2", L: "[[f4,bb4,d5]@23 ~ [c4,f4,c5]@5 ~ [d4,g4,c5]@13 ~ [g4,bb4]@3 ~]/3",
  M: "[[f4,a4]@2 [g4,bb4]@16 [d4,g4,bb4]@13 ~]/2", N: "f4@2 g4@2 bb4@3 ~ c5@2 bb4@2 g4@2 bb4@2",
  O: "[[eb4,ab4,c5]@7 ~ [ab4,c5,eb5]@5 ~ [bb3,eb4,g4]@17 ~]/2", // Ab Eb
  P: "[[f4,bb4,d5]@7 ~ [d4,f4,bb4]@5 ~ [g4,c5,e5]@13 ~ [c4,f4,a4]@9 ~ [g4,bb4]@2 [a4,c5]@2 ~@2 [f4,c5]@6 f4@3 ~ [f4,c5,f5]@5 ~ [c5,eb5]@2 ~@2]/4", // Bb C F Gm Am F5 Cm
  Q: "[[f4,bb4,d5]@7 ~ [d4,f4,bb4]@5 ~ [g4,c5,e5]@13 ~ [c4,f4,a4]@9 ~ [g4,bb4]@2 [a4,c5]@2 ~@2 [f4,c5]@6 f4@3 ~ [f4,c5,f5]@9 ~]/4", // Bb C F Gm Am F5
  R: "[[ab4,c5,eb5]@7 ~ [g4,bb4,eb5]@5 ~ [f4,bb4,d5]@33 ~]/3", S: "~@2 [d4,g4,bb4]@13 ~",
  T: "[[c4,f4,a4]@3 ~@3 [c4,f4,c5]@4 ~@4 [c4,f4,c5]@4 ~@2 [c4,g4]@6 e4@2 f4@2 [g3,c4,g4]@15 ~@3]/3", // F F5 C5
  U: "[[eb4,g4]@27 ~@5]/2", V: "[[g3,bb3,eb4]@5 ~@2 [g4,bb4]@2 ~@2 [eb4,g4,bb4,c5]@2 ~@3]/2",
  W: "[[eb4,ab4,c5]@13 ~ [bb3,eb4,g4]@17 ~]/2", // Ab Eb
  X: "[[f4,bb4,d5]@27 ~@3 [c4,f4,c5]@29 ~@3 [d4,g4,bb4]@29 ~@3 [c4,f4,a4,c5]@17 ~]/7", Y: "[f3,c4,f4]@5 ~@3",
  Z: "~@2 [bb3,eb4,g4,bb4]@13 ~", AA: "g3@2 bb3@2 eb4@2 [bb3,eb4,g4]@9 ~",
  AB: "[[g3,bb3,eb4]@11 ~@3 [g4,bb4,eb5]@7 ~ [eb4,g4,bb4,d5]@4 ~@6]/2", // Eb Ebmaj7
})).s("gm_epiano1").gain(0.72)

// bass · fretless bass
const bass = note(`<
  ~ A@2 B C D E F G H@2 I J K@3 L M@2 N O P Q R S T@2 K@3 L M@2 N O P Q R S U@2 V W X V W Y Z AA AB AC AD AE R AF K@3 L
  M@2 N O P Q R S T@2 K@3 L M@2 N O P Q R S U@2 V W X V W Y Z AA AB AC AD AE R AF K@3 L M@2 N O P Q R S U@2 V W X V W Y
  Z AA AB AC AD AE R AG AH AI AJ@2 AK@2 AL AM AN AO R AG AH AI AJ@2 AK AP ~@6
>`.pickRestart({
  A: "bb1@5 ~ bb1@2 bb1@7 ~", B: "a1@5 ~ a1@2 a1@5 ~ a1@2", C: "a1@5 ~ a1@2 a1@7 ~", D: "g1@5 ~ g1@2 g1@3 ~ d2@3 ~",
  E: "g1@5 ~ d2@2 g2@3 ~ g1@3 ~", F: "d1@11 ~ a1@3 ~", G: "d2@5 ~ a1@2 d1@7 ~", H: "eb1@5 ~ eb1@2 eb1@7 ~",
  I: "f1@15 ~", J: "f1@7 ~ f1@7 ~", K: "[bb2@27 ~ bb2@19 ~]/3", L: "bb2@5 ~ a2@9 ~", M: "[g2@31 ~]/2", N: "g2@15 ~",
  O: "g2@5 ~ d3@2 g3@2 ~@6", P: "[eb2,eb3]@15 ~", Q: "eb2@5 ~ bb2@2 eb3@2 bb2@2 eb2@3 ~", R: "[f1,f2]@15 ~",
  S: "[g1,g2]@11 ~@5", T: "[[a1,a2]@11 ~ [a1,a2]@15 ~ f2@2 ~@2]/2", U: "[[a1,a2]@11 ~ a2@15 ~@5]/2",
  V: "[eb2,eb3]@13 ~@3", W: "[bb1,bb2]@5 ~ bb1@2 bb1@2 ~@6", X: "bb1 ~@2 bb1!2 ~@3", Y: "bb3@5 ~ f3@2 bb2@3 ~ a2@3 ~",
  Z: "g2@5 ~ d3@2 g3@2 d3@2 g2@2 ~@2", AA: "f2@3 ~@3 c3@2 f3@2 ~@2 f2@2 ~@2", AB: "e2@5 ~ e2@2 e2@7 ~",
  AC: "e3@5 ~ e2@2 e2@7 ~", AD: "[eb2,bb2]@15 ~", AE: "eb2@5 ~ bb2@2 eb3@3 ~@5", AF: "[f2,f3]@13 ~@3",
  AG: "[f2,f3]@15 ~", AH: "bb2@5 ~ bb2@2 bb2@2 ~@6", AI: "bb2@5 ~ bb2@2 bb2@3 ~@5", AJ: "a2@5 ~ a2@2 a2@2 ~@6",
  AK: "g2@5 ~ g2@2 g2@2 ~@6", AL: "d2@5 ~ d2@2 d2@3 ~ a2@3 ~", AM: "d3@5 ~ a2@2 d2@3 ~@5",
  AN: "eb2@5 ~ eb2@2 eb2@3 ~ bb2@3 ~", AO: "eb2@5 ~ bb2@2 eb3@2 bb2@2 eb2@2 ~@2", AP: "g2@5 ~@11",
})).s("gm_fretless_bass").gain(0.56)

// bass · fretless bass · soft notes · F
const bass_soft = note(`<
  ~@142
  [~@3 g2!2 ~@3]
  [d2@5 ~ d2@2 d2@3 ~ a2@3 ~]
  [d3@5 ~ a2@2 d2@3 ~@5]
  [eb2@5 ~ eb2@2 eb2@3 ~ bb2@3 ~]
  [eb2@5 ~ bb2@2 eb3@2 bb2@2 eb2@2 ~@2]
  [[f1,f2]@15 ~]
  [[f2,f3]@15 ~]
>`).s("gm_fretless_bass").gain(0.16)

// bass · slap bass 2
const bass_2 = note(`<
  ~@13 A@3 B C@3 D E F G H I@2 A@3 B C@3 D E F G H J@2 K L M K L N O P Q R S T G U A@3 B C@3 D E F G H I@2 A@3 B C@3 D E
  F G H J@2 K L M K L N O P Q R S T G U A@3 B C@3 D E F G H J@2 K L M K L N O P Q R S T G V W X Y@2 Z@2 AA AB AC AD G V
  W X Y@2 Z AE ~@6
>`.pickRestart({
  A: "bb1@5 ~ bb1@2 bb1@7 ~", B: "bb1@5 ~ a1@9 ~", C: "g1@5 ~ g1@2 g1@2 ~@6", D: "g2@5 ~ d3@2 g3@2 ~@6",
  E: "[eb2,eb3]@15 ~", F: "eb2@5 ~ bb2@2 eb3@2 bb2@2 eb2@3 ~", G: "[f1,f2]@15 ~", H: "[g1,g2]@11 ~@5",
  I: "[[a1,a2]@11 ~ a2@15 ~ f2@2 ~@2]/2", J: "[[a1,a2]@11 ~ a2@15 ~@5]/2", K: "[eb2,eb3]@13 ~@3",
  L: "[bb1,bb2]@5 ~ bb1@2 bb1@2 ~@6", M: "bb1 ~@2 bb1!2 ~@3", N: "bb3@5 ~ f3@2 bb2@3 ~ a2@3 ~",
  O: "g2@5 ~ d3@2 g3@2 d3@2 g2@2 ~@2", P: "f2@3 ~@3 c3@2 f3@2 ~@2 f2@2 ~@2", Q: "e2@5 ~ e2@2 e2@7 ~",
  R: "e3@5 ~ e2@2 e2@7 ~", S: "[eb2,bb2]@15 ~", T: "eb2@5 ~ bb2@2 eb3@3 ~@5", U: "[f2,f3]@13 ~@3", V: "[f2,f3]@15 ~",
  W: "bb2@5 ~ bb2@2 bb2@2 ~@6", X: "bb2@5 ~ bb2@2 bb2@3 ~@5", Y: "a2@5 ~ a2@2 a2@2 ~@6", Z: "g2@5 ~ g2@2 g2@2 ~@6",
  AA: "d2@5 ~ d2@2 d2@3 ~ a2@3 ~", AB: "d3@5 ~ a2@2 d2@3 ~@5", AC: "eb2@5 ~ eb2@2 eb2@3 ~ bb2@3 ~",
  AD: "eb2@5 ~ bb2@2 eb3@2 bb2@2 eb2@2 ~@2", AE: "g2@5 ~@11",
})).s("gm_slap_bass_2").gain(0.56)

// bass · slap bass 2 · soft notes · F
const bass_soft_2 = note(`<
  ~@142
  [~@3 g2!2 ~@3]
  [d2@5 ~ d2@2 d2@3 ~ a2@3 ~]
  [d3@5 ~ a2@2 d2@3 ~@5]
  [eb2@5 ~ eb2@2 eb2@3 ~ bb2@3 ~]
  [eb2@5 ~ bb2@2 eb3@2 bb2@2 eb2@2 ~@2]
  [[f1,f2]@15 ~]
  [[f2,f3]@15 ~]
>`).s("gm_slap_bass_2").gain(0.16)

// chords · trumpet
const trumpet = note(`<
  ~@42 A B@2 C D E F G@2 ~@2 H@2 ~@4 I J K L ~@10 I J K L ~@7 A B@2 C D E F G@2 ~@2 H@2 ~@15 A B@2 C D E F G@2 ~@2 H@2
  ~@24
>`.pickRestart({
  A: "~@6 [bb4,d5] ~", B: "[[a4,c5]@2 [f4,bb4]@2 g4@2 [a4,c5]@4 [bb4,d5] [g4,c5] [f4,bb4]@6 ~@14]/2",
  C: "~@5 g4 bb4 c5", D: "d5@3 ~ c5@3 ~ bb4@3 ~ a4@3 ~", E: "[d4,g4]", F: "[c4,f4]",
  G: "[[c4,e4]@7 ~@3 e4@2 f4@2 [g3,c4,g4]@15 ~@3]/2", H: "[[f4,c5]@10 ~@2 [f4,d5]@2 [f4,f5]@15 ~@3]/2",
  I: "~@5 [g4,bb4] [g4,c5] [g4,d5]", J: "[g4,d5]@15 ~", K: "~@6 [g4,c5] [g4,bb4]", L: "[g4,c5]@2 [g4,bb4]@11 ~@3",
})).s("gm_trumpet").gain(0.38)

// chords · tenor sax
const tenor_sax = note(`<
  ~@42 A B@2 C D E F G@2 ~@2 H@2 ~@4 I J K L ~@10 I J K L ~@7 A B@2 C D E F G@2 ~@2 H@2 M N O P Q R ~ S T U V W@2 X ~ A
  B@2 C D E F G@2 ~@2 H@2 ~@24
>`.pickRestart({
  A: "~@6 [bb4,d5] ~", B: "[[a4,c5]@2 [f4,bb4]@2 g4@2 [a4,c5]@4 [bb4,d5] [g4,c5] [f4,bb4]@6 ~@14]/2",
  C: "~@5 g4 bb4 c5", D: "d5@3 ~ c5@3 ~ bb4@3 ~ a4@3 ~", E: "[d4,g4]", F: "[c4,f4]",
  G: "[[c4,e4]@7 ~@3 e4@2 f4@2 [g3,c4,g4]@15 ~@3]/2", H: "[[f4,c5]@10 ~@2 [f4,d5]@2 [f4,f5]@15 ~@3]/2",
  I: "~@5 [g4,bb4] [g4,c5] [g4,d5]", J: "[g4,d5]@15 ~", K: "~@6 [g4,c5] [g4,bb4]", L: "[g4,c5]@2 [g4,bb4]@11 ~@3",
  M: "~@7 bb4, ~@3 d5", N: "c5 bb4 ~@6", O: "~@6 g4 bb4", P: "d5@3 d5@2 bb4 c5 bb4", Q: "g4 bb4 g4@7 ~@7",
  R: "~@4 g4 bb4 c5 g4", S: "~@4 g4 bb4!2 g4", T: "c5@3 ~ bb4@2 bb4@2 ~@8", U: "~@4 g4 bb4@2 bb4",
  V: "d5@11 ~ d5@2 f5@2", W: "[g5@10 f5@2 d5@2 c5@13 ~@5]/2", X: "~@4 g4@3 ~ g4@3 ~@5",
})).s("gm_tenor_sax").gain(0.41)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A@3 B A@3 B A@3 ~ A@3 B A@3 B A@5 C A@3 B A@3 B A@5 ~ A@2 D A@10 ~ A@3 E A@3 B A@5 F A@3 B A@3 B A@5 ~ A@2 D A@10 ~
  A@3 B A@3 B A@5 ~ A@2 D A@10 G A@24
>`.pickRestart({
  A: "~ x", B: "~@4 x ~ x!2", C: "~@5 x!3", D: "~ x ~@7 x ~@6", E: "~@2 x ~ x ~ x!2", F: "~@3 x!3 ~@2",
  G: "~@2 x!2 ~@4",
})).gain(0.56)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@3 B A@3 B A@3 ~ A@3 B A@3 B A@5 C A@3 B A@3 B A@5 C D@13 E A@45 B A@3 B A@5 C D@10 A@3 F A@24
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x", D: "x!8", E: "x!4 ~@4", F: "x!2 ~@2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@12 [~@6 x!2] ~@111 [~@7 x] ~@24>").gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<A ~@11 B ~@27 C ~@13 D ~@13 E ~@13 C ~@13 D ~@13 C ~@13 F ~@24>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~@4 x ~@5 x!2 ~@4", C: "~@5 x!2 ~", D: "~@7 x", E: "~@6 x!2", F: "~@3 x",
})).gain(0.56)

// … 20 more lines

More by Elton John