Strudelify

Hot Water

Level 42

KeyE minorTempo111 bpm
0:00/0:00
// Hot Water — Level 42
// 111 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 7, 4/4 at bar 7) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 92 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(111/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 1 · "SLAPBASS 1"
const bass = note(`<
  ~@5 A B C B A B C B A B C B A B C B A B A B A B A ~ A B C B A B C B A B C B A B C B A B A B D E D E D E D E A B C B A
  B C B F G F G F G F G A B C B A B C B A B A B A B ~@5
>`.pickRestart({
  A: "e1 ~ e1!2 d2 e2 e1!3 ~ e1!2 d2 e2 e1!2", B: "a1 ~ a1!2 f#2 g2 a1!2 g1 ~ g1!2 f2 f#2 g1!2",
  C: "e1 ~ e1!2 d2 e2 e1!2 d3 e3 e1!2 d2 e2 e1!2", D: "b1@2 b1!2 d2@2 d2 ~@3 e3@4 e2!2, ~@4 e2@3 ~",
  E: "a1@2 a2 ~ g1@2 g2 ~@3 d2@3 c#2 [b1,c2] a1", F: "g#3 f#3 e3 d3 e2 d3 e2 d3 e2 b2 d3 e3 d2 e2 e1!2",
  G: "d3!2 b2 d3 ~ b2 ~ a2 ~ g2 e2 g1 f2 f#2 g1!2",
})).s("gm_slap_bass_1").gain(0.5)

// bass · electric bass finger · "FINGERDBAS"
const bass_2 = note("<~ A B C@2 ~@82 D E F@3>".pickRestart({
  A: "~@4 g2 g#2 a2 g2 g#2 e2 b1 g1@3 a1 b1", B: "g1 e1 g2 g#2 a2 g2 g#2 e2 b1 g1@3 a1 b1 g1 e1", C: "[e2@7 ~]/2",
  D: "e1 ~ e1!2 d2 e2 e1!3 ~ e1!2 d2 e2 e1!2", E: "g2 g#2 a2 g2 g#2 e2 b1 g1@3 a1 b1 g1 e1 g2 g#2",
  F: "[a2 g2 g#2 e2 b1 g1@3 a1 b1 g1 e1 e2@28 ~@8]/3",
})).s("gm_electric_bass_finger").gain(0.5)

