Strudelify
Always cover art

1994 · I Say I Say I Say

Always

Erasure

KeyF majorTempo104 bpm
0:00/0:00
// Always — Erasure
// 104 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 27, 4/4 at bar 29, 5/4 at bar 32, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/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.

// other · synth bass 1
const synth_bass_1 = note("<~@23 A ~@8 B C D E F ~@14 G H ~@8 I J I K I L M N ~@7 A ~@23>".pickRestart({
  A: "~ bb4 d5 f5 bb5 d6 f6 bb6", B: "~@5 f5!2 e5", C: "e5 d5!2 c5 ~ f5!2 e5", D: "e5 d5 c5 a4 ~ f5!2 e5",
  E: "e5 d5!2 c5 ~ f4!2 g4", F: "a4 c5 d5 c5 ~@4", G: "~@5 bb4 d5 f5", H: "bb5 d6 f6 bb6 ~@4", I: "~ f5!2 e5!2 d5!2 c5",
  J: "~ f5!2 e5!2 d5 c5 a4", K: "~ f4!2 g4 a4 c5 d5 c5", L: "~ a5!2 g5!2 f5 g5 a5", M: "~ f4!2 g4!2 a4!2 c5",
  N: "c5 d5!2 f5!2 g5!2 a5",
})).s("gm_lead_8_bass_lead").gain(0.4)

// other · synth bass 1 · "Pad 1 (new age)"
const synth_bass_1_2 = note("<A B C D E F G H ~@92>".pickRestart({
  A: "eb5@3 d5@5", B: "c5@6 bb4@8 c5 d5", C: "eb5 d5 c5 bb4", D: "d5@6 ~@8 c5 d5", E: "eb5@4 d5@4 c5@5 ~ c5 bb4",
  F: "d5@4 bb4@4 g4@6 g4 a4", G: "bb4@4 a4@4 g4@3 ~ f4@3 ~", H: "g4@7 ~",
})).s("gm_lead_8_bass_lead").gain(0.55)

// other · pad new age · "Pad 1 (new age)"
const pad_new_age = note(`<
  ~@8 A B C D E F@2 G@4 H@5 I J@2 K L M N O P ~@4 Q R S ~ T U V W X Y Z@3 AA@2 AB@4 AC@2 AD AE AF ~@7 AG@4 H@5 ~ I J@2 K
  L M N O AH@4 AC@2 AD AE AF I J@2 K AI
>`.pickRestart({
  A: "~@8 a4 ~ a4 ~ g4 ~ c5@2", B: "~ bb4 a4@7 ~ a4@2 g4@2 f4@2", C: "~@4 f4 g4 a4 g4", D: "f4@3 ~@13",
  E: "~@8 a4 ~ a4 ~ g4@2 c5@2", F: "[~ bb4 a4@6 ~@2 a4@2 g4@2 f4@6 ~@2 d4@2 f4@2 g4@2 a4@2 g4@2]/2",
  G: "[f4@2 ~@8 a4@2 g4@2 d5@7 ~@5 a4@4 e5@10 ~@2 c5 ~ c5@2 e5@10 ~@2 c5@4 g5@2]/4",
  H: "[~ f5 e5@4 f5@6 c5@2 f5@12 c5 ~ c5 ~ g5@10 ~@2 f5@2 g5@2 a5@8 f5@6 d5@8 ~@12]/5", I: "f5@3 c5@2 f5 c5 f5",
  J: "g5@2 e5 c5@2 g5 e5 c5", K: "d5@2 e5@2 f5 ~ f5@2 g5@2 a5 ~ a5@4", L: "g5 f5 f5@3 c5@2 f5",
  M: "c5 f5 g5@2 e5 c5@2 g5", N: "e5 c5 g5@2 e5 c5@2 g5", O: "e5@2 c5@2 d5@2 e5@2 f5 ~ f5@2 g5@2 a5 ~",
  P: "a5@2 g5 f5 ~@4", Q: "a4 ~ a4 ~ g4 ~ c5@3 bb4 a4@6", R: "~@2 a4@2 g4@2 f4@3 ~@5 d4@2",
  S: "f4@2 g4@2 a4@2 g4@2 f4@3 ~@5", T: "a4 ~ a4 ~ g4@2 c5@3 bb4 a4@6", U: "~@2 a4 ~ g4@2 f4@6 ~@4",
  V: "f4 g4 a4 g4 f4 ~@3", W: "~@2 a4@2 g4@2 d5@7 ~@3", X: "~ a4@2 e5@5", Y: "~@2 c5 ~ c5@2 e5@10",
  Z: "[~@2 c5@4 g5@3 f5 e5@4 f5@6 c5@2 f5@12 c5 ~ c5 ~ g5@10]/3", AA: "[~ f5 g5 a5@4 f5@3 d5@4 ~@2]/2",
  AB: "[~@8 f5@6 c5@4 f5@2 c5@2 f5@2 g5@4 e5@2 c5@4 g5@2 e5@2 c5@2 g5@4 e5@2 c5@4 g5@2 e5@2 c5@2 d5@2 e5@2 f5 ~ f5@2]/4",
  AC: "[g5@2 a5 ~ a5@4 g5@2 f5@2 f5@6 c5@4 f5@2 c5@2 f5@2 g5@4]/2", AD: "e5 c5@2 g5 e5 c5 g5@2",
  AE: "e5 c5@2 g5 e5 c5 d5 e5", AF: "f5 ~ f5@2 g5@2 a5 ~ a5@4 g5@2 f5@2",
  AG: "[~@10 a4 ~ a4 ~ d5@10 ~@2 a4@4 e5@10 ~@2 c5 ~ c5@2 e5@10 ~@2 c5@4 g5@2]/4",
  AH: "[a5@4 g5@2 f5@2 f5@6 c5@4 f5@2 c5@2 f5@2 g5@4 e5@2 c5@4 g5@2 e5@2 c5@2 g5@4 e5@2 c5@4 g5@2 e5@2 c5@2 d5@2 e5@2 f5 ~ f5@2]/4",
  AI: "g5 f5 ~@6",
})).s("gm_pad_new_age").gain(0.55)

