Strudelify

Middle of the Road

The Pretenders

KeyC majorTempo160 bpm
0:00/0:00
// Middle of the Road — The Pretenders
// 160 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 169 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · "Split Chan 16"
const bass = note(`<
  ~@5 A@2 B@2 C D C D C D C D C D C D C D C D C D C D C D C E F@2 G@4 H@2 I C D C D C D C J C D C J C D C K C D L M N@2
  F@4 H@2 O C D C D C D C D C D C D C D C D C D C D C D C P F@2 G@2 F@2 H@2 O C D C D C D C D C D C J C D Q D L D C D C
  D C D C J C R G@2 F@4 H@2 O C S C D C D C D C D C D C D C P F@2 G@2 F@2 T@6
>`.pickRestart({
  A: "[a1@2 ~@2 g1@5 ~ e1@20 ~@2]/2", B: "[a1@2 ~@2 g1@5 ~ e1@17 ~ a1@4]/2", C: "~@2 a1 ~ g1@3 ~ c2@3 ~ d2@4",
  D: "~@2 d2 ~ c2@7 ~ a1@4", E: "~ d2@2 ~ c2@3 ~ c2 ~ d2@2 ~@4", F: "[a1 ~ g1@2 ~ e1@9 ~@2]/2",
  G: "[a1@2 ~@2 g1@4 ~@2 e1@19 ~@3]/2", H: "[a1 ~ g1@2 ~ e1@10 e2]/2", I: "e1 ~ e1@2 e2@3 e1@2 e2 ~@2 a1@4",
  J: "~@2 d2 ~ c2@6 ~@2 a1@4", K: "~@2 d2 ~ c2@3 ~ c2 ~ d2 ~ a1@4", L: "~@2 a1 ~ g1@2 ~@2 c2@3 ~ d2@4",
  M: "~@2 d2 ~ c2@8 ~@4", N: "[a1@2 ~@2 g1@5 ~ e1@18 ~@4]/2", O: "e1 ~ e1@2 e2@2 e1@2 e2@2 e1@2 a1@4",
  P: "~@2 d2 ~ c2@3 ~ c2 ~ d2@2 ~@4", Q: "~@2 a1 ~ g1@3 ~ c2@2 ~@2 d2@4", R: "~@2 d2 ~ c2@7 ~@5",
  S: "~@2 d2 ~ c2@7 ~@2 a1@3", T: "[a1@2 ~@2 g1@4 ~@2 e1@67 ~@2 e1@4 ~@13]/6",
})).s("gm_electric_bass_finger").gain(0.56)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B C D E F E G H@24 I J I J I J E ~ G H@20 I J I J I J E K L H@22 M N I H I J I J E ~ G H@28 I J I J I J E K L H@16
  I J I J I J E ~@3 O ~
>`.pickRestart({
  A: "x ~@5 x!2", B: "~@2 x ~@3 x!2", C: "~ x!2 ~@4 x", D: "~ x ~ x ~ x ~@2", E: "x ~ x ~@2 x ~@2",
  F: "~@2 x!2 ~@2 x ~", G: "~@3 x", H: "~ x!2 ~@3 x ~", I: "x ~ x ~@2 x!2 ~", J: "x ~ x!2 ~@2 x ~",
  K: "x!2 ~@2 x!2 ~@2", L: "x!2 ~@4 x ~", M: "~ x!2 ~@3 x!2", N: "~ x!3 ~@2 x!2", O: "~@15 x",
})).gain(0.55)

// drums · snare
const snare = s("sd").struct(`<
  A B C D E ~ F@2 G F@7 H F@15 I F@6 J K L F@3 H F@15 I F@6 J M N F@6 O P F@14 J Q ~ I F@4 J K L F@19 H F@7 I F@6 J M N
  F@15 I F@7 ~ R B S ~
>`.pickRestart({
  A: "~ x!2 ~", B: "x", C: "x ~@6 x!2 ~@7", D: "x!2 ~ x", E: "x!4", F: "x!2", G: "x!6 ~@2", H: "x ~@2 x!2 ~@3",
  I: "x ~@2 x!3 ~@2", J: "x ~@3 x ~@2 x", K: "~ x!3", L: "x ~ x!4 ~@2", M: "~@3 x!2 ~ x ~@5 x ~ x ~", N: "~@2 x!4 ~@2",
  O: "x ~@7 x ~@5 x!2", P: "x ~ x ~@3 x!3 ~ x ~@5", Q: "~ x!2 ~ x ~ x!3 ~ x!3 ~@3", R: "~@9 x!3 ~ x!2 ~",
  S: "~@13 x!2 ~",
})).gain(0.55)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@5 A B@2 C B@24 D B D B D B E ~ C B@20 D B D B D B E ~ C B@6 F G ~@16 C B D B D B E ~ C B@28 D B D B D B E ~@17 C D B
  D B D B E ~@5
>`.pickRestart({
  A: "~@2 x!3 ~ x!2", B: "x!8", C: "~@6 x!2", D: "x!2 ~@2 x ~ x!2", E: "x!2 ~@2 x ~@3", F: "x!6 ~@2", G: "x!2 ~@6",
})).gain(0.22)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@3 x] ~@77 [~ x ~@6] ~@15 [~ x] ~@71 [~ x ~ x ~@12] ~@2>").gain(0.55)

// drums · high tom
const high_tom = s("ht").struct("<[~@5 x ~@2] ~@168>").gain(0.55)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~ B ~ C ~ C D ~@24 C ~ C ~ C ~ C ~@22 C ~ C ~ C ~ C ~ D ~@7 D ~@7 D ~@8 E ~ C ~ C ~ C ~@21 D ~@8 C ~ C ~ C ~ C ~ D
  ~@7 D ~@8 C ~ C ~ C ~ C ~@3 F ~
>`.pickRestart({
  A: "x", B: "~ x ~@2", C: "x ~@4 x ~@2", D: "~@3 x", E: "x ~ x ~@2 x ~@2", F: "~@15 x",
})).gain(0.44)

// drums · ride
const ride = s("rd").struct("<~@78 A B@14 C ~@46 D B@15 E ~@12>".pickRestart({
  A: "~@7 x", B: "x!8", C: "x!6 ~@2", D: "~@6 x!2", E: "x!3 ~@5",
})).gain(0.49)

stack(bass, kick, snare, low_tom, hihat, mid_tom, high_tom, crash, ride)

More by The Pretenders