// bass · synth bass 2 · "SYN BASS 2"
const bass_3 = note(`<
  ~@5 A B C B A B C B A B C B A B C B A B A B A B A ~ A B C B A B C B A B C B A B C B A B A B D E D F D F D F A B C B A
  B C B G B G B G B G B A B C B A B C B A B A B A B A ~@4
>`.pickRestart({
  A: "e1 ~ e1!2 d2 e2 e1!3 ~ e1!2 d2 e2 e1!2", B: "a1 ~ a1!2 f#2 g2 a1!2 g1 ~ g1!2 f2 f#2 g1!2",
  C: "e1 ~ e1!2 d2 e2 e1!2 d3 e3 e1!2 d2 e2 e1!2", D: "b1@3 ~ d2@3 ~ e2@7 ~", E: "a1@3 ~ g1@3 ~@3 d2@4 [c2,c#2] b1",
  F: "a1@3 ~ g1@3 ~@3 d2@4 [c2,c#2] [a#1,b1]", // C#maj7 Bmaj7
  G: "e1 ~ e1!2 [d2,d3] ~ [e1,d2,d3] e1 [d2,d3]@2 d2 [e1,e2,e3] d2 e2 e1!2, ~@8 e1 ~@7", // D E7 D E
})).s("gm_synth_bass_2").gain(0.64)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@13 A ~ A ~ A ~ A ~ B C B C B C B ~@9 A ~ A ~ A ~ A ~ B C B C ~@24 A ~ A ~ A ~ A ~ B C B C B C B ~@4
>`.pickRestart({
  A: "~@4 [e4,f#4,d5] g#4 [e4,g#4]!2 [d4,f#4,d5] ~@2 [e4,g#4,e5] ~@2 [e4,g#4,e5] ~", // D E D E
  B: "~@4 [g#4,b4,e5] ~ [f#4,a4,e5] ~ [f#4,a4,e5,a5]@2 ~ [e4,g4,e5,g5]@3 ~@2", // E F#m7 Em
  C: "~@2 [a4,e5,a5] ~@2 [a4,e5,a5] ~@2 [g4,d5,g5]!4 ~@4", // A5 G5
})).s("gm_electric_guitar_clean").gain(0.33).pan(0.3)

// chords · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note("<~ A B C@2 ~@44 D E D E D E D E ~@31 F G@3>".pickRestart({
  A: "~@4 g4 g#4 a4 g4 g#4 e4 b3 g3@3 a3 b3", B: "g3 e3 g4 g#4 a4 g4 g#4 e4 b3 g3@3 a3 b3 g3 e3", C: "[e4@7 ~]/2",
  D: "[b2,f#3,b3]@4 [d3,a3,d4]@4 [e3,b3,e4]@6 [c#3,d3,d#3,g#3,a3,a#3] [c3,g3]", // B5 D5 E5 C5
  E: "[a2,e3,a3]@2 ~@2 [g2,d3,g3]@2 ~@4 [d3,a3,d4]@4 [c3,c#3,g3,g#3,c4,c#4] [b2,f#3,b3]", // A5 G5 D5 C#maj7 B5
  F: "g4 g#4 a4 g4 g#4 e4 b3 g3@3 a3 b3 g3 e3 g4 g#4", G: "[a4 g4 g#4 e4 b3 g3@3 a3 b3 g3 e3 e4@28 ~@8]/3",
})).s("gm_overdriven_guitar").gain(0.36).pan(0.8)

// chords · alto sax
const alto_sax = note("<~ A B C@2 ~@16 D E D E F ~@19 D E G ~@33 D H I H J K E L M@3>".pickRestart({
  A: "~@4 g4 g#4 a4 g4 g#4 e4 b3 g3@3 a3 b3",
  B: "g3 e3 [g3,g4] [g#3,g#4] [a3,a4] [g3,g4] [g#3,g#4] [e3,e4] [b2,b3] [g2,g3]@3 [a2,a3] [b2,b3] [g2,g3] [e2,e3]", // G G# A G G# E B G …
  C: "[[e3,e4]@7 ~]/2", D: "~@13 [c#4,e4] [e4,g4] [c#4,e4]", E: "[b3,d4] [e4,g4] ~@14", F: "~@14 [d4,f#4] [e4,g4]",
  G: "~@12 [d4,f#4] [e4,g4] [d4,f#4] [e4,g4]", // D Em D Em
  H: "[b3,d4] [e4,g4] ~@2 [e4,g4] [c#4,e4] [b3,d4] [e4,g4] ~@5 [c#4,e4] [e4,g4] [c#4,e4]", // Bm Em C#m Bm Em C#m Em C#m
  I: "[b3,d4] [e4,g4] ~@11 [c#4,e4] [e4,g4] [c#4,e4]", J: "[b3,d4] [e4,g4] ~@12 [d4,f#4] [e4,g4]",
  K: "~@2 [e4,g4] [c#4,e4] [b3,d4] [c#4,e4] ~@2 [e4,g4] [c#4,e4] [b3,d4] [c#4,e4] ~ [c#4,e4] [e4,g4] [c#4,e4]", // Em C#m Bm C#m Em C#m Bm C#m …
  L: "g4 g#4 a4 g4 g#4 e4 b3 g3@3 a3 b3 g3 e3 [g3,g4] [g#3,g#4]", // G G#
  M: "[[a3,a4] [g3,g4] [g#3,g#4] [e3,e4] [b2,b3] [g2,g3]@3 [a2,a3] [b2,b3] [g2,g3] [e2,e3] [e3,e4]@28 ~@8]/3", // A G G# E B G A B …
})).s("gm_alto_sax").gain(0.36).pan(0.4)

// chords · brass section · "BRASS 1"
const brass_section = note(`<
  ~@19 A ~ B ~ B ~ B ~ B ~@11 A C ~@2 A C ~@5 D ~ D ~ D ~ D ~@11 E ~@4 F ~ A C F ~ A G ~@11
