Strudelify

Dirty Deeds Done Dirt Cheap

AC DC

KeyE majorTempo140 bpm
0:00/0:00
// Dirty Deeds Done Dirt Cheap — AC DC
// 140 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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 · overdriven guitar
const overdriven_guitar = note(`<
  A@12 B@2 C D@8 E@5 F@3 G H I J K H L M@2 N@5 O@8 P F@3 G H I J K H L M@2 Q@6 R@2 A@4 B@2 C S@8 E@5 F@3 G H I J K H L J
  T@3 U V@3 W V@3 K
>`.pickRestart({
  A: "[[e2,b2,e3,g#3]@7 [g2,d3,g3]@2 [e2,b2,e3,g#3]@6 [a2,e3,a3]@2 [e2,b2,e3,g#3]@6 [a2,d3,a3,d4]@2 [e2,b2,e3,g#3]@7]/4", // E G5 E A5 E D5 E
  B: "[[e2,b2,e3,g#3]@7 [g2,d3,g3]@2 [e2,b2,e3,g#3]@6 [a2,e3,a3]]/2", C: "~ [e2,b2,e3,g#3]@6 [a2,d3,a3,d4]",
  D: "[~ [e2,b2,e3,g#3]@4 [d3,a3,d4]@2 [e2,e3,b3,e4,g#4]@30 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]@25]/8", // E D5 E D E
  E: "[~@5 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]@30 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]]/5", // D E D E
  F: "[e2,e3,b3,e4,g#4]@5 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]", G: "[e2,e3,b3,e4,g#4]!4 [e2,e3,b3,e4,g#4]@2 ~@2",
  H: "[a2,e3,a3]", I: "[a2,e3,a3] [g2,d3,g3,d4,g4] [a2,e3,a3]@2, ~@4 a2 ~@11", J: "[e2,e3,b3,e4,g#4]",
  K: "[e2,e3,b3,e4,g#4] [d3,a3,d4,f#4] [e2,e3,b3,e4,g#4]@2", L: "[a2,e3,a3] [g2,d3,g3,d4,g4] [a2,e3,a3]@2",
  M: "[e2,e3,b3,e4,g#4]/2", N: "[[e2,e3,b3,e4,g#4]@13 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]@25]/5",
  O: "[~@5 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]@30 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]@25]/8", // D E D E
  P: "~@5 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]", // D E
  Q: "[[b2,f#3,b3,d#4]@11 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]@2 [a2,e3,a3,c#4]]/2", // B A
  R: "[[b2,f#3,b3,d#4]@9 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 [d3,a3,d4,f#4]]/2", // B D
  S: "[~ [e2,b2,e3,g#3]@3 [e2,b2,e3,g#3] [d3,a3,d4,f#4]!2 [e2,b2,e3,g#3]@30 [d3,a3,d4,f#4] ~ [e3,b3,e4,g#4]@25]/8", // E D E D E
  T: "[[e2,b2,e3,g#3]@7 [g2,d3,g3]@2 [e2,b2,e3,g#3]@6 [a2,e3,a3]@2 [e2,b2,e3,g#3]@7]/3", // E G5 E A5 E
  U: "[e2,e3,b3,e4,g#4] d3 [e2,e3,b3,e4,g#4] ~", // E
  V: "[[e2,e3,b3,e4,g#4]@4 [e2,e3,b3,e4,g#4]@4 [e2,e3,b3,e4,g#4]@4 [e2,a2,d3] ~ [g3,d4,g4,b4]@4 [e2,e3,b3,e4,g#4]@6 [e2,e3,b3,e4,g#4]@6 [a2,e3,a3,c#4,e4,a4]@4 [e2,e3,b3,e4,g#4]@6 [e2,e3,b3,e4,g#4]@4 [e2,e3,b3,e4,g#4]@2 [e2,e3,b3,e4,g#4]!2]/3", // E Dsus2 G E A E
  W: "[e2,e3,b3,e4,g#4]@2 [d3,a3,d4,f#4]@2 [e2,e3,b3,e4,g#4]@2 ~ [e2,e3,b3,e4,g#4]", // E D E
})).s("gm_overdriven_guitar").gain(0.8)

// chords · overdriven guitar
const overdriven_guitar_2 = note(`<
  ~@19 A ~@3 A ~@3 A@4 ~@10 A ~@3 A ~@3 A ~@3 A@4 ~@28 A ~@3 A ~@3 A@4 ~@20
>`.pickRestart({
  A: "~@6 [d3,a3,d4,f#4] ~", // D
})).s("gm_overdriven_guitar").gain(0.8)

// bass · electric bass pick · "Bass"
const bass = note(`<
  A B C D A B C D A B C D A B C E F@3 G F@3 G F@3 G@4 H I J K L I J K@3 G F@3 G F@3 G F@3 G@4 H I J K L I J K@2 M N M N
  M N M O A B C D A B C E F@3 G F@3 G F@3 G@4 H I J K L I J K P@3 Q P@3 Q P@3 Q
>`.pickRestart({
  A: "e1!7 g1", B: "g1 e1!6 a1", C: "a1 e1!6 d2", D: "d2 e1!7", E: "d2 e1!4 d2!2 e1", F: "e1!8", G: "e1!5 d2!2 e1",
  H: "e1!4 e1@2 ~@2", I: "a1!4", J: "a1 g1 a1@2", K: "e1!4", L: "e1 d2 e2 e1", M: "b1!8", N: "b1!3 a1!5",
  O: "e1 d2@2 d2@2 d2@3", P: "[e1@2 e1@2 e1@2 e1 g1@2 e1@2 e1@2 e1@2 a1@2 e1@2 e1@2 e1@3]/3", Q: "e1 d2 e2 ~",
})).s("gm_electric_bass_pick").gain(0.8)

// drums · kick
const kick = s("bd").struct("<A@31 B A@6 C ~@2 A@16 B A@6 C@9 D A@23 B A@6 C ~@12>".pickRestart({
  A: "x ~@4 x ~@2", B: "x!5 ~ x ~", C: "x", D: "~@7 x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<A@31 B A@6 ~@3 A@16 B A@6 ~@9 C A@23 B A@6 ~@4 D ~@3 D ~@3 D>".pickRestart({
  A: "~ x ~ x", B: "~@3 x", C: "x", D: "~ x ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<A@31 B A@25 B A@15 C A@23 B A@10 ~ A@3 ~ A@3 ~>".pickRestart({
  A: "x!8", B: "x!4 ~@2 x ~", C: "x ~@6 x",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@38 A@3 ~@23 A@9 B ~@30 A@4 ~ A@3 ~ A@3 ~>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@5 x ~@2",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@31 A ~@25 A ~@15 B ~@23 A ~@19>".pickRestart({
  A: "~ x", B: "~ x ~ x ~ x ~@2",
})).gain(0.8)

// drums · high tom
const high_tom = s("ht").struct("<~@73 [~ x ~ x ~@4] ~@43>").gain(0.8)

// drums · crash
const crash = s("cr").struct("<~@73 [~ x ~ x ~ x ~@2] ~@34 [x!2] ~@3 [x!2] ~@3 [x!2]>").gain(0.8)

stack(overdriven_guitar, overdriven_guitar_2, bass, kick, snare, hihat, mid_tom, open_hat, high_tom, crash)

More by AC DC