Strudelify

Way Down the Line

The Offspring

KeyD majorTempo173 bpm
0:00/0:00
// Way Down the Line — The Offspring
// 173 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: pitch bends are ignored
// note: duplicate parts dropped: ch 4 "Guit2" distortion guitar (copy of ch 3 "Guit1" distortion guitar)
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(173/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.

// other · lead 3 calliope · "Voc2"
const lead_3_calliope = note(`<
  A B C@4 D@2 E@2 ~@23 F G H G H I@3 ~@16 F G H G H I@3 ~ G H G H I@3 ~@14 J G H G H I@3 ~ G H G H K@3 ~@8
>`.pickRestart({
  A: "~@8 f#5@3 f#5@5", B: "f#5@5 f#5@3 e5@2 f#5@3 e5@3",
  C: "[d5@5 d5@5 ~@5 f#5@3 f#5@3 f#5@5 f#5@5 f#5@3 e5@2 f#5@3 e5@2 d5@5 ~ d5@5 ~@5 f#5@3 f#5@4]/4",
  D: "[~ f#5@5 f#5@3 f#5@3 f#5@2 e5@5 ~@3 f#5@5 e5@3 d5@2]/2", E: "[~ d5@2 d5@21 ~@8]/2", F: "b5!2 c#6 ~",
  G: "f#5 f#5@2 f#5@2 f#5 e5 f#5", H: "e5 d5@2 d5@2 ~@2 f#5", I: "[f#5@2 f#5@2 f#5!3 e5@2 ~ f#5@2 e5 d5!2 d5@5 ~@4]/3",
  J: "b5!2 a5 ~", K: "[f#5@2 f#5@2 f#5!3 e5@2 ~ f#5@2 e5 d5!2 d5@3 ~@6]/3",
})).s("gm_lead_3_calliope").gain(0.32).pan(0.4)

// bass · electric bass finger
const bass = note(`<
  ~@15 A B C B C B C B C B C B C D E D E D F G H G I G J B C B C B C B C B C B C D E D E D F G H G I G J G@3 H G I G J
  G@2 K L M N K L M N K O G P Q R G H G I G J G@3 H G I G J ~@9
>`.pickRestart({
  A: "~@7 c2", B: "d2!2 c2 d2 ~@4", C: "~ f2@2 g2 f2@2 g2 c2", D: "d2!4", E: "g1!4", F: "g1!2 a1!2",
  G: "d2 d2@2 d2@2 d2!3", H: "g1 g1@2 g1@2 g1!3", I: "g1 g1@2 g1 a1!4", J: "a1 a1@2 a1@2 a1!3", K: "f2@4 f2!3 g2",
  L: "g2@4 g2!3 d2", M: "d2!2 c2 d2 ~@3 c2", N: "d2!2 c2 d2 ~@3 d2", O: "g2@4 g2!4", P: "d2 d2@2 d2!4 f2",
  Q: "f2 f2@2 f2@2 f2!2 g2", R: "g2!4 a2!4",
})).s("gm_electric_bass_finger").gain(0.52)

// chords · distortion guitar · "Guit1"
const distortion_guitar = note(`<
  A@5 B@7 C D C D C D C D C D C D C D C D E F E F E G H I J K L M C D C D C D C D C D C D E F E F E G H I J K L M H@3 I
  J K L M H@2 N O P Q N O P Q N R H S T U H I J K L M H@3 I J K L M ~@9
>`.pickRestart({
  A: "[~@8 [d3,a3,d4]@21 [g2,d3,g3]@21 [d3,a3,d4]@21 [g2,d3,g3]@9]/5", // D5 G5 D5 G5
  B: "[~ [a2,e3,a3]@10 ~ [d3,a3,d4]@21 [a2,e3,a3]@21 ~@18 e3@21 e2@19, ~@27 [d3,a3,d4]@29]/7", // A5 D5 A5 D5
  C: "[d3,a3,d4]!2 [c3,g3,c4] [d3,a3,d4] ~@4", D: "~ [f3,c4,f4]@2 [g3,d4,g4] [f3,c4,f4]@2 [g3,d4,g4] [c3,g3,c4]",
  E: "[a2,d3,a3]@2 [a2,d3,a3]!2 [a2,d3,a3]@2 [a2,d3,a3]!4 [a2,d3,a3]@2 [a2,d3,a3]@2 [g2,d3,g3]!2", // D5 G5
  F: "[g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3]!4 [g2,d3,g3]@2 [g2,d3,g3]@2 [a2,d3,a3]!2", // G5 D5
  G: "[g2,d3,g3]@2 [g2,d3,g3]!2 [g2,d3,g3]@2 [g2,d3,g3]!2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]@2", // G5 A5
  H: "[d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]!3", I: "[g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3]@2 [g2,d3,g3]!3",
  J: "[d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]@4 [d3,a3,d4]", K: "[g2,d3,g3] [g2,d3,g3]@3 [a2,e3,a3]@4",
  L: "[d3,a3,d4]@4 [d3,a3,d4]@4 [d3,a3,d4]@2 [d3,a3,d4]@2 [d3,a3,d4]@2 [a2,e3,a3] ~", M: "[a2,e3,a3]!4",
  N: "[f3,c4,f4]@4 [f3,c4,f4]!3 [g3,d4,g4]", O: "[g3,d4,g4]@4 [g3,d4,g4]!3 [d3,a3,d4]",
  P: "[d3,a3,d4]!2 [c3,g3,c4] [d3,a3,d4] ~@3 [c3,g3,c4]", Q: "[d3,a3,d4]!2 [c3,g3,c4] [d3,a3,d4] ~@3 [d3,a3,d4]",
  R: "[g3,d4,g4]@4 [g3,d4,g4]!4", S: "[d3,a3,d4] [d3,a3,d4]@2 [d3,a3,d4]!4 [f3,c4,f4]",
  T: "[f3,c4,f4] [f3,c4,f4]@2 [f3,c4,f4]@2 [f3,c4,f4]!2 [g3,d4,g4]", // F5 G5
  U: "[g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4]@2 [g3,d4,g4] ~ [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4]@2 [a3,e4,a4] ~", // G5 A5
})).s("gm_distortion_guitar").gain(0.4).pan(0.2)

// other · overdriven guitar · "Reg1"
const overdriven_guitar = note("<~@102 A B C B A B C B D>".pickRestart({
  A: "~ d4 f#4 d4 g#4@2 e4 a3", B: "~ a4 c#5 a4 d#5@2 ~@2", C: "~ g4 b4 g4 c#5@2 g4 e4", D: "[d3,a3,d4,f#4] ~@3",
})).s("gm_overdriven_guitar").gain(0.54).pan(0.3)

// chords · overdriven guitar · "Reg2"
const overdriven_guitar_2 = note("<~@102 A B C D A B C D E>".pickRestart({
  A: "~ [d3,a3,d4] ~ [d3,a3,d4]", B: "~@4 [a2,e3,a3]@4 ~@2 [a2,a3] ~ [a2,e3,a3]@4", C: "~ [g2,d3,g3] ~ [g2,d3,g3]",
  D: "~@4 [a2,e3,a3]@4 ~@2 [a2,g3] ~ [a2,e3,a3]@4", E: "[d3,a3,d4,f#4] ~@3",
})).s("gm_overdriven_guitar").gain(0.44).pan(0.7)

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

// drums · snare
const snare = s("sd").struct("<~@16 A@49 B A@7 C A@21 B A@6 D E D E D E D F ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~@3 x!4 ~@2", C: "~@2 x ~@3 x ~@3 x!6", D: "~@4 x ~@2 x", E: "~ x",
  F: "~@4 x!3 ~@9",
})).gain(0.43)

