Strudelify

R.I.P. (Rock in Peace)

AC DC

KeyA majorTempo100 bpm
0:00/0:00
// R.I.P. (Rock in Peace) — AC DC
// 100 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 47 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · acoustic bass · "ACOU BASS"
const bass = note("<~@5 A B C B C D C ~@3 A B C B E D C F@2 G F H I@2 J G J K L ~@3 A B C B C D M N O ~>".pickRestart({
  A: "a1 ~@7", B: "d2@2 ~ c2@2 ~ b1@2 ~ a1@2 ~ d2@2 ~ c2@2 ~ b1@2 ~ a1@2 ~",
  C: "a1@2 ~ c#2@2 ~ e2@2 ~ f#2@2 ~ a2@2 ~ f#2@2 ~ e2@2 ~ c#2@2 ~",
  D: "e2@2 ~ g#2@2 ~ b2@2 ~ g#2@2 ~ e2@2 ~ d2@2 ~ c#2@2 ~ b1@2 ~",
  E: "a1@2 ~ c#2@2 ~ e2@2 ~ f#2@2 ~ a2@2 ~ f#2@2 ~ e2@2 ~ c#2 ~@2", F: "a1 g1 f#1 e1 a1 g1 f#1 e1",
  G: "d2@3 c2@3 b1@3 a1@3 d2@3 c2@3 b1@3 a1@2 ~", H: "e2@3 g#2@3 b2@3 g#2@2 e2 d2@3 f#2@3 a2@3 f#2@2 a2",
  I: "[a1@3 c#2@3 e2@3 f#2@3 a2@3 f#2@3 e2@3 c#2@2 e2@2 a1@2 c#2@3 e2@3 f#2@3 a2@3 f#2@3 e2@3 c#2@3]/2",
  J: "a1 c#2 e2 f#2 a2 f#2 e2 c#2", K: "e2@3 g#2@3 b2@3 e2@2 ~ e2@3 d#2@3 d2@3 c#2@3",
  L: "a1@3 c#2@2 ~ e2@3 f#2@3 a2@3 f#2@3 e2@3 c#2@3", M: "a1 ~@2 a1 ~@2 g1@2 ~ g1@2 ~ f#1@2 ~ f#1@2 ~ f1@2 ~ f1@2 ~",
  N: "e1@2 ~@4 e1 ~@5 e1@2 ~ g#1@2 a1@2 ~@5, ~@7 f#1 ~@4", O: "a1",
})).s("gm_acoustic_bass").gain(0.31)

// bass · piano · "ALTO SAX"
const bass_2 = note("<c#-1 ~@46>").s("gm_piano").gain(0.05)

// other · soprano sax · "SOPRAN SA"
const soprano_sax = note("<~@6 A B C D E F ~@4 A B C D E F G@2 H I@3 J K L M N O ~@4 A B C D E ~@2 P ~>".pickRestart({
  A: "~@9 d5@2 c5!2 ~@4 c5@6 ~, ~@4 e5 ~@7", B: "~@9 d5@2 c5 a4 ~@4 a4@5 ~@2, ~@4 e5 ~@7",
  C: "~@8 [e5,f5] d5@2 c5!2 ~@4 c5@6 ~", D: "~@9 d5@2 c5 a4 ~@4 a4@4 ~@3, ~@4 e5 ~@7", E: "b4@7 ~",
  F: "~@3 d5@2 c#5 e5@3 d5@2 c#5 e5@3 d5@2 c#5 e5@3 d5@2 c#5, ~ e5 ~@10", G: "[a4@2 ~@19 c#5 ~ a4@2 ~@20 a4 ~ d5]/2",
  H: "~@21 d5 ~ e5", I: "[~@21 e5 ~ g#5@10 g5@2 f#5@10 e5@2 c#5@25]/3",
  J: "a4@2 ~ a4@2 ~ a4@3 ~@2 a4 ~@2 a4 ~@2 a4 ~@2 a4 a4@3", K: "e5@2 ~ e5@2 ~ e5@4 ~ e5@2 ~ e5@2 ~ e5@2 ~ e5@4",
  L: "e5@2 ~ e5@2 ~ e5@4 ~ e5@2 ~ e5 ~@2 e5 ~@2 e5 e5@2 ~", M: "e5 ~@2 e5@2 ~ e5@4 ~ e5 ~@2 e5 ~@2 e5@2 ~ e5 e5@2 ~",
  N: "e5 ~@2 e5 ~@2 e5@4 ~ e5 ~@2 e5 ~@2 e5@2 ~ e5 ~@3", O: "~@2 c#5 b4@2 a4 c#5@3 b4@2 a4 c#5@3 b4@2 a4 c#5@3 b4@2 a4",
  P: "[b4,g5]", // Em
})).s("gm_soprano_sax").gain(0.4).pan(0.2)

