Strudelify

Bag of Hammers

Local H

KeyG♯ minorTempo168 bpm
0:00/0:00
// Bag of Hammers — Local H
// 168 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(168/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · overdriven guitar · "Guitar - Scott Lucas"
const overdriven_guitar = note("<A ~ A ~ A ~ A ~ A ~ A ~@102>".pickRestart({
  A: "c#3 b2 c#3 b2 c#3 b2!3",
})).s("gm_overdriven_guitar").gain(0.8).pan(0.7)

// bass · electric bass finger · "Bass - Scott"
const bass = note(`<
  ~ A ~ A B A B A B A B A C@4 B A B A C@4 B A B A D@2 E@2 F@2 G H D@2 E@2 F@2 G H ~@4 D@4 B A B A C@4 B A B A D@2 E@2
  F@2 G H D@2 E@2 F@2 G H I@15 A ~@8 D@8 J
>`.pickRestart({
  A: "f1!6 f1@2", B: "c#2 b1 c#2 b1 c#2 b1!3", C: "g#2!8", D: "g#1!8", E: "b1!8", F: "f#1!8", G: "c#2!8",
  H: "b1!4 a#1!4", I: "c#2 b1 c#2 b1 c#2 b1 c#2 b1", J: "g#1 ~@7",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · distortion guitar · "Lead guitar - Scott"
const distortion_guitar = note(`<
  ~ A ~ A ~ A ~ A ~ A ~ A B@4 C A C A B@4 C A C A B@2 D@2 E@2 F G B@2 D@2 E@2 F G H@4 I@4 C J C A B@4 C A C A B@2 D@2
  E@2 F G B@2 D@2 E@2 F G K@15 A H@8 I@8 L
>`.pickRestart({
  A: "[f2,c3,f3]!6 [f2,c3,f3]@2", B: "[g#2,d#3,g#3]!8", C: "c#3 b2 c#3 b2 c#3 b2!3", D: "[b2,f#3,b3]!8",
  E: "[f#2,c#3,f#3]!8", F: "[c#3,g#3,c#4]!8", G: "[b2,f#3,b3]!4 [a#2,f3,a#3]!4", H: "[g#3,g#4]!8", I: "[g#2,g#3]!8",
  J: "[f2,f3] [f2,c3,f3]!5 [f2,c3,f3]@2", K: "c#3 b2 c#3 b2 c#3 b2 c#3 b2", L: "[g#2,g#3] ~@7",
})).s("gm_distortion_guitar").gain(0.45)

// drums · kick
const kick = s("bd").struct(`<
  ~ A ~ A B@8 ~@4 B@4 ~@4 B@10 C B@7 C B ~@8 B@4 ~@4 B@4 D B@5 C B@7 C B ~@15 A ~@17
>`.pickRestart({
  A: "x!7 ~", B: "x!2 ~ x!3 ~@2", C: "x!2 ~ x ~@4", D: "~ x ~ x!3 ~@2",
})).gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ A B@11 C B@7 C B@3 D E B@5 F G B@6 F G B@15 C B@10 F G B@6 F G B@7 D@8 A B@3 D B@3 D B@3 D B@3 H I
>`.pickRestart({
  A: "x!7 ~", B: "~ x ~ x", C: "~@4 x ~@3 x!3 ~ x!4", D: "~@4 x ~@7 x ~@2 x", E: "x!2 ~ x", F: "~@4 x ~@9 x!2",
  G: "x ~@8 x!2 ~ x!4", H: "~@2 x ~@3 x!2", I: "x",
})).gain(0.44)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A B ~@6 A C D@2 E ~@3 A C D@2 E ~@10 F G ~@6 F G D@7 H ~@3 A C D@2 E ~@3 A B ~@5 F G ~@6 F G D@15 ~ D@16 B
>`.pickRestart({
  A: "~@15 x", B: "x", C: "x ~@2 x!3 ~ x", D: "x!2 ~ x!3 ~ x", E: "x ~ x ~@3 x ~ x!2 ~ x ~@4", F: "~@10 x!3 ~@3",
  G: "~@2 x!3 ~@11", H: "x ~ x ~@3 x ~@3 x!2 ~@4",
})).gain(0.44)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@7 A ~@7 A ~@14 B C ~@6 B C ~@7 D ~@3 A ~@7 A ~@6 B C ~@6 B C ~@33
>`.pickRestart({
  A: "~@14 x!2", B: "~@9 x!2 ~@5", C: "~@4 x!2 ~@10", D: "~@8 x!3 ~@5",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ A B@8 ~@4 B@4 ~@4 B@10 C D B@6 C D E ~@7 B@4 ~@4 B@10 C D B@6 C D ~@15 A ~@17
>`.pickRestart({
  A: "x!7 ~", B: "x!4", C: "x!2 ~@2", D: "x ~ x!2", E: "x",
})).gain(0.44)

stack(overdriven_guitar, bass, distortion_guitar, kick, snare, low_tom, mid_tom, crash)

More by Local H