Strudelify

My Own Worst Enemy

Lit

KeyE majorTempo105 bpm
0:00/0:00
// My Own Worst Enemy — Lit
// 105 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 72 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.
setcpm(105/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · distortion guitar · "guitar"
const distortion_guitar = note(`<
  A B A B C D C D E F E F E F E F G H I J K L M J C D C D E F E F E F E F G H I J K L M J C N C N O P Q R G H I J K L M
  J G H I J K L M J C D C D
>`.pickRestart({
  A: "[d#3,d#4] [e3,e4]!2 ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~", // D# E
  B: "[d#3,d#4] [e3,e4]!2 ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] ~ [b2,f#3,b3]@2 [a2,e3,a3]@4", // D# E B5 A5
  C: "~ [e3,e4] [e2,b2,e3,e4]@2 [e3,e4] ~ [e3,e4] [e2,b2] [e2,b2,e3,e4]@2 [e2,b2,e3,e4]@2 [e3,e4] ~ [e3,e4] [e2,b2], [e2,b2,d#3,d#4] ~@7", // E E5 E E5 E E5 Emaj7
  D: "~ [e3,e4] [e2,b2,e3,e4]@2 [e3,e4] ~ [e3,e4] [e2,b2] [e2,b2,e3,e4]@2 [b2,f#3,b3]@2 [a2,e3,a3]@4, [e2,b2,d#3,d#4] ~@7", // E E5 E E5 B5 A5 Emaj7
  E: "[e2,b2,e3]@2 [e2,b2,e3]@2 ~@3 [e2,b2,e3] [e2,b2,e3]@2 [e2,b2,e3]@2 ~@3 [e2,b2,e3]", // E5
  F: "[e2,b2,e3]@2 [e2,b2,e3]@2 ~@3 [e2,b2,e3] [e2,b2,e3]@2 [b2,f#3,b3]@2 [a2,e3,a3]@4", // E5 B5 A5
  G: "[e2,b2,e3,e4]!2 [e2,b2,e3]!2 [e2,b2,e3,e4]!2 [e2,b2,e3]!2, ~ b4 ~ b4", // E5
  H: "[f#2,c#3,f#3,e4]!2 [f#2,c#3,f#3]!2 [f#2,c#3,f#3,e4]!2 [f#2,c#3,f#3]!2, ~ b4 ~ b4", // F#7 F#5 F#7 F#5
  I: "[a2,e3,a3,e4]!2 [a2,e3,a3]!2 [a2,e3,a3,e4]!2 [a2,e3,a3]!2, ~ b4 ~ b4", J: "[b2,f#3,b3]!8, f#4@2 g#4 a4",
  K: "[e2,b2,e3,e4]!8", // E5
  L: "[f#2,c#3,f#3,b4] [f#2,c#3,f#3,e4] [f#2,c#3,f#3,f#4] [f#2,c#3,f#3,e4] [f#2,c#3,f#3,b4] [f#2,c#3,f#3,e4] [f#2,c#3,f#3,f#4] [f#2,c#3,f#3,e4]", // F#sus4 F#7 F#5 F#7 F#sus4 F#7 F#5 F#7
  M: "[a2,e3,a3,b4] [a2,e3,a3,e4] [a2,e3,a3,f#4] [a2,e3,a3,e4] [a2,e3,a3,b4] [a2,e3,a3,e4] [a2,e3,a3,f#4] [a2,e3,a3,e4]", // Asus2 A5 F#m7 A5 Asus2 A5 F#m7 A5
  N: "~ [e3,e4] [e2,b2,e3,e4]@2 [e3,e4] ~ [e3,e4] [e2,b2] [e2,b2,e3,e4]@2 [f#3,f#4]@2 [f#3,f#4]@4, [e2,b2,d#3,d#4] ~@7", // E E5 E E5 F# Emaj7
  O: "~ [g#3,g#4] [e2,b2,g#3,g#4]@2 [g#3,g#4] ~ [g#3,g#4] [e2,b2] [e2,b2,g#3,g#4]@2 [e2,b2,g#3,g#4]@2 [g#3,g#4] ~ [g#3,g#4] [e2,b2], [e2,b2,f#3,f#4] ~@7", // G# E G# E5 E G# E5 Esus2
  P: "[e2,b2,g#3,g#4]@2 [e2,b2,g#3,g#4]@2 [g#3,g#4] ~ [g#3,g#4] [e2,b2] [e2,b2,g#3,g#4]@2 [a3,a4]@2 [a3,a4]@4", // E G# E5 E A
  Q: "~ [b3,b4] ~ [b3,b4]!2 [c#4,c#5]!2 [e2,b2,c#4,c#5] ~ [b3,b4] ~ [b3,b4]!2 [a3,a4]!2 [e2,b2,a3,a4], [e2,b2,a#3,a#4] [e2,b2,b3,b4] ~@2 [e2,b2,c#4,c#5] [e2,b2,b3,b4] ~@2", // B C# C#m7 B A Esus4 E E5 …
  R: "~ [g#3,g#4] ~ [g#3,g#4]!2 [a3,a4]!2 [e2,b2,a3,a4] ~ [g#3,g#4]!4 [f#3,f#4]!3, [e2,b2,a3,a4] [e2,b2,g#3,g#4] ~@2 [e2,b2,a3,a4] ~@3", // G# A Esus4 G# F# Esus4 E Esus4
})).s("gm_distortion_guitar").gain(0.42).pan(0.3)

// chords · overdriven guitar · "guitar"
const overdriven_guitar = note("<~@45 A ~ A ~ B ~ C ~@20>".pickRestart({
  A: "~@5 [b2,b3] [a2,e3,a3]@2", B: "~@5 [b2,f#3,b3] e3@2", C: "~@5 [b2,f#3,b3] [a2,e3,a3]@2",
})).s("gm_overdriven_guitar").gain(0.42).pan(0.7)

// bass · electric bass pick · "bass"
const bass = note(`<
  ~@3 A B C B C B C B C B C B D E F G H E I G J B C B C B C B C B C B D E F G H E I G J B C B C B C B D E F G H E I G J
  E F G H E I G J B C B C
>`.pickRestart({
  A: "~@5 b1 a1@2", B: "e1@2 e1@2 ~@3 e1 e1@2 e1@2 ~@3 e1", C: "e1@2 e1@2 ~@3 e1 e1@2 b1@2 a1@4",
  D: "e1@2 e1@2 ~@3 e1 e1@2 b1@2 a1@2 a1@2", E: "e1!8", F: "f#1!8", G: "a1!8", H: "b1!8",
  I: "f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 f#1@2 g#1 a1 b1@2", J: "b1@2 b1@2 b1@2 b1@2 b1@2 b1@2 c#2 d#2 e2@2",
})).s("gm_electric_bass_pick").gain(0.68)

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

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

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

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

// drums · ride
const ride = s("rd").struct("<~@16 [x!8]!8 ~@12 [x!8]!8 ~@8 [x!8]!16 ~@4>").gain(0.61)

stack(distortion_guitar, overdriven_guitar, bass, kick, snare, open_hat, crash, ride)

More by Lit