Strudelify
True cover art

1983 · True - The Digital E.P.

True

Spandau Ballet

KeyG majorTempo100 bpm
0:00/0:00
// True — Spandau Ballet
// 100 bpm, 4/4, key G major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 11 "Synth Bass" synth bass 2 (copy of ch 13 "Bass" electric bass pick); ch 3 "Guitar (double)" distortion guitar (copy of ch 12 "Guitar" electric guitar clean)
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 2 · "Synth Brass"
const synth_brass_2 = note(`<
  A B C D A B E D A B E D F G ~ A H I J A H K@3 ~@7 L@6 M@6 N@7 O@3 ~@6 P Q@6 R@7 ~@15 S@3 ~ T@5 A B E D A B E D ~@5 U@2
  A B E D A B E D A B E D A B E D
>`.pickRestart({
  A: "[g3,b3,d4]", B: "[e3,b3,d4,f#4]", C: "~@7 c3, [e3,b3,d4], c3@3 ~, ~@3 g3@5", D: "[b2,f#3,a3,d4]",
  E: "~@3 g3@5, [c3,e3,b3,d4]", F: "[a3,c4,e4]", G: "[a3,c4,d4,e4,g4]", H: "[b3,d4,f#4]", I: "[g3,c4,e4]",
  J: "[g3,a#3,d#4]", K: "[e4@7 [e4,g4,b4,d5]@8 [a3,c4,e4,g4]@9, [g3,c4] ~@2]/3",
  L: "[[a3,c4,e4,g4]@3 [a3,c4,e4,g4]@3 [a3,c4,e4,g4]@8 [g3,b3,d4]@8 [e3,b3,d4,f#4]@8 ~@3 g3@5 [b2,f#3,a3,d4]@8 [g3,b3,d4]@2, ~@15 [c3,e3,b3,d4]@4 ~@5]/6", // Am7 G Bm Bm7 G Cmaj7
  M: "[~@6 [e3,b3,d4,f#4]@8 ~@3 g3@5 [b2,f#3,a3,d4]@8 [g4,e5]@8 [e4,g4]@10, ~@7 [c3,e3,b3,d4]@4 ~@13]/6", // Bm Bm7 C Em Cmaj7
  N: "[~@3 [g3,b3,d4]@4 [b3,d4,f#4]@4 [g3,c4,e4]@4 [g3,a#3,d#4]@4 [g3,b3,d4]@4 [b3,d4,f#4]@4 [g3,c4,e4]]/7", // G Bm C D# G Bm C
  O: "[~@5 [e4,g4,b4,d5]@8 [a3,c4,e4,g4]@9 ~@2]/3", P: "~@3 [a3,c4,e4,g4]",
  Q: "[~ [a3,c4,e4,g4]@3 [a3,c4,e4,g4]@10 [g3,b3,d4]@8 [e3,b3,d4,f#4]@8 ~@3 g3@5 [b2,f#3,a3,d4]@8 [g3,b3,d4]@2, ~@15 [c3,e3,b3,d4]@4 ~@5]/6", // Am7 G Bm Bm7 G Cmaj7
  R: "[~@6 [e3,b3,d4,f#4]@8 ~@3 g3@5 [b2,f#3,a3,d4]@8 [g4,c5,e5]@8 [e4,g4]@16 ~@2, ~@7 [c3,e3,b3,d4]@4 ~@17]/7", // Bm Bm7 C Em Cmaj7
  S: "[~@6 [e4,g4,c5]@8 [d4,g4,b4]@8 [e4,g4,c5] ~]/3", // C G C
  T: "[~@6 [c4,e4,g4]@4 [b3,c4,e4,g4]@4 [g3,b3,d4,g4]@8 [c4,e4,g4]@3 [b3,c4,e4,g4]@3 [a3,c4,e4,g4]@12]/5", // C Cmaj7 G C Cmaj7 Am7
  U: "[a4,c5,e5,g5]/2", // Am7
})).s("gm_synth_brass_2").gain(0.39)

