Strudelify

Flood

Tool

KeyD minorTempo144 bpm
0:00/0:00
// Flood — Tool
// 144 bpm, 1/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 488 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(144/1)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 finger · "Chanceller"
const bass = note(`<
  A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D
  C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 G
  H I G H@2 J K L J K L@2 G H I G H@2 J K L J K L@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 M@8 H M@7 A B C
  A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 N@2 ~@2 O ~@5 O ~@5
  P C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 Q K L J K L@2
  G H I G H@2 J K L J K L@2 G H I G H@2 J R S T R H@2 U R S T R H@2 U R S T R H@2 U R S T R H@2 V C E D C F@2 A B C A
  B@2 D C E D C F@2 A B C A B@2 W X Y Z X AA@2 AB AC X AB AC@2 AD I AE AF M AG G AH@2 I AE AF M AG G AH@2 I AE AF M AG G
  AH@2 I AE AF M AG G AI@2 C E D C F@2 A B C A B@2 D C E D C F@2 A B C A B@2 AJ ~ AK AL ~ U AM AK AL ~ AK AN AO@2 ~ AK
  AL ~ U AM ~@6 AL I L H AP@2
>`.pickRestart({
  A: "eb2 d2", B: "a1 c2", C: "d2 a1", D: "a1 eb2", E: "c2 d2", F: "c2 a1", G: "ab1 g1", H: "d1 f1", I: "d1!2",
  J: "d1 ab1", K: "g1 d1", L: "f1 d1", M: "f1!2", N: "[g1@7 ~]/2", O: "d1 ~", P: "~ eb2", Q: "a1 ab1", R: "g1 ~",
  S: "f1 g1", T: "~ ab1", U: "g1 ab1", V: "f1 eb2", W: "a1 ab2", X: "g2 d2", Y: "f2 g2", Z: "d2 ab2", AA: "f2 d2",
  AB: "ab2 g2", AC: "d2 f2", AD: "d2 d1", AE: "g1!2", AF: "g1 f1", AG: "ab1!2", AH: "[ab1@8 f1@13 ~@3 d1@8]/2",
  AI: "[ab1@8 f1@13 ~@3 eb2@8]/2", AJ: "a1 f1", AK: "f1 ~", AL: "~ f1", AM: "g1@13 ~@3", AN: "~ g1",
  AO: "[ab1@8 g1@13 ~@3 f1@8]/2", AP: "[d1@8 d1@13 ~@11]/2",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · distortion guitar · "Jones"
const distortion_guitar = note(`<
  ~@13 A@8 ~@5 B@6 C@5 D E D F G D F@2 H G E H G I@2 D F G D F@2 H G E H G I@2 ~@50 I@2 J K@2 J L M N O P N O Q R J K@2
  J L M N O P N O Q R D F G D F@2 H G E H G I@2 D F G D F@2 H G E H G I@2 S T S T S T S T L T S T S T S T D F G D F@2 H
  G E H G I@2 D F G D F@2 H G E H G I@2 ~@26 U@4 V ~@5 V ~@4 W X@7 Y@7 Z AA AB Z AC@2 AD AE AF AG AH@2 AI@6 AJ AK@6 AL@6
  AJ AM@5 AN AO O P N O Q R J K@2 J L M N O P N O Q R J K@2 J L M N AP AQ AR AP L@2 AS AP AQ AR AP L@2 AS AP AQ AR AP
  L@2 AS AP AQ AR AP L@2 AT@6 AU AV@6 AT@6 AU AV@6 AW@6 AX AV@6 AY@2 AZ BA@2 BB BC BD@3 AZ BA@2 BB BC BD@3 AZ BA@2 BB BC
  BD@3 AZ BA@2 BB BC BE@2 ~@25 M BF BG BH BF AS AZ BG BH BF BG BI BJ@2 BF BG BH BF AS AZ BG BH BF BG BI BJ@2 BK R L BL@2
>`.pickRestart({
  A: "[a2,e3,a3,e4,a4]/8", B: "[a2,e3,a3,e4,a4]/6", C: "[~ [a2,e3,a3,e4,a4]@9]/5", D: "eb3 d3", E: "c3 d3", F: "a2 c3",
  G: "d3 a2", H: "a2 eb3", I: "c3 a2", J: "[ab2,eb3,ab3] [g2,d3,g3]",
  K: "[[d2,a2,d3]@8 [f2,c3,f3]@13 ~@3 [d2,a2,d3]@8]/2", L: "[d2,a2,d3] [f2,c3,f3]", M: "~ [f2,c3,f3]",
  N: "[d2,a2,d3] [ab2,eb3,ab3]", O: "[g2,d3,g3] [d2,a2,d3]", P: "[f2,c3,f3]@13 ~@3", Q: "[f2,c3,f3] ~",
  R: "[f2,c3,f3] [d2,a2,d3]", S: "[f2,c3,f3] f2", T: "f2!4", U: "[g2,d3,g3]/4", V: "[d2,a2,d3] ~", W: "~ a2",
  X: "[c3 d3@12 d3]/7", Y: "[d4@13 ab3]/7", Z: "g3 d3", AA: "f3 g3", AB: "d3 ab3", AC: "f3 d3", AD: "ab3 g3",
  AE: "d3 f3", AF: "g3 [d3,a3]", AG: "[ab3,eb4] [g3,d4]", AH: "[d3,a3] [f3,c4]", AI: "[[d3,a3]@8 [d3,a3,d4]@85 ~@3]/6",
  AJ: "d3!2", AK: "[[eb3,bb3,eb4]@85 ~@3 eb3@8]/6", AL: "[eb3@8 [d3,a3,d4]@85 ~@3]/6", AM: "[[eb3,bb3,eb4]@77 ~@3]/5",
  AN: "[g2,d3]@2 [g2,d3]!2", AO: "[g2,d3]!2 [ab2,eb3,ab3]@2", AP: "[g2,d3,g3] ~", AQ: "[f2,c3,f3] [g2,d3,g3]",
  AR: "~ [ab2,eb3,ab3]", AS: "[g2,d3,g3] [ab2,eb3,ab3]", AT: "[[f2,c3,f3]@8 [g2,d3,g3]@85 ~@3]/6", AU: "[g2,d3,g3]!2",
  AV: "[[f2,c3,f3]@85 ~@3 [f2,c3,f3]@8]/6", AW: "[[f2,c3,f3]@8 [ab2,eb3,ab3]@85 ~@3]/6", AX: "[ab2,eb3,ab3]!2",
  AY: "[[f2,c3,f3]@8 [d2,a2,d3]@13 ~@11]/2", AZ: "[g2,d3,g3]@13 ~@3", BA: "[~@8 [f2,c3,f3]@13 ~@11]/2",
  BB: "[ab2,eb3,ab3]@13 ~@3", BC: "~ [g2,d3,g3]", BD: "[[ab2,eb3,ab3]@8 [f2,c3,f3]@13 ~@3 [d2,a2,d3]@13 ~@11]/3",
  BE: "[[ab2,eb3,ab3]@8 [f2,c3,f3]@13 ~@11]/2", BF: "[d2,a2]!4", BG: "[f2,c3,f3]@2 [d2,a2]!2",
  BH: "[d2,a2]!2 [f2,c3,f3]@2", BI: "[d2,a2]!2 [g2,d3,g3]@2", BJ: "[[ab2,eb3,ab3]@8 [g2,d3,g3]@13 ~@3 [f2,c3,f3]@8]/2",
  BK: "[d2,a2,d3]!2", BL: "[[d2,a2,d3]@8 [d2,a2,d3]@13 ~@11]/2",
})).s("gm_distortion_guitar").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  ~@13 A ~@12 A ~@5 B ~@4 B A@3 B A@3 B@2 ~ C B@2 ~ A@2 B A@3 B@2 ~ C B@2 ~ A ~@2 A ~@2 B ~@2 B ~@3 A ~@2 A ~@2 B ~@2 B
  ~@3 A ~@2 A ~@2 B ~@2 B ~@3 A ~@2 A ~@2 B ~@2 B ~@3 C A B C A@2 C@2 ~ C@2 B@2 C A B C A@2 C@2 ~ C@2 B@2 A@2 B A@3 B@2
  ~ C B@2 ~ A@2 B A@3 B@2 ~ C B@2 ~ C@16 A@2 B A@3 B@2 ~ C B@2 ~ A@2 B A@3 B@2 ~ C B ~@2 A ~@2 A ~@2 B ~@2 B ~@3 A ~@2 A
  ~@2 B ~@2 B ~@3 A ~@3 A ~@5 A ~@4 C B ~@2 B ~@3 A ~@2 A ~@2 B ~@2 B ~@3 A ~@2 A ~@2 B ~@2 B ~@3 A ~@2 A ~@2 B ~@2 B
  ~@3 A ~@2 A ~@2 B C ~ C@2 B@2 C A B C A@2 C@2 ~ C@2 B@2 C A B C A@2 C A C@2 A@3 C A C@2 A@3 C A C@2 A@3 C A C@2 A@3 C
  ~@6 A ~@5 B ~@6 A ~@5 B ~@6 A ~@5 B@4 ~@2 B A C B@3 ~@2 B A C B@3 ~@2 B A C B@3 ~@2 B A D E@45 ~@7 C B A C ~
>`.pickRestart({
  A: "x", B: "~ x", C: "x!2", D: "x ~ x!2", E: "x!4",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct(`<
  ~@37 A B ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B
  ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A
  ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A ~@2
  B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@3 ~@13 B ~ A ~ A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A
  ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@6 A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@2 ~@5 B@2 ~@5 B@2 ~@5 B@2 ~@5
  B@3 ~@5 A@2 ~@4 B@2 ~@5 A@2 ~@4 B@2 ~@5 A@2 ~@4 C D ~ A ~@2 A ~ B ~@2 A ~@2 A ~ B ~@2 A ~@2 A ~ B ~@2 A ~@2 A ~ B ~@2
  A ~@2 A@2 ~ B ~@2 B@2 ~@2 A ~@2 A@2 ~ B ~@2 B@3 ~ A B ~ A@3 B ~ A B@3 ~ A B ~ A@2 ~@6 B ~ A B@2 ~
>`.pickRestart({
  A: "x", B: "~ x", C: "~@2 x!2", D: "x!2 ~@2",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@210 A ~@93 B C ~@59 D ~@6 E ~@5 D ~@6 E ~@5 D ~@96>".pickRestart({
  A: "x!2", B: "~ x", C: "x", D: "~@2 x!2", E: "x!2 ~@2",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  A@13 ~@13 B@11 ~@28 B@52 ~@94 B@26 ~@16 C B@48 A ~@127 C ~ A C ~ A ~ A C ~ A C ~ C ~ A C ~ A ~ A C ~ A C ~@33
>`.pickRestart({
  A: "x", B: "x!2", C: "~ x",
})).gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@209 A ~@93 A B ~@60 C ~@5 D ~@6 C ~@5 D ~@6 C ~@96>".pickRestart({
  A: "~ x", B: "x", C: "~ x ~@2", D: "~@3 x",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@13 A@13 ~@13 B@26 ~@78 B@26 ~@16 B@24 A ~@126 C@2 ~@5 C@2 ~@5 C@2 ~@5 C@2 ~@45 C@2 ~@6 C@2 ~@6 C@2 ~@6 C@2 ~@58
>`.pickRestart({
  A: "x", B: "x!2", C: "~ x",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@302 [~ x] x ~@184>").gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  ~@13 A ~@12 A ~@5 B ~@6 A ~@77 A B ~ A B@3 ~ A B ~ A@3 B ~ A B@3 ~ A B ~ A@2 ~@26 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~@51 A ~@41 B ~@25 B ~ A B ~ A@3 B ~ A B@3 ~ A B ~ A@3 B ~ A B@3 ~ B@2 ~@3 B ~ B@2 ~@3 B ~ B@2 ~@3 B ~ B@2 ~@3 B ~@6 A
  ~@5 B ~@6 A ~@5 B ~@6 A ~@5 B ~ A B ~ A ~@2 B ~ A B ~ A ~@2 B ~ A B ~ A ~@2 B ~ A B ~ A ~@28 B ~ A B ~ A@3 B ~ A B@3 ~
  A B ~ A@2 ~@6 B ~ A B@2 ~
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.72)

stack(bass, distortion_guitar, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash)

More by Tool