// chords · synth strings 1 · "SynthStrings 1"
const synth_strings_1 = note(`<
  A B A B A B C D E@3 F G@3 H I@8 J K L M N O P Q R@6 S@4 T@2 U@5 V@8 W@4 X Y X Z X AA AB AC I@8 ~ J K L M N O P Q AD@7
  AE@2 J K L AF ~
>`.pickRestart({
  A: "[g4,bb4]", B: "[d4,g4]", C: "[eb4,g4]", D: "[bb3,d4,g4]",
  E: "[a4@4 a4!2 g4 ~ a4@5 a4 g4 ~@5 f4 g4 a4 g4, [d4,f4]@3 [c4,e4] f4@3 [c4,e4] [a3,d4]@3 [c4,e4], ~@7 c5@5 ~@3 f4@5 ~@4]/3", // Dm C D5 C
  F: "[a3,c4,f4]@3 [c4,e4,g4]", // F C
  G: "[a4@4 a4!2 g4 ~ a4@5 a4 g4 ~ d4@3 ~ f4 g4 a4 g4, [d4,f4]@3 [c4,e4] f4@3 [c4,e4] a3@3 ~, ~@7 c5@5 ~@3 f4@4 d4@3 [c4,e4]@2]/3", // Dm C
  H: "f4@4 ~ a4 g4 d5, [a3,c4]@3 [c4,e4]", // Am C
  I: "[a4@12 a4@2 c5@12 c5@2 c5@2 c5@12 c5@4 g5@3 f5 e5@4 f5@6 c5@2 [c5,f5]@12 c5@2 c5@2 g5@10 ~@2 f5@2 g5@2 [d5,f5,a5]@8 [a4,d5,f5]@6 ~@4 [d4,f4,bb4]@16, [d4,f4]@7 [e4,a4]@8 [e4,g4]@8 [bb4,d5]@8 a4@8 [c5,e5]@8 ~@7 d5@10, ~@7 e5@5 ~@3 e5@5 ~@44]/8", // F5 Dm Bb Dm A5 Em Bb C
  J: "[a4,c5,f5]@3 c5@2 f5 c5 f5, ~@3 [f4,a4]@3 [f4,a4]@2", K: "g5@2 e5 c5@2 g5 [c5,e5] c5, [a4,c5]@3 [e4,g4]@3 a4@2",
  L: "[e5,g5]@2 e5 c5@2 g5 [c5,e5] c5, c5@3 [e4,g4]@3 a4@2", // Em C Em
  M: "d5@2 e5@2 f5@2 f5@2 g5@2 a5 ~ [d5,f5,a5]@4, [f4,bb4]@3 [a4,d5]@3 ~@2", // Dm Bb5 D5
  N: "[c5,e5,g5]@2 [a4,c5,f5]@3 c5@2 f5, ~@5 [f4,a4]@3", O: "c5 f5 g5@2 e5 c5@2 g5, [f4,a4]@2 [a4,c5]@3 [e4,g4]@3",
  P: "[c5,e5] c5 [e5,g5]@2 e5 c5@2 g5, a4@2 c5@3 [e4,g4]@3", // C Em
  Q: "[c5,e5]@2 c5@2 d5@2 e5@2 f5@2 f5@2 g5@2 a5 ~, a4@2 [f4,bb4]@3 [a4,d5]@3", // C Bb5 D5
  R: "[[d5,f5,a5]@2 [c5,e5,g5]@2 ~ f5!2 e5 e5 d5!2 c5 ~ f5!2 e5 e5 d5 c5 a4 ~ f5!2 e5 e5 d5!2 c5 ~ f4!2 g4 a4 c5 d5 c5 a4@4 a4!2 g4 ~ [f4,a4]@4, ~@2 [f4,a4]@3 [e4,g4] [a4,c5]@3 [e4,g4] [f4,a4]@3 [e4,g4] [a3,c4]@3 [e4,g4] [d4,f4]@3 [c4,e4] ~@2, ~@43 c5@5]/6", // Dm C F Em Am Em F Em …
  S: "[~ a4 g4 ~@5 f4 g4 a4 g4 [a3,c4,f4]@6 [c4,e4,g4]@2 a4@4 a4!2 g4 ~ [f4,a4]@4, ~ [c4,e4] [a3,d4]@3 [c4,e4] ~@4 [d4,f4]@3 [c4,e4] ~@2, ~@3 f4@5 ~@19 c5@5]/4", // F C F C D5 C Dm C
  T: "[~ a4 g4 ~ d4@3 ~ f4 g4 a4 g4 [a3,c4,f4]@4, ~ [c4,e4] a3@3 ~@3, ~@3 f4@4 d4@3 [c4,e4]@2 ~@4]/2", // F C
  U: "[~@2 a4@2 g4@2 ~@2 a4@12 a4@2 c5@12 c5@2 c5@2 c5@12 c5@4 g5@3 f5 e5@4 f5@6 c5@2 [a4,c5,f5]@10, ~@2 [c4,e4]@2 [d4,f4]@7 [e4,a4]@8 [e4,g4]@8 [bb4,d5]@8 ~@5, ~@3 d5@6 ~@2 e5@5 ~@3 e5@5 ~@16]/5", // F C Dm A5 Em Bb
  V: "[~@2 c5@2 c5@2 g5@10 ~@2 f5@2 g5@2 [d5,f5,a5]@8 [a4,d5,f5]@6 ~@4 [d4,f4,bb4]@16 [a4,c5,f5]@6 c5@4 f5@2 c5@2 f5@2 g5@4 e5@2 c5@4 g5@2 [c5,e5]@2 c5@2 [e5,g5]@4 e5@2 c5@4 g5@2 [c5,e5]@2 c5@2 d5@2 e5@2 f5@2 f5@2 g5@2 a5 ~ [d5,f5,a5]@4 [c5,e5,g5]@4 [a4,c5,f5]@4, ~@3 [c5,e5]@8 ~@7 d5@10 ~@3 [f4,a4]@3 [f4,a4]@2 [a4,c5]@3 [e4,g4]@3 a4@2 c5@3 [e4,g4]@3 a4@2 [f4,bb4]@3 [a4,d5]@3 ~@6]/8", // Dm Bb F C Em C Dm C …
  W: "[~@2 c5@4 f5@2 c5@2 f5@2 g5@4 e5@2 c5@4 g5@2 [c5,e5]@2 c5@2 [e5,g5]@4 e5@2 c5@4 g5@2 [c5,e5]@2 c5@2 d5@2 e5@2 f5@2 f5@2 g5@2 a5 ~ [d5,f5,a5]@4 [c5,e5,g5]@4, ~ [f4,a4]@3 [f4,a4]@2 [a4,c5]@3 [e4,g4]@3 a4@2 c5@3 [e4,g4]@3 a4@2 [f4,bb4]@3 [a4,d5]@3 ~@4]/4", // C Em C Dm C F Am Em …
  X: "~ f5!2 e5!2 d5!2 c5, [f4,a4]@3 [e4,g4]", Y: "~ f5!2 e5!2 d5 c5 a4, [a4,c5]@3 [e4,g4]",
  Z: "~ f4!2 g4 a4 c5 d5 c5, [a3,c4]@3 [e4,g4]", AA: "~ a5!2 g5!2 f5 g5 a5, [a4,c5]@3 [c5,e5]",
  AB: "~ f4!2 g4!2 a4!2 c5, [a3,d4]@3 [c4,e4]", AC: "c5 d5!2 f5!2 g5!2 a5, [f4,a4]@3 [c5,e5]",
  AD: "[[d5,f5,a5]@4 [c5,e5,g5]@4 [a4,c5,f5]@6 c5@4 f5@2 c5@2 f5@2 g5@4 e5@2 c5@4 g5@2 [c5,e5]@2 c5@2 [e5,g5]@4 e5@2 c5@4 g5@2 [c5,e5]@2 c5@2 d5@2 e5@2 f5@2 f5@2 g5@2 a5 ~ [d5,f5,a5]@4 [c5,e5,g5]@4 [a4,c5,f5]@6 c5@4 f5@2 c5@2 f5@2 g5@4 e5@2 c5@4 g5@2 [c5,e5]@2 c5@2 [c5,e5,g5]@4, ~@7 [f4,a4]@3 [f4,a4]@2 [a4,c5]@3 [e4,g4]@3 a4@2 c5@3 [e4,g4]@3 a4@2 [f4,bb4]@3 [a4,d5]@3 ~@7 [f4,a4]@3 [f4,a4]@2 [a4,c5]@3 [e4,g4]@3 a4@2 ~@2]/7", // Dm C F C Em C Dm C …
  AE: "[e5@2 c5@4 g5@2 [c5,e5]@2 c5@2 d5@2 e5@2 f5@2 f5@2 g5@2 a5 ~ [d5,f5,a5]@4 [c5,e5,g5]@4, ~ [e4,g4]@3 a4@2 [f4,bb4]@3 [a4,d5]@3 ~@4]/2", // C Dm C Em Bb5 D5
  AF: "[f4,bb4]@3 ~@5, d5 ~@7", // Bb5
})).s("gm_synth_strings_1").gain(0.25)

