Strudelify

You Wreck Me

Tom Petty

KeyB♭ majorTempo163 bpm
0:00/0:00
// You Wreck Me — Tom Petty
// 163 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 distortion guitar (copy of ch 2 overdriven guitar)
// note: Full arrangement: all 138 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(163/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · overdriven guitar
const overdriven_guitar = note(`<
  A@8 B@8 C@4 B@4 D@2 E@2 B@16 C@4 B@4 D@2 E@2 B@8 F@4 G@4 H@4 B@24 C@4 B@4 D@2 E@2 B@16 I@6 J@4
>`.pickRestart({
  A: "[[eb3,g3,bb3,eb4]@6 [f3,bb3,d4]@6 [a3,c4,f4]@19 ~]/2", B: "[[g3,bb3,eb4]@6 [f3,bb3,d4]@6 [f3,a3,c4]@19 ~]/2",
  C: "[[c4,eb4,ab4]@6 [bb3,eb4,g4]@6 [bb3,d4,f4]@19 ~]/2", D: "[ab2,eb3,ab3]/2", E: "[bb2,f3,bb3]/2",
  F: "[[g3,bb3,eb4]@3 [f3,bb3,d4]@3 [g3,bb3,eb4]@3 [f3,bb3,d4]@3 [f3,bb3,d4]@4]/2", // Eb Bb Eb Bb
  G: "[[f3,ab3,db4]@3 [eb3,ab3,c4]@3 [f3,ab3,db4]@3 [eb3,ab3,c4]@3 [eb3,ab3,c4]@4]/2", // Db Ab Db Ab
  H: "[[a3,c4,f4]@3 [g3,c4,e4]@3 [a3,c4,f4]@3 [g3,c4,e4]@3 [g3,c4,e4]@4]/2", // F C F C
  I: "[[g3,bb3,eb4]@3 [f3,bb3,d4]@3 [g3,bb3,eb4]@3 [f3,bb3,d4]@3 [f3,a3,c4]@4]/2", // Eb Bb Eb Bb F
  J: "[[g3,bb3,eb4]@3 [f3,bb3,d4]@3 [g3,bb3,eb4]@3 [f3,bb3,d4]@3 [a3,c4,f4]@20]/4", // Eb Bb Eb Bb F
})).s("gm_overdriven_guitar").gain(0.48).pan(1)

// other · overdriven guitar
const overdriven_guitar_2 = note("<~@76 A B C D E F G H@2 ~ I J@2 ~ I K ~@46>".pickRestart({
  A: "e5 f5!6 e5", B: "f5!3 e5 f5!4", C: "f5!3 ab5!2 a5!2 f5", D: "eb5 f5!2 c5 eb5 d5 c5 a4",
  E: "f4 c4 eb4 d4 c4 a3 f3 c3", F: "eb3 f3!3 ab3 a3 c4 f4", G: "eb4 f4!2 ab4 a4!2 f4 c4",
  H: "[eb4 f4 ab4 a4 c5 f5 a5 f6@9]/2", I: "~@7 c4", J: "[eb4 d4 c4 ab3 a3 f4 c4 f3@9]/2",
  K: "eb4 f4 ab4 a4 c5 f5 ab5 a5",
})).s("gm_overdriven_guitar").gain(0.64).pan(1)

// bass · electric bass pick
const bass = note(`<
  ~@4 A@12 B@4 A@4 C@2 D@2 A@16 B@4 A@4 C@2 D@2 A@8 E@4 F@4 G@4 A@24 B@4 A@4 C@2 D@2 A@16 H@8 ~@2
>`.pickRestart({
  A: "[eb2@6 bb1@6 f1@19 ~]/2", B: "[ab2@6 eb2@6 bb1@19 ~]/2", C: "ab1/2", D: "bb1/2",
  E: "[eb2@3 bb1@3 eb2@3 bb1@3 bb1@4]/2", F: "[db2@3 ab1@3 db2@3 ab1@3 ab1@4]/2", G: "[f2@3 c2@3 f2@3 c2@3 c2@4]/2",
  H: "[eb2@3 bb1@3 eb2@3 bb1@3 f1@4]/2",
})).s("gm_electric_bass_pick").gain(0.48).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~@4 A@23 B A@27 B A@55 B A@24 ~@2>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@3 A B@23 C B@27 C B@19 C B@35 C B@19 D B@2 E F ~@2>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~ x!4", D: "~@2 x ~@3 x!2", E: "~@2 x ~@2 x!3", F: "~@2 x!3 ~@3",
})).gain(0.64)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4]!4 [x!8]!131 [x!4 ~@4] ~@2>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@11 A ~@15 A ~@11 A ~@7 A ~@11 A ~@23 A ~@11 A ~@7 A ~@11 A ~@2 B ~@2
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct("<~@4 [x!4]!131 [x ~@3 x ~@3 x!8] [x!16]!2>").gain(0.64)

stack(overdriven_guitar, overdriven_guitar_2, bass, kick, snare, pedal_hat, crash, tambourine)