Strudelify
Get It On (Bang a Gong) cover art

Electric Warrior

Get It On (Bang a Gong)

T. Rex

KeyE majorTempo115 bpm
0:00/0:00
// Get It On (Bang a Gong) — T. Rex
// 115 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(115/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(`<
  A B C D E F G H C I J K I L M I H B H F H N A L M I E O G P@2 G H B I O G@2 Q F I L M P R O P D S B I C P M H B I O
  G@2 Q F I L M P R O P D S B I C P M H M H I G I H M P O H B M H M T J B G D U K I N U F C H P H P C H P H C P C H P H
  C P C H P H C ~
>`.pickRestart({
  A: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2 g#1 ~", B: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2 d#2 ~",
  C: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 d#2 ~", D: "e2 ~ e2 ~ e2 ~ e2 e1 e2 ~ e2 ~ e2@2 f#2 ~",
  E: "g2 ~ g2 ~ g2 ~ g2@2 g2 ~ g2 ~ g2 ~ g2 ~", F: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 a0 a1 a0 a1!2",
  G: "e2 ~ e2 ~ e2 ~ e2 e1 e2 ~ e2 ~ e2@2 d#2 ~", H: "e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 e1",
  I: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 e1 e2 e1 e2!2", J: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 g#1 ~",
  K: "a1 ~ a1 ~ a1 ~ a1 a0 a1 ~ a1 ~ a1@2 d#2 ~", L: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 a0",
  M: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2", N: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2 f#2 ~",
  O: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2", P: "e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2 ~ e2 ~ e2 ~",
  Q: "e2 ~ e2 ~ e2 ~ e2 e1 e2 ~ e2 ~ e2@2 g#1 ~", R: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 g1 g2 g1 g2!2",
  S: "g2 ~ g2 ~ g2 ~ g2@2 g2 ~ g2 ~ g2 ~ g2 g1", T: "a1 ~ a1 ~ a1 ~ a1@2 a1 ~ a1 ~ a1 ~ a1 ~",
  U: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2@2",
})).s("gm_acoustic_bass").gain(0.64)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  A B C D E B F G H I J K I L M@2 N O N P M I E B G F E B G Q G M N L J L M I M K R L R I S T Q F S U C@2 F H N L J L M
  I M K R L R I S T Q F S U C@2 F H F G D@2 F R F G N L J V I M J P M V I R W U C@2 X U F C F C D F H D Q G D F H D Q G
  D F H D Q G ~
>`.pickRestart({
  A: "~@2 g3@2 d3@2 ~@2 g3 ~@2 g3 ~ g2 g3 d3, g2@9 ~ g2@2 ~@4, ~@2 e3 ~@6 d3@2 ~ d3@2 ~@2",
  B: "a2@2 e3 ~ e3@2 a2 ~ a2 ~ a2 ~ a2@2 e3 ~, ~@4 a2 ~@3 e3@4 ~@4",
  C: "f#3 ~@5 e3@4 ~@2 e3@2 [b3,e4]@2, e3@4 e2@5 ~ e2@4 ~@2, ~ b3@2 ~@5", // E5
  D: "~@2 e4 ~ b3@2 e3@2 e4 ~@2 e4 ~ e3 e4 b3, e2, ~@9 b3@2 ~ b3@2 ~@2, ~@5 e3 ~@2",
  E: "g2@2 d3 ~ d3@2 g2 ~ g2 ~ g2 ~ g2@2 d3 ~, ~@4 g2 ~@3 d3@4 ~@4",
  F: "~@2 b3 ~@2 e2 ~ b3, e2@9 ~@3 e3@4, ~@2 e3@4 [b3,e4]@7 ~@3", // E5
  G: "~@2 [e3,b3,e4] ~ [e3,b3,e4]@2 ~@2 [e3,b3,e4] ~ [e3,b3,e4] ~ [e3,b3,e4] ~ [e3,b3,e4] ~, ~@3 e2@5", // E5
  H: "~@2 [e3,b3,e4] ~@3 e2@2 [e3,b3,e4]@2 e2@4 [e3,b3,e4]@2", I: "[e3,b3]@10 e2@2 e3@2 b3 ~",
  J: "~@2 [e3,b3] ~@3 e2@2 ~@2 e2@2 ~@2 b3 ~, ~@2 [e3,b3] e3", // E5
  K: "a2@2 e3 ~@7 e3@2 ~@2 e3 ~, ~@6 a2@5 ~ a2@4, ~@4 a3@3 ~", L: "~@2 [a2,e3] ~@3 a2@2 ~@2 a2 ~ a2 ~ e3 ~, ~@2 e3 ~",
  M: "~@2 [e3,b3] ~@5 e3@2 b3@2 ~@2 b3 ~, e2@5 ~ e2@10, ~@4 e4@3 ~, ~@3 e3", N: "~@2 [e3,b3] ~@3 e2@2 [e3,b3]@6 ~@2",
  O: "[a2,e3]@11 ~ a2 ~ e3 ~", P: "~@2 [a2,e3] ~@3 a2@2 e3@6 ~@2",
  Q: "~@2 [e3,b3] ~ [e3,b3]@2 e2@2 ~@4 e3@2 b3 ~, e2@5 ~@3 [e3,b3]@4 ~@4, ~@5 e2@2 ~", // E5
  R: "~@2 [e3,b3]@2 ~@4 [e3,b3]@7 ~, ~@6 e2@9 ~", S: "a2 ~ d3@4 g2@3 ~ g2 ~ g2@2 [d3,g3]@2, g2 ~@3",
  T: "b2 ~ e3@4 a2@3 ~ a2 ~ a2@2 [e3,a3]@2, a2 ~@3", U: "~@2 [e3,a3] ~@3 a2@2 [e3,a3]@2 a2 ~@3 [a2,e3,a3]@2",
  V: "~@2 e3@2 ~@4 e3@7 ~, ~@6 a2@9 ~", W: "~@2 [d3,g3] ~@3 g2@2 [d3,g3]@2 g2 ~@3 [g2,d3,g3]@2",
  X: "~@4 d3@2 ~@4 g2 ~ g2 ~ d3@2, g2@6 [d3,g3]@7 ~@3", // G5
})).s("gm_distortion_guitar").gain(0.64)

