Strudelify
Easy cover art

1992 · Angel Dust

Easy

Faith No More

KeyG majorTempo189 bpm
0:00/0:00
// Easy — Faith No More
// 189 bpm, 12/8, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 "piano" piano (copy of ch 2 "piano" piano); ch 11 "bass" electric bass finger (copy of ch 9 "bass" electric bass finger); ch 4 "guitar solo" overdriven guitar (copy of ch 5 "guitar solo" overdriven guitar); ch 1 "Lead voice" marimba (copy of ch 13 "Lead voice" marimba)
// note: Full arrangement: all 96 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(189/6)

// 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.

// bass · electric bass pick · "pick bass"
const bass = note("<~@65 [~@16 g#1 ~ g#1 ~@5] ~@7 [~@16 g#1 ~ g#1 ~@5] ~@22>").s("gm_electric_bass_pick").gain(0.46)

// chords · piano
const piano = note(`<
  A@4 B@5 C@8 D E F G@3 H@8 I@5 J@6 K ~ L@4 M@8 N@2 O@2 ~ P Q R S P T U V@2 T W X Y T Z@2 AA@2 AB T W X Y T W X Y T W X
  AC@2 AD@3
>`.pickRestart({
  A: "[~@14 g#2@12 ~@13 c3@13 ~@10 [c4,d#4,g4]@3 a#2@13 ~@12 [d#2,d#3]@2 ~@4, ~@26 [c4,d#4,g#4]@11 [c4,d#4,g#4]@4 ~@11 [c4,d#4,g4]@9 ~@17 [a#3,c#4,f4,a#4]@9 ~ [a#3,c#4,f4,a#4]@4 ~@4, ~@30 g#2@9 ~@17 c3@9 ~@16 a#2@9 ~@6]/4", // Cm D# G# Cm A#m
  B: "[~@17 [a#3,c#4,d#4,g4,a#4]@3 g#2@13 ~@10 [c4,d#4,g#4]@3 c3@13 ~@25 [a#3,c#4,f4]@26 ~@10, ~ [d#2,d#3]@10 [d#2,d#3]@11 ~@15 g#2@9 ~@16 c3@9 a#2@38 ~@11, ~@7 [a#3,c#4,d#4,g4,a#4]@10 ~@16 [c4,d#4,g#4]@10 ~@16 [c4,d#4,g4]@9 ~ [c4,d#4,g4]@4 ~@47]/5", // D#7 G# A#m D# D#7 G# Cm
  C: "[~@3 g#2@12 ~@13 c3@13 ~@12 a#2@13 ~@10 [a#3,c#4,f4,a#4]@3 [d#2,d#3]@2 ~@20 [a#3,c#4,d#4,g4,a#4]@3 g#2@12 ~@10 [c4,d#4,g#4]@3 c3@13 ~@3 c3@7 ~@15 [a#3,c#4,f4]@12 [g3,a#3,d#4]@3 ~ [g3,a#3,d#4]@3 [g3,a#3,d#4]@3 [g3,a#3,d#4]@3, ~@15 [c4,d#4,g#4]@11 [c4,d#4,g#4]@4 ~@11 [c4,d#4,g4]@8 ~@2 [c4,d#4,g4]@4 ~@11 [a#3,c#4,f4,a#4]@8 ~@17 [a#3,c#4,d#4,g4,a#4]@10 ~@15 [c4,d#4,g#4]@10 ~@16 [c4,d#4,g4]@8 ~@2 [c4,d#4,g4]@4 ~@36, ~@19 g#2@9 ~@17 c3@8 ~@17 a#2@8 ~@7 [d#2,d#3]@10 [d#2,d#3]@10 ~@15 g#2@8 ~@26 a#2@25 ~@13]/8", // A#m D# D#7 G# A#m D# G# Cm …
  D: "[g3,a#3,d#4] ~ g#2@6", E: "~@10 [c4,d#4,g#4]@3 c3@11, [c4,d#4,g#4]@5 ~@7, ~ g#2@2 ~@3",
  F: "~@13 a#2@11, ~ [c4,d#4,g4]@8 ~@2 [c4,d#4,g4]@4 ~@9, ~@5 c3@8 ~@11", // Cm
  G: "[~@11 [a#3,c#4,f4,a#4]@3 [d#2,d#3]@2 ~@20 [a#3,c#4,d#4,g4,a#4]@3 g#2@12 ~@12 c3@9, ~@2 [a#3,c#4,f4,a#4]@8 ~@16 [a#3,c#4,d#4,g4,a#4]@10 ~@15 [c4,d#4,g#4]@10 [c4,d#4,g#4]@4 ~@7, ~@5 a#2@8 ~@7 [d#2,d#3]@10 [d#2,d#3]@10 ~@15 g#2@8 ~@9]/3", // A#m D# D#7 A#m D#7 G# D#
  H: "[~@13 [c4,d#4,g4]@3 ~@12 [a#3,c#4,f4]@12 ~@13 [a#3,c#4,f4]@12 ~@13 [a#3,d#4,f4]@24 [a#3,d#4]@12 ~ g#2@12 ~@12 c3@12 ~@10 [c4,d#4,g4]@3 ~@12 [a#3,c#4,f4]@12 ~ d#3@2 ~, ~@4 [c4,d#4,g4]@8 ~@115 [c4,d#4,g#4]@10 [c4,d#4,g#4]@4 ~@11 [c4,d#4,g4]@8 ~@32, ~@7 c3@8 ~ a#2@37 ~@12 d#3@37 ~@29 g#2@8 ~@16 c3@8 ~ a#2@25 ~@3]/8", // Cm A#m A#sus4 D#5 Cm A#m Cm G# …
  I: "[~@9 [g3,a#3,c#4,d#4]@9 [g3,a#3,c#4,d#4]@3 g#2@12 ~@10 [c4,d#4,g#4]@3 c3@12 ~@10 [c4,d#4,g4]@3 a#2@12 ~@3 a#2@7 ~@2 [d#2,d#3]@2 ~@20 [a#3,c#4,d#4,g4,a#4]@3, ~@3 d#3@18 ~@13 [c4,d#4,g#4]@9 ~@15 [c4,d#4,g4]@8 ~@17 [a#3,c#4,f4,a#4]@8 ~@2 [a#3,c#4,f4,a#4]@4 ~@10 [a#3,c#4,d#4,g4,a#4]@10 ~@3, ~@37 g#2@8 ~@17 c3@8 ~@31 [d#2,d#3]@10 [d#2,d#3]@9]/5", // D#7 G# Cm D# D#7 G# Cm A#m …
  J: "[g#2@6 ~@6 c3@6 ~@6 a#2@6 ~@6 [d#2,d#3] ~@11 [f#3,a#3,c#4,f#4]@9 [f3,g#3,c#4,f4]@9 [g3,a#3,c#4,d#4]@2 [g3,a#3,c#4,d#4]@4, ~@12 [c4,d#4,g#4]@10 [c4,d#4,g#4]@4 ~@10 [c4,d#4,g4]@8 ~@2 [c4,d#4,g4]@4 ~@10 [a#3,c#4,f4,a#4]@8 ~@2 [a#3,c#4,f4,a#4]@4 ~@10 [a#3,c#4,d#4,g4,a#4]@11 ~@49, ~@8 g#2@4 ~@8 c3@4 ~@8 a#2@4 ~@3 [d#2,d#3]@5 [d#2,d#3]@5 ~@23]/6", // D# F# C# D#7 G# Cm A#m D#7 …
  K: "[g#2,c4,d#4]", // G#
  L: "[[f#2,f#3,a#3,c#4,g#4,c#5]@6 [f#3,a#3,c#4,g#4,c#5]@5 [f#3,a#3,c#4,g#4,c#5]@2 ~@2 [c#4,g#4,c#5]@5 ~@4 [f#3,a#3,d#4,f#4,a#4,d#5]@6 [f#3,a#3,d#4,f#4,a#4,d#5]@5 [a#3,d#4,f#4,a#4,d#5]@3 ~ [a#3,d#4,f#4,a#4,d#5]@5 ~@4, ~@11 f#2@8 ~ [f2,f3,g#3,c#4,g#4,c#5]@5 ~@23, ~@15 [f#3,a#3]@6 ~@3 d#2@9 ~@2 d#2@8 ~@5]/4", // F# C#5 D#m C# F#
  M: "[[f#2,f#3,a#3,c#4,g#4,c#5]@6 [f#3,a#3,c#4,g#4,c#5]@5 [f#3,a#3,c#4,g#4,c#5]@2 ~@2 [c#4,g#4,c#5]@5 ~@4 [f#3,a#3,d#4,f#4,a#4,d#5]@6 [f#3,a#3,d#4,f#4,a#4,d#5]@5 [a#3,d#4,f#4,a#4,d#5]@3 ~ [a#3,d#4,f#4,a#4,d#5]@5 [c#4,g#4,c#5]@4 [f#2,f#3,a#3,c#4,g#4,c#5]@6 [f#3,a#3,c#4,g#4,c#5]@5 [f#3,a#3,c#4,g#4,c#5]@2 ~@2 [c#4,g#4,c#5]@5 ~@4 [f#3,a#3,d#4,f#4,a#4,d#5]@6 [f#3,a#3,d#4,f#4,a#4,d#5]@5 [a#3,d#4,f#4,a#4,d#5]@3 ~ [a#3,d#4,f#4,a#4,d#5]@9, ~@11 f#2@8 ~ [f2,f3,g#3,c#4,g#4,c#5]@5 ~@19 [f2,g#3,f4]@5 ~@10 f#2@8 ~ [f2,f3,g#3,c#4,g#4,c#5]@5 ~@23, ~@15 [f#3,a#3]@6 ~@3 d#2@9 ~@2 d#2@8 ~@20 [f#3,a#3]@6 ~@3 d#2@9 ~@2 d#2@13]/8", // F# C#5 D#m C#5 F# C#5 D#m C# …
  N: "[[b2,f#3,b3,d#4,f#4]@3 [f#3,a#3,c#4,f#4,a#4,c#5]@5]/2", // B F#
  O: "[[b2,f#3,b3,d#4,f#4]@3 [c#3,g#3,c#4,f4,g#4,c#5,f5]@5]/2", P: "g#2@3 ~ g#2@2, ~ [g#3,c4,d#4,g#4]",
  Q: "c3@6 ~@5 [d#4,g4], ~ [g3,c4], ~@6 [d#4,g4]@5 ~, ~@2 c3", R: "a#2 [a#2,f3,a#3,c#4,f4]",
  S: "d#3 ~@2 d#3@2 ~ [g3,a#3,d#4]@5 [g3,a#3,d#4]", T: "c3@6 ~@5 [g3,c4,d#4,g4], ~@6 [g3,c4,d#4,g4]@5 ~, ~@2 c3",
  U: "a#2 [f3,a#3,c#4,f4]", // A#m
  V: "[[d#3,g3,a#3,d#4]@3 [d#3,g3,a#3,d#4]@3 [d#3,g3,a#3,d#4]@3 [d#3,g3,a#3,d#4]@3 [d#3,g3,a#3,d#4]@3 ~@3 g#2@16 ~@12 [g#3,c4,d#4,g#4]@2, ~@18 [g#3,c4,d#4,g#4]@5 ~, ~@5 g#2]/2", // D# G#
  W: "a#2@6 ~@5 [f3,a#3,c#4,f4], ~@6 [f3,a#3,c#4,f4]@5 ~, ~@2 a#2", X: "~@6 [d#3,g3,a#3,d#4]@5 [d#3,g3,a#3,d#4]",
  Y: "g#2@6 ~@5 [g#3,c4,d#4,g#4], ~@6 [g#3,c4,d#4,g#4]@5 ~, ~@2 g#2", // G#
  Z: "[a#2 [a#2,f3,a#3,c#4,f4]@2 [a#2,f3,a#3,c#4,f4]]/2", AA: "[~ [d#3,g3,a#3,d#4]@2 ~]/2",
  AB: "~@11 [g#3,c4,d#4,g#4], ~@6 [g#3,c4,d#4,g#4]@5 ~, ~@2 g#2", // G#
  AC: "[[f#3,a#3,c#4,f#4]@9 [f3,g#3,c#4,f4]@9 [g3,a#3,c#4,d#4]@2 [g3,a#3,c#4,d#4]@4]/2", // F# C# D#7
  AD: "[~@23 g#5@9 ~@4, g#1@22 d#4@37 ~@13, g#2@6 g#3@11 c5@3 d#5@12 ~@4, d#4@8 d#3@20 g#4@27 ~@17, c4@4 c3@13 c4@44 ~@11]/3",
})).s("gm_piano").gain(0.57).pan(0)

