Strudelify

Starseed

Our Lady Peace

KeyD majorTempo132 bpm
0:00/0:00
// Starseed — Our Lady Peace
// 132 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 133 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(132/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 · "Acoustic Guitar"
const acoustic_guitar_steel = note("<A@5 B C@2 D E@2 F@4 ~@118>".pickRestart({
  A: "[~@22 a4@5 ~@3 a4@5 d3 ~@9 a4@5 ~ d3@3 [d3,a4]@5 ~@10 a4@5 d3@3 [d3,a4]@3, ~@13 d3@5 ~ d3@5 ~@3 d3@5 ~@7 c5@5 ~@19 c5@5 ~@12, ~@16 c5@5 ~@15 b4@5 ~ b4@5 ~@13 [a2,d3]@5 ~ d3@5 ~@9]/5", // D5
  B: "~@2 [a4,b4] d3@3 d3@3 d3@3 [d3,a4]@4, ~@6 c5@5 ~@5, ~@9 b4@5 ~@2", // Asus2 D5
  C: "[~@5 d3@4 d3 ~ [d3,d4] d3@2 d3@3 d3@2 [d3,a4]@5 ~ d3@3 [d3,a4]@4, ~@2 a2@5 ~@5 d4@5 ~@15, ~@14 c5@5 ~@13]/2", // D D5
  D: "~ d3 d3@3 d3@3 d3@3 [d3,a4]@5, ~@2 b4@5 ~ b4@5 ~@3, ~@5 c5@5 ~@6", // D5
  E: "[~@4 [d3,a4]@4 ~@2 a2@3 a2@2 ~@3 [d3,a4]@5 ~@4 [d3,a4]@5, ~ a2@5 ~@2 d3@5 [d3,c5]@5 ~@14, ~@15 a2@5 ~@4 a2@5 ~@3]/2", // D5 D7
  F: "[d3 d3@2 d3 [d3,b4]@3 [d3,b4]@3 [d3,b4]@3 [d3,c5]@5 ~ [d3,a4]@5 ~ [a2,d3,a3]@5 [a2,d3,a3]@4 ~ d4 [a2,d3,a3,d4] ~ [a2,d3,a3,d4] [a2,d3,a3,d4]@21 ~@4]/4", // G D7 D5
})).s("gm_acoustic_guitar_steel").gain(0.5).pan(0.7)

// chords · distortion guitar
const distortion_guitar = note("<~@11 A@3 B@5 ~@114>".pickRestart({
  A: "[~@4 [a4,c#6]@38 [a4,c#6,a6]@5 ~]/3", // A
  B: "[~@16 [c#6,a6]@14 ~@2 [c#6,g6]@14 ~@2 c#6@7 ~ [a4,c#6]@2 a4@2 a4@2 a4@8 ~@10, a4@7 ~@3]/5", // F#m C#dim A
})).s("gm_distortion_guitar").gain(0.8).pan(0.3)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@15 A B C D A E A E A E A E F G A E A E A E A E A E A E F H A E A E I J K A E A E A E A E F G A L A L A E A E A E A E
  F H A E A E I J K A E A E A E A E F G M N O P O N O N O N O N F G A E A ~ A Q A Q A Q@2 R A Q A Q A Q@2 R A Q A Q A
  Q@2 S
>`.pickRestart({
  A: "c2 d2 d1 d2 d1!2 c2 d2", B: "c2@2 d2@2 d1@3 d2 d1@2 d1@2 g1@2 a1@2", C: "c2 d2 d1 d2 d1!2 c2@2",
  D: "d2@2 d1@2 d2@2 f2@5 ~ e2@4", E: "c2 d2 c2 d2 d1 d2 d1!2", F: "g1!3 g1@2 g1!3", G: "f1!4 e1!4",
  H: "f1@2 f1@2 f1 ~ f1@2 e1@2 e1@2 e1@2 e1@2", I: "g1!8", J: "f1@2 f1@2 f1@2 f1@2 f1 ~ f1@2 f1@2 f1 ~",
  K: "f1@2 f1 ~ f1@2 f1 ~ f1@2 f1@2 f1@2 f1@2", L: "c2 d2 d1 [d2,a2] d1!2 g1 a1", M: "d1!5 b1 d1!2", N: "d1!4 c1!4",
  O: "d1!8", P: "d1 ~@3", Q: "c2 d2 d1 d2 d1!2 g1 a1", R: "g1!3 f1!3 e1!2", S: "g1!4 f1!4",
})).s("gm_fretless_bass").gain(0.7)

// chords · overdriven guitar · "Overdrive Guitar"
const overdriven_guitar = note(`<
  ~@27 A B C@4 D E D E D E D E A B C@4 A F@2 G@4 H@4 A B C@4 D E D E D E D E A B C@4 A F@2 G@4 H@4 A B I@4 ~@14 J@4 K@2
  L M J@4 K@2 L M J@4 K@2 L N
