Strudelify

Rain

The Cult

KeyG majorTempo125 bpm
0:00/0:00
// Rain — The Cult
// 125 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 119 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 28.
setcpm(125/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 · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A@8 B@8 C ~ D E C ~ D E C F D E C F D E G@8 ~@4 C ~ D E C ~ D E C F D E C F D E G@16 H@2 I@2 H@2 J@2 K@8 L M N O@2 M
  N P B@8 Q@7 R@2 ~
>`.pickRestart({
  A: "[~@13 d3@3, d3@4 d3@4 c3@4 g2@3 ~, ~ a3@8 a3@7 ~ e3@8 b2@6 ~, ~@4 d4@15 ~ c4@15 ~ g3@15 ~@13]/4",
  B: "[d4!2 f4@2 e4 d4@2 d4@2 d4 f4@2 e4 c4@2 g4@2 g4 f4@2 e4 c4@2 c4@2 c4 d4@2 e4 d4 c4 d4@2 d4 f4@2 e4 d4@2 d4@2 d4 f4@2 e4 c4@2 g4@2 g4 f4@2 e4 c4@2 c4@2 c4 d4@2 e4 d4 c4 d4]/8",
  C: "~ [d3,a3,a4]@12 ~@3, [d2,a2]@3 ~", D: "~ [g3,c4,e4]@12 ~@3, [c3,e3]@3 ~",
  E: "~ [d3,g3,b3,g4]@12 ~@3, [g2,b2]@3 ~", F: "~ [f3,a3,c4,f4]@12 ~@3, [f2,c3]@3 ~",
  G: "[d4@2 d4@2 f4@4 e4@2 d4@4 d4@4 d4@2 f4@4 e4@2 c4@4 g4@4 g4@2 f4@4 e4@2 c4@4 c4@4 c4@2 d4@4 e4@2 d4@2 c4@2 d4@4 d4@2 f4@4 e4@2 d4@4 d4@4 d4@2 f4@4 e4@2 c4@4 ~ g4@3 g4@2 f4@4 e4@2 c4@4 c4@4 c4@2 d4@4 e4@2 d4@2 c4@2 d4@2]/8",
  H: "[~@3 c4@3 b3@3 a3@3 g3 a3 b3@2, d4@3 ~@13, ~ [a4,d5]@19 ~@12]/2", // D5
  I: "[~@8 c4 b3 a3 a3@5, c4 ~, ~ [g4,c5]@19 ~@12]/2", J: "[~@8 d4 c4 b3 b3@5, c4 ~, ~ [g4,c5]@19 ~@12]/2",
  K: "[d4,a4,d5]!4 ~@2 [d4,a4,d5]!4 ~@2 [d4,a4,d5]!3 ~", L: "f4 e4 d4 f4 e4 d4 d4@2", M: "f4 e4 d4 d4@3 e4 f4",
  N: "g4@3 f4@2 e4 d4@2", O: "[f4 e4 d4 d4@3 c4 d4@2 d4 f4@2 e4 d4 d4@2]/2", P: "f4 e4 d4 d4@3 c4 d4",
  Q: "[d4!2 f4@2 e4 d4@2 d4@2 d4 f4@2 e4 c4@2 g4@2 g4 f4@2 e4 c4@2 c4@2 c4 d4@2 e4 d4 c4 d4@2 d4 f4@2 e4 d4@2 d4@2 d4 f4@2 e4 c4@2 g4@2 g4 f4@2 e4 c4@2 c4]/7",
  R: "[~@2 c4@2 d4@4 e4@3 d4@3 c4@8 d4@3 ~@7]/2",
})).s("gm_electric_guitar_clean").gain(0.56)

// chords · alto sax
const alto_sax = note(`<
  ~@17 A B ~@2 C D ~@2 E@3 F G H@2 I J K J ~ L K M@2 ~@4 N O P ~ Q@3 ~ E@3 F G H@2 I J K J ~ L K M@2 J K J ~ L K M@2 ~@3
  R S@2 T ~ U@2 V ~ U@2 V W@3 ~@5 M@2 X@4 M@2 ~ Y@3 ~ Y@3 ~@3
>`.pickRestart({
  A: "~@2 a3!4 ~ a3", B: "~@6 a3@2 a3@2 a3@2 a3 ~ a3@2", C: "~@2 a3!3 b3 ~ a3", D: "~ c4 ~ a3 ~ b3 ~ a3",
  E: "[~@4 [a3,f4] [a3,f4]@2 [g3,e4]@2 [f3,d4]@3 ~ [a3,f4]@2 [g3,e4]@3 ~@3 [e4,a4]@2 [d4,g4]]/3", F: "[c4,f4] ~@3",
  G: "~@2 [f4,a4]@2 [f4,a4] [f4,a4]@2 [d4,g4]", H: "[[c4,f4]@4 ~@2 [e4,a4] [d4,g4]@6 [c4,f4] [a3,d4] [d4,a4]]/2",
  I: "[c4,g4]@7 ~@9", J: "~@2 [f4,a4]@2 [d4,g4]@2 [c4,f4] [d4,g4]", K: "[a3,d4] ~@7",
  L: "~@2 [f4,a4] [e4,a4] [d4,g4]@2 [c4,f4] [d4,g4]", M: "[~@2 [f4,a4]@2 [d4,g4]@2 [c4,f4] [d4,g4]@9]/2",
  N: "~@2 a4@2 a4!2 ~ a4", O: "~@3 a4!5", P: "d4 ~@15", Q: "[~@2 a4!4 ~ a4@2 d4@2 e4@3 f4 e4@3 ~@6]/3", R: "~@7 c4",
  S: "d4/2", T: "c4@3 ~@5", U: "[d4,a4]/2", V: "[c4,g4]@3 ~@5", W: "[~@2 [e4,a4]@2 [d4,g4]@2 [c4,f4] [d4,a4]@11 ~@6]/3",
  X: "[~@4 [f4,a4]@4 [d4,g4]@4 [c4,f4]@2 [d4,g4]@19 ~@3 [f4,a4]@2 [f4,a4]@2 [d4,g4]@4 [c4,f4]@2 [d4,g4]@4 [a3,f4]@10 ~@4]/4", // F G5 F5 G5 F G5 F5 G5 …
  Y: "[[d4,a4]@13 [c4,g4] [d4,a4] [c4,g4]@3 ~@6]/3", // D5 C5 D5 C5
})).s("gm_alto_sax").gain(0.64)

// bass · electric bass finger
const bass = note(`<
  ~ A B C D A B C D E@2 F G E@2 F G H E F I E@2 F I E J F I E J F I E@2 F G E@2 F G K@3 L H E F I E@2 F I E J F I E J F
  I E@2 F G E@2 F G E@2 F G E@2 F M N O P Q N O P Q N O P Q N O P Q E@2 F G E@2 F M E@2 F G E@2 F G E@2 F G E@2 F R@2 ~
>`.pickRestart({
  A: "d3", B: "a2", C: "c3", D: "g2", E: "d2!8", F: "c2!8", G: "g1!8", H: "d2!7 c2", I: "g2!8", J: "f2!8",
  K: "d2@2 d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d#2@2", L: "d2@2 d2 ~ d2 ~ d2 ~ f2 ~ f2 ~ g2 ~ g2 ~", M: "g2!12 a1@2 c2@2",
  N: "d2@3 d2 d2@2 d2@4 ~@2 a1@2 c2@2", O: "d2@3 d2 d2@2 d2@4 ~@2 a1@2 b1@2", P: "c2@3 c2 c2@2 c2@4 ~@2 c2@4",
  Q: "g2@3 g2 g2@2 g2@4 ~@2 a1@2 c2@2", R: "[g2@4 g2@7 d2@2 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@9 A@8 B@2 C D B@2 C D E F G H E F G H A@8 B@3 I J@2 K L J@2 K L E F G H E F G H A@16 ~@16 M N O P@2 N O Q A@8 R@7
  S@2 ~
>`.pickRestart({
  A: "[d4!2 f4@2 e4 d4@2 d4@2 d4 f4@2 e4 c4@2 g4@2 g4 f4@2 e4 c4@2 c4@2 c4 d4@2 e4 d4 c4 d4@2 d4 f4@2 e4 d4@2 d4@2 d4 f4@2 e4 c4@2 g4@2 g4 f4@2 e4 c4@2 c4@2 c4 d4@2 e4 d4 c4 d4]/8",
  B: "[d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d#2,a2]@2", // D5 D#dim
  C: "[c2,g2] ~ [c2,g2] ~ [c2,g2] ~ [c2,g2] ~ [c2,g2] ~ [c2,g2] ~ [c2,g2] ~ [c2,g2]@2", // C5
  D: "[g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3]@2", E: "[d2,a2]", F: "[f2,c3]",
  G: "[c2,g2]", H: "[g2,d3]", I: "[d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [d2,a2] ~ [f2,c3]@4 [g2,d3]@4",
  J: "[d2,a2] ~ [d2,a2] ~ [d2,a2]@4 [d2,a2]@4 [d2,a2]@4", K: "[c2,g2] ~ [c2,g2] ~ [c2,g2]@4 [c2,g2]@4 [c2,g2]@4",
  L: "[g2,d3] ~ [g2,d3] ~ [g2,d3]@4 [g2,d3]@4 [g2,d3]@4", M: "f4 e4 d4 f4 e4 d4 d4@2", N: "f4 e4 d4 d4@3 e4 f4",
  O: "g4@3 f4@2 e4 d4@2", P: "[f4 e4 d4 d4@3 c4 d4@2 d4 f4@2 e4 d4 d4@2]/2", Q: "f4 e4 d4 d4@3 c4 d4",
  R: "[d4!2 f4@2 e4 d4@2 d4@2 d4 f4@2 e4 c4@2 g4@2 g4 f4@2 e4 c4@2 c4@2 c4 d4@2 e4 d4 c4 d4@2 d4 f4@2 e4 d4@2 d4@2 d4 f4@2 e4 c4@2 g4@2 g4 f4@2 e4 c4@2 c4]/7",
  S: "[~@2 c4@2 d4@4 e4@3 d4@3 c4@8 d4@4 ~@6]/2",
})).s("gm_distortion_guitar").gain(0.48)