// bass · electric bass finger · "bass"
const bass_2 = note(`<
  ~@8 A B C D E@3 F@2 G H I@6 J@2 K@4 L@5 M N O P Q@2 R S T U V W X U V Y Z U V AA AB@2 AC@2 AD AE AF AG AH AI AJ AK
  AL@2 AM AN AO AP AQ AR AS AT AU AV AW AN AX AV AY AN AX AE N AZ P Q@2 BA BB@2
>`.pickRestart({
  A: "~@7 c#2@6 ~@4 c#2@7", B: "~@3 g#1@19 ~@2", C: "~ g#1@3 c2@19 ~", D: "~@2 g1@3 a#1@19",
  E: "[~@3 a#1@3 ~ d#2@3 ~@3 d#2@9 f#2@9 ~ g#1@19 ~@3 g#1@3 c2@13 ~@2]/3",
  F: "[~@2 c2@2 d#2@4 g2@2 a#1@19 ~@4 a#1@2 d#2@3 d#2@3 ~ d#2@3 d#2@3]/2", G: "d#2 ~ g#1@6",
  H: "c#2@9 ~ g#1@3 c2@2 ~@9",
  I: "[~@13 a#1@18 ~@5 a#1@2 d#2@3 ~@3 d#2@9 f#2@9 ~ g#1@18 ~@3 g#1@3 c2@12 ~@5 c2@2 d#2@4 g2@2 a#1@25 ~@7, ~@6 g1 ~@65]/6",
  J: "[~@14 d#2@2 d#2 d#2@25 ~@6]/2",
  K: "[~@6 f3@2 c#3@2 a#2@2 g2@2 d#2@2 a#1@2 ~ g#1@18 ~@3 g#1@3 c2@12 ~@5 c2@2 d#2@4 g2@2 a#1@18 ~@3 a#1@3 d#2@3 ~]/4",
  L: "[~@3 d#2@9 f#2@9 g#1@18 ~@4 g#1@3 c2@15 ~ c2@2 d#2@4 g2@2 a#1@18 ~@4 a#1@3 d#2@3 ~@3 d#2@9 ~ f#2@9]/5",
  M: "g#1@6 ~ g#1", N: "c2@15 ~ c2@2 d#2@4 g2@2", O: "a#1@6 ~ a#1", P: "d#2 ~ d#2@3 d#2@3",
  Q: "[f#2@18 f2@18 d#2@4 d#2@7 ~]/2", R: "g#1", S: "~@2 f#2 d2", T: "f#1@6 ~ c#1", U: "f#1 ~ f#1@3 f1@3",
  V: "d#2@4 d#2@3 a#1", W: "d#2 ~ d#2@3 f2@3", X: "f#1@9 ~@2 c#1", Y: "d#2@4 f2@2 d#2@9 f2@9", Z: "f#1@4 ~@3 c#1",
  AA: "d#2@4 f2@2 d#2@9 d#2@9", AB: "[b1@8 a#1 f#1@12 ~@3]/2", AC: "[d#2@6 c#2@9 ~]/2", AD: "~@3 f#2",
  AE: "g#1@9 ~@2 g#1", AF: "c2@3 ~@3 c2@9 ~@7 g1@2", AG: "a#1@8 ~@3 a#1", AH: "d#2@3 ~@3 d#2@8 ~@2 g#2@8",
  AI: "g#1@8 ~@3 g#1", AJ: "c2 ~@2 c2@3 ~@2 c2 d#2@2 g2", AK: "a#1@6 a#1@5 a#1",
  AL: "[d#2@3 d#2@3 d#2@3 d#2@3 d#2@2 ~ a#1@2 ~ g#1@16 ~@2 d#2@10 g#1@2]/2", AM: "c2@3 ~@3 c2@8 ~@8 g1@2",
  AN: "a#1@7 ~@4 a#1", AO: "d#2 ~ d#2@2 g2@2 ~@2", AP: "g#1@16 ~@6 g#1 ~", AQ: "c2@3 ~@3 c2@6 ~@4 c2@2 d#2@4 g2@2",
  AR: "a#1", AS: "~@22 d#2!2", AT: "d#2@11 ~", AU: "~@6 c#3 a#2 g2 d#2 c#2 a#1", AV: "g#1@6 ~@5 g#1",
  AW: "c2@6 ~@2 c2 d#2@2 g#2", AX: "d#2@3 ~@3 d#2@6 ~@4 f#2@8", AY: "c2@6 ~@2 c2 d#2@2 g2", AZ: "a#1@9 ~@2 a#1",
  BA: "g#1@19 c2@5", BB: "[~ d#2@6 g#2@24 ~@17]/2",
})).s("gm_electric_bass_finger").gain(0.72).pan(0)

