Strudelify

Hammering in My Head

Garbage

KeyF♯ minorTempo145 bpm
0:00/0:00
// Hammering in My Head — Garbage
// 145 bpm, 4/4, key F# minor. 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 174 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(145/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.

// bass · slap bass 2
const bass = note(`<
  ~ A@12 B C B C B C B C B C B C B C B C D A@3 ~@8 E F G@2 H F I J B C B C B C B C D A@3 ~@8 K L M N K L M N K L M N K L
  M N O@4 ~@4 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C
  ~@29
>`.pickRestart({
  A: "~@2 f#1@2 ~ f#2@2 ~ f#1@2 ~@2 e1@2 ~@2", B: "~@2 f#1@2 ~ f#2@2 ~ [f#1,e3]@2 ~@2 e1@2 ~@2, ~@5 f#3@3",
  C: "~@2 f#1@2 ~ f#2@2 ~ [f#1,f#3]@2 ~@2 e1@2 ~@2, ~@5 e3@3", D: "f#1 ~@5 e1 ~, f#2@5 f#2@11, ~ f#1@3 f#1@4",
  E: "c#4!2 ~@2 c#4@2 c4@2 c#4@2 ~@2 c4@2 c#4@2", F: "~ f#3@3 ~@4",
  G: "[~@2 f#3@2 c#4@2 c4@2 c#4@2 b3@2 a3@2 c#4@9 ~@9]/2", H: "~ f#3 c#4 c4 c#4 ~ c4 c#4",
  I: "~ f#3 c#4 c4 c#4 b3 a3 c#4", J: "~ c#4 ~ c#4@2 ~@3", K: "f#2", L: "e2", M: "d2", N: "b2", O: "[f#2@27 ~@5]/4",
})).s("gm_slap_bass_2").gain(0.29)

// chords · lead 7 fifths
const lead_7_fifths = note("<~ A ~ B C ~@16 D@8 ~@86 B C ~@6 E F ~@49>".pickRestart({
  A: "[c#5,f#5] [c#4,f#4,a4,c#5] ~@14", // F#5 F#m
  B: "[d#4,f#4] [e4,g4] [f4,g#4] [f#4,a4] ~ [f#4,a4]!4 [g4,a#4] [g#4,b4]!2 ~@3 [g#4,b4]", // D#m Em Fm F#m Gm G#m
  C: "[g#4,b4] [a4,c5] [a#4,c#5]!2 ~ [c5,d#5] [c#5,e5] [d5,f5]!2 [d#5,f#5] [e5,g5] [f5,g#5] ~ [f#5,a5] [g#5,b5] [a5,c6]", // G#m Am A#m Cm C#m Dm D#m Em …
  D: "[[c#5,c#6]@3 [f#4,f#5]@3 [c#5,c#6]@3 [f#4,f#5]@3 [c#5,c#6] [f#4,f#5] [c#5,c#6]@2]/2", // C# F# C# F# C# F# C#
  E: "[g#4,b4] [a4,c5] [a#4,c#5] [b4,d5] ~ [b4,d5]!4 [c5,d#5] [c#5,e5]!2 ~@3 [c#5,e5]", // G#m Am A#m Bm Cm C#m
  F: "[c#5,e5] [d5,f5] [d#5,f#5]!2 ~ [f5,g#5] [f#5,a5] [g5,a#5]!2 [g#5,b5] [a5,c6] [a#5,c#6] ~ [b5,d6] [c#6,e6] [d6,f6]", // C#m Dm D#m Fm F#m Gm G#m Am …
})).s("gm_lead_7_fifths").gain(0.47)

// chords · pad warm
const pad_warm = note(`<
  ~ A@4 ~@8 B C D C B C D C B C D C B C D C ~@3 E F G H G I G H G ~@8 B C D C B C D C ~@3 E F G H G I G H G ~@16 J@8 B C
  D C B C D C B C D C B C D C ~@65
>`.pickRestart({
  A: "c#4", B: "[f#3,c#4]", C: "[e3,b3]", D: "[d3,a3]", E: "d#4", F: "[a3,c#4,e4]", G: "[e3,b3,e4]", H: "[f#3,a3,f#4]",
  I: "[f#3,c#4,f#4]", J: "[f#4@27 f#4@27 f#4@8 ~@2]/8",
})).s("gm_pad_warm").gain(0.1)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@5 A B A B A B A B ~@16 A B A B ~@24 A B A B ~@32 A B A B A B A B A B A B A B A B ~@65
>`.pickRestart({
  A: "[f#3,f#4] [f#2,f#3] [f#3,f#4] [a3,a4]@3 [f#3,f#4]@2", B: "[b3,b4] [b2,b3] [b3,b4] [c4,c5]@3 [a3,a4]@2",
})).s("gm_overdriven_guitar").gain(0.37)

// chords · taiko drum
const taiko_drum = note(`<
  ~@9 A@5 ~@2 B C ~@2 B C ~@2 B C ~@2 B D E@3 ~@11 B C ~@2 B C ~@2 B C ~@2 B E@4 ~@35 B C ~@2 B ~@3 B C ~@2 B ~@3 B C
  ~@2 B ~@3 B C ~@2 B ~@18 F G ~@24 A@5
