Strudelify

Superman's Dead

Our Lady Peace

KeyD♭ majorTempo86 bpm
0:00/0:00
// Superman's Dead — Our Lady Peace
// 86 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "guitar" distortion guitar (copy of ch 2 "guitar" overdriven guitar); ch 5 "vocals" trumpet (copy of ch 6 "vocals" trombone)
// note: Full arrangement: all 89 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(86/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 · acoustic guitar steel · "guitar"
const acoustic_guitar_steel = note(`<
  A B A B A B A B A B C D A B A E ~@2 F G F G F G F H A E A E A E A E ~@2 A E A E A E A H ~@16 I@2 J K J K ~@23
>`.pickRestart({
  A: "[bb2,f3,bb3]@4 [bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [db3,ab3,db4] [db3,ab3,db4]@2 [db3,ab3,db4]@2 ~ [bb2,f3,bb3], ~@7 [db3,ab3,db4]", // Bb5 Db5 Bb5 Db5
  B: "[ab2,eb3,ab3]@4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3]@2 [b2,gb3,b3] [b2,gb3,b3]@2 [b2,gb3,b3]@2 ~ [db3,ab3,db4], ~@7 [b2,gb3,b3]", // Ab5 B5 Db5 B5
  C: "[bb2,f3,bb3]@4 [bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [db3,ab3,db4] [db3,ab3,db4]@2 [db3,ab3,db4]@2 [db3,ab3,db4]@2", // Bb5 Db5
  D: "[eb3,bb3,eb4]@4 [eb3,bb3,eb4]@3 [eb3,bb3,eb4]@2 [b2,gb3,b3] [b2,gb3,b3]@2 [b2,gb3,b3]@2 ~ [db3,ab3,db4], ~@7 [b2,gb3,b3]", // Eb5 B5 Db5 B5
  E: "[ab2,eb3,ab3]@4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3]@2 [b2,gb3,b3] [b2,gb3,b3]@2 [b2,gb3,b3]@2 [b2,gb3,b3]@2", // Ab5 B5
  F: "[bb2,f3,bb3]@4 [bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [db3,ab3,db4] [db3,ab3,db4]@2 [db3,ab3,db4]@2 [db3,ab3,db4] [bb2,f3,bb3]", // Bb5 Db5 Bb5
  G: "[ab2,eb3,ab3]@4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3]@2 [b2,gb3,b3] [b2,gb3,b3]@2 [b2,gb3,b3]@2 [b2,gb3,b3] [db3,ab3,db4]", // Ab5 B5 Db5
  H: "[b2,gb3,b3]@4 [b2,gb3,b3]@3 [b2,gb3,b3]@2 [a2,e3,a3] [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!2", // B5 A5 Ab5
  I: "[eb3,bb3,eb4]@4 [eb3,bb3,eb4]@3 [eb3,bb3,eb4]@2 [eb3,bb3,eb4] [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]@2", // Eb5
  J: "[db3,ab3,db4]@4 [db3,ab3,db4]@2 [db3,ab3,db4]!2 [ab2,eb3,ab3]@4 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!2", // Db5 Ab5
  K: "[eb3,bb3,eb4]@4 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!2 [eb3,bb3,eb4]@4 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!2", // Eb5
})).s("gm_acoustic_guitar_steel").gain(0.51)