// other · baritone sax · "BARITONSA"
const baritone_sax = note(`<
  ~@5 A B C D E F G ~@3 A B C H E F G I J K L@3 M N O P Q R ~@3 A B C H E F ~@4
>`.pickRestart({
  A: "[a1,a2] ~@11, b1 ~@23", B: "~@8 a3 a2@2 c3 e3 ~@4 e3@6 ~", C: "~@8 a3 a2@2 c#3 e3 ~@4 e3@7",
  D: "~@8 a3 a2@2 [b2,c3] e3 ~@4 e3@7", E: "~@8 a3 a2@2 c#3 e3 ~@4 e3@4 ~@3", F: "g#3@23 ~",
  G: "~@2 c#4 b3@2 a3 c#4@3 b3@2 a3 c#4@3 b3@2 a3 c#4@3 b3@2 ~", H: "~@8 a3 a2@2 [b2,c3] e3 ~@4 e3@6 ~",
  I: "c#4@2 ~@19 c#4 ~ c#4", J: "~@21 c#4 ~ d4", K: "~@21 d4 ~ e4", L: "[~@21 c#4 ~ b3@10 a#3@2 a3@10 g3 ~ c#4@24 ~]/3",
  M: "c#4@2 ~ c#4@2 ~ c#4@4 ~ c#4 ~@2 c#4 ~@2 c#4 ~@2 c#4!2 ~@2",
  N: "c#4 ~@2 c#4 ~@2 c#4@4 ~ c#4 ~@2 c#4 ~@2 c#4 ~@2 c#4 c#4@3",
  O: "a3 ~@2 a3 ~@2 a3@3 ~@2 a3 ~@2 a3 ~@2 a3 ~@2 a3 a3@2 ~",
  P: "c#4 ~@2 c#4 ~@2 c#4@4 ~ c#4 ~@2 c#4 ~@2 c#4 ~@2 c#4 c#4@2 ~",
  Q: "a3 ~@2 a3 ~@2 a3@3 ~@2 a3 ~@2 a3 ~@2 a3 ~@2 a3 ~@3",
  R: "~@2 e4 d4@2 c#4 e4@3 d4@2 c#4 e4@3 d4@2 c#4 e4@3 d4@2 c#4",
})).s("gm_baritone_sax").gain(0.35).pan(0.8)

