Strudelify

H.

Tool

KeyD minorTempo100 bpm
0:00/0:00
// H. — Tool
// 100 bpm, 4/4, key D minor. 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: Full arrangement: all 153 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 28, guitar program 28.
setcpm(100/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 · distortion guitar
const distortion_guitar = note(`<
  A@2 B@2 A@2 B@2 C D C D C D C D ~@52 E@3 F E G E H I@8 ~@18 J K L M N O P Q ~@10 R@3 S ~@8 T@4 U@4 V@2 W@2 X@5 ~@4
>`.pickRestart({
  A: "[[d2,a2]@2 a2 f2@13]/2", B: "[[d2,a2]@2 a2 f2@2 g2@11]/2", C: "[d2,a2]@2 a2 f2@5", D: "[d2,a2]@2 a2 f2@2 g2@3",
  E: "[d2,a2,d3]@4 [a2,e3,a3]@2 [f2,c3,f3]@4 [g2,d3,g3]@4 [g2,d3] [d2,a2]", // D5 A5 F5 G5 D5
  F: "[d2,a2,d3]@2 [a2,e3,a3] [f2,c3,f3]@2 [f2,c3,f3]@2 [c3,g3,c4]", // D5 A5 F5 C5
  G: "[d2,a2,d3]@2 [a2,e3,a3] [f2,c3,f3]@2 [g2,d3,g3] ~ [c3,g3,c4]", // D5 A5 F5 G5 C5
  H: "[d2,a2,d3]@2 [a2,e3,a3] [f2,c3,f3]@2 [g2,d3,g3]@3", I: "[d2,a2,d3]/8", J: "a3@3 a3 a3@4 a3@4 a3@4",
  K: "a3 g3!3 g3@4 g3@2 g3@2 g3@2 g3!2", L: "g3 a3!3 a3@3 a3 a3@2 a3!2 a3@2 a3!2",
  M: "a3 bb3@3 bb3@2 bb3@2 bb3@2 bb3@2 bb3@3 a3", N: "a3@4 e4@2 c4@4 d4!6", O: "a3@3 a3 e4@2 c4@3 d4@3 d4!3 ~",
  P: "a3@2 a3!2 e4@2 c4@4 d4!6", Q: "d4!14 c4 eb4",
  R: "[f2,c3] [d2,a2]!2 [eb2,bb2] [d2,a2]!2 [f2,c3] [d2,a2]!3 [f2,c3] [d2,a2] [eb2,bb2] [d2,a2] [f2,c3] [gb2,db3]", // F5 D5 Eb5 D5 F5 D5 F5 D5 …
  S: "[f2,c3] [d2,a2]!2 [eb2,bb2] [d2,a2]!2 [f2,c3] [d2,a2]!3 [f2,c3] [d2,a2] [eb2,bb2] [d2,a2] ~@2", T: "[d2,a2,d3]/4",
  U: "[[d2,a2,d3]@2 [d2,a2,d3] [eb2,bb2,eb3]@2 [eb2,bb2,eb3] [d2,a2,d3] [f2,c3,f3]@2 [f2,c3,f3]!2 [g2,d3,g3]@2 [c3,g3,c4]!2 [d3,a3,d4]]/2", // D5 Eb5 D5 F5 G5 C5 D5
  V: "[[d2,a2,d3]!4 [d2,a2,d3]@2 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [d3,g3,b3]@2 [f2,c3,f3]@4 [f2,c3,f3,b3]@2 [f2,c3,f3]@2 [g2,d3,g3]@4 [c3,g3,c4]!2 [c3,g3,c4]@2 [d3,a3,d4]@2]/2", // D5 Eb5 G F5 F F5 G5 C5 …
  W: "[[d2,a2,d3]@2 [d2,a2,d3] [eb2,bb2,eb3]@3 [d2,a2,d3,g3,b3] [f2,c3,f3]@3 [f2,c3,f3,b3] [d3,g3]@3 ~@2, ~@11 g2@5]/2", // D5 Eb5 G F5 F G5
  X: "[~ [d2,a2,d3]@67 ~@12]/5", // D5
})).s("gm_distortion_guitar").gain(0.46)

// chords · distortion guitar
const distortion_guitar_2 = note(`<
  ~@8 A@4 B@2 C D@5 ~@32 E F E G H I H J K L K L K L K M N@3 O N P N Q R@8 ~@29 S T U V W@3 X@3 Y ~@12 Z@4 AA@2 AB@2
  AC@7 AD@2
>`.pickRestart({
  A: "[d2,a2,d3]/4", B: "[[d2,a2,d3,a3,d4]@7 ~]/2", C: "[d2,a2,d3,a3,d4]", D: "[d2,a2,d3,d4,a4,d5]/5",
  E: "[d2,a2] d3 a3 f3 g3 e3 a2 d3", F: "[d2,a2] d3 a3 f3 g3 e3 d3 a2",
  G: "d2@2 d3@2 a3@2 f3@2 ~@2 [g2,d3,g3]@4 [g2,d3] d2", H: "[d2,a2] ~ d3@2 a3@2 f3@2 g3@2 e3@2 a2@2 d3@2",
  I: "~@2 d3@2 a3@2 f3@2 d3 ~ [g2,d3,g3]@4 [g2,d3] a2", J: "~@2 d3@2 a3@2 f3@2 d3!2 [g2,d3,g3]@4 [g2,d3] d2",
  K: "d2@2 d3@2 a3@2 f3@2 d3 ~ [g2,d3,g3]@4 [g2,d3] d2", L: "~@8 d3 ~ [g2,d3,g3]@4 [g2,d3] [d2,a2]",
  M: "a2 ~ d3@2 a3@2 f3@10", N: "[d2,a2,d3]@4 [a2,e3,a3]@2 [f2,c3,f3]@4 [g2,d3,g3]@4 [g2,d3] [d2,a2]",
  O: "[d2,a2,d3]@2 [a2,e3,a3] [f2,c3,f3]@2 [f2,c3,f3]@2 [c3,g3,c4]", // D5 A5 F5 C5
  P: "[d2,a2,d3]@2 [a2,e3,a3] [f2,c3,f3]@2 [g2,d3,g3] ~ [c3,g3,c4]", // D5 A5 F5 G5 C5
  Q: "[d2,a2,d3]@2 [a2,e3,a3] [f2,c3,f3]@2 [g2,d3,g3]@3", R: "[d2,a2,d3]/8", S: "~@4 [bb2,f3]!4",
  T: "[bb2,f3,bb3]@4 [bb2,f3,bb3]!2 [bb2,f3,bb3,f4] [bb2,f3,bb3]", // Bb5
  U: "[g2,d3,g3,d4]@2 [g2,d3,g3]@2 [g2,d3,g3]@2 [g2,d3,g3]@2 [g2,d3,g3]@2 [g2,d3,g3,d4]@2 [g2,d3,g3]@2 [c3,g3,c4]!2", // G5 C5
  V: "[c3,g3,c4,g4]@4 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3] [d2,a2]", // C5 D5
  W: "[d2,a2,d3]/3", // D5
  X: "[f2,c3] [d2,a2]!2 [eb2,bb2] [d2,a2]!2 [f2,c3] [d2,a2]!3 [f2,c3] [d2,a2] [eb2,bb2] [d2,a2] [f2,c3] [gb2,db3]", // F5 D5 Eb5 D5 F5 D5 F5 D5 …
  Y: "[f2,c3] [d2,a2]!2 [eb2,bb2] [d2,a2]!2 [f2,c3] [d2,a2]!3 [f2,c3] [d2,a2] [eb2,bb2] [d2,a2] ~@2", // F5 D5 Eb5 D5 F5 D5 F5 D5 …
  Z: "[[d2,a2,d3]@2 [d2,a2,d3] [eb2,bb2,eb3]@2 [eb2,bb2,eb3] [d2,a2,d3] [f2,c3,f3]@2 [f2,c3,f3]!2 [g2,d3,g3]@2 [c3,g3,c4]!2 [d3,a3,d4]]/2", // D5 Eb5 D5 F5 G5 C5 D5
  AA: "[[d2,a2,d3]!4 [d2,a2,d3]@2 [eb2,bb2,eb3]@4 [eb2,bb2,eb3]@2 [d3,g3,b3]@2 [f2,c3,f3]@4 [f2,c3,f3,b3]@2 [f2,c3,f3]@2 [g2,d3,g3]@4 [c3,g3,c4]!2 [c3,g3,c4]@2 [d3,a3,d4]@2]/2", // D5 Eb5 G F5 F F5 G5 C5 …
  AB: "[[d2,a2,d3]@2 [d2,a2,d3] [eb2,bb2,eb3]@3 [d2,a2,d3,g3,b3] [f2,c3,f3]@3 [f2,c3,f3,b3] [d3,g3]@3 ~@2, ~@11 g2@5]/2", // D5 Eb5 G F5 F G5
  AC: "[~ [d2,a2,d3]@66 a3@17 a3@4 ~@2 g3@10 ~ a3@6 g3@5]/7", AD: "[~@3 d3@2 f3@23 ~@4]/2",
})).s("gm_distortion_guitar").gain(0.46)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@13 A ~@30 B C B D E F G H ~@9 I ~ I ~ I ~@44 J K L M ~@39>".pickRestart({
  A: "~@6 d2 eb2", B: "d2@4 a2@2 f2@8 f2 d2", C: "d2@4 a2@2 f2@4 g2@2 g2 ~ g2@2", D: "d2@4 a2@2 f2@4 f2 g2 c3 b2 g2@2",
  E: "d2@4 a2@2 f2@4 f2 g2 c3 g2 f2 d2", F: "d2@4 a2@2 [f2,c3]@4 c3 d3 g3 d3 c3 d3",
  G: "d2@4 a2@2 [f2,c3]@4 f2 g2 c3 g2 f2 d2", H: "d2@4 [a2,d3]@2 [f2,c3]@4 c3 d3 g3 d3 c3 a2",
  I: "[d2,a2] ~ d3@2 a3@2 f3@2 ~@8", // D5
  J: "[bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]!2", // Bb5
  K: "[g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]@2 [g2,d3]!2", // G5
  L: "[c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [c3,g3]@2 [bb2,f3]!2", // C5 Bb5
  M: "[bb2,f3]!2 [bb2,f3]@2 [bb2,f3]@2 [bb2,f3]@2 ~@8", // Bb5
})).s("gm_distortion_guitar").gain(0.23)