// other · overdriven guitar · "guitar solo"
const overdriven_guitar = note("<~@61 A@2 B@2 C D E@2 F@2 G@2 H I J@2 K@2 ~@17>".pickRestart({
  A: "[c4@6 g#3@3 g#4@21 f#5@2 ~@16]/2", B: "[[c3,c4]@6 [g#2,g#3]@3 [g#2,g#3]@21 [f#1,f#2,f#3]@8 [d#5,d#6]@3 ~@7]/2",
  C: "c4@6 g#3@3 d#5@2 ~@4 c5@3 ~@3 g#4@3", D: "~@3 f#4@3 ~@3 f4@3 ~@3 d#4@7 c4@2", E: "[f4 c4@6 c4]/2",
  F: "[g#3@3 g#4@27 f#5@2 ~@16]/2", G: "[[c3,c4]@6 [g#2,g#3]@3 [g#2,g#3]@21 [f#1,f#2,f#3]@10 ~@8]/2",
  H: "c4@6 g#3@3 f5@2 ~@4 d#5@3 ~@3 f5@3", I: "~ a#4@3 d#5 ~ c5 ~", J: "[a#4@2 f4@10 f4 f4@3]/2",
  K: "[f4@17 d#5@24 a#3 g3 f3 c#3 g#2 f2 ~]/2",
})).s("gm_overdriven_guitar").gain(0.64).pan(1)

