Strudelify
We Built This City cover art

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: edit a riff to change every repeat.

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

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@11 A@2 B@2 C@2 D@2 E F E F E F E F E F E F E F E G H I J@2 K L@2 M N@2 O P Q R@2 P Q S@2 T@2 U@2 E F E F E F E F E F
  E F E F E G H I J@2 K L@2 M N@2 O P Q R@2 P Q V W@3 X Y Z Y AA Y AB Y AC AD AE E F E AF E F E F E F E AG E F E G H I
  J@2 K AH@2 AI@2 H I J@2 K L@2 M N@2 O P Q R@2 P Q AJ O P Q R@2 P Q V W AK AL@10
>`.pickRestart({
  A: "[f2@5 ~ bb2@12 ~@2 a2@4 g2@3 ~@5]/2", B: "[f2@2 f3@2 f2@2 bb2@12 ~@2 e2@4 f2@3 ~@5]/2",
  C: "[f2@5 ~ bb2@12 ~@2 a2@4 g2@4 ~@4]/2", D: "[f2@2 f3@2 f2@2 bb2@12 ~@2 e3@4 f3@3 ~@5]/2",
  E: "f2@4 ~@2 f2@2 f2@5 ~@3", F: "f2@4 f2@4 f2@5 ~@3", G: "f2@2 f2@2 e2@2 e2 d2",
  H: "~@2 d2@2 d2@3 ~ d2@3 ~ d2 ~ d2@2", I: "~@2 d2@2 d2@3 ~ d2@3 ~ d2@2 c2@2",
  J: "[~@2 c2@2 c2@3 ~ c2@3 ~ c2@2 c2@4 c2 ~ c2@3 ~ c2@3 ~ c2@4]/2", K: "f2@2 f2@2 f2@3 ~ bb2@2 bb2@2 bb2@3 ~",
  L: "[f2@6 bb2@13 ~ a2@3 ~ g2@4 ~@4]/2", M: "f2@6 bb2@9 ~", N: "[f2@3 e2@3 d2@10]/2", O: "bb2@2 bb2@2 bb2@2 bb2 a2",
  P: "bb2!2 a2 bb2@2 bb2!3", Q: "a2!4", R: "[f2@3 g2@3 a2 bb2@3 bb2@2 bb2@2 bb2@2]/2", S: "[c3@3 a2@3 bb2@6 ~@4]/2",
  T: "[f2@3 bb2@6 ~ a2@2 g2@2 ~@2]/2", U: "[f2 f3 f2 bb2@6 ~@7]/2", V: "c3@3 a2@3 bb2@2", W: "bb1@7 ~",
  X: "~@4 c2@5 ~@3 c2@4", Y: "a2@3 ~ bb2@2 f3@2 ~@2 a2@2 ~@2 a2@2", Z: "bb2@2 ~@2 f3@3 ~ e3@3 ~ f3@3 ~",
  AA: "bb2@2 bb2@2 f3@3 ~ e3@3 ~ f3@3 ~", AB: "bb2@2 ~@2 f3@3 ~ e3@4 f3@3 ~", AC: "bb2@2 bb2@2 f3@3 ~ e2@3 ~ f2@3 ~",
  AD: "f2@5 ~ f2@2 f2@6 ~@2", AE: "f2@2 f2@2 e2@3 ~ f2@2 ~@6", AF: "f2@2 f2@2 ~ f3 ~@2, ~@2 f2 ~",
  AG: "~@2 a3@2 g3@2 e3@2 f2@7 ~, f2@4 f2@4 f3@5 ~@3", AH: "[f2@6 bb2@13 ~ a2@3 ~ g2@3 ~@5]/2",
  AI: "[f2@2 f2@2 e2 ~ bb2@12 ~@2 a2@3 ~ f2@4 e2@4]/2", AJ: "c2@3 a2@3 f2@2", AK: "bb2", AL: "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 G D E F@2 ~@14 H I H I ~@25 J K@4 L@5 D E F@2 ~@22 M@2 N O N O N O N O N O
>`.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: "~@14 [a5,d6] ~, ~@7 d5",
  H: "[f3,bb3]", I: "[g3,c4]", J: "~@7 [d5,a5], ~@14 d6 ~",
  K: "[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",
  L: "[~@6 c5@33 ~]/5", M: "[[bb3,d4]@31 ~]/2", N: "[bb3,d4]", O: "[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 M D E@2 ~@5 F G H I N@2 K I O@3 ~@24 P Q A ~@9 B M D E@2 ~@5 F G H I
  N@2 K I R S H I N@2 K I R ~@12
>`.pickRestart({
  A: "~@2 c6@2 bb5@2 a5 ~ a5@3 ~ a5 ~ a5@2", B: "~@6 e5 ~", C: "f5@3 ~ 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 ~ [f4,bb4] ~ [f4,bb4]@2 ~@4]/2", K: "~@14 [g4,bb4] ~",
  L: "[[e4,g4]@3 [f4,a4]@3 [d4,f4]@6 ~@4]/2", M: "f5@4 f5@3 ~ f5@3 ~ f5 ~ f5@2",
  N: "[[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
  O: "[[e4,g4] [f4,a4] [d4,f4]@5 ~]/3", P: "g5@2 ~@2 g5@2 ~@2 g5@3 ~ g5 ~ g5@2", Q: "~@2 g5 ~ g5@2 ~@10",
  R: "[e4,g4]@3 [f4,a4]@3 [d4,f4]@2", S: "[a4,c5] ~ [g4,bb4] ~ bb4 [f4,bb4] ~@2, ~@8 f4 ~@7",
})).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 X W ~ Y Z@2 AA@2 AB AC Z AD Z@2 AA@2 AB AC Z E F G H I J K L K AE 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 AF@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: "a2@3 ~ bb2 ~ f3@2 ~@2 a2@2 ~@2 a2 ~",
  Y: "~@10 a2@5 ~",
  Z: "[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
  AA: "[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
  AB: "[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
  AC: "[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
  AD: "f4 ~ e4 ~ c4 ~ g3 ~ f3 ~ g3 ~ a3 ~ f3 ~",
  AE: "[d3,bb3] ~ [d3,bb3] ~ [c3,a3] ~ [c3,a3] ~ [c3,f3] ~ [c3,f3] ~ [c3,e3] ~ [f3,a3,d4,a4]@2", // Gm F F5 C Dm
  AF: "[[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(`<
// … 16 more lines

More by Starship