Strudelify

I Alone

Live

KeyG majorTempo98 bpm
0:00/0:00
// I Alone — Live
// 98 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 83 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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
const bass = note(`<
  ~ A@2 B C D@2 E@2 F@2 G H I J K@2 L M N O P Q R S T U A@2 B V E@2 W J K@2 L M N O P Q R S T U N O P X Y@3 Z AA@4 AB AC
  AD AE N O P Q R S T U N O P X N O P AF@4 ~
>`.pickRestart({
  A: "[g1@6 d2@8 c2@16 ~ b1, ~@15 a1]/2", B: "g2@3 d2@4 c2", C: "c2 ~ c2!2 c1@2 c3@4 g2@2 c3@4",
  D: "[g1@6 d2@8 c2@5 ~ c2@3 b1 c2 b1 c2@4 f#1@2]/2", E: "[g1@6 d2@8 c2@13 ~ c2@2 e1 f#1]/2",
  F: "[g1@6 d2@8 c2@8 c3 d3 c3@4 g2 c2@3]/2", G: "g1@3 d2@4 c2", H: "c1@3 c1@3 c3@8 e1 f#1", I: "g1@3 d2@4 c#2",
  J: "~@4 c3@3 b2 c3 b2 c3@2 c1@2 f#1@2, c2@3 ~@5", K: "[g1@6 d2@8 ~@14 c2@3 ~, ~@14 c2@13 ~@5, ~@18 c3@13 ~]/2",
  L: "b1@7 ~ b1@7 ~", M: "b1@7 ~ b1@4 g1@4", N: "e1 ~ e1!2 e1@2 b1@4 g1@2 g2 g2@2 g2",
  O: "e1 ~ e1!2 e1@2 b1@4 g1@2 ~ g1 ~ g1", P: "e1@2 e1!2 e1@2 b1@4 g1@2 ~ g1@3",
  Q: "a1 ~ a1!4 b1!3 c2 c#2@2 d2!2 d#2 e2", R: "e1 ~ e1!2 e1@2 b1@4 g1@4 g1 ~", S: "e1@2 e1!2 e1@2 b1@4 g1@4 g1 ~",
  T: "e1@2 e1!2 e1@2 b1@4 g1@4 g1@2", U: "a1@2 a1!4 b1!3 c2 c#2@2 d2 d#2 e2@2", V: "c2@3 ~ c2@3 b1 c2 b1 c2@4 f#1@2",
  W: "g1@3 d2@4 c#2, f#1 ~@15", X: "a1!6 b1!3 c2 c#2@2 d2!2 d#2 e2", Y: "a1 b1!4 a1 b1@2 ~ b1 b1@2 b1 a1 ~ a1",
  Z: "a1 b1!4 a1 b1@2 ~ b1!2 ~ b1 a1 f#1@2", AA: "a1 b1!4 a1 b1@2 a1 b1!2 ~ b1 a1@2 a1",
  AB: "a1 b1!4 a1 b1@2 b1 b1@3 b1!3 ~", AC: "a1 b1!5 b1@3 b1@2 a1 b1@2 b1 ~", AD: "a1 b1!5 b1@2 a1 b1@2 b1!3 b1@2",
  AE: "a1 b1!4 b1@3 b1@4 g1@4", AF: "[e1 ~ e1!2 e1@2 b1@4 g1@54]/4",
})).s("gm_electric_bass_finger").gain(0.49)

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

// drums · rim
const rim = s("rim").struct("<~@9 A B A B A B A B A C ~@8 A B A B A B A B A B A C ~@44>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x!2 ~@2", C: "~ x ~@2",
})).gain(0.56)

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

// drums · low tom
const low_tom = s("lt").struct("<~@38 [~@7 x] ~@23 [~@7 x] ~@20>").gain(0.64)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A ~@2 B C B@2 ~@2 D ~ D ~ D ~ D E C ~@11 D ~ D ~ D ~ D E D ~@44>".pickRestart({
  A: "~ x", B: "~@3 x ~@3 x", C: "~ x ~@6", D: "~ x ~ x ~ x ~@2", E: "~ x ~ x ~ x ~ x",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@38 [~@9 x!2 ~@5] ~@19 [~@9 x ~@6] ~@3 [~@5 x ~@2] ~@20>").gain(0.64)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~@21 A ~ B C A ~@15 A ~ B C A ~@3 A ~@15 A ~ B C A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@3 x!3 ~@2", C: "x!2 ~@3 x ~ x",
})).gain(0.24)

// drums · ride bell
const ride_bell = s("rd").struct("<~@51 [x!8]!3 [x!5 ~ x!2] [~ x!3 ~ x!3] [x!8]!3 [~ x!3 ~ x!3] [x!8]!2 ~@21>")
  .gain(0.56)

// drums · splash
const splash = s("cr").struct(`<
  ~@19 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 B ~@3 B ~@2 C ~@4
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "~@5 x ~@2",
})).gain(0.72)

stack(bass, kick, rim, snare, low_tom, hihat, hihat_soft, mid_tom, open_hat, open_hat_soft, ride_bell, splash)

More by Live