// other · overdriven guitar · "guitar echo (optional!)"
const overdriven_guitar_2 = note("<~@61 A@2 B@2 C D@5 E@2 F G H@4 I ~@16>".pickRestart({
  A: "[~@4 c4@6 g#3@3 g#4@21 f#5@2 ~@12]/2",
  B: "[~@4 [c3,c4]@6 [g#2,g#3]@3 [g#2,g#3]@21 [f#1,f#2,f#3]@8 [d#5,d#6]@3 ~@3]/2", // C G# F# D#
  C: "~@4 c4@6 g#3@3 d#5@3 ~@3 c5@3 ~@2",
  D: "[~ g#4@3 ~@3 f#4@3 ~@3 f4@3 ~@3 d#4@7 c4@2 f4@6 c4@36 c4@6 g#3@3 g#4@27 f#5@2 ~@12]/5",
  E: "[~@4 [c3,c4]@6 [g#2,g#3]@3 [g#2,g#3]@21 [f#1,f#2,f#3]@10 ~@4]/2", F: "~@4 c4@6 g#3@3 f5@3 ~@3 d#5@3 ~@2",
  G: "~ f5@3 ~@3 a#4@9 d#5@3 ~@3 c5@2", H: "[~@4 a#4@6 f4@30 f4@3 f4@9 f4@17 d#5@24 a#3 g3 f3]/4", I: "c#3 g#2 f2 ~@21",
})).s("gm_overdriven_guitar").gain(0.29)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A B C D E F G ~ H I@2 J K@2 L M@2 ~ N O P ~ Q R@2 S ~ T@3 U V W T X T Y T L T Y T Z T AA T X V ~ V ~@2 T@3 AB T@3
  AC ~ AB T@5 AD T ~ T@3 K T@3 V T V T ~ V W T ~@2
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~@4", C: "~@5 x ~@18", D: "~@7 x ~@5 x ~@8 x ~", E: "~ x ~", F: "~@3 x ~@4", G: "~@5 x ~@6",
  H: "~ x ~@2", I: "~@13 x ~@10", J: "~@7 x ~ x ~@2", K: "~@5 x ~@2", L: "~@2 x", M: "~@17 x ~@6",
  N: "x ~@11 x ~@6 x ~@4", O: "~@19 x ~@4", P: "~@5 x", Q: "~@7 x", R: "~@11 x", S: "~@23 x", T: "x", U: "~@6 x ~@4 x",
  V: "x ~@2 x", W: "~ x", X: "~@3 x", Y: "x ~@2 x ~@4 x ~@3", Z: "~@3 x!2 ~", AA: "x ~ x", AB: "x!2 ~@2",
  AC: "~ x!4 ~ x ~", AD: "~ x ~ x ~@2",
})).gain(0.46)