// chords · overdriven guitar · "guitar"
const overdriven_guitar = note(`<
  ~@11 A B C B C ~@2 D E D F D E G H ~@8 I J D E D K D E G H B L B L B M B M N O N O N O N P Q ~@5 R S R T R S R T R T R
  T R T R T R T R T U ~@2
>`.pickRestart({
  A: "~@9 [b2,gb3,b3]!3 [b2,gb3,b3]@2 [b2,gb3,b3]!2", // B5
  B: "[bb2,f3,bb3]!4 [bb2,f3,bb3]@3 [bb2,f3,bb3] [db3,ab3,db4]!4 [db3,ab3,db4]@2 [db3,ab3,db4]!2", // Bb5 Db5
  C: "[ab2,eb3,ab3]!4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3] [bb3,bb4]@8, ~@4 [bb2,f3]@3 ~", // Ab5 Bb Bb5
  D: "[bb2,f3,bb3]@4 [bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [db3,ab3,db4] [db3,ab3,db4]@2 [db3,ab3,db4]@2 ~ [bb2,f3,bb3], ~@7 [db3,ab3,db4]", // Bb5 Db5 Bb5 Db5
  E: "[ab2,eb3,ab3]@4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3]@2 [b2,gb3,b3] [b2,gb3,b3]@2 [b2,gb3,b3]@2 ~ [db3,ab3,db4], ~@7 [b2,gb3,b3]", // Ab5 B5 Db5 B5
  F: "[ab2,eb3,ab3]@4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3]@2 [b2,gb3,b3,f4,f5] ~ [f4,f5] ~ [f4,f5] ~ [db3,ab3,db4], ~@5 [b2,gb3,b3,f4,f5]!3", // Ab5 B F Db5 B
  G: "[bb2,f3,bb3]@4 [bb2,f3,bb3]@3 [bb2,f3,bb3]@2 [db3,ab3,db4] [db3,ab3,db4]@2 [db3,ab3,db4]@2 ~ [c3,g3,c4], ~@7 [db3,ab3,db4]", // Bb5 Db5 C5 Db5
  H: "[b2,gb3,b3]@4 [b2,gb3,b3]@3 [b2,gb3,b3]@2 [a2,e3,a3] [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]@2", // B5 A5 Ab5
  I: "[bb2,f3,bb3]!2 ~ [bb2,f3,bb3]!2 ~ [bb2,f3,bb3]!2 ~ [db3,ab3,db4]!2 ~ [db3,ab3,db4]!2 ~ [db3,ab3,db4]", // Bb5 Db5
  J: "[ab2,eb3,ab3] ~ [ab2,eb3,ab3]!2 ~ [ab2,eb3,ab3] [b2,gb3,b3] [g2,ab2,a2,bb2,db3,d3,eb3,e3,f3,ab3,a3,bb3] [f2,gb2,gb3,g3] ~@7", // Ab5 B5
  K: "[ab2,eb3,ab3]@4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3]@2 [b2,b3,f4,f5] ~ [f4,f5] ~ [f4,f5] ~ [db3,ab3,db4], ~@5 [b2,b3,f4,f5]!3", // Ab5 Bdim F Db5 Bdim
  L: "[ab2,eb3,ab3]!4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3] [b2,gb3,b3]!4 [b2,gb3,b3]@2 [b2,gb3,b3]!2", // Ab5 B5
  M: "[ab2,eb3,ab3]!4 [ab2,eb3,ab3]@3 [ab2,eb3,ab3] [b2,gb3,b3]!4 [b2,gb3,b3]@2 [b2,gb3,b3]!2, ~ [f4,bb4], ~@2 a4 ~", // Ab5 B5 Bb5
  N: "[db3,ab3,db4]!4 [db3,ab3,db4]@3 [db3,ab3,db4] [c3,g3,c4]!4 [c3,g3,c4]@2 [c3,g3,c4]!2", // Db5 C5
  O: "[b2,gb3,b3]!4 [b2,gb3,b3]@3 [b2,gb3,b3] [bb2,f3,bb3]!4 [bb2,f3,bb3]@2 [bb2,f3,bb3]!2", // B5 Bb5
  P: "[b2,gb3,b3]!4 [b2,gb3,b3]@3 [b2,gb3,b3]!5 [b2,gb3,b3]@2 [b2,gb3,b3]!2", Q: "[b2,e3,gb3,b3] ~@7",
  R: "[db3,ab3,db4]@4 [db3,ab3,db4]@2 [db3,ab3,db4]!2 [ab2,eb3,ab3]@4 [ab2,eb3,ab3]@2 [ab2,eb3,ab3]!2", // Db5 Ab5
  S: "[eb3,bb3,eb4]@4 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!2 [eb3,bb3,eb4]@4 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!2", // Eb5
  T: "[eb3,bb3,eb4]@4 [eb3,bb3,eb4]@2 [eb3,bb3,eb4]!2 [bb2,f3,bb3]@4 [bb2,f3,bb3]@2 [bb2,f3,bb3]!2", // Eb5 Bb5
  U: "[db3,ab3,db4]@4 [db3,ab3,db4]@2 [db3,ab3,db4]!2 ~@8", // Db5
})).s("gm_overdriven_guitar").gain(0.51).pan(0.3)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@7 A B C B D B C B C E F B C B C B C B C B C B C B C B C E F B C B C B C B C ~@8 G H G H G H G I@3 ~@4 J K J L J K J
  L J L J L J L J L J L J L M@3
>`.pickRestart({
  A: "~@14 ab1 a1", B: "bb1@4 bb1@3 bb1@2 db2 db2@2 db2@2 db2 bb1", C: "ab1@4 ab1@3 ab1@2 b1 b1@2 b1@2 b1 db2",
  D: "eb2@4 eb2@3 eb2@2 b1 b1@2 b1@2 b1 db2", E: "bb1!4 bb1@3 bb1 db2!4 db2@2 db2!2", F: "ab1!4 ab1@3 ab1 b1@2 ~@6",
  G: "db2!2 c2!2", H: "e2!2 eb2!2", I: "[e2!3 e2@9]/3", J: "db2@2 db2@2 db2@2 db2!2 ab1@2 ab1@2 ab1@2 ab1!2",
  K: "eb2@2 eb2@2 eb2@2 eb2!2 eb2@2 eb2@2 eb2@2 eb2!2", L: "eb2@2 eb2@2 eb2@2 eb2!2 bb1@2 bb1@2 bb1@2 bb1!2",
  M: "[db2@4 ab1@19 ~]/3",
})).s("gm_electric_bass_finger").gain(0.64)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@3 A B@12 ~@2 B@16 ~@2 B@24 C ~@5 B@20 D ~@2>".pickRestart({
  A: "~@8 x!3 ~@3 x!2", B: "x!14 ~ x", C: "x", D: "x!2",
})).gain(0.61)

// drums · low tom
const low_tom = s("lt").struct("<~@6 A B@9 ~@2 B@3 C B@12 ~@2 B@3 C B@20 ~@6 B@20 D ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "x ~@3 x!2 ~@2", C: "x!2", D: "x",
})).gain(0.61)

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

// drums · crash
const crash = s("cr").struct("<~@12 A ~@4 B ~@17 B A ~@49 C ~@2>".pickRestart({
  A: "x", B: "~ x", C: "x!2",
})).gain(0.61)

stack(acoustic_guitar_steel, overdriven_guitar, bass, kick, snare, hihat, low_tom, open_hat, crash)

More by Our Lady Peace