Strudelify

Heathaze

Genesis

KeyB majorTempo104 bpm
0:00/0:00
// Heathaze — Genesis
// 104 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 1 "Keyboards 1 (Left)" synth strings 1 (copy of ch 5 "Bass Guitar" electric bass finger); ch 7 "Keyboards 1 (Right)" synth strings 1 (copy of ch 5 "Bass Guitar" electric bass finger)
// note: Full arrangement: all 131 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 finger · "Bass Guitar"
const bass = note(`<
  ~@13 A B C D E@2 D F G@2 H I J@2 K@2 L@2 M@2 N O P@2 Q R@2 S@4 T U V W X@4 Y@2 Z@2 A B C D E@2 D F G@2 H I M@2 L@4 M@2
  N O P@2 Q R@2 S@4 T U V W X@4 AA AB AC AD S@4 T U V W X@4 AA AB AC AD S@4 T U V W X@4 Y@2 Z@2
>`.pickRestart({
  A: "b2", B: "e3@3 e3", C: "g#2", D: "f#2", E: "b1/2", F: "b1", G: "e2/2", H: "b1@7 d2", I: "e2",
  J: "[d2@5 d3@2 d2@3 d3 e3 d3@4]/2", K: "[d2@5 d3@2 d2@3 e3 d3@2 a3 g3@2]/2", L: "[d2@5 d3@2 d2@4 d3 d3@2 g2 a2]/2",
  M: "[d2@5 d3@2 d2@4 d3 d3@4]/2", N: "c2@5 g2 c3 b2", O: "a#2@2 a#1 a#1@2 a1 a#1 c2",
  P: "[f2@3 g2 ~ f#2 ~ a#1@2 a#1 f2 a#2@2 a2 a#2 a#1]/2", Q: "c2", R: "[b1@7 f#2@2 f#2 g#2 f#2 a#2 g#2 f#2 c#2]/2",
  S: "[d#2@7 b1@3 b1 b2@2 b1@2 a#1@8 c#2@2 c#3 d#3 c#3 f3 d#3 c#3 g#2]/4", T: "b1 b2", U: "d#2 d#3", V: "a#1 a#2",
  W: "g#2@8 d#2@2 g#2 a#2 g#2@4", X: "[d#2@7 b1@3 b1 b2@2 b1@2 a#1@8 c#2@2 c#2 d#2 c#2 f#2 d#2 c#2@2]/4",
  Y: "[a#2@7 g#2@3 c#3 f3@2 c#3 g#2@2]/2", Z: "[a#2@2 d#3 f#3@4 g#2@6 c#3 g#2@2]/2", AA: "b1@3 f#1 b1@4",
  AB: "d#2@3 a#1 d#2!2 f2 d#2", AC: "f3 f#3 ~ a#2, a#2@3 ~, ~ f3", AD: "g#2@3 d#2 g#2 a#2 g#2@2",
})).s("gm_electric_bass_finger").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  ~@23 A ~ B@15 C@3 D B@7 C@5 B@7 ~ B ~ B@20 ~ B@7 ~ B@4 C@3 B C@3 B C@2 ~@2 C@3 B C@3 D B@7 C@5
>`.pickRestart({
  A: "~ x", B: "x", C: "x ~@2 x ~@4", D: "~@3 x ~@4",
})).gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@25 A@14 B A@10 C A@12 D A E A F A@14 G A@3 H A@3 I A@3 J A@7 K A@3 G A@2 C ~ A@3 L A@10 C A@5
>`.pickRestart({
  A: "~ x", B: "~@10 x!3 ~ x!2", C: "~@7 x", D: "~@2 x ~@2 x!2 ~", E: "~@6 x!2", F: "~@3 x", G: "~@4 x ~@8 x!2 ~",
  H: "~@12 x ~ x!2", I: "~@3 x!2 ~@3", J: "~@5 x!3", K: "~@4 x ~@7 x ~ x!2", L: "~@4 x!2 ~@2",
})).gain(0.64)

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

// drums · open hat
const open_hat = s("oh").struct("<~@51 x!5 ~@70 x!5>").gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@24 [~@3 x ~@2 x ~] ~@61 [~ x ~@6] ~@22 [~@3 x!2 ~@3] [~@6 x!3 ~@7] ~@20>")
  .gain(0.64)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@23 A@2 B@9 C D@4 A D@4 B@6 A ~@5 B@4 C B C ~ B ~ B D@9 E F D@4 A D@3 ~ D@3 A D@2 G ~ D@7 A D@3 A D@2 ~@2 D@3 A D@4
  B@6 A ~@5
>`.pickRestart({
  A: "x", B: "x!2", C: "x ~ x!3 ~ x ~ x ~@7", D: "x!4", E: "x ~ x!3 ~ x ~ x ~@3 x ~@3", F: "x!5 ~ x ~", G: "x!3 ~",
})).gain(0.64)

// drums · splash
const splash = s("cr").struct(`<
  ~@25 A@14 ~ A@10 ~ A@12 ~ A ~ A ~ A@14 ~ B A C ~ B A@2 ~ B A@2 ~ B A@3 B A@2 ~ B A@2 ~ B A ~ D B A@2 E A@10 ~ A@5
>`.pickRestart({
  A: "~ x", B: "x!2", C: "~@4 x ~@2 x", D: "x", E: "~@2 x ~@4 x",
})).gain(0.64)

stack(bass, kick, snare, low_tom, mid_tom, open_hat, high_tom, ride_bell, splash)

More by Genesis