Strudelify

Hush

Tool

KeyB minorTempo164 bpm
0:00/0:00
// Hush — Tool
// 164 bpm, 4/4, key B minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 6 "ADAM JONES - GUITAR" named as a guitar, played on electric guitar clean (its slap bass 2 patch is not one)
// note: duplicate parts dropped: ch 4 "DANNY CAREY - DRUMS" slap bass 2 (copy of ch 1 electric bass pick)
// note: Full arrangement: all 115 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 30.
setcpm(164/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 · electric bass pick
const bass = note(`<
  A B A B A B A B A B A B C D C D C D C D C E C E C E C E C E C E C E C E F@8 C D C D C D C D C E C E C E C E C E C E C
  E C E F@8 G@4 H I H I H I H J C E C E C E C E C E C E C E C E K L K L K L K L K L K
>`.pickRestart({
  A: "a1 b1 a2!3 b2 e2!2", B: "e2@2 f2@2 e2 ~ d2@2 e2@2 e2 ~ d3@2 e3@2", C: "a1@2 b1@2 b1@2 b1@2 b2@2 d1 ~ d1 ~ e1@2",
  D: "f1 e1 d1@2 d1@2 g1@2", E: "f1 e1 d1@2 d1!2 g1@2",
  F: "[a1 b1@2 b1 [b1,b2] b1@2 b1@3 a1 a1@2 a1 a1@2, ~@7 b2 ~@8]/2", G: "b1!3 a1@2 d1 f1!2", H: "f1 e1!2 f1 e1!2 f1 e1",
  I: "e1 f1 e1!2 c2!2 c2@2", J: "e1 f1 e1!6", K: "a1!10 ~@6", L: "~ d2 [d2,a2]@2, ~ g1@3",
})).s("gm_electric_bass_pick").gain(0.6)

// bass · slap bass 1
const bass_2 = note("<A B A B A B A B A B A B ~@103>".pickRestart({
  A: "a1 b1 a2!3 b2 e2!2", B: "e2@2 f2@2 e2 ~ d2@2 e2@2 e2 ~ d3@2 e3@2",
})).s("gm_slap_bass_1").gain(0.6)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@4 A@2 B@2 A@2 C@2 D E D E D E D F ~@16 G H G H G H G H D E D E D E D F ~@8 I J I J K L M N G H G H G H G H O@4 P Q P
  Q P Q P R D S D T D S D U D E D E D E D F ~@11
>`.pickRestart({
  A: "[[a2,d3,a3,d4]@12 [c#4,a#4,e5] [c#4,a#4,e5]@3]/2", B: "[b3,g#4,d5]/2", C: "[~@3 g5, [b3,g#4,d5]]/2",
  D: "[a2,e3,a3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [a2,d3,g3,b3] ~ [a2,d3,g3,b3] ~ [a2,d3,g3,b3]@2", // A5 B5 G
  E: "[e2,b2,e3] [f2,c3,f3] [e2,b2,e3] [d2,a2,d3]@2 [a2,d3]@2 [d3,a3,d4]", F: "[f2,c3,f3]@3 [e2,b2,e3]@3 [d2,a2,d3]@2",
  G: "[f#3,b3,d#4]!3 [f#3,b3,d#4]@2 [f#3,b3,d#4]!3", // B
  H: "[f#3,b3,d#4] [e3,a3,c#4] [e3,a3,c#4]@2 [e3,a3,c#4]@2 [e3,a3,c#4]!2", I: "b2", J: "e2 f2 e2 d2@2 a2@2 d3",
  K: "g#3", L: "b2 c3 b2 a2@2 e3@2 a3", M: "c#4", N: "b3 c#4 b3 f#3@2 e3 c#3@2",
  O: "[b2,f#3,b3]@3 [a2,e3,a3]@3 [e2,b2] [f2,c3]", P: "[f2,c3] [e2,b2]!2 [f2,c3] [e2,b2]!2 [f2,c3] [e2,b2]",
  Q: "[e2,b2] [f2,c3] [e2,b2]!2 c3!2 c3@2", R: "[e2,b2] [f2,c3] [e2,b2]!2 e2!4",
  S: "[b3,f#4]@2 [b3,f#4] [b3,f#4]@2 [b3,f#4]@3", T: "[d4,a4]@2 a4 [d4,a4]@2 [d4,a4]@3",
  U: "[b3,f#4]@2 [b3,f#4] [b3,f#4]@2 [a3,e4]@3", // B5 A5
})).s("gm_distortion_guitar").gain(0.8)

// chords · overdriven guitar · "PAUL D'AMOUR - BASS GUITAR"
const overdriven_guitar = note("<~@20 A B A B A B A B A B A B ~@20 C D C D C D C D ~@55>".pickRestart({
  A: "[a2,e3,a3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [a2,d3,g3,b3] ~ [a2,d3,g3,b3] ~ [a2,d3,g3,b3]@2", // A5 B5 G
  B: "[e2,b2,e3] [f2,c3,f3] [e2,b2,e3] [d2,a2,d3]@2 [a2,d3]@2 [d3,a3,d4]", C: "[b2,f#3,b3]", D: "e2 f2 e2 d2@2 a2@2 d3",
})).s("gm_overdriven_guitar").gain(0.55)

// bass · electric guitar clean · "ADAM JONES - GUITAR"
const bass_3 = note(`<
  ~@20 A B A B A B A B A B A B A B A B C@8 A D A D A D A D A B A B A B A B A B A B A B A B C@8 E@4 F G F G F G F H A B A
  B A B A B A B A B A B A B I J I J I J I J I J I
>`.pickRestart({
  A: "a1@2 b1@2 b1@2 b1@2 b2@2 d1 ~ d1 ~ e1@2", B: "f1 e1 d1@2 d1!2 g1@2",
  C: "[a1 b1@2 b1 [b1,b2] b1@2 b1@3 a1 a1@2 a1 a1@2, ~@7 b2 ~@8]/2", D: "f1 e1 d1@2 d1@2 g1@2", E: "b1!3 a1@2 d1 f1!2",
  F: "f1 e1!2 f1 e1!2 f1 e1", G: "e1 f1 e1!2 c2!2 c2@2", H: "e1 f1 e1!6", I: "a1!10 ~@6", J: "~ d2 [d2,a2]@2, ~ g1@3",
})).s("gm_electric_guitar_clean").gain(0.8)

// chords · overdriven guitar
const overdriven_guitar_2 = note("<~@30 A B A B A B ~@24 C D C D E F G H ~@47>".pickRestart({
  A: "[a2,e3,a3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [b2,f#3,b3]@2 [a2,d3,g3,b3] ~ [a2,d3,g3,b3] ~ [a2,d3,g3,b3]@2", // A5 B5 G
  B: "[e2,b2,e3] [f2,c3,f3] [e2,b2,e3] [d2,a2,d3]@2 [a2,d3]@2 [d3,a3,d4]", C: "b2", D: "e2 f2 e2 d2@2 a2@2 d3",
  E: "g#3", F: "b2 c3 b2 a2@2 e3@2 a3", G: "c#4", H: "b3 c#4 b3 f#3@2 e3 c#3@2",
})).s("gm_overdriven_guitar").gain(0.8)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B C B C B C B D B C B C B C B E B C B C B C B C B C B C B C B F B G B G B G B H B C B C B C B E B C B C B C B C
  B C B C B C B I B G B G B G B H J@4 K@7 A B C B C B C B E B C B C B C B K L M L M L ~ L N L ~ L
>`.pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!5 ~", B: "x ~ x!2 ~@2 x!2", C: "x ~ x!2 ~ x!2 ~", D: "x ~ x!6", E: "x!13 ~ x ~",
  F: "x ~ x!2 ~ x ~ x", G: "~ x ~@2 x!2 ~@2", H: "x!16", I: "x ~ x!2 ~ x!3", J: "x ~ x!4 ~@2 x!5 ~ x ~", K: "x!8",
  L: "x!9 ~@7", M: "~@3 x", N: "~@7 x",
})).gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@11 A ~@23 B ~@31 C ~@8 D@4 E F E F E F E G ~@15 H ~ I ~ I ~@3 J ~ I ~>".pickRestart({
  A: "~@8 x!8", B: "~@9 x!2 ~@3 x ~", C: "~@9 x!2 ~ x ~ x ~", D: "~@6 x!2", E: "x ~@2 x ~@2 x ~", F: "~ x ~@2 x!3 ~",
  G: "x ~ x ~ x ~@2 x", H: "x!8", I: "~@3 x", J: "~@4 x!4",
})).gain(0.8)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 A ~@31 B ~@8 C@4 D E D E D E D F ~@23 G ~@3>".pickRestart({
  A: "~@9 x ~@6", B: "~@9 x!2 ~@5", C: "~@6 x!2", D: "x ~@2 x ~@2 x ~", E: "~ x ~@2 x!3 ~", F: "x ~ x ~ x ~@2 x",
  G: "~ x ~@2",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ B ~@15 C A C A C A C A C A C A C A C ~@17 C A C A C A C A C A C A C A C ~@14 D ~ D ~ D ~ E ~@8 F A F A F A F@2
  G B G B G B G ~ G ~ G
