Strudelify

King for a Day

Faith No More

KeyE majorTempo104 bpm
0:00/0:00
// King for a Day — Faith No More
// 104 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 171 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// chords · acoustic guitar steel · "Trey Spruance: Accoustic Guitar"
const acoustic_guitar_steel = note(`<
  A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 ~@10 A B C@2 A B C@2 A B C@2 A B C@2 ~@38 A@3 B A@3
  B@2 D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D A@2 B D
  A@2 B D E@2 ~@3
>`.pickRestart({
  A: "[e3,b3,e4,g#4,b4,e5]!16", B: "[e3,b3,e4,g#4,b4,e5]!8 [e3,b3,e4,g4,b4,e5]!8", C: "[f#3,c#4,f#4,a#4,b4,e5]!16",
  D: "[e3,c4,e4,g4,c5,e5]!16", E: "[[e3,b3,e4,g#4,b4,e5]!6 [e3,b3,e4,g#4,b4]@26, ~@3 e5@9 ~@4]/2",
})).s("gm_acoustic_guitar_steel").gain(0.31)

// bass · electric bass finger · "Billy Gould: Bass"
const bass = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D E F G H E I G J K@2 A B C D A B C D A B C D A B C D E
  F G H E I G J L M N@4 O P Q R N@4 S@4 L T U V L T W X L M K@2 Y@2 Z@6 Y@16 AA@16 AB@30 AC@2 ~@3
>`.pickRestart({
  A: "e2@2 ~ e2 d3 e3 e2@2 ~@2 e2@4 e2@2", B: "e2@2 ~ e2 a2 b2 e2@2 ~@2 e2@2 e3@4",
  C: "f#2@2 ~ f#2 f#3 g3 f#3@8 e3 c#3", D: "f#2@2 ~ f#2 f#3 g3 f#3@8 ~@2", E: "c3@2 c3@4 c3@2 c3@6 c3!2",
  F: "c3@2 c3@4 c3@2 c3@2 c3!2 d3@4", G: "e2@2 e2 e2@2 e2!3", H: "e2@4 e2@2 f#3 g3 f#3@2 b2@2 e2@2 d3@2",
  I: "c3 c3@2 c3!3 d3@2", J: "e2@2 e2@2 e2@2 f#3 g3 f#3@2 d3@2 b2@2 d3@2",
  K: "[b2@2 b2@2 b2@2 b2@2 a2@3 c3@3 b2@4 b2@2 b2@2 b2@2 a2@3 g2@3 f2@2]/2", L: "c3@2 c3!2 ~@2 c3@2 c3!2 ~@2 c3@2 ~@2",
  M: "c3@2 c3!2 ~@2 c3@2 d3@4 c3@4",
  N: "[b2@2 b2!2 f#3@2 b2@2 a2@3 c3@3 b2@4 f#3@2 b2 f#3@2 b2 a2@3 c3@3 b2@4 f#3@2 b2 f#3@2 b2 a2@3 c3@3 b2@4 b2@3 c3@3 d3@3 d#3@5]/4",
  O: "d3 e3@7 d3 e3@5 d3 e3", P: "d3@2 b2@2 d3 e3@2 ~ e3@2 d3 f#3@2 ~ d3 e3",
  Q: "c3@2 b2@2 d3 e3@2 ~ e3@2 d3 g3@2 ~ d3 e3", R: "d3@2 b2@2 d3 e3@3 e3@2 d3 a3@4 ~",
  S: "[e2@4 e2@4 f2@2 ~ f2@2 ~ g2@6 g2@4 g#2@2 ~ g#2@2 ~ e2@6 e2@4 f2@2 ~ f2@2 ~ g2@6 g2@4 g#2@2 ~ g#2@3 ~@2]/4",
  T: "c3@2 c3!2 ~@2 c3@2 d3@4 d3@4", U: "~@4 a2 b2 d3 e3 g3@2 e3 d3 e3@4", V: "~@4 a2 b2 d3 b2 a2@2 g2@6",
  W: "e2@2 g2 e2 a2@2 b2 d3 e3 d3 e3@4 d3 e3", X: "b3!3 a#3!3 a3!3 g3 g3@2 e3@2 g3@2",
  Y: "e2@2 ~ e2 e2@2 e2@2 ~@2 e2@2 c3@4", Z: "e2@2 ~ e2 e2@2 e2@2 c3@2 e2@2 c3@4", AA: "e2@2 ~ e2@2 e2@2 e2", AB: "e2",
  AC: "[e2@3 ~]/2",
})).s("gm_electric_bass_finger").gain(0.41)

// other · piano · "Roddy Bottum: Piano"
const piano = note(`<
  ~@15 A B A B A B A C D B A B A B A B ~ E F G ~ E F G ~@10 A B A B A B A B ~ E F G ~ E F G ~@31 H A B A H A I J H A B A
  H A K L H A B A H A B A H A B A H A B A H A M N H A B ~ O P O P O P O P O P O P O P O P O P O P O Q ~@13
