Strudelify

Whole Lotta Rosie

AC DC

KeyA minorTempo170 bpm
0:00/0:00
// Whole Lotta Rosie — AC DC
// 170 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 "sOLO" distortion guitar (copy of ch 3 "gUITARRA" distortion guitar)
// note: Full arrangement: all 160 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): gUITARRA.
setcpm(170/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 · distortion guitar · "gUITARRA"
const distortion_guitar = note(`<
  A B A B A B A B A B A B A B A B A B A B A B ~@2 A C D C D C D C D C D C D C D C D C D C D C D C D E@3 F@8 G@2 D C D C
  D C D C D C D C D C D C D C D E@3 F@8 G@2 D C D C D C D C D C D C D C D H@5 A B A B A B A B A B ~@2 A C D C D C D C D
  C D C D C D I@3 F@8 J@2 K@5 L
>`.pickRestart({
  A: "~@7 [a2,e3]", B: "[c3,e3] a2 [d3,a3] a2 [c3,e3] [a2,e3] ~@2",
  C: "[c3,e3,a3]@2 [a2,e3]@2 [d3,a3]@2 a2@2 [c3,e3]@2 [a2,e3,a3]@4 [a2,e3] ~", // Am A5 D5 C A5
  D: "[a2,e3]@2 [a2,e3]@2 [a2,e3,a3]@3 ~ [e3,a3]@2 [a2,e3,a3]@4 [a2,e3]@2", // A5
  E: "[[e3,a3]!6 [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@10 [d3,a3,d4]@2, a2!3 ~@9]/3", // A5 G5 D5
  F: "[~@2 [d3,a3,d4]@6 [d3,a3,d4]@20 [a2,e3,a3]@12 e2 ~ [g2,d3,g3]@18 [a2,e3,a3]@12 e2 ~ [g2,d3,g3]@18 [a2,e3,a3]@12 e2 ~ [g2,d3,g3]@18 [g2,d3,g3]@4]/8", // D5 A5 G5 A5 G5 A5 G5
  G: "[~@2 [f#2,c#3,f#3]@6 [g2,d3,g3]@6 [f#2,c#3,f#3]@6 [g2,d3,g3]@4 [g#2,d#3,g#3]@4 [a2,e3,a3]@2 [a2,e3] ~]/2", // F#5 G5 F#5 G5 G#5 A5
  H: "[[c3,e3,a3] [a2,e3] [d3,a3] a2 [c3,e3] [a2,e3,a3] [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@10 [d3,a3,d4]@3 [d3,a3,d4]@3 [d3,a3,d4]@10 [a2,e3] ~]/5", // Am A5 D5 C A5 G5 D5 A5
  I: "[[c3,e3,a3] [a2,e3] [d3,a3] a2 [c3,e3] [a2,e3,a3] [g2,d3,g3]@3 [g2,d3,g3]@3 [g2,d3,g3]@10 [d3,a3,d4]@2]/3", // Am A5 D5 C A5 G5 D5
  J: "[~ [f#2,c#3,f#3]@3 [g2,d3,g3]@3 [f#2,c#3,f#3]@3 [g2,d3,g3]@2 [g#2,d#3,g#3]@2 [a2,e3,a3]@2]/2", // F#5 G5 F#5 G5 G#5 A5
  K: "[[e3,a3]!16 [e3,a3]!16 [e3,a3]!15 ~ [a2,e4]@32, [a2,e4]@47 [e3,a3]@33]/5", L: "[a2,e3,a3,e4] ~@3",
})).s("gm_distortion_guitar").gain(0.43).pan(1)

// bass · electric bass pick · "bAIXO"
const bass = note(`<
  A B A B A B A B A B A B A B A B A B A B A B ~@2 A C D@23 E F G H I J K J K J L@3 D@19 E F G H I J K J K J L@3 D@11 M
  N@3 O F G H P A B A B A B A B A B ~@2 A Q D@13 E F G H I J K J K J L@3 D@3 R S T
>`.pickRestart({
  A: "~@14 a1 ~", B: "c2 ~ a1 ~ d2 ~ a1 ~ c2 ~ a1 ~@5", C: "c2 ~ a1 ~ d2 ~ a1 ~ c2 ~ a1 ~ a1@2 ~@2", D: "a1!8",
  E: "a1!6 g1!2", F: "g1!8", G: "g1!6 d2!2", H: "d2!8", I: "d2!6 a1@2", J: "a1@2 a1@2 a1@2 a1@2 e1 ~ g1@4 g1@2",
  K: "g1!6 a1@2", L: "[g1!6 g1@3 f#1@3 g1@3 f#1@3 g1@2 g#1@2 a1!2]/3", M: "a1!6 g2@2", N: "a2@2 a2!4 g2@2",
  O: "a2@2 a2!4 g1!2", P: "d2!6 a1 ~", Q: "c2 ~ a1 ~ d2 ~ a1 ~ c2 ~ a1 ~ a1@2 a1@2", R: "a1!4", S: "a1", T: "a1 ~@3",
})).s("gm_electric_bass_pick").gain(0.72)

// other · distortion guitar · "gUITARRA"
const distortion_guitar_2 = note(`<
  ~@93 A B@2 C@2 D E@3 F G H I J K L M@2 N O@2 P Q P Q P Q P Q P Q R S T P@4 U V W X@4 Y Z@2 ~@19
>`.pickRestart({
  A: "~@12 a4!2 c5!2", B: "[c5!14 a4@14 a4 c5!3]/2", C: "[c5!12 a4@15 ~ a4 c5!3]/2", D: "c5@3 ~ a4 c5!3 c5@3 ~ a4 c5!3",
  E: "[c5@3 ~ a4 c5!3 c5@3 ~ a4!2 d5@10 f#5@2 d#5@16 a5 g5 e5 d5 c#5 c5]/3", F: "a4 ~ c5 ~ a4@5 ~ a5 g5 e5 d5 c#5 c5",
  G: "a4 ~ c5 ~ a4@6 g#5@4 g#5!2", H: "g#5!16", I: "g#5!3 ~ g#5 ~ g#5@9 a5", J: "a5 g5 a5!3 g5 a5!3 g5 a5!3 g5 a5!2",
  K: "a5 g5 a5!2 g5 a5!3 g5 a5!3 g5 a5!3", L: "g5 a5!3 g5 a5!3 g5 a5!3 b5 a5 g5 e5",
  M: "[d5 c#5 c5 a4!2 g4 e4 d4 c#4 c4 a3@2 c6@6 c6@12 a5@2]/2", N: "a5 b5 ~@2 c6 ~@2 b5 ~@2 a5 ~ b5 a5 g5 e5",
  O: "[e5 d5 c#5 a4!2 g4 e4 ~ a4 g4 e4 ~ c5@10 c5@6 ~@2 a3@2]/2", P: "c4 a3 d4 a3 c4 a3@3", Q: "~@7 a3",
  R: "c4@2 a3@2 d4@2 a3@2 c4@2 a3@4 a3 ~", S: "c4 ~ a3 ~ d4@2 a3 ~ c4@2 a3@4 a3 ~", T: "c4 ~ a3 ~ d4@4 c4 ~ a3@4 a3@2",
  U: "d4@4 d4@4 d4@4 a4 g4 e4 d4", V: "c4 b3 a3!2 a4 g4 e4 d4 c4 b3 a3!2 a4 g4 e4 d4",
  W: "c4 b3 a3!2 a4 g4 e4 d4 c4 b3 a3 a3@5",
  X: "[a4 g4 e4 d4 c4 b3 a3!2 d4@2 c4@8 e4@2 g5@6 g5@2 g5@6 g5@2 g5@6 g5@2 g5@6 g5 [f5,g5] g5@2 g5 [f5,g5] g5@2 g5 [f5,g5] a5@2 g5 [f5,g5]]/4", // Fsus2
  Y: "a5@2 g5 [f5,g5] a5@2 g5 [f5,g5] a5@2 g5 [f5,g5] a5@2 a5 b5", // Fsus2
  Z: "[a5 g5 a5 g5 e5 g5 e5 d5 e5 d5 c5 e5@2 d5 c5 e5@2 d5 c5 e5@2 d5 c5 e5@2 d5 c5 e5@2 d5 c5 ~, ~@11 b4@4 b4@4 b4@4 b4@4 b4@4 ~]/2",
})).s("gm_distortion_guitar").gain(0.27).pan(0)

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

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A@24 B C A C A@6 B D E A@19 B C A C A@6 F D E A@15 G C A C A ~ A ~ A ~
  A ~ A ~ A ~@3 A@13 H I C J C A@6 F D E ~@4 K ~
>`.pickRestart({
  A: "x!2", B: "x ~@7 x!4 ~@4", C: "x ~@2 x ~@4", D: "x ~@2 x ~@2 x ~", E: "~ x ~@6", F: "x ~ x!2 ~@4 x!4 ~@4",
  G: "x!2 ~@2", H: "x ~@7 x ~@5 x!2", I: "x!3 ~@5", J: "x ~@3 x ~ x!2 ~@8", K: "x!4",
})).gain(0.72)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  A B A B A B A B A B A B A B A B A B A B A B A@3 ~@89 A B A B A B A B A B A@3 ~@33
>`.pickRestart({
  A: "x!4", B: "~@3 x",
})).gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@65 B ~@17 C ~@5 A ~ A ~ A ~ A ~ A ~@3 A ~@13 D ~ E ~@7 B ~@8
>`.pickRestart({
  A: "x!2", B: "~@5 x!3 ~@8", C: "~@6 x!3 ~@7", D: "~@6 x!5 ~@5", E: "~@8 x!3 ~@5",
})).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@25 A B@23 C A C A C D C D C D C ~@2 B@19 C A C A C D C D C D E ~@2 B@15 D A C A C ~@13 A B@13 ~ A D A C D C D C D E
  ~@8
>`.pickRestart({
  A: "~@3 x", B: "x!4", C: "x!3 ~", D: "x!2 ~@2", E: "x",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@25 A ~@23 B C B C B A B A B A B D E ~@19 B C B C B A B A B A B D E ~@15 B C B C B ~@13 A ~@13 B C B C B A B A B A B
  D F G@4 ~ H
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@3 x", C: "~ x ~@2 x ~@3", D: "~ x ~@2 x ~@2 x", E: "~ x!3", F: "~@4 x ~@3 x ~@3 x!4", G: "x!16",
  H: "x",
})).gain(0.72)

stack(distortion_guitar, bass, distortion_guitar_2, kick, snare, pedal_hat, mid_tom, open_hat, crash)

More by AC DC