// chords · pad halo · "Synth Strings"
const pad_halo = note(`<
  ~@8 A B C D ~@10 E F G H A ~@10 I@8 J@5 K@6 ~@3 L@3 M@4 N@7 ~@13 O@5 ~ P@5 ~@2 Q R ~ S Q R ~@8 S Q R ~ S Q R ~ S Q R ~
  S Q R
>`.pickRestart({
  A: "[g3,b3,d4]", B: "[e3,b3,d4,f#5]", C: "[b3,e4,g4,g5]", D: "[b3,f#4,a4,a5]", E: "[e4,g4,b4,d5]", F: "[a3,c4,e4,g4]",
  G: "[d4,e4,g4] [d4,f#4], [g3,b3]", H: "[e3,g3,c4,e4]",
  I: "[~@3 f#5@4 g5@4 a5@4 [a3,c4,c5,e5]@4 [e4,g4]@8 ~@5, ~@19 d4@13]/8", J: "[~@3 e4@4 d#4@4 g4@4 a4@4 ~]/5",
  K: "[~@3 [e4,g4,b4,d5]@4 [a3,c4,e4,g4]@4 [d4,e4,g4]@2 [d4,f#4]@2 [e3,g3,c4,e4]@4 [g3,b3,d4]@4 ~, ~@11 [g3,b3]@4 ~@9]/6", // Em7 Am7 Em7 D C G
  L: "[~@6 [a3,c4,e4,g4]@3 [a3,c4,e4,g4]@3 [a3,c4,e4,g4]@10 ~@2]/3", M: "[~@3 f#5@4 g5@4 a5@4 ~]/4",
  N: "[~@3 f#5@4 g5@4 a5@4 [a3,c4,c5,e5]@4 [e4,g4]@8 ~]/7", // Am Em
  O: "[~@6 [g3,g4]@16 [e4,g4,c5]@8 [d4,g4,b4]@8 [e4,g4,c5] ~]/5", // G C G C
  P: "[~@6 [c4,e4,g4]@4 [b3,c4,e4,g4]@4 [g3,b3,d4,g4]@8 [c4,e4,g4]@3 [b3,c4,e4,g4]@3 [a3,c4,e4,g4]@12]/5", Q: "g5",
  R: "a5", S: "f#5",
})).s("gm_pad_halo").gain(0.22)