// chords · distortion guitar · "DISTORTION" · soft notes
const distortion_guitar_soft = note(`<
  ~ A B ~ C A D E F ~ G ~@2 H ~@2 I ~ I J ~@2 C A E D C A E K E ~ I H G H ~@4 E H E ~ L M K D L N B@2 D F I H G H ~@4 E
  H E ~ L M K D L N B@2 D F D E ~@2 D E D E I H G O ~@2 G J ~ O ~ E P N B@2 Q N D B D B ~ D F ~ K E ~ D F ~ K E ~ D F ~
  K E ~
>`.pickRestart({
  A: "~@13 e3 ~@2", B: "~@7 c4 ~@8", C: "~@13 d3 ~@2", D: "~@6 e3@5 ~@5", E: "e2@5 ~@11", F: "e2@3 ~@9 e3 ~@3",
  G: "e2 ~@11 b3 ~@3", H: "a2 ~@11 e3 ~@3", I: "~@2 a#3 ~@13", J: "~@2 d#3 ~@13", K: "~@13 b3 ~@2", L: "~@7 d#3 ~@8",
  M: "~@7 f3 ~@8", N: "a2@3 ~@9 a2 ~@3", O: "a2 ~@3", P: "g2@3 ~@9 g2 ~@3", Q: "~@6 g2@3 ~@7",
})).s("gm_distortion_guitar").gain(0.4)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar = note(`<
  ~@2 A B ~@2 A C D E ~@4 F G ~@4 F H@2 ~ I H@2 ~ I J D E ~@4 F G ~@4 F H@2 ~ I H@2 ~ I J D E ~@4 F G ~@4 F H@2 ~ I H@2
  ~ I J D E K L M@2 K N K L ~@4 F G ~@4 F H@2 ~ I H@2 ~ I J D E K L M@2 K O K L M@2 K O K L M@2 K P@2
>`.pickRestart({
  A: "~@2 e4 ~ c#4 ~ b3 ~ e4@7 ~", B: "e4 ~ e4 ~ c#4 ~ e4@8 ~@2", C: "e4 ~ e4 ~ c#4 ~ e4@7 ~@3",
  D: "~@2 e4 ~ c#4 ~ b3 ~ e4@6 ~@2", E: "e4 ~ e4 ~ c#4 ~ e4@3 ~ b3@2 c#4 ~ e4 ~", F: "e4@2 e4@2 c#4 ~ b3 ~ e4@6 ~@2",
  G: "e4 ~ e4 ~ c#4 ~ e4@4 b3@2 c#4 ~ e4 ~", H: "[e4 ~ e4 ~ c#4 ~ e4@4 b3@2 c#4 ~ e4@8 ~@10]/2",
  I: "~@2 e4 ~ c#4 ~ b3 ~ e4@4 ~@4", J: "e4 ~ e4 ~ c#4 ~ e4@6 ~@4", K: "e4@2 e4@2 c#4@3 ~ b3@2 c#4@3 ~ e4@2",
  L: "~@3 e4 d4@2 ~ b3 a3@2 ~ g3 e3@3 ~",
  M: "[e4@2 e4@2 c#4@3 ~ b3@2 c#4@3 ~ e4@4 ~ e4 c#4@2 g#3@2 b3@2 c#4@3 ~ e4@2]/2",
  N: "~@3 e4 c#4@2 g#3@2 b3@2 b3@2 c#4@2 e4@2", O: "~@3 e4 c#4@2 g#3@2 b3@2 c#4@3 ~ e4@2",
  P: "[~@3 e4 c#4@2 g#3@2 b3@2 c#4@3 ~ e4@14 ~@4]/2",
})).s("gm_overdriven_guitar").gain(0.8)