// drums · low tom
const low_tom = s("lt").struct("<~@2 A ~@2 B ~@2 C ~@56 D ~@29 D ~@13 E ~>".pickRestart({
  A: "~@15 x", B: "~@9 x ~@6", C: "~@3 x ~@12", D: "~@14 x!2", E: "~@4 x!4",
})).gain(0.43)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 [~@7 x ~ x ~ x ~ x ~@2] ~@2 [~@7 x!2 ~@7] ~ [~@11 x ~ x ~ x] [~ x ~@14] ~@102>")
  .gain(0.43)

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

// drums · crash
const crash = s("cr").struct(`<
  A B ~ C D E ~ F G ~@25 H I J K L ~@19 H I J K L ~ H ~ H I J K L ~ H@2 J ~@9 J ~@3 H I J K L ~ H ~ H I J K L ~@9 J
>`.pickRestart({
  A: "~ x", B: "~@13 x ~@2", C: "~ x ~@6", D: "~@7 x ~@8", E: "~ x ~@10 x ~@3", F: "~ x ~@14", G: "~@3 x ~@4",
  H: "x ~@2 x ~@4", I: "x ~@2 x ~@3 x", J: "x", K: "x!2", L: "x ~@6 x",
})).gain(0.38)

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

stack(
  lead_3_calliope, bass, distortion_guitar, overdriven_guitar, overdriven_guitar_2, kick, snare, low_tom, mid_tom,
  open_hat, crash, ride
)

More by The Offspring