Strudelify
We Built This City cover art

1985 · Knee Deep in the Hoopla

We Built This City

Starship

KeyF majorTempo142 bpm
0:00/0:00
// We Built This City — Starship
// 142 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 169 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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, A@4 for four bars: edit a riff to change every repeat.

// chords · synth brass 1 · "Synth Brass"
const synth_brass_1 = note(`<
  ~@11 A B A C D@2 E F G@2 H@2 I J K@2 G@2 L@2 I J M@3 ~@3 N O@2 P Q@2 R S T U R S T V@2 D@2 E F W X Y Z I AA K@2 W X Y
  AB I AA M@3 ~@3 N O@2 P Q@2 R S T U R S T AC ~@5 AD ~ AD AE AF AG AH AI F W X Y Z I AA K@2 W X Y AB I AA M@3 ~@3 N
  AJ@2 AK@2 ~@4 N AJ@2 AL Q@2 AM AN AO U AM@2 AO AP AM@2 AO AQ AM@2 AO AP AR@2 AS AT AU AT AU AT AU AV AW AT
>`.pickRestart({
  A: "[f3,c4]@3 ~@3 [bb3,d4]@10", B: "~@2 a3 ~ g3 ~@3", C: "~@4 [c4,e4]@3 ~ [c4,f4]@2 ~@6",
  D: "[[f3,a3,c4]@3 ~@3 [bb3,d4]@12 ~@2 a3@2 ~@2 g3@2 ~@6]/2", E: "[f3,a3,c4]@3 ~@3 [bb3,d4]@10",
  F: "~@4 [g4,c5,e5]@3 ~ [a4,c5,f5]@3 ~@5", G: "[[f3,g3,a3,c4]@15 ~]/2", H: "[~@7 f4@8 ~, [f3,bb3,d4]@29 ~@3]/2",
  I: "[g3,bb3,eb4]@15 ~", J: "[g3,c4,e4]@15 ~", K: "[[a3,c4,f4]@29 ~@3]/2", L: "[[f3,bb3,d4]@29 ~@3]/2",
  M: "[f4@16 f4@8 e4@5 ~ d4@10 ~@8, [a3,c4]@3 ~@5]/3", // Am
  N: "f3@2 f3 ~ [f3,c5,f5,a5,c6]@2 ~@2 bb3@2 bb3@2 [bb3,f5,bb5,d6,f6]@2 ~@2", // F Bb
  O: "[[f3,c4]@5 ~ [bb3,d4]@12 ~@2 a3@2 ~@2 g3@3 ~@5]/2", P: "[f3,c4]@5 ~ [bb3,d4]@9 ~",
  Q: "[[f3,a3]@5 ~ [e3,g3]@5 ~ [d3,f3]@20]/2", R: "~@8 [f4,bb4] ~ [f4,bb4]@2 ~@4", S: "~@8 [f4,bb4] ~ [f4,bb4] ~@5",
  T: "~@8 [f4,a4] ~ [f4,a4] ~@5", U: "[f3,a3]@5 ~ [g3,bb3]@5 ~ [a3,c4] ~@3",
  V: "[[c4,e4]@5 ~ [c4,f4]@5 ~ [bb3,d4,f4]@12 ~@8]/2", W: "[f3,g3,a3,c4]",
  X: "[c4,f4] ~ [c4,f4] ~ [c4,e4] ~ e4@2 [c4,f4] ~ [c4,f4]@2 ~@4, ~@6 c4 ~@9", Y: "[f3,bb3,d4]",
  Z: "[bb3,f4] ~ [bb3,f4] ~ [bb3,e4] ~ e4@2 [bb3,f4] ~ [bb3,f4]@2 ~@4, ~@6 bb3 ~@9", // Bb5 Bbdim Bb5
  AA: "e4 ~ e4 ~ e4 ~ e4 ~ [c4,f4] ~ [c4,f4] ~ [c4,g4] ~ [c4,g4] ~, g3, c4@7 ~@9", // F5 C5
  AB: "[bb3,f4] ~ [bb3,f4] ~ [bb3,e4] ~ e4@2 [bb3,f4] ~ [bb3,f4]@2 [bb3,g4] ~ g4@2, ~@6 bb3 ~@7 bb3 ~", // Bb5 Bbdim Bb5 Eb
  AC: "[c4,e4]@5 ~ [c4,f4]@5 ~ [bb3,d4,f4]@4", AD: "~@8 [g4,c5,e5]@3 ~ [a4,c5,f5]@3 ~",
  AE: "a2@3 ~ bb2 ~ f3@2 ~@2 a2@3 ~ a2@2", AF: "bb2@2 ~@2 f3@2 ~@2 [g4,c5,e5]@3 ~ [a4,c5,f5]@3 ~",
  AG: "a2@2 ~@2 bb2@2 f3@2 ~@2 a2@2 ~@2 a2 ~", AH: "bb2 ~ bb2 ~ f3@3 ~ [g4,c5,e5]@3 ~ [a4,c5,f5]@3 ~", AI: "[f3,a3]",
  AJ: "[f3@5 ~ bb3@12 ~@2 a3@2 ~@2 g3@3 ~@5]/2",
  AK: "[[f3,a3,c4]@4 ~@2 [f3,bb3,d4]@14 [a3,c4,f4]@4 [f3,a3,c4]@3 ~ [e3,g3,c4]@4]/2", AL: "f3@5 ~ bb3@8 ~@2",
  AM: "~@8 [f3,bb3] ~ [f3,bb3]@2 ~@4", AN: "~@8 [f3,bb3] ~ [f3,bb3] ~@5", AO: "~@8 [f3,a3] ~ [f3,a3] ~@5",
  AP: "[g3,c4]@5 ~ [a3,c4]@6 [f3,bb3]@3 ~", AQ: "[f3,a3]@5 ~ [g3,bb3]@5 ~ [a3,c4]@2 ~@2", AR: "[f3,bb3,d4]/2",
  AS: "[f4,bb4,d5,f5,bb5,d6,f6]@3 ~@5 [f4,bb4,d5,f5]@3 ~@3 [g4,c5,e5]@2", AT: "~@2 [g4,c5,e5] ~ [g4,c5,e5]@2 ~@10",
  AU: "[f4,bb4,d5,f5]@2 ~@6 [f4,bb4,d5,f5]@3 ~@3 [g4,c5,e5]@2", AV: "~@2 [g4,c5,e5] ~ [g4,c5,e5] ~@5 [g4,c5,e5]@2 ~@4",
  AW: "[f4,bb4,d5,f5] ~@3 [f4,bb4,d5,f5] ~@2 [g4,c5,e5]", // Bb C
})).s("gm_synth_brass_1").gain(0.45)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@11 A@2 B@2 A@2 C@2 D E D E D E D E D E D E D E D F G H I@2 J A@2 K L@2 M N O P@2 N O Q@2 A@2 R@2 D E D E D E D E D E
  D E D E D F G H I@2 J A@2 K L@2 M N O P@2 N O S T@3 U V W V X V W V Y Z AA D E D AB D E D E D E D AC D E D F G H I@2 J
  AD@2 AE@2 G H I@2 J A@2 K L@2 M N O P@2 N O AF M N O P@2 N O S T AG AH@10