>`.pickRestart({
  A: "~ e4 f#4 g4", B: "f#4 ~@3", C: "f#4@4 ~@10 f#4 g4", D: "b4 ~ e4@2 f#4@2 g4@2", E: "f#5@2 ~ g5@2 ~@3",
  F: "~@2 g4 a4", G: "~@6 d5@7 ~@3", H: "f#4@2 ~ e4 e4@2 ~@2", I: "f#4@4 ~@10 f#5 g5", J: "a#5@4 ~@2 f#5 g5 e5@4 ~@4",
  K: "f#4@4 ~@2 f#5 g5 a#5@2 b5@2 a#5@2 g5@2", L: "f#5@2 ~ e4 f#4@2 g4@2",
  M: "f#4@4 ~@2 f#5 g5 a#5@2 b5@2 a#5@2 a#5 g5", N: "f#5 e4 f#4 g4", O: "~@2 e3@2 ~ e3@2 ~", P: "e3@2 ~ e3@2 ~ e3@2",
  Q: "e3@2 ~ e3@2 ~@3",
})).s("gm_piano").gain(0.41)

// other · piano · "Roddy Bottum: Piano" · soft notes
const piano_soft = note("<~@157 A B C B C B C B C ~@5>".pickRestart({
  A: "~@3 e3", B: "~@2 e3@2 ~ e3@2 ~", C: "e3@2 ~ e3@2 ~ e3@2",
})).s("gm_piano").gain(0.26)

// chords · overdriven guitar · "Trey Spruance: Guitar"
const overdriven_guitar = note(`<
  ~@32 A B C@2 A D E F G H ~@16 A B C@2 A D E F I J K L M N O P Q R S L@2 N T@4 U V W X I V W X I J Y H ~@75