>`.pickRestart({
  A: "[~@2 [f#4,f#5]@2 [f#4,f#5]!2 ~ [f#4,f#5]!4 ~@7 [f#4,f#5]@2 [f#4,f#5]!2 ~ [f#4,f#5]!4 ~@7 [f#4,f#5]@2 [f#4,f#5]!2 ~ [f#4,f#5]!4 ~@7 [f#4,f#5]@2 [f#4,f#5]!2 ~ [f#4,f#5]!4 ~ [c#4,c#5]@8 ~@12, ~@3 [c#4,c#5]@2 ~@2 [c#4,c#5]@2 ~@2 [c#4,c#5]@2 ~@7]/5", // F# C#
  B: "~@10 [e3,g#4,b4,e5] ~ [e3,g#4,b4,e5] ~ [e3,g#4,b4,e5] ~", C: "[f#3,c#5,f#5]!2 ~@14",
  D: "[f#3,f#4,c#5,f#5]!2 f#4!14", E: "f#4!16", F: "f#4!4 ~ f#4!4 e4!3 ~ e4!3",
  G: "e4 f#4!4 ~ g4 g#4 a4 b4 c5 c#5 d5 d#5 e5 f5",
})).s("gm_taiko_drum").gain(0.36)

// chords · pad sweep
const pad_sweep = note("<~@9 A@5 ~@18 B ~@27 B ~@8 C@8 ~@2 C@2 ~@2 C@2 ~@89>".pickRestart({
  A: "[~@2 f5@2 f5!2 ~ f5!4 ~@7 f5@2 f5!2 ~ f5!4 ~@7 f5@2 f5!2 ~ f5!4 ~@7 f5@2 f5!2 ~ f5!4 ~ c5@8 ~@12, ~@3 c5@2 ~@2 c5@2 ~@2 c5@2 ~@7]/5",
  B: "d#4", C: "[~@3 [g#4,c#5,c#6]@12 ~]/2",
})).s("gm_pad_sweep").gain(0.02)

// other · lead 1 square
const lead_1_square = note(`<
  ~@5 A B@2 C D@4 E F G F E F G F E F G F E F G F H@4 I J K J L J K J ~@8 E F G F E F G F H@4 I J K J L J K J ~@24 M N O
  N M N O N M N O N M N O N M N O N M N O N M N O N M N O N ~@20 M N P N M N P N M N P N M N P N M N P N M N P N M ~@4
>`.pickRestart({
  A: "f#4!5 [f#3,f#4]!3 f#3!8", B: "f#3!4 f#4 [f#3,f#4]!3 f#3!8", C: "f#3!4 f#4 [f#3,f#4]!3 f#3!7 [f#3,f#4]",
  D: "f#3!2 [f#3,d6] f#3 [f#4,d6] [f#3,f#4,d6] [f#3,f#4] [f#3,f#4,d6] [f#3,d6]!3 f#3!5, ~@3 g#5", E: "[f#3,c#4]",
  F: "[e3,b3]", G: "[d3,a3]", H: "[f#4,f#5]!5 [f#3,f#4,f#5]!2 [f#3,f#4]!9", I: "[a3,c#4,e4]", J: "[e3,b3,e4]",
  K: "[f#3,a3,f#4]", L: "[f#3,c#4,f#4]", M: "[c#4,f#4]", N: "[b3,e4]", O: "[a3,d4]", P: "[a3,f#4]",
})).s("gm_lead_1_square").gain(0.22)

// other · lead 8 bass lead
const lead_8_bass_lead = note("<~@9 e4!4 ~@161>").s("gm_lead_8_bass_lead").gain(0.23)

// other · electric bass pick
const electric_bass_pick = note(`<
  ~@16 A B ~@2 A B ~@2 A B ~@2 A B ~@2 C D ~@2 E F ~@6 A B ~@2 A B ~@2 A B ~@2 A B ~@2 C D ~@2 E F ~@30 A B ~@2 A ~@3 A
  B ~@2 A ~@3 A B ~@2 A ~@3 A B ~@2 A ~@49