>`.pickRestart({
  A: "[f2@6 bb2@13 ~ a2@3 ~ g2@4 ~@4]/2", B: "[f2@2 f3@2 f2@2 bb2@12 ~@2 e2@4 f2@3 ~@5]/2",
  C: "[f2@2 f3@2 f2@2 bb2@12 ~@2 e3@4 f3@3 ~@5]/2", D: "f2@4 ~@2 f2@2 f2@5 ~@3", E: "f2@4 f2@4 f2@5 ~@3",
  F: "f2@2 f2@2 e2@2 e2 d2", G: "~@2 d2@2 d2@3 ~ d2@3 ~ d2 ~ d2@2", H: "~@2 d2@2 d2@3 ~ d2@3 ~ d2@2 c2@2",
  I: "[~@2 c2@2 c2@3 ~ c2@3 ~ c2@2 c2@4 c2 ~ c2@3 ~ c2@3 ~ c2@4]/2", J: "f2@2 f2@2 f2@3 ~ bb2@2 bb2@2 bb2@3 ~",
  K: "f2@6 bb2@9 ~", L: "[f2@3 e2@3 d2@10]/2", M: "bb2@2 bb2@2 bb2@2 bb2 a2", N: "bb2!2 a2 bb2@2 bb2!3", O: "a2!4",
  P: "[f2@3 g2@3 a2 bb2@3 bb2@2 bb2@2 bb2@2]/2", Q: "[c3@3 a2@3 bb2@6 ~@4]/2", R: "[f2 f3 f2 bb2@6 ~@7]/2",
  S: "c3@3 a2@3 bb2@2", T: "bb1@7 ~", U: "~@4 c2@5 ~@3 c2@4", V: "a2@3 ~ bb2@2 f3@2 ~@2 a2@2 ~@2 a2@2",
  W: "bb2@2 ~@2 f3@3 ~ e3@3 ~ f3@3 ~", X: "bb2@2 bb2@2 f3@3 ~ e3@3 ~ f3@3 ~", Y: "bb2@2 bb2@2 f3@3 ~ e2@3 ~ f2@3 ~",
  Z: "f2@5 ~ f2@2 f2@6 ~@2", AA: "f2@2 f2@2 e2@3 ~ f2@2 ~@6", AB: "f2@2 f2@2 ~ f3 ~@2, ~@2 f2 ~",
  AC: "~@2 a3@2 g3@2 e3@2 f2@7 ~, f2@4 f2@4 f3@5 ~@3", AD: "[f2@6 bb2@13 ~ a2@4 g2@3 ~@5]/2",
  AE: "[f2@2 f2@2 e2 ~ bb2@12 ~@2 a2@3 ~ f2@4 e2@4]/2", AF: "c2@3 a2@3 f2@2", AG: "bb2", AH: "bb2!4",
})).s("gm_electric_bass_finger").gain(0.73)

// chords · synth strings 1 · "Strings"
const synth_strings_1 = note(`<
  ~ A@8 B@2 ~@23 C D E F@2 ~@34 C D E F@2 ~@14 G H G H ~@25 C I@4 J@5 D E F@2 ~@22 K@2 L M L M L M L M L M