// bass · fretless bass
const bass = note(`<
  A B A B A B A B C D C D C D C D E F G H I J K L M N O P Q R S T U V W V W V W V W V W V W X Y Z AA AB AC AD AE AF AG
  AH AI AJ AK AL@2 AM ~@3 AN ~@3 E F G H I J K L ~ M N O P Q R S T AO AF AG AH AI AJ AK AL@2 M N O AP ~
>`.pickRestart({
  A: "eb1", B: "g1", C: "d2@2 d2!2 ~ d2!3 d2@2 d2@2 c2 ~ c2 ~", D: "f1@2 f1!2 ~ f1!3 f1@2 f1 ~ c2@2 c2 ~",
  E: "d2@2 d2!2 ~ d2!3 d2@2 d2 ~ d2@2 d2 ~", F: "a1 ~ a1!2 ~ a1!4 ~ a1 ~ a1 ~ a1 ~",
  G: "c2@2 c2!2 ~ c2!3 c2@2 c2 ~ c2 ~ c2 ~", H: "bb1@2 bb1!2 ~ bb1!3 bb1@2 bb1 ~ bb1@2 bb1 ~",
  I: "f2@2 f2!2 ~ f2!3 f2@2 f2 ~ f2 ~ f2 ~", J: "c2@2 c2 c2@2 c2!3 c2@2 c2 ~ c2@2 c2 ~",
  K: "d2@2 d2 d2@2 d2!3 d2@2 d2@2 d2@2 d2@2", L: "bb1@2 bb1 bb1@2 bb1!3 bb1@2 bb1@2 bb1@2 bb1 ~", M: "f1!4", N: "a1!4",
  O: "c2!4", P: "bb1@3 d2 d2@2 d2@2", Q: "c2 f1!3", R: "f1 a1!3", S: "a1 c2!3", T: "c2@2 bb1@3 d2 d2@2",
  U: "d2@4 c2@4 d2@2 d2!2 ~ d2!3", V: "d2@2 d2@2 c2 ~ c2 ~ f1@2 f1!2 ~ f1!3", W: "f1@2 f1 ~ c2@2 c2 ~ d2@2 d2!2 ~ d2!3",
  X: "d2@2 d2 ~ d2@2 d2 ~ a1 ~ a1!2 ~ a1!3", Y: "a1 ~ a1 ~ a1 ~ a1 ~ c2@2 c2!2 ~ c2!3",
  Z: "c2@2 c2 ~ c2 ~ c2 ~ bb1@2 bb1!2 ~ bb1!3", AA: "bb1@2 bb1 ~ bb1@2 bb1 ~ f2@2 f2!2 ~ f2!3",
  AB: "f2@2 f2 ~ f2 ~ f2 ~ c2@2 c2 c2@2 c2!3", AC: "c2@2 c2 ~ c2@2 c2 ~ d2@2 d2 d2@2 d2!3",
  AD: "d2@2 d2@2 d2@2 d2@2 bb1@2 bb1 bb1@2 bb1!3", AE: "bb1@2 bb1@2 bb1@2 bb1 ~ f1@4 f1@4", AF: "f1!2 a1!2",
  AG: "a1!2 c2!2", AH: "c2@2 c2@2 bb1@3 d2", AI: "d2!2 c2 f1", AJ: "f1!3 a1", AK: "a1!3 c2",
  AL: "[c2@2 c2@2 c2@2 bb1@3 d2 d2@2 d2@2 c2@2]/2", AM: "d2!3 ~@5", AN: "d2@2 ~ d2 d2@2 ~@10", AO: "d2 c2 f1!2",
  AP: "bb1@3 d2 d2@2 ~@2",
})).s("gm_fretless_bass").gain(0.5)