>`.pickRestart({
  A: "~@10 [e3,e4] ~ [e3,e4] ~ [e3,e4] ~", B: "[f#3,f#4] ~@15", C: "~ d#4", D: "e4", E: "~ e4", F: "f#4",
})).s("gm_electric_bass_pick").gain(0.1)

// drums · kick
const kick = s("bd").struct("<A B@32 ~@7 C D@7 C B@12 D@7 C E@16 ~@7 F B@68 D@11 G ~>".pickRestart({
  A: "~@13 x!3", B: "x ~@6 x!2 ~ x ~@2 x!3", C: "x ~@2 x ~@3 x!2 ~@7", D: "x ~@2 x ~@3 x ~ x ~ x ~@4", E: "x",
  F: "~@13 x ~ x", G: "x ~@2 x ~@3 x ~@8",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<A B@32 ~@7 C D@7 C B@19 C E@23 F B@79 C ~>".pickRestart({
  A: "~@12 x!4", B: "~ x ~ x", C: "~ x ~@2", D: "~@2 x ~@3 x!2", E: "~ x", F: "~@4 x ~ x!2",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct("<~@33 A@7 B ~@20 A@7 B C@16 D@8 ~@68 A@11 E ~>".pickRestart({
  A: "x!5 ~@2 x ~ x ~ x!4 ~", B: "x!5 ~@2 x!2 ~@5 x!2", C: "x!4", D: "x", E: "x!5 ~@2 x ~@8",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@33 A@7 ~ B C B C B C B C ~@125>".pickRestart({
  A: "x ~@2 x ~@3 x ~ x ~ x ~@4", B: "~@9 x!4 ~@3", C: "~ x!4 ~@11",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 [~ x ~ x]!7 ~ [x!16]!7 [x!9 ~@7] ~@125>").gain(0.36)

// drums · high tom
const high_tom = s("ht").struct("<~@41 A B A B A B A ~@126>".pickRestart({
  A: "x!5 ~@11", B: "~@9 x!7",
})).gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct("<~@41 A ~ A ~ A ~ A ~@44 B ~@81>".pickRestart({
  A: "x ~@3 x ~@2 x ~ x ~@2 x ~@3", B: "~@6 x!2",
})).gain(0.36)

// drums · splash
const splash = s("cr").struct(`<
  ~ A ~@3 A ~@7 B ~@7 B ~@7 B ~@3 B ~@15 B ~@7 B ~@35 B ~@7 B ~@7 B ~@7 B ~@7 B ~@19 B ~@15 B ~@12
>`.pickRestart({
  A: "~ x ~@2", B: "x",
})).gain(0.36)

// drums · ride
const ride = s("rd").struct("<~@69 [~ x ~ x ~ x ~ x]!23 [~ x ~ x ~@4] ~@81>").gain(0.36)

// drums · bongos
const bongos = s("bongo:4").struct("<A B@32 ~@7 C ~@8 B@12 ~@32 B@68 ~@13>".pickRestart({
  A: "~@14 x!2", B: "~@2 x!2 ~@3 x ~@2 x ~@3 x!2", C: "~@9 x!2 ~@3 x ~",
})).gain(0.94)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~ [x ~@8 x ~@6]!32 ~@16 [x ~@8 x ~@6]!12 ~@32 [x ~@8 x ~@6]!68 ~@13>")
  .gain(0.94)

// drums · congas
const congas = s("conga:33").struct("<[~@13 x!3] ~@173>").gain(1.15)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~@12 x!4] ~@32 [~@7 x]!7 ~@21 [~@7 x]!7 ~@93 [~@7 x]!11 ~@2>").gain(1.82)

// drums · shaker
const shaker = s("sh").struct("<~@33 A@7 B C ~ C ~ C ~ C ~@13 A@7 B D@23 E ~@68 A@11 C ~>".pickRestart({
  A: "x!16", B: "x!9 ~@7", C: "x!8 ~@8", D: "x!4", E: "x ~ x ~ x ~ x!2",
})).gain(0.36)

stack(
  bass, lead_7_fifths, pad_warm, overdriven_guitar, taiko_drum, pad_sweep, lead_1_square, lead_8_bass_lead,
  electric_bass_pick, kick, snare, hihat, low_tom, mid_tom, high_tom, tambourine, splash, ride, bongos, bongos_2,
  congas, cabasa, shaker
)

More by Garbage