Strudelify
TNT cover art

TNT

AC DC

KeyA majorTempo130 bpm
0:00/0:00
// TNT — AC DC
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "Dist.Git" overdriven guitar (copy of ch 4 "E-Guitar" electric guitar clean)
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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.

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@2 B C ~@16 D ~ D ~ D ~ E@3 F G H G F G I J@3 K L K M K N K O P Q K L R M R S R T U@3 G V G V G W X Y@2 Z AA AB AC
  AD AE AF@3 F G H G H G F G F G H G F G I AG@2 AH AI AJ AK AL AM AN AO@5
>`.pickRestart({
  A: "[e1@3 ~]/2", B: "e1 ~ e1!6", C: "e1@2 e1@2 e1@2 e1@2 e1@2 e1 e1@2 ~@3", D: "e1 ~ e1 ~@5",
  E: "[e1 ~ e1 ~@2 g1 ~ a1@17]/3", F: "a1@4 g1@4 e1 ~ e1 ~ e1 ~ e1 ~", G: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  H: "a1@4 g1@3 ~ e1 ~ e1 ~ e1 ~ e1 ~", I: "a1@4 g1@4 e1@3 ~ e1 ~ e1@2",
  J: "[g1 ~ g1@2 ~@2 a1 ~ a1@28 e1@2 ~@2 e1@7 ~]/3", K: "~ g1 ~ a1@3 ~ g1", L: "a1@2 g1@2 ~@2 e1@7 ~@3",
  M: "a1@2 g1 ~@3 e1@8 ~@2", N: "a1 g1 ~ e1@3 e1 ~", O: "a1 ~ g1@2 ~@2 e1@9 ~", P: "~@2 g1@2 ~@2 a1@5 ~@3 g1@2",
  Q: "a1 ~ g1@2 ~@2 e1@8 ~@2", R: "~@2 g1@2 ~@2 a1@7 ~ g1@2", S: "a1 g1 ~ e1@4 ~", T: "a1@2 g1 ~@3 e1@9 ~",
  U: "[~ g1 ~ a1@15 ~@2 a1@2 g1@2]/3", V: "e1 ~ e1 ~ e1 ~ e1 ~ a1@4 g1@3 ~", W: "e1 ~ e1 ~ e1 ~ e1 ~ a1@4 g1@4",
  X: "e1@3 ~ e1 ~ e1@2 g1 ~ g1@2 ~@2 a1 ~", Y: "[a1@14 e1 ~]/2", Z: "e1@2 e1@2 e1@2 e1@2 e1 ~ g1@2 ~@2 a1@2",
  AA: "a1 ~ a1@2 a1 ~ g1 ~ a1@2 g1@2 g1 ~ e1@2", AB: "e1@2 e1@2 e1@2 e1@2 e1@2 g1 ~ g1 ~ a1 ~",
  AC: "a1 ~ a1@2 a1 ~ g1@2 a1@2 g1 ~ e1@2 e1@2", AD: "e1 ~ e1@2 e1 ~ e1 ~ e1@2 g1 ~ g1 ~ a1@2",
  AE: "a1 ~ a1@2 a1 ~ g1 ~ a1@2 g1 ~ e1@2 e1@2", AF: "[e1 ~ e1 ~ e1 ~ e1 ~ e1@2 g1@2 ~@2 a1@31 ~@3]/3",
  AG: "[g1 ~ g1@2 ~@2 a1 ~ a1@16 e1@3 ~ e1@3 ~]/2", AH: "e1@3 ~ e1@3 ~ f1@3 ~ f1@3 ~",
  AI: "f1@3 ~ f1@3 ~ f#1@3 ~ f#1@3 ~", AJ: "f#1@3 ~ f#1@3 ~ g1@3 ~ g1@3 ~", AK: "g1@3 ~ g1@3 ~ g#1@3 ~ g#1@3 ~",
  AL: "a1@3 ~ a1@3 ~ a#1@3 ~ a#1@3 ~", AM: "b1@3 ~ b1@4 c2@4 c#2@4", AN: "d2@4 d#2@4 d2@3 ~ d#2@4",
  AO: "[e2@4 f2@4 ~@3 e1@3 e1@2 e1@3 e1@3 e1@2 e1@3 e1@2 e1!2 e1@2 e1@2 e1@2 e1 e1@2 e1@2 e1@3 e1@3 e1@3 e1@21 e1 ~@7, ~@8 e1@3 ~@69, ~@9 f#2@60 ~@11]/5",
})).s("gm_electric_bass_finger").gain(0.39)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note("<~@2 A B ~ C@16 D C D C D C E ~@80>".pickRestart({
  A: "~@4 e1@2 e1!2", B: "~ e1 ~@6", C: "e1 ~@3 e1 ~@3 e1 ~@3 e1 ~@3", D: "~@8 e1 ~@3 e1 ~@3", E: "~@8 e1 ~@7",
})).s("gm_electric_bass_finger").gain(0.11)

// chords · electric guitar clean · "E-Guitar"
const electric_guitar_clean = note(`<
  ~ A@4 B@7 C@8 D@6 E@4 F ~ G ~ F ~ H I@3 J K J K J K J K J K J K J K J K J K L@3 M N O P M Q R@3 S@5 E@4 F ~ G ~ F ~ F
  ~ F ~ G ~ F ~ H T@6 U V W X@5