>`.pickRestart({
  A: "[[bb1,bb2,d3]@16 f1@8 f1@3 g1@3 a1 [bb1,bb2]@17 [f1,a2,c3]@13 ~@3, f5, ~@32 [a2,c3]@29 ~ d3@32 ~@34]/8", // Bb F Am
  B: "[[bb1,bb2,d3]@29 ~@3]/2", C: "~@7 [d5,a5,d6]", D: "d4", E: "bb3", F: "[c4@31 ~]/2", G: "[f3,bb3]", H: "[g3,c4]",
  I: "[d4@16 ~@2 f5@6 c5@6 ~@5 bb5@3 a5@4 g5@15 ~@7, a5@18 ~@12 a5@5 ~@29, ~@16 bb3@16 c4@31 ~]/4",
  J: "[~@6 c5@33 ~]/5", K: "[[bb3,d4]@31 ~]/2", L: "[bb3,d4]", M: "[c4,e4]",
})).s("gm_synth_strings_1").gain(0.59).pan(0.6)

// other · celesta
const celesta = note("<~@2 [~@4 a5@2 bb5@2 f6@2 f6@5 ~] ~@3 [~@4 a5@2 bb5@2 f6@2 f6@5 ~] ~@162>")
  .s("gm_celesta").gain(0.52).pan(0.4)

// chords · trombone
const trombone = note(`<
  ~@33 A B C D E@2 ~@5 F G H I J@2 K I L@2 ~@18 A B C D E@2 ~@5 F G H I J@2 K I M@3 ~@24 N O A ~@9 B C D E@2 ~@5 F G H I
  J@2 K I P Q H I J@2 K I P ~@12