// chords · brass section · "BRASS"
const brass_section = note(`<
  ~@5 A B C D E F G ~@3 A B C D E F G H I J K@3 L M N O P Q ~@3 A B C D E F R S T ~
>`.pickRestart({
  A: "[a3,a4,e5,g5,a5] ~@7", B: "~@8 [c5,c6] a4@2 ~ [e4,a4,c5,a5,c6] ~@4 [e4,a4,c5,e5,a5,c6]@6 ~, ~@9 a5 ~ e5@2 ~@11",
  C: "~@8 c#5 [a4,a5]@2 e5 [e4,a4,c#5,g5,c#6] ~@4 [a4,c#5,e5,g5,c#6]@6 ~, ~@4 c#6 ~@3 e4@3 ~", // A A7
  D: "~@8 [c5,c6] a4@2 e5 [e4,a4,c5,e5,a5,c6] ~@4 [e4,a4,c5,e5,a5,c6]@6 ~, ~@9 a5 ~@14", // C Am
  E: "~@8 [c#5,c#6] [a4,a5]@2 ~ [e4,c#5,a5,e6] ~@4 [e4,c#5,e5,a5,e6]@5 ~@2, ~@11 e5@2 ~@11, ~@12 a4@2 ~@3 a4@7", // C# A
  F: "[b4,b5]@11 ~", // B
  G: "~@2 a5 [f#4,f#5]@2 [e4,e5] [a4,a5]@3 [f#4,f#5]@2 [e4,e5] [a4,a5]@3 [f#4,f#5]@2 [e4,e5] [a4,a5]@3 [f#4,f#5]@2 e5, ~ a4 ~@10", // F# E A F# E A F# E …
  H: "[a4,e5,a5]@2 ~@19 [a4,e5,a5] ~ [a4,e5,a5]", I: "~@21 [a4,e5,a5] ~ [d5,a5,d6]", J: "~@21 [d5,a5,d6] ~ [a4,e5,a5]",
  K: "[~@21 [a4,a5] ~ [e4,b4]@10 [d#4,a#4,d#5]@2 [d4,a4,d5]@10 c4@2 [a3,a4]@24 ~, ~@21 e5@11 ~@13 c5 ~@26]/3", // A E5 D#5 D5 A
  L: "[a3,a5] ~@2 [a3,a4]@2 ~ [a3,a4,a5]@4 ~ [a3,a4,a5] ~@2 [a3,a4,a5] ~@2 [a3,a4,a5] ~@2 [a3,a5] ~@3, a4@2 ~ a5 ~@16 a4@2 ~@2", // A
  M: "[a3,a4,a5] ~@2 [a3,a4,a5] ~@2 [a3,a4,a5]@4 ~ [a3,a4,a5] ~@2 [a3,a4,a5] ~@2 [a3,a4,a5] ~@2 [a3,a4,a5]@4", // A
  N: "[d4,d5,a5] ~@2 [d4,g4,a4,d5,g5,a5] ~@2 [d4,a4,d5,a5]@4 ~ [d4,a4,d5,a5] ~@2 [d4,d5,a5] ~@2 [d4,a4,d5,a5] ~@2 [a4,d5,a5]@4, a4@2 ~@12 a4@2 ~@3 d4@4 ~", // D5 Dsus4 D5
  O: "[a3,a4]@2 ~ [a3,a4,e5,a5] ~@2 [a3,a4,e5,a5]@4 ~ [a3,a4,e5,a5] ~@2 [a3,a4,e5,a5] ~@2 [a3,a4,e5,a5] ~@2 [a3,a4,e5,a5]@4, [e5,a5] ~@23", // A A5
  P: "[e4,e5]@11 ~", // E
  Q: "~@2 a5 [f#4,f#5]@2 [e4,e5] [a4,a5]@3 [f#4,f#5]@2 [e4,e5] [a4,a5]@3 [f#4,f#5]@2 [e4,e5] [a4,a5]@3 [f#4,f#5]@2 [e4,e5], ~ a4 ~@10", // F# E A F# E A F# E …
  R: "~ a3@2 [a3,a4]@2 ~ [g3,g4]@2 ~ [g3,g4]@2 ~ [f#3,f#4]@2 ~ [f#3,f#4]@2 ~ [f3,f4]@2 ~ [f3,f4]@2 ~, ~ a4 ~@22", // A G F# F
  S: "[e3,e4]@2 ~@4 [e3,e4]@2 ~@4 [e3,e4]@2 [f#3,f#4] [g#3,g#4]@2 [a3,a4]@2 ~@5", T: "[a3,c#4,g4]",
})).s("gm_brass_section").gain(0.5)