>`.pickRestart({
  A: "~@2 [g#4,b4,d5,e5] ~@5", B: "[g#4,b4,d5,e5] ~ [b4,d5]@2 ~@12, ~@2 [g#4,e5] ~@13",
  C: "~@4 [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4]@3 [b3,d4,g4] ~@4", // G
  D: "~@2 [c#4,c#5]@2 ~@2 b4@2 ~@2 [a3,d4,a4]@5 ~, ~@6 b3 ~@9", // C# D5
  E: "[d4,g4,g#4,c#5]!2 ~@4 [d4,g4,g#4,c#5]!2 ~@4 [d4,g4,g#4,c#5]!2 ~@2", F: "~@8 [d2,g#2,e3,d5,g#5,e6] ~@7",
  G: "~@4 [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4]@3 [b3,d4,g4] ~@2 [d2,g#2,e3,d5,g#5,e6] ~", // G E7
})).s("gm_brass_section").gain(0.48)

// chords · brass section · "BRASS 1" · soft notes
const brass_section_soft = note("<~@50 A ~ A ~ A ~ A ~@35>".pickRestart({
  A: "~@13 g#4 [g3,g#3,c4,c#4,g4] [f#3,b3,f#4]", // C#maj7 B5
})).s("gm_brass_section").gain(0.24)

// drums · kick
const kick = s("bd").struct("<~ A B@10 C B@23 C B@7 D B@3 E B C B F B G B F B@7 H B@7 I B@18 C>".pickRestart({
  A: "~ x!3", B: "x!4", C: "x!3 ~", D: "x ~@4 x ~@2 x ~ x ~@5", E: "x!2 ~@2", F: "x ~@4 x ~@2", G: "x ~ x ~@2 x ~@2",
  H: "x ~@5 x ~@8 x", I: "x ~@3 x ~@3 x ~@2 x ~@2 x ~",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~ A B C D E@7 F E@15 G E@7 H E@7 I E@3 J E K L M E N O P E@7 Q E@9 R E@3 R E@9 S@2 T U
>`.pickRestart({
  A: "~ x", B: "x!2", C: "x", D: "x!2 ~ x ~ x!2 ~@9", E: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@3", F: "~ x ~@2 x ~@2 x ~ x!6 ~",
  G: "x ~@2 x", H: "~ x ~@4 x ~@2 x!6 ~", I: "~ x ~@2 x ~@7 x!4", J: "~ x ~ x ~@2 x ~@2 x!2 ~@5",
  K: "~ x ~@2 x ~@2 x ~@2 x ~@5", L: "~@4 x ~@2 x ~ x ~@2 x ~@2 x", M: "~ x ~ x!2 ~@11", N: "~ x ~ x!2 ~@3 x ~@7",
  O: "~@4 x ~@2 x ~ x ~@2 x ~ x!2", P: "x ~@13 x!2", Q: "~@2 x ~ x ~@4 x!6 ~", R: "~ x ~@2 x!4 ~ x ~@2 x ~@3",
  S: "~ x ~ x", T: "~@12 x!2 ~ x", U: "~ x!2 ~@13",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~@4 [~@3 x] ~@23 [~@8 x!2 ~ x!2 ~@3] ~@27 [~@7 x!2 ~@7] ~@34 [~ x]>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B ~@2 C D@6 E C D@6 F G D@6 H C D@6 I C D@6 J G D@2 K L M L M L M L M C D@6 N O D@7 P Q R D S Q R F G D@6 T U ~@2
>`.pickRestart({
  A: "~@5 x!2 ~@3 x!5 ~", B: "~@4 x!3 ~@3 x!5 ~", C: "~ x!7", D: "x!8", E: "x!5 ~@3", F: "x!7 ~",
  G: "~@4 x!3 ~ x ~ x ~ x ~ x ~", H: "x", I: "x ~ x ~ x!2 ~ x ~@8", J: "x!2 ~ x!3 ~@2",
  K: "x ~ x ~ x ~@3 x ~@2 x ~ x ~ x", L: "~ x ~ x ~ x ~ x", M: "~ x ~ x ~@4", N: "x!2 ~@2 x ~@3",
  O: "x ~@3 x!3 ~ x ~ x ~ x ~ x ~", P: "x ~@3 x!3 ~@3 x ~ x ~ x ~", Q: "x!2 ~@2 x!4", R: "x!2 ~ x!5", S: "x!4 ~ x!3",
  T: "~ x!2 ~@3 x!5 ~@5", U: "x!3 ~@3 x!5 ~@5",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A B ~@15 C ~@7 D ~@19 E ~@5 F ~ G ~@3 H ~@5 I ~ I ~ I ~ I ~@17 J K>".pickRestart({
  A: "~@4 x!2 ~ x ~@2 x!2 ~@4", B: "~@9 x!2 ~@5", C: "~@7 x", D: "~@3 x ~ x!2 ~ x!2 ~@6", E: "~@14 x!2",
  F: "~@7 x ~@6 x ~", G: "~@4 x!4 ~@8", H: "~@10 x ~@2 x ~@2", I: "~@11 x ~@3 x", J: "x!2 ~ x ~@2 x!2 ~@8",
  K: "~@5 x!2 ~@9",
})).gain(0.4)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@4 [~@11 x ~@4] ~@23 [~@2 x ~@2 x ~@10] ~@62 [~@7 x ~@8]>").gain(0.24)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@5 A@7 B A@7 C D A@6 ~ A@7 E A@7 C D A@2 F ~@8 A@7 G H A@7 H I A@3 I A C D A@6 ~@4
>`.pickRestart({
  A: "~ x ~@3 x ~@3 x ~@3 x ~@2", B: "~ x ~@3 x ~@10", C: "~ x ~@3 x ~@3 x ~@6", D: "~ x!2 ~@6 x ~@3 x ~@2",
  E: "~ x ~@4 x ~@9", F: "~ x ~@14", G: "~ x ~@13 x", H: "~@2 x ~@6 x ~@3 x ~@2", I: "~ x ~@7 x ~@3 x ~@2",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@3 A B ~@4 C ~@6 D ~@3 E ~@6 F G ~@11 F ~@7 H ~@3 B ~@3 I@9 ~ J ~ J ~ J ~ J ~@14 F ~@2 K L
>`.pickRestart({
  A: "~@4 x ~@8 x!2 ~", B: "~ x", C: "~@6 x!2 ~@8", D: "~@10 x ~@2 x ~@2", E: "~@13 x ~@2", F: "~@14 x!2",
  G: "~@2 x!2 ~@12", H: "~@12 x!2 ~@2", I: "~ x ~@6", J: "~@7 x ~@8", K: "x ~@8 x!2 ~@5", L: "~ x ~@2",
})).gain(0.4)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@4 [~@7 x ~@8] ~@47 [~@7 x ~@8] ~@3 [~ x ~@14] ~@34 [~@3 x ~@12]>").gain(0.24)

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

// drums · ride
const ride = s("rd").struct("<~@49 A B C D A B E ~@36>".pickRestart({
  A: "~@4 x ~ x ~ x!3 ~ x ~ x ~", B: "x!5 ~@3", C: "~@4 x ~ x ~ x ~ x!3 ~ x!2", D: "x!4 ~@4",
  E: "~@4 x ~ x ~ x ~ x!3 ~@3",
})).gain(0.48)

// drums · cowbell
const cowbell = s("cb").struct("<~@29 [~@6 x!2 ~@8]!15 ~@13 [~@2 x!2 ~@6 x!2 ~@4]!16 ~@3 [~@10 x!6] ~@15>").gain(0.32)

stack(
  bass, bass_2, bass_3, electric_guitar_clean, overdriven_guitar, alto_sax, brass_section, brass_section_soft, kick,
  snare, low_tom, hihat, mid_tom, mid_tom_soft, open_hat, high_tom, high_tom_soft, crash, ride, cowbell
)

More by Level 42