Strudelify
Bad Boy cover art

Past Masters

Bad Boy

The Beatles

KeyC majorTempo135 bpm
0:00/0:00
// Bad Boy — The Beatles
// 135 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "VOCAL LINE | GRAND PNO I-A15" named as a piano, played on piano (its soprano sax patch is not one)
// note: Full arrangement: all 80 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): MIDDLE LEAD | SYNCORD I-A14.
// note: The whole transcription plays 10 ms ahead of the beat; the grid follows it, so its parts stay together.
setcpm(135/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, A@4 for four bars: edit a riff to change every repeat.

// chords · piano · "CHORDS | CLAVIUM I-A4"
const piano = note(`<
  ~@4 A@8 B@4 A@4 C B D C A@8 B@4 A@4 C B D C A@4 B@2 A@2 C B D E A@8 B@4 A@4 C B D F@5
>`.pickRestart({
  A: "[c3,e3,g3,a#3]@3 ~ [c3,e3,g3,a#3]@3 ~ [c3,e3,g3,a#3]@3 ~ [c3,e3,g3,a#3]@3 ~", // C7
  B: "[f3,a3,c4,d#4]@3 ~ [f3,a3,c4,d#4]@3 ~ [f3,a3,c4,d#4]@3 ~ [f3,a3,c4,d#4]@3 ~", // F7
  C: "[g3,b3,d4,f4]@3 ~ [g3,b3,d4,f4]@3 ~ [g3,b3,d4,f4]@3 ~ [g3,b3,d4,f4]@3 ~", // G7
  D: "[c3,e3,g3]@3 ~ [c3,e3,g3]@3 ~ [c3,e3,g3]@3 ~ [c3,e3,g3]@3 ~", // C
  E: "[g3,b3,d4]@4 [g3,b3,d4]@3 ~ [g3,b3,d4]@4 [g3,b3,d4]@3 ~", // G
  F: "[[c3,e3,g3]@4 [c3,e3,g3]@3 ~ [c3,e3,g3]@3 ~ [c3,e3,g3,a#3]@59 ~@9]/5", // C C7
})).s("gm_piano").gain(0.48)

// chords · acoustic guitar steel · "A.CHORDS | ARPEGIUM I-C16"
const acoustic_guitar_steel = note(`<
  A B A C D@3 E F G H I J K L M N O P Q R S T U D@3 E V W H I X K L M Y O P Q Z S T AA AB AC AD AE AF AG AH AI AJ AK AL
  AM AN AO@2 AP AQ AR@2 AS J K L M N O P Q Z S T AT@5
>`.pickRestart({
  A: "[e3,g3,c4]@3 ~ [e3,g3,c4]@3 ~ [e3,g3,c4]@2 [e3,g3,c4]@3 ~ [e3,g3,c4]@2", B: "~ d#4 c4 g4 f4 d#4 c4 d#4",
  C: "~ a#3!2 g3 a#3!3 c4",
  D: "[g4@3 ~ a#3@2 d#4@2 f4@3 ~ a#3@2 c4@5 ~ [g3,a#3,d#4]@2 c4@2 [g3,b3,d#4]@2 [g3,b3,d#4]@3 ~ [e3,a#3]@3 ~ c3@2 d#3@2 f3@2 g3@3 ~ c4@3 ~, ~@4 f4 ~@7 f4 ~@17 c4@4 ~@14]/3", // D# Gaug Edim
  E: "f3@3 ~ d#3@2 c3@5 ~@3 c4@2, f#3 ~@15",
  F: "c4@2 c4@2 [g3,a#3]@2 c4@2 d#4@3 ~ [g3,a#3,f4]@2 [c4,d#4]@2, ~@4 d#4 ~@11", // Gm Gm7 Cm
  G: "g4@3 ~ [a#3,c4,g4]@2 g4@2 [g3,a#3,f4]@2 [g3,a#3,d#4]@3 ~ [e3,a#3,c4]@2", H: "~@2 c3@2 d#3@2 f3@2 g3@3 ~ c4@3 ~",
  I: "f3@3 ~ d#3@2 c3@5 ~@3 d#4@2, f#3 ~@15", J: "f4@3 ~ [a3,c4,f4]@2 d#4@2 f4@3 ~ [a3,c4,d#4]@2 g4@2",
  K: "f4@2 d#4@2 [a3,c4]@2 d#4@2 f4@3 ~ [a3,c4]@2 f4@2, ~@4 f4 ~@7 d#4 ~@3", L: "~@2 c4@3 ~ c4@3 ~ c4@3 ~ c4@2",
  M: "~@2 c4@3 ~ c4@2 c4@2 c4@4 c4 ~", N: "c4!2 [g3,a#3,d#4] c4 d#4!2 [g3,a#3,f4] f4",
  O: "g4@2 g4@2 [a#3,c4,g4]@3 ~ f4@2 d#4@2 c4@2 [e3,c4]@2", P: "~@2 c4@3 ~ f3@5 ~ d#3@3 ~, ~@2 b3 ~@3 f#3 ~@9",
  Q: "c3@5 ~@5 g4@3 ~ g4@2, ~@3 g3@4 ~", R: "g4 ~ g4@2 [b3,d4,f4,g4]@2 g4@2 g4 ~ g4@2 [b3,d4,f4,g4]@3 ~",
  S: "~@4 [a3,c4]@3 ~@5 [a3,c4]@3 ~", T: "[e3,g3,c4]@3 ~ c4@3 ~ d#4@2 f4@3 ~ d#4@2",
  U: "g4@3 ~ g3@2 g3@3 ~ [b3,d4,f4,g4]@2 [b3,d4,f4,g4] ~ [b3,d4,f4,g4]@2", // G7
  V: "c4@2 c4@2 [g3,a#3,d#4]@2 c4@2 d#4@3 ~ [g3,a#3,f4]@2 [c4,d#4]@2", // D# Gm7 Cm
  W: "g4@3 ~ [a#3,c4,g4]@2 g4@2 [g3,a#3,f4] ~ [g3,a#3,d#4]@3 ~ [e3,a#3,c4]@2", // C7 Gm7 D# C7
  X: "f4@3 ~ [a3,c4]@2 d#4@2 f4@3 ~ [a3,c4]@2 g4@2, ~@4 f4 ~@7 d#4 ~@3", // Am
  Y: "c4!2 [g3,a#3] c4 d#4!2 [g3,a#3,f4] f4, ~@4 d#4 ~@11", // Gm Gm7
  Z: "g4@2 g4@2 [b3,d4,f4,g4]@2 g4@2 g4@2 g4@2 [b3,d4,f4,g4]@3 ~", // G7
  AA: "g4@3 ~ g3@2 g3@3 ~ [b2,d3,f3,g3]@2 [b2,d3,f3,g3]@2 [b2,d3,f3,g3]@2", AB: "c3@3 ~ d#3@3 ~ c3@2 d#3@3 ~ c3@2",
  AC: "g3@3 ~ g3@3 ~ [f3,g3]@2 c3@2 ~@2 c3@2, f#3 ~@3 f#3 ~@11", AD: "d#3@3 ~ f3@2 f#3@2 g3@3 ~ c4@3 ~, ~@12 b3 ~@3",
  AE: "[f#3,g3]@2 c4@3 ~ c3@3 ~ d#3@2 g3@2 c4@2", AF: "d#4@3 ~ d#4@3 ~ d#4@4 d#4@4",
  AG: "d#4@4 d#4@3 ~ d#4@2 ~ d#4@2 d#4@2 ~", AH: "d#4@2 c4@2 c5@3 ~ c5@2 g4@3 ~ f#4@2, ~@10 f#4 ~@5",
  AI: "d#4@2 c4@3 ~ c4@2 a#3@2 g3@2 a#3@2 g3@2", AJ: "g3@3 g3 g3@2 g3@2 ~ g3 g3@2 g3@2 g3@2",
  AK: "f3@3 ~ f3@2 f3@3 ~ a#3@2 f3 d#3 c3@2", AL: "c3@3 c3 c3@2 c3@2 ~ c3 c3@2 c3@2 c3@2",
  AM: "b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@3 ~", AN: "c4@2 c4@2 [g3,d#4]@2 c4@2 d#4@3 ~ [g3,c4,f4]@2 f4@2",
  AO: "[g4@2 g4@2 [c4,e4,g4]@3 ~ f4@2 d#4@3 ~ [c4,e4]@3 ~ c3@2 d#3@2 f3@2 g3@3 ~ c4@3 ~, ~@7 g4@2 ~@7]/2", // C
  AP: "f#3 f3@4 ~ d#3@2 c3@2 a#3@2 a3@2 [g3,g4]@2", AQ: "g4!2 [a#3,c4] g4!3 [a#3,c4] g4, ~@4 g4 ~@7 g4 ~@3",
  AR: "[g4@2 [a#3,c4,g4]@3 ~ g4@3 ~ d#4@3 ~ [e3,a#3,c4]@5 ~ f#3@2 g3@2 f#3@2 g3@2 f#3@2 g3@2, ~@6 [a#3,c4]@7 ~@19]/2", // C7 A#sus2
  AS: "f#3@2 g3@2 f#3@2 g3@2 f#3@2 g3 f3 d#3@2 d#4@2", AT: "[g4@3 ~ g3@2 g3@2 ~@4 [a#2,c3,g3]@56 ~@12]/5",
})).s("gm_acoustic_guitar_steel").gain(0.64)

// bass · fretless bass · "BASS | FRETLESS P2-A10"
const bass = note(`<
  A ~ A B C D C@6 E@4 C@4 F E G H C@8 E@4 C@4 F E G H I@4 J@2 I@2 K L M N C@8 E@4 C@4 F E G O@5
>`.pickRestart({
  A: "[c3,g3]@3 ~ [c3,g3]@3 ~ [c3,g3]@2 [c3,g3]@3 ~ [c3,g3]@2", B: "~ a#2!2 g2 a#2!3 ~", C: "c2!2 d#2 f2 g2!2 f2 d#2",
  D: "c2@2 c2@2 d#2 ~ f2@2 g2@2 g2@2 f2@2 d#2@2", E: "f2!2 a2 a#2 c3!2 a#2 a2",
  F: "g2 ~ g2@2 b2 ~ c3@2 d3@2 d3@2 c3@2 b2@2", G: "c2@3 ~@13", H: "~@5 g2!3",
  I: "[c3,g3,a#3]@2 [c3,g3,a#3]@2 [c3,g3]@2 [c3,g3,a#3]@2 [g3,a#3] ~ [c3,g3,a#3]@2 [c3,a#3] ~ [c3,g3,a#3]@2, ~@4 a#3 ~@3 c3@2 ~@2 g3@2 ~@2", // C7 C5 C7 Gm C7
  J: "[f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4]@2 [f3,a3,c4] ~ [f3,a3,c4]@2 [f3,a3,c4] ~ [f3,a3,c4]@2", // F
  K: "[g3,b3] ~ [f3,g3,b3]@2 [f3,g3]@2 [f3,g3,b3]@2 [f3,g3,b3]@2 [f3,g3,b3]@2 [f3,g3,b3]@2 [f3,g3,b3]@2, f3@2 ~@2 b3 ~@11", // G G7 Fsus2 G7
  L: "[f3,a3] ~ [d#3,f3,a3]@2 [d#3,a3] ~ [d#3,f3,a3]@2 [d#3,f3,a3]@2 [d#3,f3,a3]@2 [d#3,f3,a3]@2 [d#3,f3,a3]@2, d#3 ~ f3 ~@5", // F F7 D#dim F7
  M: "[c3,e3,g3]@3 ~@13", N: "g2!8", O: "[~@12 [c3,e3]@59 ~@9]/5",
})).s("gm_fretless_bass").gain(0.48)

// chords · piano · "MIDDLE CHORDS | CLAVIUM I-A4"
const piano_2 = note("<~@44 A@4 B@2 A@2 C D E F ~@24>".pickRestart({
  A: "[c4,g4,a#4]@2 [c4,g4,a#4]@2 [c4,g4,a#4]@2 [c4,g4,a#4]@2 [c4,g4]@2 [c4,g4,a#4]@2 [g4,a#4] ~ [c4,g4,a#4]@2, ~@8 a#4 ~@3 c4@2 ~@2", // C7 C5 C7 Gm C7
  B: "[f4,a4,c5]@2 [f4,a4,c5]@2 [f4,a4,c5] ~ [f4,a4,c5]@2 [a4,c5] ~ [f4,a4,c5]@2 [f4,a4]@2 [f4,a4,c5]@2, ~@8 f4@2 ~@2 c5 ~@3", // F Am F
  C: "[f4,g4,b4]@2 [f4,g4,b4]@2 [f4,g4,b4]@2 [f4,g4,b4]@2 [f4,g4,b4] ~ [f4,g4,b4]@2 [f4,g4,b4] ~ [f4,g4,b4]@2", // G7
  D: "[d#4,f4,a4]@2 [d#4,f4,a4]@2 [f4,a4] ~ [d#4,f4,a4]@2 [d#4,f4,a4] ~ [d#4,f4,a4]@2 [d#4,f4,a4]@2 [d#4,f4,a4]@2, ~@2 d#4 ~@5", // F7 F F7
  E: "[c4,e4,g4]@3 ~@13", F: "g3!8",
})).s("gm_piano").gain(0.64)

// drums · kick
const kick = s("bd").struct("<A ~ A ~ B@4 C@2 B@12 D ~ B@18 D ~ B@30 D E ~@4>".pickRestart({
  A: "x ~ x ~ x!2 ~ x", B: "x ~@3 x!2 ~@2", C: "~ x ~@6 x ~ x ~@5", D: "x", E: "~@3 x",
})).gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@23 A ~@19 A ~@3 A ~@7 A ~@24>".pickRestart({
  A: "~@7 x",
})).gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@4 A ~@18 B ~@19 C ~@3 D ~@7 D ~@24>".pickRestart({
  A: "x", B: "x ~@2 x", C: "~@3 x", D: "~@6 x!2 ~ x!2 ~ x ~@3",
})).gain(0.8)

// drums · open hat
const open_hat = s("oh").struct(`<
  A ~ A ~ B C B C B C B D B C B C B C B D B@2 ~@2 B C B C B C B D B C B C B C B E B@2 ~@2 B C@2 F B C B C B@2 G ~ B C B
  C B C B H B C B C B C B C B@2 ~@6
>`.pickRestart({
  A: "x ~ x ~ x!2 ~ x", B: "~@2 x!6", C: "x!8", D: "x!6 ~@2", E: "x!7 ~", F: "x", G: "~@4 x!4", H: "x!5 ~@3",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@19 B ~@19 C ~@3 D ~@7 D ~@24>".pickRestart({
  A: "~@4 x ~@2 x", B: "~@3 x ~ x ~@2", C: "~@6 x!2 ~ x!2 ~@5", D: "x!2 ~ x!2 ~@11",
})).gain(0.56)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@3 ~ A ~@3 A ~ A ~ A@3 ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A@3 B ~@4
>`.pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.8)

stack(piano, acoustic_guitar_steel, bass, piano_2, kick, snare, low_tom, mid_tom, open_hat, high_tom, crash)

More by The Beatles