// drums · snare
const snare = s("sd").struct(`<
  ~@9 A B C D E F G H I@2 J K L M N O P ~@2 Q R@2 S T U V W X Y X N ~@4 X@3 Z X@2 AA AB X@3 N ~@4 C X@7 AC X@3 AD X Y AE
  ~@3 X@3 Z X AE X@4 AE AF ~@5
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@17 x ~@6", C: "~@3 x", D: "~@19 x ~@4", E: "~@5 x", F: "~@11 x", G: "~@23 x",
  H: "~@11 x ~@2 x ~@3 x ~@2 x ~@2", I: "x", J: "~ x ~@22", K: "~ x ~@10", L: "~ x ~ x ~@8", M: "~ x ~@6", N: "~ x ~@4",
  O: "~@4 x ~@16 x ~@2", P: "~@5 x ~@3 x ~@14", Q: "~@7 x ~@16", R: "~ x ~", S: "~ x ~@7 x ~@14", T: "~@3 x ~@4",
  U: "~@5 x ~@6", V: "~@11 x ~@3 x ~@8", W: "~@11 x ~@4 x ~@7", X: "~ x", Y: "~@6 x ~@4 x", Z: "~ x ~ x ~@2",
  AA: "~@6 x ~ x ~@2 x", AB: "~ x ~@2", AC: "x!5 ~@3", AD: "~@5 x ~@3 x ~ x", AE: "~@3 x!2 ~", AF: "~@6 x!4 ~@2",
})).gain(0.46)

// drums · hihat
const hihat = s("hh").struct("<~@12 A B ~ C ~ D ~@2 E F G H ~ I J ~@4 K ~@32 L ~@16 M ~@3 M ~@10>".pickRestart({
  A: "~@4 x ~@14 x ~@4", B: "~ x ~@22", C: "~ x ~@5 x ~@4", D: "~@2 x", E: "~@2 x!2", F: "x ~@6 x", G: "~@7 x",
  H: "~@4 x ~@2 x ~@3 x", I: "~@5 x ~@17 x", J: "~ x ~@2", K: "~@13 x ~@5 x ~@4", L: "~@3 x", M: "x",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~@17 B ~@5 C ~@5 D ~@11 E ~@3 F ~@20 F ~ G ~@17>".pickRestart({
  A: "~ x ~@22", B: "x ~@2 x!2 ~", C: "~@5 x", D: "~@16 x ~@6 x", E: "~@11 x", F: "~@9 x ~ x", G: "~@2 x",
})).gain(0.46)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A B C D E F G H I J K L M N O P Q ~@5 M ~@32 R ~@5 S ~ T ~@7 S ~@3 S ~@11
>`.pickRestart({
  A: "~@9 x ~@12 x ~", B: "~@10 x ~@12 x", C: "~@5 x ~@6 x ~@11", D: "x ~@6 x ~@5 x ~@9 x", E: "~@7 x ~@4",
  F: "~ x ~@3 x ~@2", G: "~@2 x ~@2 x ~@2 x ~@3", H: "~@3 x ~@4", I: "~@2 x!2", J: "x ~@5 x ~@6 x ~@5 x ~@4",
  K: "~@7 x ~@5 x ~@5 x ~@4", L: "~@4 x ~@2 x ~@2 x ~", M: "~@5 x ~@2", N: "~@3 x ~ x ~@2", O: "~@5 x ~@2 x ~@3",
  P: "~@10 x ~@6 x ~@5 x", Q: "~@11 x ~@12", R: "~@8 x ~@2 x", S: "~@11 x", T: "~ x",
})).gain(0.41)