>`.pickRestart({
  A: "~@2 c6@2 bb5@2 a5 ~ a5@3 ~ a5 ~ a5@2", B: "~@6 e5 ~", C: "f5@4 f5@3 ~ f5@3 ~ f5 ~ f5@2", D: "~ d5@2 ~@4 f5",
  E: "[~@2 f5 ~ f5@2 g5 ~ f5@4 e5 ~ e5@4 ~@14]/2", F: "~@7 [a4,a5]", G: "[a4,c5] ~ [g4,bb4] ~ [f4,bb4]!2 ~@2",
  H: "~@14 [g4,c5] ~", I: "[g4,c5]@2 ~@2 [f4,a4]@3 ~ [f4,a4]@4 [f4,a4]@2 ~@2",
  J: "[[a4,c5]@6 [g4,bb4]@5 ~ [f4,a4] ~ [a4,c5]@5 ~ [g4,bb4]@3 ~ bb4@2 [f4,bb4]@2 ~@4, ~@24 f4 ~@7]/2", // Am Gm F Am Gm Bb5
  K: "~@14 [g4,bb4] ~", L: "[[e4,g4]@3 [f4,a4]@3 [d4,f4]@6 ~@4]/2", M: "[[e4,g4] [f4,a4] [d4,f4]@5 ~]/3",
  N: "g5@2 ~@2 g5@2 ~@2 g5@3 ~ g5 ~ g5@2", O: "~@2 g5 ~ g5@2 ~@10", P: "[e4,g4]@3 [f4,a4]@3 [d4,f4]@2",
  Q: "[a4,c5] ~ [g4,bb4] ~ bb4 [f4,bb4] ~@2, ~@8 f4 ~@7", // Am Gm Bb5
})).s("gm_trombone").gain(0.65)

// other · lead 5 charang · "Synth Lead"
const lead_5_charang = note("<~@11 A B ~@2 A B ~@23 A B ~@12 A B ~@23 A B ~@46 A B C ~@6 A B ~@31>".pickRestart({
  A: "~@10 c6 ~ d6 ~ c6 ~", B: "f6 ~ e6 ~ c6 ~ g5 ~ c6 ~ g5 ~@5", C: "~@12 f5 ~ f5 ~",
})).s("gm_lead_5_charang").gain(0.62)

// other · acoustic guitar steel · "Acoustic Guitar"
const acoustic_guitar_steel = note("<~@12 A ~@3 A ~ B ~@25 C ~@10 D ~@27 C ~@56 C ~@28>".pickRestart({
  A: "db3 ~ db3 ~@13", B: "bb2 ~ bb2 ~@13", C: "~@12 db3 ~ db3 ~", D: "db3 ~@15",
})).s("gm_acoustic_guitar_steel").gain(0.65)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@11 A B A C A B A C ~@6 D@2 ~@7 E F G H I J K L K M@2 N O P Q@2 O P R@2 A B A C ~@6 D@2 ~@7 E F G H I J K L K M@2 N O
  P Q@2 O P S ~@4 T U V W T U V W ~ X Y@2 Z@2 AA AB Y AC Y@2 Z@2 AA AB Y E F G H I J K L K AD F G H I J K L K M@2 N O P
  Q@2 O P S N O P Q@2 O P AE@3 ~@10
>`.pickRestart({
  A: "[c3,f3]@2 ~ [bb2,f3]@5", B: "~@2 a3 ~ g3 ~@3", C: "~@4 [g3,c4,e4]@3 ~ [a3,c4,f4]@3 ~@5",
  D: "[~@14 [f3,c4,f4]@4 [f3,c4,f4]@2 [f3,c4,f4]@2 [f3,c4,f4] ~ [f3,c4,f4]@2 ~@6]/2", // F5
  E: "[f3,c4,f4]@4 [e3,g3,c4,e4]@3 [f3,a3,d4,a4]", F: "~@2 [f3,a3,d4,a4]@3 ~@3 [f3,a3,d4,a4]@4 ~@2 [f3,bb3,d4,bb4]@2",
  G: "~ [f3,bb3,d4,bb4]@2 ~ [f3,bb3,d4,bb4]@2 ~ [a3,c4,f4,a4]", // Bb F
  H: "~ [a3,c4,f4,a4]@2 ~ [a3,c4,f4,a4]@2 ~ [g3,c4,e4,g4]", I: "~ [g3,c4,e4,g4]@2 ~ [g3,c4,e4,g4]@2 ~@2",
  J: "[c3,f3]@2 [c3,f3]@2 [c3,f3]@3 ~ [f3,bb3]@2 [f3,bb3]@2 [f3,bb3]@3 ~", // F5 Bb5
  K: "[c3,f3,a3] ~ [c3,f3,a3] ~ [c3,f3,a3] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~", // F Bb
  L: "[f3,bb3,d4] ~ [f3,bb3,d4] ~ [e3,a3,c4] ~ [e3,a3,c4] ~ [d3,g3,bb3] ~ [d3,g3,bb3] ~ [d3,g3,bb3] ~ [d3,g3,bb3] ~", // Bb Am Gm
  M: "[[f3,c4]@3 [e3,c4]@3 [d3,a3,d4]@9 ~]/2", // F5 C D5
  N: "[bb2,f3,bb3]@2 [bb2,f3,bb3] ~ [bb2,f3,bb3]@2 [bb2,f3,bb3] ~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3] ~ [bb2,f3,bb3] ~", // Bb5
  O: "[bb2,f3,bb3]@2 [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3]@2 [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3] ~ [bb2,f3,bb3]@2", // Bb5
  P: "[a2,f3,a3]@2 [a2,f3,a3] ~ [a2,f3,a3]@2 [a2,f3,a3] ~ [a2,f3,a3]@2 [a2,f3,a3]@2 [a2,f3,a3] ~ [a2,f3,a3] ~", // Dm
  Q: "[[f2,f3]@6 [g2,g3]@6 [a2,a3]@2 [bb2,f3,bb3]@4 [bb2,f3,bb3] ~ [bb2,f3,bb3]@2 [bb2,f3,bb3] ~ [bb2,f3,bb3]@2 [bb2,f3,bb3]@2 [bb2,f3,bb3] ~ [bb2,f3,bb3] ~]/2", // F G A Bb5
  R: "[[c3,g3,c4]@3 [a2,c3,a3]@3 [bb2,f3,bb3]@6 ~@4]/2", S: "[c3,g3,c4]@3 [a2,c3,a3]@3 [bb2,f3,bb3]@2",
  T: "a2 ~ bb2 f3 ~ a2 ~ a2", U: "bb2 ~ f3 ~ [g3,c4,e4] ~ [a3,c4,f4] ~", V: "a2@2 ~@2 bb2 ~ f3@2 ~@2 a2@2 ~@2 a2 ~",
  W: "bb2@2 bb2 ~ f3@2 ~@2 [g3,c4,e4]@2 ~@2 [a3,c4,f4]@2 ~@2", X: "~@10 a2@5 ~",
  Y: "[f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~ [f3,c4,f4] ~", // F5
  Z: "[f3,bb3,f4] ~ [f3,bb3,f4] ~ [f3,bb3,f4] ~ [f3,bb3,f4] ~ [f3,bb3,f4] ~ [f3,bb3,f4] ~ [f3,bb3,f4] ~ [f3,bb3,f4] ~", // Bb5
  AA: "[eb3,bb3,eb4] ~ [eb3,bb3,eb4] ~ [eb3,bb3,eb4] ~ [eb3,bb3,eb4] ~ [eb3,bb3,eb4] ~ [eb3,bb3,eb4] ~ [eb3,bb3,eb4] ~ [eb3,bb3,eb4] ~", // Eb5
  AB: "[e3,bb3,e4] ~ [e3,bb3,e4] ~ [e3,bb3,e4] ~ [e3,bb3,e4] ~ [e3,bb3,e4] ~ [e3,bb3,e4] ~ [e3,bb3,e4] ~ [e3,bb3,e4] ~", // Edim
  AC: "f4 ~ e4 ~ c4 ~ g3 ~ f3 ~ g3 ~ a3 ~ f3 ~",
  AD: "[d3,bb3] ~ [d3,bb3] ~ [c3,a3] ~ [c3,a3] ~ [c3,f3] ~ [c3,f3] ~ [c3,e3] ~ [f3,a3,d4,a4]@2", // Gm F F5 C Dm
  AE: "[[c3,g3,c4] [a2,c3,a3] [bb2,f3,bb3]@5 ~]/3", // C5 Am Bb5
})).s("gm_distortion_guitar").gain(0.62)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note("<~@30 [~@6 f4@9 ~, bb3] ~@138>").s("gm_electric_guitar_clean").gain(0.6).pan(0.4)