// other · distortion guitar
const distortion_guitar_3 = note("<~@80 A@2 B@4 ~@67>".pickRestart({
  A: "[[d2,a2]@2 a2 f2@13]/2", B: "[[d2,a2]@2 a2 f2@2 g2@27]/4",
})).s("gm_distortion_guitar").gain(0.51)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@101 A ~@46 B@5>".pickRestart({
  A: "~@12 g3 a3 g3 a3",
  B: "[~@3 [d2,a2,d3,a3,d4,gb4]@17 [d2,a2,d3,a3,d4,gb4]@17 [d2,a2,d3,a3,d4,gb4]@16 [d2,bb2,f3,bb3,d4]@23 ~@4]/5", // D Bb
})).s("gm_electric_guitar_clean").gain(0.22)

// chords · electric guitar clean
const electric_guitar_clean_2 = note("<~@83 A@4 ~@66>".pickRestart({
  A: "[[a3,d4]@3 [a3,b3] [a3,b3]@2 [d3,a3,d4]@3 d4 a3@2 d4@3 [a3,b3]@3 [d3,a3,d4]@2 [d3,a3,d4] [a3,d4]@11]/4", // D5 Asus2 D5 Asus2 D5
})).s("gm_electric_guitar_clean").gain(0.46)

// bass · electric bass pick
const bass = note(`<
  A@2 B@2 A@2 B@2 C D C D C D C D C D C D E D E D E D E D F D F G H I H I@5 C D C J K L K L M ~@7 H I H I@5 ~@30 N O P Q
  R S T U V W X Y Z AA AB AC AD AE AF AG AD AH AI AJ@3 AK@8 AL@4 AM@2 AN@2 AO@2 AP@2 AO@2 AQ@2 AR@5 AS AT@3
>`.pickRestart({
  A: "[d1@2 a2 f2@13]/2", B: "[d1@2 a2 f2@2 g2@11]/2", C: "d1@2 a2 f2@5", D: "d1@2 a2 f2@2 g2@3", E: "d1!2 a2 f2@5",
  F: "d1@2 a2 f2@2 c2!2 d2", G: "d1 d2 a2 d2 ~ g2@3", H: "d1!2 a2 f2 g2 e2 a1 d2", I: "d1 d2 a2 f2 ~ g2@3",
  J: "d1@2 a2 f2@2 g2 ~ g2", K: "d1@2 d2@2 a2@2 d2@2 c3@2 a2@2 c3 [c3,d3] a2@2",
  L: "d1@2 d2@2 a2@2 f2@2 c3@2 a2@2 c3 b2 g2@2", M: "d1@2 d2@2 a2@2 f2@2 c3@2 a2@2 c3 g2 f2 d2",
  N: "bb1@2 bb1 bb1@3 bb1 a1", O: "g1@3 d2@3 g1@2", P: "c2@3 g2@3 c2 b1", Q: "bb1@3 f2@3 f2@2", R: "bb1@3 f2@3 bb1 f2",
  S: "g1@2 g1 d2@2 g1 d2 ~", T: "c2@3 g2@3 g2 ~", U: "bb1@3 f2@2 bb2!2 ~", V: "bb1@2 f2 bb1@3 f2 bb1",
  W: "g1@2 d2 g2@3 d2 g2", X: "c2@2 c2@2 g2@2 c2@4 c2!2 g2@2 c2@2", Y: "bb1!2 f2 bb1!2 bb2 f2 bb1",
  Z: "bb1@2 f2 bb1@2 bb1 f2 bb1", AA: "g1!2 d2 g2@2 g2 d2 g2", AB: "c2!2 g2 c2@2 c2 g2 c2",
  AC: "bb1@2 bb1!2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 bb1@2", AD: "bb1!8", AE: "g1!8", AF: "c2!8",
  AG: "bb1!3 f2 bb1!2 f2 bb1", AH: "g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 g1@2 c2!2", AI: "c2!7 d2", AJ: "d1/3",
  AK: "f2!3 eb2!3 f2 d2!3 f2 d2 eb2 d2 f2 gb2", AL: "d2!3 a2!3 f2!3 g2!6 d2",
  AM: "[d1@2 d2 a2 g2@2 eb2@4 d1@2 a2@2 f2@8 f2@2 g2@3 g2 d2@2 c2@2]/2",
  AN: "[d2@2 a2@4 g2@4 d2@4 a2@4 f2@4 f2@2 g2@2 c3@2 d3@2 c3 d3]/2",
  AO: "[d1@2 g2 eb2@2 bb2 a2 f2@2 d1 f2 g2@2 a1 c2 d2]/2",
  AP: "[d1@4 g2@2 eb2@4 bb2@2 a2@2 f2@4 d2@2 f2@2 g2@2 g2@4 f3 [f3,g3] d3@2]/2", AQ: "[d1@2 g2 eb2@3 ~ f2@3 ~ g2@5]/2",
  AR: "[~ d1@16 f3@6 ~ f3@6 f3@4 eb3@4 ab3@2 f3@4 g3@6 ~ g3@6 g3@2 g3@4 f3@4 d2@4 ~ a3@2 f3@6]/5", AS: "f3@2 f3@3 f3@3",
  AT: "[~ f3@4 d2@4 a3@4 f3@8 bb2@23 ~@4]/3",
})).s("gm_electric_bass_pick").gain(0.29)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@86
  [g3 a3 c4 d4 g3 a3 c4 d4 g3 a3 c4 d4 g3 a3 c4 d4]!8
  [g3 a3 c4 d4 g3 a3 c3 d3 g3 a3 c4 d4 g3 a3 c3 d3]!7
  [g3 a3 c4 d4 g3 a3 c3 d3 g3 a3 g3 a3 ~@4]
  ~@51
>`).s("gm_electric_guitar_muted").gain(0.46)

stack(
  distortion_guitar, distortion_guitar_2, distortion_guitar_soft, distortion_guitar_3, electric_guitar_clean,
  electric_guitar_clean_2, bass, electric_guitar_muted
)

More by Tool