>`.pickRestart({
  A: "~@3 x", B: "x", C: "x!2 ~@2", D: "~@4 x!3 ~", E: "x ~ x ~ x ~@2 x", F: "x!4", G: "x!3 ~",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@67 A ~@8 B@4 C D C D C D C ~@23 E ~@4>".pickRestart({
  A: "~@9 x ~@6", B: "~@6 x!2", C: "x ~@2 x ~@2 x ~", D: "~ x ~@2 x!3 ~", E: "~@7 x",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@7 B C B C B C B C ~@16 D E D E D E B F B C B C B C B C ~@16 D E D E D E B F G@3 H ~ I ~ I ~ I ~ J B C B C B C
  B C A C A C A C A B@2 ~ B ~ B ~ B ~ B ~ B
>`.pickRestart({
  A: "x", B: "x!2", C: "x ~@2 x ~@2 x ~", D: "x ~@3 x ~@2 x", E: "~ x ~ x", F: "x!3 ~", G: "x ~@2 x ~@4",
  H: "~@3 x ~@4", I: "~@4 x!3 ~", J: "x ~ x ~ x ~@2 x",
})).gain(0.8)

// drums · triangle
const triangle = s("triangles:30").struct("<~@109 [~@3 x] ~@5>").gain(6.97)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@109 [~@5 x!2 ~] ~@5>").gain(6.97)

stack(
  bass, bass_2, distortion_guitar, overdriven_guitar, bass_3, overdriven_guitar_2, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, triangle, triangle_2
)

More by Tool