>`.pickRestart({
  A: "[g3,d4,g4]!3 [g3,d4,g4]@2 [g3,d4,g4]!2 [e3,b3,e4]", B: "[f3,c4,f4]!3 [e3,b3,e4] [c4,g4,c5]!3 [a3,c#4,e4,a4]",
  C: "[[d4,a4]@31 ~, d5]/4", D: "c4 d3!2 a3 d3!2 a3 d3", E: "b3 c4 b3 a3 d3!2 a3 d3", F: "[f3,c4,f4]!8",
  G: "[[d4,a4,d5]@31 ~]/4", H: "[[d4,a4,d5]@15 ~]/2", I: "[[a3,d4,a4,d5]@31 ~]/4", J: "[[d3,d4,a4,d5]@31 ~]/4",
  K: "[[d3,d4,a4,d5]@15 ~]/2", L: "[d3,d4,a4,d5]@7 ~", M: "[g3,d4,g4]!3 [f3,c4,f4]!3 [c4,g4,c5]!2",
  N: "[g3,d4,g4]!3 [f3,c4,f4]!5", // G5 F5
})).s("gm_overdriven_guitar").gain(0.5).pan(0.1)

// chords · distortion guitar · "Distorted Guitar"
const distortion_guitar_2 = note(`<
  ~@19 A B A C D E F G ~@2 H I J K ~@10 L@2 M N ~@3 O P O Q O P O Q ~@2 L@2 M N ~@10 L@2 M N ~@3 O P O Q O P O Q ~@6 R S
  T U R S V W X Y O P Z AA O P O Q O P Z AA O P O Q O P Z AA O P O Q O P Z AA
>`.pickRestart({
  A: "[d3,c5]@2 d3@2 d3@2 [d3,a4]@4 [d3,a4]@2 [d3,a4]@2 [d3,b4]!2", // D7 D5 G
  B: "[d3,b4] [d3,c5] b4 [d3,a4]@2 ~ [d3,a4]@2, ~@5 d2@2 ~", C: "[d3,b4]@2 [d3,c5]@2 b4@2 [d3,a4]@4 a2@3 d4@3",
  D: "d3@2 [d3,c5]@2 d3@2 d3 a4@3 a2@2 [d3,a4]@2 [d3,b4]!2", E: "[d3,b4] [d3,c5] b4 [d3,a4]@2 [d3,a4] d5@2",
  F: "[d3,a4]@2 d3 c5 d3@2 [d3,a4]@4 [d3,a4]@2 [d3,a4]@2 [d3,b4]!2", G: "[d3,b4]!3 [d3,c#5] b4 [d3,a4] [d3,a4]@2",
  H: "d3 c4 d3 a3@2 d3 a3 d3", I: "b3 c4 b3 a3@2 d3 a3 d3", J: "c4@2 c4 a3 g3@2 a3@4 d3@2 a3@2 d3@2",
  K: "b3!4 c4 b3 a3 g3",
  L: "[~@6 a3@4 ~@12 a3@4 b3@2 b3 a3@2 g3, d3@2 d3@2 ~ d3@2 d3@2 c4@2 ~@5, ~ c4@2 ~@3 a3@2 b3@2 b3@2 ~@4]/2",
  M: "c4 d3!2 a3@2 d3 a3 d3", N: "b3!4 b3@2 a3 g3", O: "[d3,g4]!2 d3 [d3,f#4]@2 [d3,f#4] d3 [d3,b4]",
  P: "[d3,b4]!2 d3 [d3,a4]@2 [d3,a4]!2 d3", Q: "d3 b4 [d3,b4]@2 d3@2 [d3,a4]@2 [d3,a4]@2 [d3,a4]@2 [d3,a4]@4",
  R: "[d3,g4]!3 [d3,f#4] [d3,e4]!2 [d3,f#4] [d3,e4]", S: "[d3,g4]!3 [d3,f#4] [d3,e4]!2 [d3,c5]@2",
  T: "[d3,g4]!3 [d3,f#4]!2 [d3,e4]!2 [d3,d4]", U: "[d3,e4]@2 [d3,d4]@2 [d3,c4]@2 [d3,b3]@4 [d3,c4]@2 [d3,c4] b3 g3@2",
  V: "[d3,g4]!3 [d3,f#4]!2 [d3,e4]!2 [d3,f#4]", W: "[d3,f#4] [d3,g4]@2 [d3,a4]@2 [d3,b4]@2 [d3,c5]",
  X: "[d3,d5]@2 [d3,d5]@2 [d3,d5]@2 d3 c5@3 [d3,b4]@2 [d3,c5]@2 [d3,b4]@2", Y: "[d3,d5]!3 [d3,c5]@2 [d3,b4] [d3,a4]@2",
  Z: "[d3,g4]!2 d3 [d3,f#4]@2 [d3,f#4] d3 [d3,c5]", AA: "[d3,d5] [d3,c5]!2 [d3,d5] [d3,c5]!2 [d3,d5] [d3,c5]",
})).s("gm_distortion_guitar").gain(0.75).pan(0.9)

// drums · kick
const kick = s("bd").struct(`<
  ~@15 A@12 B@2 A@12 C@2 A D A@2 C@3 E A@7 C@2 A@4 F A F A@5 C@2 A@4 C@2 G E B@2 A@5 C@2 H@3 I B@3 C B@3 C@3 E B A J B@2
  A B@5 C A@6 B A@7 K