// other · overdriven guitar
const overdriven_guitar = note("<~@92 A B@3 ~@63 C@2 D@2 E@4 ~@2>".pickRestart({
  A: "eb5@7 e5", B: "[c5@6 g4@2 a4@6 c5@14 g4@6 f4@13 ~]/3", C: "[d4@24 e4@3 f4@3 g4@2]/2", D: "[c5@31 ~]/2",
  E: "[e5 f5@11 e5@2 c5@6 g4@2 a4@8 c5@14 g4@6 f4@13 ~]/4",
})).s("gm_overdriven_guitar").gain(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@11 A B A C A B A C A C A C A C A C A C A C A C A D E@3 F G A C A@2 ~ H I H J K I@2 L M A B A N A C A C A C A C A C A
  C A C A D E@3 F G A C A@2 ~ H I H J K I@2 L O N O ~ H P H Q H P H R A S A C A C A C A C A C A C A C A T E@3 F G A C A
  U E@3 F G A C A@2 ~ H I H J K I@3 H I H J K I@2 L O@2 H I H I H I H I H P
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!2", C: "x!3 ~", D: "x ~ x ~ x ~@2 x", E: "~ x ~@2 x ~@2 x", F: "~ x ~@2 x ~@3",
  G: "x!2 ~@2 x!2 ~@2", H: "x!4", I: "x ~ x!3 ~ x ~", J: "x ~ x!3 ~ x!2", K: "~ x!2 ~ x ~ x ~", L: "x ~ x!2 ~@2 x ~",
  M: "~@10 x!2 ~@4", N: "x!2 ~@6", O: "x", P: "x!2 ~@2", Q: "x ~ x ~@4 x", R: "x!2 ~ x", S: "~ x!2 ~@5",
  T: "x ~ x ~ x!2 ~ x", U: "x ~@2 x!2 ~@2 x",
})).gain(0.65)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A@7 ~ A@25 B A@7 C D A@3 ~ A@25 B A@7 C E@3 F A@9 E A@15 G A@18 B A@15 C E ~ A@3 H A@5 C
>`.pickRestart({
  A: "~ x ~ x", B: "~@6 x!2", C: "~ x ~@2", D: "~@4 x ~ x!2", E: "~ x", F: "x!3 ~ x!3 ~", G: "~@2 x!2",
  H: "~@2 x ~@2 x ~ x",
})).gain(0.65)

// drums · clap
const clap = s("cp").struct("<~@44 [~@6 x!2] ~@38 [~@6 x!2] ~@56 [~@6 x!2] ~@28>").gain(0.73)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@10 A ~@5 B ~@3 B ~@3 C ~ C ~ B ~@3 D ~@26 B ~@3 C ~ C ~ B ~@3 D ~@27 E ~@13 C ~@7 F ~@36 G ~@10
>`.pickRestart({
  A: "~@13 x ~ x", B: "~@7 x", C: "~@3 x", D: "~@6 x!2", E: "~ x!2 ~@5", F: "~@5 x ~@2 x ~@3 x ~@3", G: "~@15 x",
})).gain(0.73)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@11 A@3 B A@3 ~ A@15 C A@8 D ~ A@3 C A@3 C ~ A@3 ~ A@15 C A@8 D ~ A@3 C A@4 E A@2 ~@5 A@4 E ~ A@15 ~ A@8 D E A@7 D ~
  E A@2 C A@4 E A@2 C A@4 E ~ E A@3 E A@3 E F