// chords · pad halo · "Synth Strings" · soft notes
const pad_halo_soft = note(`<
  ~@8 A ~@3 B C@2 ~@16 D@2 ~@3 E@2 ~@2 F@2 ~@19 E@2 ~@2 E@2 ~@2 F@2 ~@30 A ~@8 G@2 A ~@3 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "d5", B: "[c4,a4,e5]", C: "[d4, g4 ~]/2", D: "[[a3,c4,e4,g4]@3 [a3,c4,e4,g4]@3 [a3,c4,e4,g4]@8 ~@2]/2",
  E: "[~@3 d5@4 ~]/2", F: "[~@3 e4@4 ~]/2", G: "[c5,g5]/2",
})).s("gm_pad_halo").gain(0.14)

// chords · piano
const piano = note(`<
  ~@19 A B C@3 D E F G F G F ~@10 H@2 ~@4 I@3 J@8 K@2 ~@10 L@2 M ~@14 N O@3 ~ P@2 ~@11 Q R Q R Q S@2 ~@16
>`.pickRestart({
  A: "[g4,b4,d5]@3 [b4,d5,g5]@3 [d5,g5,b5]@6 ~@4", B: "[b4,d5,f#5]@3 [d5,f#5,b5]@3 [f#5,b5,d6]@6 ~@4",
  C: "[[e5,g5,c6]@3 [c5,e5,g5]@3 [g4,c5,e5]@6 ~@2 [e4,g4,b4,d5]@16 [a3,c4,e4,g4]@18]/3", // C Em7 Am7
  D: "[d4,e4,g4] [d4,f#4], [g3,b3]", E: "[e3,g3,c4,e4]", F: "[g3,b3,d4] ~", G: "[g3,c4,e4] ~",
  H: "[~ [f#5,d6] [e5,c6] [d5,b5] [c5,a5] [b4,g5] [b4,g5]@8 ~@2]/2", // D C G F Em
  I: "[~@12 [g4,b4,d5]@3 [b4,d5,g5]@3 [d5,g5,b5]@6 ~@4 [b4,d5,f#5]@3 [d5,f#5,b5]@3 [f#5,b5,d6]@6 ~@4 [e5,g5,c6]@3 [c5,e5,g5]]/3", // G Bm C
  J: "[~ [g4,c5,e5]@3 ~ [e4,g4,b4,d5]@8 [a3,c4,e4,g4]@9 [d4,e4,g4]@4 [d4,f#4]@4 [e3,g3,c4,e4]@8 [g3,b3,d4]@4 ~@4 [g3,c4,e4]@4 ~@4 [g3,b3,d4]@4 ~@4 [g3,c4,e4]@2, ~@11 [g3,b3]@4 ~@17]/8", // C Em7 Am7 Em7 D C G C …
  K: "[~@3 [g3,b3,d4]@2 ~@3]/2", L: "[~ [f#5,d6] [e5,c6] [d5,b5] [c5,a5] [b4,g5] [b4,g5]@8 [f2,a3,c4,e4,g4] ~]/2",
  M: "[f2,a3,c4,e4,g4] ~ [f2,a3,c4,e4,g4]!2 ~@4", N: "~@6 [g3,c4,e4] [b3,d4]",
  O: "[[c4,e4,g4] [c4,e4] [d4,a4] [d4,f#4] [d4,g4,b4] [b3,d4,g4] [e4,g4,c5]@8 [d4,g4,b4]@8 [e4,g4,c5] ~]/3", // C D5 D G C G C
  P: "[[g2,g3,c4,e4] [a2,c4,e4,g4] [b2,g3,b3,d4] [c3,g3,c4,e4]@4 ~]/2", // C Am7 G C
  Q: "[g4,c5,e5]@3 [f#4,b4,d5] [e4,a4,c5] [d4,g4,b4] [c4,e4,a4] [b3,e4,g4]", R: "[a3,d4,f#4]@3 [b3,d4,g4]@3 ~@2",
  S: "[a4,c5,e5,g5]/2", // Am7
})).s("gm_piano").gain(0.35)

// chords · electric guitar clean · "Guitar"
const electric_guitar_clean = note(`<
  A@3 B A@3 B A@3 B ~@21 C@3 D C@3 D ~@21 C@3 D C@3 D ~@3 E F G F G F G F G F G F G H ~@10 A@3 B A@3 B ~@7 I J@2 K I J@2
  K L M@2 N J@3 K
>`.pickRestart({
  A: "~@4 [b4,d5] ~@5 [b4,d5] ~@5", B: "~@4 [d5,f#5] ~@5 [d5,f#5] ~@5", C: "[b4,d5] ~@5 [b4,d5] ~@9",
  D: "[d5,f#5] ~@5 [d5,f#5] ~@9", E: "~@12 [g#4,c5,f5]@3 [g#4,c5,f5]",
  F: "[g#4,c5,f5] ~ [g#4,c5,f5]@3 [g#4,c5,f5] ~ [g#4,c5,f5]!2 ~ [g#4,c5,f5] ~ [g#4,c5,f5] [g4,a#4,d#5] ~ [g4,a#4,d#5]", // Fm D#
  G: "[g4,a#4,d#5] ~ [g4,a#4,d#5]@3 [g4,a#4,d#5] ~ [g4,a#4,d#5]!2 ~ [g4,a#4,d#5] ~ [g#4,c5,f5]@3 [g#4,c5,f5]", // D# Fm
  H: "[g#4,c5,f5] ~ [g#4,c5,f5]@3 [g#4,c5,f5] ~ [g#4,c5,f5]!2 ~ [g#4,c5,f5] ~@5", // Fm
  I: "~@4 [g4,b4,d5,g5] [g4,g5]!4 ~ [g4,a4,b4,d5,g5] ~@2 [g4,g5] ~@2", // G
  J: "~@4 [g4,b4,d5,g5] [g4,g5]!4 ~ [g4,b4,d5,g5] ~@2 [g4,g5] ~@2", // G
  K: "~@4 [a4,d5,f#5,a5] [a4,a5]!4 ~ [b4,d5,f#5,b5]@2 ~ [a4,a5] ~@2", // D A Bm A
  L: "~@4 [g4,b4,d5,g5] [g4,g5]!3 [g4,g5]@2 [e4,a4,b4,d5,e5] ~ [d4,d5]@2 ~@2", // G Esus4 D
  M: "~@4 [g4,b4,d5,g5] [g4,g5]!3 [g4,g5]@2 [e4,b4,d5,e5]@2 [d4,d5]@2 ~@2", // G E7 D
  N: "~@4 [a4,d5,f#5,a5] [a4,a5]!4 ~ [d5,f#5] ~ [e5,a5]@4", // D A D A5
})).s("gm_electric_guitar_clean").gain(0.33)

// other · lead 2 sawtooth · "Lead"
const lead_2_sawtooth = note(`<
  ~@15 A B C D@3 E@4 F@2 G@2 H I J@2 ~ K@3 ~ L@4 ~@2 M N@4 O@5 P@2 Q@2 R@2 S@2 ~ K@3 ~ L@4 ~@17 T U V W ~ R@2 X@2 ~ Y Z
  AA@2 Y Z AB AC ~@2 AD AE ~@4 AF AG AH ~@4 AF AI AJ@2 ~@3
>`.pickRestart({
  A: "~@4 b3 ~ b3@6 ~@4", B: "b3!2 b3@2 c4 ~ b3@6 ~@4", C: "c4@2 b3@2 a3@2 g3@7 ~ g3 ~",
  D: "[c4@6 a#3 a3 g3@4 a3 ~ b3@6 ~@4 b3@2 c4@2 d4 ~ f#4@6 d4@2 ~@2 b3@2 d4@6]/3",
  E: "[g3@6 ~@2 g3@2 a3@2 g3@2 d4@11 ~ e4@2 d4@2 g3@10 g3@2 a3@2 g3@2 d4@18]/4",
  F: "[~@4 e4@2 e4@2 e4!2 d4 ~ c4@2 b3@10 ~@8]/2", G: "[~@4 c4@2 c4@2 c4@2 b3@2 a3@2 b3@4 a3 g3@3 ~@10]/2",
  H: "~@4 e4@2 e4@2 g4@2 g4@2 e4@3 c4", I: "d4@2 e4 e4@3 b3@6 ~@2 g3@2", J: "[c4 b3 g3 c4 b3 g3 g3@8 ~@2]/2",
  K: "[~@5 g3 d4@3 g3@5 d4@3 g3@3 a3 g3@2 ~]/3", L: "[~@5 g3 d4@3 g3@5 d4@3 g3@4 ~ e4@4 ~@6]/4",
  M: "b3!2 c4 b3!2 d4@2 ~",
  N: "[b3@2 b3@2 d4@2 e4@4 d4@4 g3@4 ~@2 g3@2 a3@2 g3@2 d4@8 c4 a#3 g3@4 a3@2 b3@8 ~@2 b3@2 c4@2 d4 ~ f#4@6]/4",
  O: "[d4@2 ~@2 d4@2 a4@3 ~ a4@4 g4@4 ~@2 g3@2 a3@2 g3@2 d4@11 ~ e4@2 d4@2 g3@10 g3@2 a3@2 g3@2 d4@18 ~@4]/5",
  P: "[e4@2 e4@2 e4!2 d4 ~ c4@2 b3@10 ~@12]/2", Q: "[c4@2 c4@2 c4@2 b3@2 a3@2 b3@4 a3 g3@3 ~@14]/2",
  R: "[e4@2 e4@2 g4@2 g4@2 e4@3 c4 d4@2 e4 e4@3 b3@6 ~@2 g3@2 c4@2 b3@2]/2", S: "[g3 c4 b3 g3 g3@10 ~@2]/2",
  T: "~@14 e4 ~", U: "e4 ~ e4 ~ e4!2 f#4@2 e4@2 g4@2 ~@2 e4@2", V: "~@2 d4@7 ~@5 c4@2", W: "c4!3 b3 a3 b3@2 ~",
  X: "[g3 c4 b3 g3 g4@8 ~@4]/2", Y: "~@7 g3", Z: "d4@3 g3@5", AA: "[d4@3 g3@3 a3 g3@2 ~@7]/2", AB: "d4@3 g3@4 ~",
  AC: "e4 ~", AD: "~@9 g4@6 ~", AE: "~ e4@2 ~ e4@6 ~@6, g4 ~@7", AF: "~@7 g4", AG: "g4 f#4!2 e4!2 d4!2 e4",
  AH: "d4@3 c4 b3@4 ~@8", AI: "g4@3 e4@4 ~", AJ: "[g4@3 e4@3 a4 g4@2 ~@7]/2",
})).s("gm_lead_2_sawtooth").gain(0.79)

// bass · electric bass pick · "Bass"
const bass = note(`<
  ~@3 A B C D E B C D F G H ~ I J K L I J M@2 N O P I Q I R S T@8 U@4 V@7 W@3 X@7 Y@8 Z@4 AA@8 AB@8 AC@3 ~ AD@5 B C D E
  B C D F AE AF AE AF AE AG@2 AH AI AJ AK AH AI AJ AK AH AI AJ AK AH AI AJ AK
>`.pickRestart({
  A: "~@7 b1", B: "g1@7 d2 g2 ~ g2@4 d2 b1", C: "e1@7 b1 e2 ~ e2@3 b1 e2 d2", D: "c2@3 g2@4 c2", E: "b1@3 f#2@3 a2@2",
  F: "b1@3 f#2@3 g2@2", G: "a1@3 b1 c2@2 e2@2", H: "f1", I: "g1@7 d2 g2 ~ g2@4 d2 g1", J: "b1@7 f#2 b2 ~ b2@6",
  K: "c2@7 g2 c3 ~ c3@6", L: "d#2@7 a#2 d#3@3 f3@2 d#3 a#2 g2", M: "[c2@7 g2 c3@2 c2@2 d2@2 e2@18]/2", N: "a1",
  O: "g2@3 g2 f#2@3 f#2", P: "e2@4 c2 b1@2 a1", Q: "c2@8 c2 ~ c2@2 b1@3 a1", R: "c2@8 c2 ~ b1@5 a1",
  S: "g1@7 d2 g2@2 g1@2 a1@2 b1@2",
  T: "[c2@6 b1@6 f1@16 g1@7 d2 g2 ~ g2@4 d2 b1 e1@7 b1 e2 ~ e2@3 b1 e2 d2 c2@6 g2@8 c2@2 b1@6 f#2@6 a2@4 g1@7 d2 g2 ~ g2@4 d2 b1 e1@7 b1 e2 ~ e2@3 b1 e2 d2 c2@4]/8",
  U: "[~ g2@4 c2 b1@3 f#2@3 g2@2 a1@3 b1 c2@4 f1@8 ~@2]/4",
  V: "[~@12 g1@7 d2 g2 ~ g2@4 d2 g1 b1@7 f#2 b2 ~ b2@6 c2@7 g2 c3 ~ c3@6 d#2@7 a#2 d#3@2 ~ f3 ~ d#3 a#2 g2 g1@7 d2 g2 ~ g2@4 d2 g1 b1@7 f#2 b2 ~ b2@6 c2@4]/7",
  W: "[~@3 g2 c3@2 c2@2 d2@2 e2@18 a1@16 g2@4]/3",
  X: "[~@2 g2@2 f#2@6 f#2@2 e2@8 c2@2 b1@4 a1@2 g1@7 d2 g2 ~ g2@4 d2 g1 c2@8 c2 ~ c2@2 b1@3 a1 g1@7 d2 g2 ~ g2@4 d2 g1 c2@8 c2 ~ b1@5 a1 g1@7 d2 g2@2 g1@2 a1@2 b1@2 c2@4]/7",
  Y: "[~@2 b1@6 f1@20 g1@7 d2 g2 ~ g2@4 d2 b1 e1@7 b1 e2 ~ e2@3 b1 e2 d2 c2@6 g2@8 c2@2 b1@6 f#2@6 a2@4 g1@7 d2 g2 ~ g2@4 d2 b1 e1@7 b1 e2 ~ e2@3 b1 e2 d2 c2@4]/8",
  Z: "[~ g2@4 c2 b1@3 f#2@3 g2@2 a1@3 b1 c2@4 f1@8 f1 ~]/4",
  AA: "[f1@2 ~@2 f1@2 f1@2 ~@4 d#2@6 g#1 c2 d#2 ~@2 f2 ~@2 d#2 ~ g#1@6 d#1 g#1 a#1 ~@2 c2 ~@2 a#1 ~ d#2@6 g#1 c2 d#2 ~@2 f2 ~@2 d#2 ~ g#1@6 d#1 g#1 a#1 ~@2 c2 ~@2 a#1 ~ d#2@6 g#1 c2 d#2 ~@2 f2 ~@2 d#2 ~ g#1@6 d#1 g#1 a#1 ~@2 c2 ~@2 a#1 ~ d#2@6 g#1 c2 d#2 ~@2 f2 ~@2 d#2 ~ g#1@4]/8",
  AB: "[~@2 d#1 g#1 a#1 ~@2 c2 ~@2 a#1 ~ d#2@6 g#1 c2 d#2 ~@2 f2 ~@2 d#2 ~ g#1@6 d#1 g#1 a#1 ~@2 c2 ~@2 a#1 ~ d#2@6 g#1 c2 d#2 ~@2 f2 ~@2 d#2 ~ g#1@6 d#1 g#1 a#1 ~@2 c2 ~@2 a#1 ~ d#2@6 g#1 c2 d#2 ~@2 f2 ~@2 d#2 ~ g#1@6 d#1 g#1 a#1 ~@2 c2 ~@2 a#1 ~ g1@6 ~ d2 g2 ~ g2@4 ~ d2 g1@4]/8",
  AC: "[~@3 d2 g2 ~ g2@4 ~ d2 c2@6 c2@2 b1@8 g1@7 d2 g2 ~ g2@2 d2@3 g1 c2@4]/3",
  AD: "[g1@4 a1@4 b1@4 c2@6 c2@2 b1@7 a1 g1@7 d2 g2 ~ g1@2 a1@2 b1@2 c2@6 b1@6 f1@24]/5", AE: "a1@3 b1 c2@4",
  AF: "d2@3 d3 f#3 d3 e3@4 b2 ~ a2 g2 f#2 d2", AG: "f2/2", AH: "g2", AI: "e3", AJ: "c3@3 c3@5", AK: "b2@3 b2@3 d2@2",
})).s("gm_electric_bass_pick").gain(0.4)

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

// drums · rim
const rim = s("rim").struct("<~@4 [~ x ~ x]!7 ~@33 [x!2]!7 ~@77>").gain(0.64)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A ~@10 B@2 C D@6 E ~ F G F H F G F G ~@10 I@2 G F@6 J ~ F G F H F G F G ~ K L F@15 M I D ~@2 F N O ~ D C D A D C
  D C D@4 C D P D C D C D C D C D C D C D C D C
>`.pickRestart({
  A: "~@4 x ~@5 x ~ x ~ x!2", B: "~ x", C: "~@2 x ~@2 x!2 ~", D: "~ x ~ x", E: "~@2 x ~@2 x ~@2", F: "x!2",
  G: "x ~@2 x!2 ~@3", H: "x ~@5 x ~ x ~ x!2 ~@4", I: "~ x ~@2", J: "x ~@2 x ~@4", K: "x ~ x!2", L: "x ~ x!2 ~@4",
  M: "x ~@5 x ~ x!3 ~@5", N: "x ~@3 x ~@2 x", O: "x", P: "~@4 x ~@5 x ~ x!2 ~@2",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@3 C@7 D ~@10 E@2 C@7 ~ F G@7 H ~@2 F D@6 G I@2 G@6 J ~ F G@7 J F H F D G D G D G D G D G D G D G D K D C L F D@2 M
  ~ C@7 D@4 C@2 D H N C@2 D C@3 D C@3 D C@3 D
>`.pickRestart({
  A: "~@5 x!2 ~", B: "x ~@4 x!2 ~", C: "x!7 ~", D: "x!8", E: "x!4 ~ x!3", F: "~@6 x!2", G: "x!5 ~ x!2", H: "x!6 ~@2",
  I: "x!2 ~ x!5", J: "x!5 ~@3", K: "x!3 ~@4 x", L: "x!4", M: "x!4 ~@4", N: "~ x!6 ~",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@69 [~@5 x ~@2] ~@58>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@40 A ~@63 B ~@10 B ~@3 B ~@3 B ~@3 B>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@11 ~@13 A@7 ~@2 B@7 ~@13 B@7 ~@2 B@7 ~@5 B ~ B ~ B ~ B ~ B ~ B ~ B ~@5 C ~@4 A@7 ~@4 A@2 ~@2 A@3 ~ A@3 ~ A@3 ~ A@3 ~
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "x!2 ~@2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@12 A ~@8 B@2 ~@8 C ~@8 D@2 ~@8 E@2 ~@7 D F ~@8 D@2 ~ E ~@15 D ~@3 G ~@2 F ~@9 A@2 ~ A ~@3 A ~@15
>`.pickRestart({
  A: "x", B: "~@7 x", C: "x ~@2 x ~@2 x ~", D: "~@3 x", E: "~@5 x ~@2", F: "~ x ~@2 x ~@3", G: "~@2 x!2",
})).gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@13 x ~@114>").gain(0.64)

stack(
  synth_brass_2, pad_halo, pad_halo_soft, piano, electric_guitar_clean, lead_2_sawtooth, bass, kick, rim, snare, hihat,
  low_tom, mid_tom, open_hat, crash, ride
)

More by Spandau Ballet