// other · overdriven guitar
const overdriven_guitar = note("<~@5 A@4 B ~@109>".pickRestart({
  A: "[~@6 d5@21 ~ d5@16 ~@2 c5@17 ~]/4", B: "d5",
})).s("gm_overdriven_guitar").gain(0.63)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!8 [x!2]!68 [x!4]!16 [x!2]!23 [x ~@7 x ~@2 x ~@2 x ~] ~@2>").gain(0.71)

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

// drums · hihat
const hihat = s("hh").struct("<A B@8 C@7 D C@23 D C@27 D C@7 D B@16 C@7 D C@7 D C@7 ~@3>".pickRestart({
  A: "x!4", B: "~ x ~ x ~ x ~ x", C: "x!8", D: "x!7 ~",
})).gain(0.71)

// drums · splash
const splash = s("cr").struct(`<
  ~@16 A B ~@8 C ~ B@4 A ~@7 A ~@3 D B ~@8 C ~ B@4 A ~@7 A ~@7 A ~@23 A ~@7 A ~@7 E F ~
>`.pickRestart({
  A: "~@7 x", B: "x", C: "~ x ~@2", D: "~@2 x!2", E: "x!2", F: "~@3 x ~@4",
})).gain(0.57)

stack(electric_guitar_clean, alto_sax, bass, distortion_guitar, overdriven_guitar, kick, snare, hihat, splash)

More by The Cult