>`.pickRestart({
  A: "x!8", B: "~ x!2 ~@5", C: "x!7 ~", D: "x!6 ~@2", E: "~ x!7", F: "x!2 ~@6",
})).gain(0.65)

// drums · mid tom
const mid_tom = s("mt").struct("<~@10 A ~@7 B ~@64 C ~@11 D ~@3 E ~@5 F ~@15 G ~@36 H ~@10>".pickRestart({
  A: "~@8 x!2 ~ x!2 ~@3", B: "~ x ~@2", C: "~@3 x ~@4", D: "~ x ~ x", E: "~ x ~@6", F: "~ x!2 ~@5", G: "~@3 x ~ x ~@10",
  H: "~@8 x!2 ~ x!3 ~@2",
})).gain(0.73)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@10 A ~@7 B ~ C ~@3 C ~@3 C ~@3 C ~@11 D ~@14 C ~@3 C ~@3 C ~@3 C ~@11 E ~@21 F ~@15 F ~@18 D ~@17 A ~@10
>`.pickRestart({
  A: "x!2 ~ x!3 ~ x ~@8", B: "~ x", C: "~@4 x!2 ~@2", D: "~@6 x!2", E: "x ~@2 x ~@8 x ~ x ~", F: "x",
})).gain(0.73)

// drums · crash
const crash = s("cr").struct(`<
  ~@14 A ~@19 B ~@13 B ~@8 A ~@15 B ~@13 B ~@4 A ~@11 A ~@16 B ~@9 A ~@7 C ~ A ~@2 B ~@4 A ~@2 B ~@4 A ~ A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@3 x",
})).gain(0.65)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@11 A@7 B A@25 ~ A@7 B ~ A@3 ~ A@25 ~ A@7 B C@3 ~ A@9 ~ A@34 ~ A@15 B C ~ A@3 B A@5 ~
// … 8 more lines

More by Starship