// other · brass section · "BRASS"
const brass_section_2 = note("<~@22 A B@2 C@3 ~@15 D E F ~>".pickRestart({
  A: "~@3 [c5,c6] ~@2 [b4,b5]@2 [a4,a5] [f#4,f#5]@2 [a4,a5] [c5,c6]@3 [b4,b5]@2 [a4,a5] ~@6", // C B A F# A C B A
  B: "~@2 [c5,c6] ~@3 [b4,b5]@2 [a4,a5] [f#4,f#5]@2 [a4,a5] [c5,c6]@3 [b4,b5]@2 [a4,a5] ~@6", // C B A F# A C B A
  C: "[~@2 [c5,c6] ~@3 [b4,b5]@2 [a4,a5] [f#4,f#5]@2 [a4,g#5,a5] [c5,c6]@3 [b4,b5]@2 [a4,a5] ~@5 [b4,b5]@10 [c#5,c#6] ~ [d5,d6]@10 d#5@2 [e5,e6]@16 ~@3 [a5,a6]@3 ~@3, ~@45 d#6 ~@26]/3", // C B A F# Amaj7 C B A …
  D: "[a3,a4]@2 ~ [a3,a4]@2 ~ [c#4,c#5]@2 ~ c#4@2 ~ d4@2 ~ d4@2 ~ d#5@2 ~ [d#4,d#5] ~@2, ~@9 c#5 ~@2 d5 ~@2 d5 ~@2 d#4 ~@5", // A C# D#
  E: "e4@2 ~@4 [e4,e5] ~@5 [e4,e5]@2 ~ [g#4,g#5]@2 [a4,a5]@2 ~@5, e5 ~@13 [f#4,f#5]@2 ~@8", F: "[a4,c#5,g5]",
})).s("gm_brass_section").gain(0.5).pan(0.2)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B C D E A E F E G A B C D E A E F E G E@5 H E@6 A B C D E A E F E G I ~@2
>`.pickRestart({
  A: "~@3 x ~@5 x ~@5 x ~@4 x!2 ~ x", B: "~@3 x ~ x ~@3 x ~@5 x ~ x ~@2 x!2 ~ x",
  C: "x ~@2 x ~ x ~@3 x ~@5 x ~ x ~@2 x!2 ~ x", D: "x ~@10 x!2 ~ x ~@2 x ~@2 x!2 ~@2", E: "~ x ~ x ~ x ~ x",
  F: "~@3 x ~@5 x ~@5 x ~@5 x ~ x", G: "~@3 x ~ x ~@3 x ~@4 x!2 ~ x ~@2 x ~@2 x",
  H: "~@3 x ~@5 x ~@4 x ~@2 x ~@2 x!2 ~ x", I: "~@12 x ~ x!2 ~ x ~@6",
})).gain(0.59)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 A B C ~@6 D A B C ~@6 D ~@5 E ~@2 F ~@3 A B C ~@6 D ~@3>".pickRestart({
  A: "x ~ x ~@2 x!2 ~ x ~@2 x!2 ~ x ~@2 x!2 ~@5", B: "x ~ x ~@3 x ~ x ~@2 x!2 ~ x ~@3 x ~@5",
  C: "~@2 x ~@3 x ~ x ~@2 x!2 ~ x ~@3 x ~@5", D: "~@7 x", E: "~@5 x ~@2", F: "~ x",
})).gain(0.26)

// drums · low tom
const low_tom = s("lt").struct("<~@46 [~ x ~@22]>").gain(0.52)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@2 [~ x ~ x ~ x ~ x]!3 ~@7 [~ x ~ x ~ x ~ x]!3 ~@19 [~ x ~ x ~ x ~ x]!3 ~@10>")
  .gain(0.59)

// drums · mid tom
const mid_tom = s("mt").struct("<~@46 x>").gain(0.66)

// drums · high tom
const high_tom = s("ht").struct("<~@46 x>").gain(0.59)

// drums · crash
const crash = s("cr").struct("<~@2 A ~@2 A@8 ~@2 A@7 B C@2 ~ D A@5 D@2 A ~@2 A@7 E A ~>".pickRestart({
  A: "x", B: "x ~@20 x ~ x", C: "~@21 x ~ x", D: "x!2", E: "x!2 ~@2",
})).gain(0.59)

// drums · ride
const ride = s("rd").struct("<~@6 A B C D E A ~@4 A B C D E A F G@2 A H A I@5 J ~@4 A B C D E A K L ~>".pickRestart({
  A: "~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x", B: "~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~ x ~@2 x",
  C: "~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x ~@2 x!2 ~ x", D: "~@3 x ~ x!2 ~@2 x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x",
  E: "x ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x", F: "~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~ x ~@3",
  G: "~@3 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@5", H: "~@3 x ~ x!2 ~@2 x ~ x ~@3 x ~ x!2 ~@2 x ~ x",
  I: "~@3 x ~ x ~@3 x ~ x ~@3 x ~ x ~@3 x ~ x", J: "~@3 x!2 ~@4 x ~ x ~@3 x ~ x ~@3 x ~ x", K: "~ x ~@2",
  L: "~@8 x!4 ~ x ~ x ~ x ~@6",
})).gain(0.52)

stack(
  bass, bass_2, soprano_sax, baritone_sax, brass_section, brass_section_2, kick, snare, snare_soft, low_tom, pedal_hat,
  mid_tom, high_tom, crash, ride
)

More by AC DC