>`.pickRestart({
  A: "[c4,g4,c5]@2 [c4,g4,c5]@4 [c4,g4,c5]@2 [c4,g4,c5]@4 c4 c#4 [c4,e4,a#4,d#5]@2", B: "[c4,e4,a#4,d#5]",
  C: "[~@2 e5@3 ~ b3 [e3,b3] ~@2 b4@2 ~ e3 [e3,b3] [e3,b3,e4], [e3,b3]@6 ~@2 e3@5 ~@3, ~ b4@2 e5@2 e5@2 ~, ~@2 e4@2 ~ e4@3 [b3,e4]@6 ~@2]/2", // E5
  D: "[c4,e4,a#4,d#5]@3 ~", E: "~@2 [e4,b4]@3 [e3,b3,e4,b4]@2 [e3,b3], [e3,b3]@5 ~@3, ~ e5@2 ~",
  F: "~@5 b4 ~ [g#4,b4,e5], [e3,b3,e4]@3 [e3,b3,e4], ~ e5@2 ~, ~ b4 ~@2, ~@3 g#4@4 ~", // E E5
  G: "~ b4 b4@2 ~@2 f#4 ~ [a3,f#4]@2 ~ [c4,f#4]@2 ~ [b3,f#4]@2, [b3,f#4] ~ b3 ~@5, ~@5 b4@2 b4@2 ~ b4@2 ~ b4@2 ~", // D Cdim B5
  H: "~@2 b4@2 ~@2 b4 ~ a3@3 g3@3 f3@2, ~ f#4@2 ~ b4@2 ~ b4@2 ~@7, ~@5 f#4@2 ~@9",
  I: "[c4,g4,c5]@2 [c4,g4,c5]!4 [c4,g4,c5]@2 [c4,g4,c5]!4 [c4,g4,c5]@2 [c4,g4,c5]!2", // C5
  J: "[c4,g4,c5]@2 [c4,g4,c5]!4 [c4,g4,c5]@2 [d4,a4,d5]@4 [c4,g4,c5]@4", // C5 D5 C5
  K: "~@2 b4!2 ~@2 f#4 ~ [a3,f#4]@2 ~ [c4,f#4]@2 ~ [b3,f#4]@2, [b3,f#4]@2 b3 ~@5, ~@5 b4@2 b4@2 ~ b4@2 ~ b4@2 ~", // D Cdim B5
  L: "~@2 b4@2 ~@2 b4!2 [a3,f#4]@2 ~ [c4,f#4]@2 ~ [b3,f#4]@2, b3@4 ~ f#4@2 ~@9, ~ f#4@2 ~ b4@2 ~@4 b4@2 ~ b4@2 ~", // D Cdim B5
  M: "~ f#4 b4@2 ~@2 b4!2 [a3,f#4]@2 ~ [c4,f#4]@2 ~ [b3,f#4]@2, b3@4 b4@2 ~@4 b4@2 ~ b4@2 ~, ~@5 f#4@2 ~@9", // D Cdim B5
  N: "~ b4 [f#3,b3]@3 [g3,c4]@3 [a3,d4]@3 [a#3,d#4]@5", // B5 C5 D5 D#5
  O: "[e4,e5,e6]!8 [e4,f#4,e5,f#5,e6,f#6] [f#4,f#5,f#6]!3 [f#4,g4,f#5,g5,f#6,g6] [g4,g5,g6]!3", // E Esus2 F# Gmaj7 G
  P: "[d4,g4,d5,g5,d6,g6] [d4,d5,d6]!7 [d4,f#4,d5,f#5,d6,f#6] [f#4,f#5,f#6]!3 [f#4,g4,f#5,g5,f#6,g6] [g4,g5,g6]!3", // G5 D F# Gmaj7 G
  Q: "[c4,g4,c5,g5,c6,g6] [c4,c5,c6]!7 [c4,f#4,c5,f#5,c6,f#6] [f#4,f#5,f#6]!3 [f#4,g4,f#5,g5,f#6,g6] [g4,g5,g6]!3", // C5 C Cdim F# Gmaj7 G
  R: "[g4,a4,g5,a5,g6,a6] [a4,a5,a6]!15", // Gsus2 A
  S: "[a4,a5,a6] ~ b4!2 ~@2 f#4 ~ [a3,f#4]@2 ~ [c4,f#4]@2 ~ [b3,f#4]@2, [b3,f#4]@2 b3 ~@5, ~@5 b4@2 b4@2 ~ b4@2 ~ b4@2 ~", // A D Cdim B5
  T: "[e3!16 e3!16 e3!16 e3!16, e5 ~@7, e4@4 e4@4 [f4,f5]@3 [f4,f5]@3 [g4,g5]@6 [g4,g5]@4 [g#4,g#5]@3 [g#4,g#5]@3 [e4,e5]@6 [e4,e5]@4 [f4,f5]@3 [f4,f5]@3 [g4,g5]@6 [g4,g5]@4 [g#4,g#5]@3 [g#4,g#5]@3 ~@2]/4", // F G G# E F G G#
  U: "[e3,c4,g4,c5]@2 [c4,g4,c5]!4 [c4,g4,c5]@2 [c4,g4,c5]!4 [c4,g4,c5]@2 [c4,g4,c5]!2", // C C5
  V: "[c4,g4,c5]@2 [c4,g4,c5]!4 [c4,g4,c5]@2 [d4,a4,d5]@4 [d4,a4,d5]@2 e3@2", W: "[e3,b3,e4,g#4,b4,e5]",
  X: "[e3,b3,e4,g#4,b4,e5]@3 [e3,b3,e4,g#4]", // E
  Y: "~ b4 b4@2 ~@2 f#4 b4 [a3,f#4]@2 ~ [c4,f#4]@2 ~ [b3,f#4]@2, [b3,f#4] ~ b3 ~@5, ~@5 b4@2 ~@3 b4@2 ~ b4@2 ~", // D Cdim B5
})).s("gm_overdriven_guitar").gain(0.31)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@145 [~ x ~ x]!15 ~@11>").gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@49 A ~@9 B ~@7 B ~@16 C@2 ~@2 C@2 ~@3 B ~@77>".pickRestart({
  A: "~@7 x", B: "~@14 x!2", C: "~@2 x!4 ~@2 x!4 ~@4",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@34 A ~@3 A ~@21 A ~@3 A ~ B C ~@16 B@2 ~@2 B@2 ~@2 B C ~@77>".pickRestart({
  A: "~ x ~@6", B: "x!8", C: "x!3 ~ x!4",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 A ~@34 B@2 ~@2 B@2 ~@53 C ~@27>".pickRestart({
  A: "~@13 x ~@2", B: "~ x ~@5 x ~@8", C: "~@15 x",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@34 ~@2 A@2 ~@3 B A@18 ~@2 A@2 ~@3 C ~@3 D ~@7 E ~@3 F ~@7 F ~ C ~ B A@70 G ~@4
>`.pickRestart({
  A: "x!8", B: "~@11 x ~@2 x ~", C: "~@3 x ~@4", D: "~ x ~@6", E: "~@2 x ~@8 x ~@4", F: "~@7 x", G: "x!4 ~@4",
})).gain(0.36)

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

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@34 A B ~@2 A C A D ~@18 A B ~@2 A C ~@2 E B@2 F G B@2 H E B@3 G B@2 H ~@2 I C ~@2 I C ~@2 A D ~@75
>`.pickRestart({
  A: "~@3 x!5", B: "x!7 ~", C: "x!8", D: "x!4 ~@4", E: "~@3 x!4 ~", F: "x", G: "~ x!6 ~", H: "x!6 ~@2", I: "~ x!7",
})).gain(0.41)

// drums · tambourine
const tambourine = s("tb").struct("<~@83 [~@3 x] ~@87>").gain(0.41)

stack(
  acoustic_guitar_steel, bass, piano, piano_soft, overdriven_guitar, kick, snare, snare_soft, low_tom, hihat, mid_tom,
  open_hat, crash, ride_bell, tambourine
)

More by Faith No More