>`.pickRestart({
  A: "[[e2,b2,e3,b3]@15 ~]/4", // E5
  B: "[[e2,b2,e3]@5 ~@5 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@2]/7", // E5 G5 A5 E5 G5 A5 E5 G5 …
  C: "[~@6 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@2]/8", // A5 E5 G5 A5 E5 G5 A5 E5 …
  D: "[~@6 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@2]/6", // A5 E5 G5 A5 E5 G5 A5 E5 …
  E: "[~@6 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3,e4]@34]/4", // A5 E5 G5 A5
  F: "[a2,e3] [g2,g3] [e2,b2,e3] ~, a3@3 ~@5, ~@4 d3@3 ~@9, ~@4 e3 ~@11", // A5 G E5
  G: "[a2,a3] [g2,d3,g3] [e2,b2,e3] ~, e3@3 ~@5 [d3,d#3] ~@7", H: "[a2,e3,a3]@4 g2@4 [e2,b2,e3]@4 e2 ~ e2 ~",
  I: "[[d3,g3] ~ [d3,g3]@2 g2 ~ [a2,e3,e4]@32 ~@2 [e2,b2,e3]@5 ~@3, g2 ~@23]/3", // G5 A5 E5
  J: "~@2 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~", K: "[a2,e3,a3] g2 ~ [e2,b2,e3]@4 ~",
  L: "[~ [g2,d3,g3] ~ [a2,e3,a3,e4]@17 [a2,e3]@2 [g2,d3,g3]@2, ~@20 a3@3 ~, ~@44 e3 ~@3]/3", M: "[e2,b2,e3] ~@3",
  N: "~@2 [a2,a3] [g2,d3,g3], ~@8 e3@3 ~@5", O: "[e2,b2,e3] ~@3, [d3,d#3] ~@15",
  P: "~@2 [a2,e3] [g2,d3,g3], ~@4 a3@3 ~, ~@12 e3 ~@3", Q: "~@2 [a2,e3,a3] g2",
  R: "[[e2,b2,e3]@4 e2 ~ e2 ~ [d3,g3] ~ [d3,g3]@2 g2 ~ [a2,e3,e4]@32 ~@2, ~@4 g2 ~@19]/3", // E5 G5 A5
  S: "[[e2,b2,e3]@5 ~@5 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@6 ~@2 g2 ~ [a2,e3,a3]@2 g2@2 ~@2 [e2,b2,e3]@8 ~@4 [g2,d3,g3]@2 ~@2 [a2,e3,a3]@2]/5", // E5 G5 A5 E5 G5 A5 E5 G5 …
  T: "[[d3,g3] ~ [d3,g3]@2 g2 ~ [a2,e3,e4]@18 [e2,b2,e3]@15 ~ [c3,f3]@14 ~@2 [f#2,c#3,f#3]@15 ~ [g2,g3]@16 [g#2,d#3,g#3]@7 ~, g2 ~@19 f2@8 ~@8 d3@7 ~@5]/6", // G5 A5 E5 F5 F#5 G G#5
  U: "[e3,a3]@7 ~ [a#2,f3,a#3]@7 ~, a2@8 e3 ~@7", V: "b3!2 ~@6 [c3,g3,c4]@4 [c#3,c#4]@4, [b2,f#3]@7 ~@5 g#3@2 ~@2",
  W: "[d3,a3,d4]@3 ~ [d#3,a#3,d#4]@4 [e3,e4]@4 [f3,c4,f4]@4, ~@4 b2 ~@3 b3@2 ~@6", // D5 D#5 E F5
  X: "[[c#4,f#4]@3 ~ [g3,g4]@5 ~@28 a#2@34 ~ [e2,b2,e3]@3 ~@5, f#3@4 d4@3 ~@2 [g#3,d#4]@40 ~@31, ~@9 g#4@35 ~@36, ~@29 e3@41 ~@10]/5", // F#5 G E5 G#5
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.6)

// other · overdriven guitar · "Sologit."
const overdriven_guitar = note("<~@38 A@5 ~@26 B C@2 D@2 E F G@3 ~@17 H I J K L M N@6>".pickRestart({
  A: "[~@4 a3@35 ~]/5", B: "a3", C: "[a3@28 g4 e4 d4 b3]/2",
  D: "[a3 e3!2 d3@3 e3@2 d4@2 d3 ~ g4 e3 g4@6 e4@2 g4 ~ a4 ~ a4 ~ a4 ~ a4 ~]/2",
  E: "a4 ~ a4 ~ a4@2 g4 e4@3 g4 ~ e4 ~ e4 ~", F: "g4@4 a4@2 ~@2 a4@2 g4 ~ a4@2 g4 ~",
  G: "[a4@4 c5@2 a4@2 c5 ~ d5 ~@3 a5@32 ~@2]/3", H: "d4 ~", I: "d#4@9 ~@7", J: "e4 ~", K: "f4@2 ~ f#4", L: "~ g4 ~ g#4",
  M: "~@4 a4@4 ~@2 a#4@3 ~ b4@2", N: "[~@2 c5@3 ~ b4 ~@3 c#5@3 ~ d5@4 d#5@4 ~@2 a5@64 ~@8]/6",
})).s("gm_overdriven_guitar").gain(0.63).pan(0.6)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@2 A B C ~@32 D E F ~@27 G ~ H ~@7 I ~@16 D ~@7 G J ~ K L ~>".pickRestart({
  A: "~@5 x!3", B: "x!8", C: "x ~ x ~ x ~ x ~ x ~@2 x!2 ~@3", D: "~@2 x!2 ~@4", E: "~ x!3", F: "x ~@2 x!2 ~@11",
  G: "~@6 x!2", H: "~@4 x!3 ~", I: "~ x", J: "x ~@3 x ~ x ~ x!2 ~ x!2 ~ x ~", K: "x ~@4 x ~ x ~@3 x ~ x ~@2",
  L: "~ x ~@4 x ~@7 x ~",
})).gain(0.3)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~ [~@7 x] [x!5 ~ x ~] ~@35 x ~@63 [~ x] ~@5>").gain(0.15)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@32 A ~@3 A ~@6 B C@14 D ~@4 D ~@3 D ~@13 A ~@7 A ~@3 A ~@4 D ~@3 D ~@5
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x", C: "~ x ~ x ~ x ~ x", D: "~ x ~@6",
})).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@32 B ~ C ~@27 D ~@9 E ~@16 B ~@7 D A B F ~@2>".pickRestart({
  A: "~@11 x ~@4", B: "x!2 ~@6", C: "~@3 x ~@12", D: "~@4 x!2 ~@2", E: "~ x", F: "~@9 x ~@6",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@30 A ~ A ~ A ~ A ~@23 B ~ B ~ B ~ B ~@9 C ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@14
>`.pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~ x",
})).gain(0.35)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@37 A ~@29 B ~@8 C ~@17 A ~@7 B ~@5>".pickRestart({
  A: "~ x ~@2", B: "~@3 x", C: "~@5 x ~@2",
})).gain(0.2)

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

stack(
  bass, bass_soft, electric_guitar_clean, overdriven_guitar, kick, snare, low_tom, low_tom_soft, hihat, hihat_soft,
  mid_tom, open_hat, open_hat_soft, crash
)

More by AC DC