// other · lead 8 bass lead · "Lead 8 (bass + lead)"
const lead_8_bass_lead = note(`<
  ~@8 A B A B A B A B C D E F G E C F ~@8 H I J I J I J I J I J I J K L M N O P Q R ~@8 A S A S A S A S C D E F G E C F
  T ~@22
>`.pickRestart({
  A: "d4!12 c4!4", B: "f3!12 c4!4", C: "d4!16", D: "a3!16", E: "c4!16", F: "bb3!16", G: "f4!16", H: "~@8 d4!8",
  I: "d4!4 c4!4 f3!8", J: "f3!4 c4!4 d4!8", K: "d4!8 a3!8", L: "a3!8 c4!8", M: "c4!8 bb3!8", N: "bb3!8 f4!8",
  O: "f4!8 c4!8", P: "c4!8 d4!8", Q: "d4!8 bb3!8", R: "bb3!8 ~@8", S: "f4!12 c4!4", T: "bb3!11 ~@5",
})).s("gm_lead_8_bass_lead").gain(0.28)

// bass · lead 8 bass lead · "Lead 8 (bass + lead)"
const bass_2 = note("<~@8 A ~ A ~ A ~ A ~@17 B C B C D ~ D ~ D ~ D ~@22 E ~@34>".pickRestart({
  A: "d3!3 ~@13", B: "~@4 d3 ~@3", C: "~@4 f2 ~@3", D: "~@8 d3!3 ~@5", E: "d2@2 ~ d2 d2@2 ~@10",
})).s("gm_lead_8_bass_lead").gain(0.5).pan(0)