// drums · high tom
const high_tom = s("ht").struct("<~@51 [~ x] ~@44>").gain(0.46)

// drums · crash
const crash = s("cr").struct(`<
  ~@9 A ~@3 B ~@3 C ~@7 D ~ E ~@3 F ~@3 G H ~@3 I J K G H L H L H L H C M L H ~ I ~ I ~ G H ~@6 G ~@4 H ~ H ~ H ~ H ~@2
  N H ~@3 H ~ H ~ O P Q ~@2
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~", C: "~ x ~@2", D: "~@17 x ~@6", E: "~@19 x ~@4", F: "~@7 x", G: "~@3 x", H: "x",
  I: "x ~@2 x", J: "~@6 x!6", K: "x!4 ~@8", L: "~@2 x", M: "x!2", N: "~@5 x ~@2", O: "x ~@8 x!2 ~", P: "~ x",
  Q: "x!2 ~@10",
})).gain(0.41)

// drums · crash · soft notes
const crash_soft = s("cr").struct(`<
  ~@92
  [~@22 x!2]
  [~@4 x!5 ~ x ~ x ~ x ~@2 x ~ x ~@2 x ~]
  [~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~]
  [~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@7]
>`).gain(0.26)

// drums · ride
const ride = s("rd").struct(`<
  ~@16 A ~@9 B ~ C D E F G H I J K L@2 M N O P Q P Q P ~ P O ~@3 R P S T U T U Q V W X R W@3 ~ Y X Z AA V W AB S V S AC
  X AD AE V O Z@2 V AF P ~@6
>`.pickRestart({
  A: "~@5 x ~@18", B: "~@2 x!2", C: "~ x ~@5 x ~@3 x ~ x ~@3 x ~ x ~@3 x", D: "~ x ~@3 x ~@2 x ~@3 x ~ x ~@3 x ~ x ~@3",
  E: "x!2 ~ x!2 ~ x!2 ~ x!2 ~", F: "~ x ~ x ~@3 x ~ x ~@14", G: "~@3 x ~@3 x ~ x ~@4 x ~ x ~@3 x ~ x ~",
  H: "~ x!2 ~ x!2 ~ x!2 ~ x!2", I: "~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x", J: "~@3 x ~ x ~@3 x ~ x ~@4 x ~@7",
  K: "~@3 x ~@2 x ~ x!2 ~ x", L: "x ~ x!2 ~ x!2 ~ x!2 ~ x", M: "x!2 ~@4", N: "~ x", O: "x!2 ~@2", P: "~ x!3",
  Q: "x!3 ~", R: "x ~ x!2 ~@2 x ~@5", S: "x", T: "~ x!2 ~", U: "x!4", V: "~@3 x ~@2 x ~@2 x ~ x",
  W: "x ~@2 x ~@2 x ~ x!2 ~@2", X: "x ~@2 x ~ x!2 ~@2 x ~@2", Y: "x ~ x!2 ~@2 x ~@2 x ~ x",
  Z: "x ~@2 x ~@2 x ~@2 x ~ x", AA: "x!2 ~ x", AB: "~@3 x ~@7 x", AC: "~@3 x ~ x!2 ~@2 x ~ x",
  AD: "~@2 x!2 ~@2 x ~@2 x ~ x", AE: "x ~ x!2 ~@8", AF: "x ~@2 x ~ x!2 ~@2 x ~ x",
})).gain(0.41)

stack(
  bass, piano, bass_2, overdriven_guitar, overdriven_guitar_2, kick, snare, hihat, low_tom, mid_tom, open_hat, high_tom,
  crash, crash_soft, ride
)

More by Faith No More