>`.pickRestart({
  A: "x ~@4 x ~@2", B: "x ~@3 x!2 ~@2", C: "x!2 ~@2 x!2 ~@2", D: "x", E: "x!2 ~@2 x ~@3", F: "x!2 ~@3 x ~@2",
  G: "x!2 ~@2 x!3 ~", H: "x!2", I: "x ~@8 x ~@6", J: "x ~ x ~ x!2 ~@2", K: "x!4",
})).gain(0.53)

// drums · rim
const rim = s("rim").struct("<~@14 [x!4] ~@118>").gain(0.53)

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

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@15 A ~ B@5 C B@2 C ~@3 B@3 D ~ B@2 E ~@2 B@2 ~@2 B ~@2 D ~@3 F ~@2 D ~@3 G ~@3 B ~ B H@5 D I H ~@2 H@2 C J ~@32 H
  ~@7 H K D ~ C L ~ E ~@2 M L N O P
>`.pickRestart({
  A: "~@6 x!2", B: "~@3 x", C: "~@5 x ~ x", D: "~@5 x!2 ~", E: "~@7 x", F: "x", G: "x!5 ~ x ~ x ~@7", H: "~@5 x ~@2",
  I: "~@10 x!2 ~@4", J: "~@10 x!3 ~@3", K: "~@2 x ~@3 x!2", L: "~@2 x ~@2 x ~@2", M: "~ x!3 ~ x ~@2", N: "~ x!5 ~@2",
  O: "~@3 x ~@2 x ~@3 x ~ x ~@3", P: "x!2 ~ x!4 ~",
})).gain(0.53)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@15 A ~ A@7 B A ~@3 A B A ~@2 C B A ~ D A@2 E ~ A ~@2 F ~@6 F ~@3 G ~@3 A ~ A ~@36 H ~@18 A F ~ C@2 ~ C ~@2 I A J K L
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@10 x!2 ~@4", C: "~@2 x ~@2 x ~@2", D: "~@5 x ~ x", E: "x", F: "~ x", G: "x!2 ~@2", H: "~@3 x",
  I: "~ x ~@3 x ~@2", J: "~ x ~ x ~ x ~@2", K: "~ x!2 ~@5", L: "x!3 ~",
})).gain(0.53)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@27 A B ~@4 B@2 C D E F G H B@2 I J@3 B@6 K I J@3 B@2 J@4 ~@8 B@2 J@4 B@2 L B M B@2 N B O P J@5 Q ~@8 B@6 I J I R J@8
  B@3 Q J@8
>`.pickRestart({
  A: "x ~ x!6", B: "x!8", C: "x ~ x!3 ~ x ~", D: "~@3 x ~@4", E: "x ~@2 x", F: "~@2 x!3 ~@3", G: "~@3 x",
  H: "~ x!3 ~@2 x!2", I: "x!3 ~ x ~ x ~", J: "x!4", K: "x!3 ~ x!3 ~", L: "~ x!7", M: "x ~ x ~@2 x!2 ~ x ~ x ~ x ~ x ~",
  N: "x ~ x ~ x ~ x ~ x ~@2 x!2 ~ x ~", O: "x ~ x ~ x ~ x ~ x ~ x ~ x ~@2 x", P: "x ~@2 x!2 ~ x ~ x ~ x ~ x ~ x ~",
  Q: "x", R: "x!3 ~",
})).gain(0.47)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@35 A B C D E F ~@13 G ~@78>".pickRestart({
  A: "~ x ~@3 x ~ x", B: "x!3 ~ x!4", C: "~ x!5 ~ x", D: "x!2 ~@3 x!3", E: "x!6 ~ x", F: "x ~@3 x!2 ~@2",
  G: "~@3 x ~@4",
})).gain(0.26)

stack(
  acoustic_guitar_steel, distortion_guitar, bass, overdriven_guitar, distortion_guitar_2, kick, rim, snare, low_tom,
  mid_tom, high_tom, crash, ride, ride_soft
)

More by Our Lady Peace