// other · overdriven guitar · "OVERDRIVE"
const overdriven_guitar_2 = note(`<
  ~@2 A B ~@2 A C D E ~@4 F G ~@4 F H@2 ~ I J@2 ~ I K D E ~@4 F G ~@4 F H@2 ~ I J@2 ~ I K D E ~@4 F G ~@4 F H@2 ~ I J@2
  ~ I K D E L M N@2 L O L M ~@4 F G ~@4 F H@2 ~ I J@2 ~ I K D E L M N@2 L P L M N@2 L P L M N@2 L Q@2
>`.pickRestart({
  A: "~@2 g#3 ~ e3 ~ g#3 ~ g#3@7 ~", B: "g#3 ~ g#3 ~ e3 ~ g#3@8 ~@2", C: "g#3 ~ g#3 ~ e3 ~ g#3@7 ~@3",
  D: "~@2 g#3 ~ e3 ~ g#3 ~ g#3@6 ~@2", E: "g#3 ~ g#3 ~ e3 ~ g#3@3 ~ g#3@2 e3 ~ g#3 ~",
  F: "g#3@2 g#3@2 e3 ~ g#3 ~ g#3@6 ~@2", G: "g#3 ~ g#3 ~ e3 ~ g#3@4 ~@2 e3 ~ g#3 ~, ~@5 g#3@2 ~",
  H: "[g#3 ~ g#3 ~ e3 ~ g#3@4 ~@2 e3 ~ g3@8 ~@10, ~@5 g#3@2 ~@9]/2", I: "~@2 g#3 ~ e3 ~ g#3 ~ g#3@6 ~@2, b3@3 ~",
  J: "[g#3 ~ g#3 ~ e3 ~ g#3@4 g#3@2 e3 ~ g3@8 ~@10]/2", K: "g#3 ~ g#3 ~ e3 ~ g#3@6 ~@4",
  L: "g#3@2 g#3@2 e3@3 ~ g#3@2 e3@3 ~ g#3@2", M: "~@3 g#3 b3@2 ~ g#3 f#3@2 ~ b2 g#2@3 ~",
  N: "[g#3@2 g#3@2 e3@3 ~ g#3@2 e3@3 ~ g#3@4 ~ g#3 e3@2 b2@2 g#3@2 e3@3 ~ g#3@2]/2",
  O: "~@3 g#3 e3@2 b2@2 g#3@2 g#3@2 e3@2 g#3@2", P: "~@3 g#3 e3@2 b2@2 g#3@2 e3@3 ~ g#3@2",
  Q: "[~@3 g#3 e3@2 b2@2 g#3@2 e3@3 ~ g#3@14 ~@4]/2",
})).s("gm_overdriven_guitar").gain(0.6)

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

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@8 A ~@5 B ~@6 A ~@8 C ~@5 B ~@6 B ~@2 A D ~@10 B ~@6 B ~@2 A D ~@10 B ~@7 A ~@10 A ~@25
>`.pickRestart({
  A: "~@4 x ~@4 x ~@2 x ~@3", B: "~@3 x", C: "~@9 x ~@6", D: "~@10 x!2 ~ x!3",
})).gain(0.54)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@30 x ~@94>").gain(0.06)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~@5 B ~@6 A ~@8 B ~@5 B ~@6 B ~@2 A C ~@10 B ~@6 B ~@2 A C ~@10 B ~@7 A ~@10 A ~@25
>`.pickRestart({
  A: "~@4 x ~@4 x ~@2 x ~@3", B: "~@3 x ~@4", C: "~@4 x!4 ~@8",
})).gain(0.54)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A@5 ~ A@6 ~@10 A@5 ~ A@2 B A@3 ~@11 A@4 ~ A@2 B A@3 ~@16 A ~@2 A@4 ~ A@4 B A ~@30
>`.pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x!2 ~@2 x ~@3",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@14 A ~@15 B ~@5 A ~@6 A ~@3 C ~@10 A ~@6 A ~@3 C ~@10 A ~@44>".pickRestart({
  A: "x", B: "x ~@2 x ~@12", C: "x!2 ~@14",
})).gain(0.6)

// drums · ride
const ride = s("rd").struct(`<
  A ~@3 A ~@4 A ~@5 A ~@6 A ~@3 A ~@4 A ~@5 A ~@6 A ~@3 A ~@10 A ~@6 A ~@3 A ~@10 A ~@7 A ~@5 B A ~@3 A ~@24
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.6)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A@3 ~ A B A@2 ~@14 A C B ~ A B@2 A@2 ~@13 A@2 ~@2 A C A C A@2 ~@12 A@2 ~@2 A C A C A@6 ~@2 A@2 ~@12 A@3 ~ A@2 C A@3 C
  A@5 C A@5 C A@5 ~
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x!3 ~ x!2", C: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~",
})).gain(0.48)

stack(
  bass, distortion_guitar, distortion_guitar_soft, overdriven_guitar, overdriven_guitar_2, kick, snare, low_tom,
  pedal_hat, mid_tom, open_hat, high_tom, ride, tambourine
)

More by T. Rex