// other · epiano2 · "Chorused Piano"
const epiano2 = note(`<
  ~@27 A B ~@2 C D ~@19 E F G H I J K L M ~@17 N O P Q@2 R S T U F G V@2 J K L M W O P X@2
>`.pickRestart({
  A: "d5@2 e5@2 f5 ~ f5@2 g5@2 a5 ~ a5@4", B: "g5 f5 ~@6", C: "~@4 d5@2 e5@2 f5 ~ f5@2 g5@2 a5 ~", D: "a5@2 g5 f5 ~@4",
  E: "~@8 f5@2 a5!2 ~@4", F: "~ f5 a5 f5 g5 ~ a5 ~ a4@2 a5!2 ~@4", G: "~ f5 a5 f5 g5 ~ a5 ~ c5@2 g5!2 ~@4",
  H: "~ c5 g5 c5 f5 ~ g5 ~ d5@2 e5@2 f5 ~ f5@2", I: "g5@2 a5 ~ a5@4 g5@2 f5@2 f5@2 a5!2",
  J: "~@5 f5 a5 f5 g5 ~ a5 ~ a4@2 a5!2", K: "~@5 f5 a5 f5 g5 ~ a5 ~ c5@2 g5!2", L: "~@5 c5 g5 c5 f5 ~ g5 ~ d5@2 e5@2",
  M: "f5 ~ f5@2 g5@2 a5 ~ a5@4 g5@2 f5@2", N: "f5@2 a5!2 ~@5 f5 a5 f5 g5 ~ a5 ~", O: "a4@2 a5!2 ~@5 f5 a5 f5 g5 ~ a5 ~",
  P: "c5@2 g5!2 ~@5 c5 g5 c5 f5 ~ g5 ~", Q: "[d5@2 e5@4 f5@4 bb5@4 a5@4 f5@2 f5@2 a5!2 ~@5 f5 a5 f5, ~@11 c5@2 ~@3]/2",
  R: "g5 ~ a5 ~ a4@2 a5!2 ~@5 f5 a5 f5", S: "g5 ~ a5 ~ c5@2 g5!2 ~@5 c5 g5 c5",
  T: "f5 ~ g5 ~ d5@2 e5@2 f5 ~ f5@2 g5@2 a5 ~", U: "a5@4 g5@2 f5@2 f5@2 a5!2 ~@4",
  V: "[~ c5 g5 c5 f5 ~ g5 ~ d5@2 e5@4 f5@4 bb5@4 a5@4 f5@2 f5@2 a5!2]/2",
  W: "f5@2 a5!2 ~@5 f5 a5 f5 g5 ~ a5 ~, ~ c5@2 ~@5", X: "[d5 e5@2 f5@2 bb5@2 a5@2 f5@2 ~@5]/2",
})).s("gm_epiano2").gain(0.45).pan(0.3)

// other · kalimba
const kalimba = note("<~@24 A ~@11 B C ~@14 B C ~@15 A ~@8 A ~@21>".pickRestart({
  A: "[a8,b8]!12 ~@4", B: "~@8 [a8,b8]!8", C: "[a8,b8]!4 ~@12",
})).s("gm_kalimba").gain(0.08)

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

// drums · snare
const snare = s("sd").struct("<~@24 A@4 B@4 C A@23 D B@3 E ~@8 A@8 ~ A@4 B@4 C A@3 D B@3 E A@3 F ~>".pickRestart({
  A: "~ x ~ x", B: "x!2", C: "x!2 ~ x", D: "~ x!2 ~", E: "x ~ x!2", F: "~ x ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<~@24 [x!16]!37 ~@8 [x!16]!8 [x!8 ~@8] [x!16]!20 [x!10 ~@6] ~>").gain(0.72)

// drums · ride
const ride = s("rd").struct("<~@68 [~@5 x ~@2] ~@8 [~@5 x ~@2] ~@22>").gain(0.8)

// drums · china
const china = s("cr").struct("<~@24 A ~@3 B ~@3 C ~@3 C ~@15 C ~@15 D ~@8 D ~@4 B ~@3 C ~@3 D ~@4 A ~@4>".pickRestart({
  A: "x", B: "~ x ~@2", C: "~ x", D: "~@3 x",
})).gain(0.8)

// drums · cowbell
const cowbell = s("cb").struct("<~@23 [~@12 x!3 ~] ~@12 [~@4 x!3 ~@9] ~@15 [~@4 x!3 ~@9] ~@47>").gain(0.8)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@23 A ~@12 B ~@15 B ~@15 A ~@8 A ~@22>".pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(9.4)

// drums · guiro
const guiro = s("guiro:0").struct("<~@68 [~@7 x] ~@8 [~@7 x] ~@22>").gain(16.9)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@68 [~@8 x!5 ~@3] ~@8 [~@8 x!5 ~@3] ~@22>").gain(1.16)

stack(
  synth_bass_1, synth_bass_1_2, pad_new_age, synth_strings_1, bass, lead_8_bass_lead, bass_2, epiano2, kalimba, kick,
  snare, hihat, ride, china, cowbell, vibraslap, guiro, woodblocks
)

More by Erasure