Strudelify
Hey Bulldog cover art

Yellow Submarine

Hey Bulldog

The Beatles

KeyB majorTempo100 bpm
0:00/0:00
// Hey Bulldog — The Beatles
// 100 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 73 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): Electric Guitar.
setcpm(100/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · slap bass 1 · "Bass Guitar"
const bass = note(`<
  ~@2 A B C D C E F G F H C D C E F G F H I J K L M A B A B C D C E F G F H C D C E F G F H I J K L M A B A B N O N P N
  O N P N O N P N O N P N O ~
>`.pickRestart({
  A: "b1 ~ b1@2 d2@2 b1 e2@2 b1 f2@4 f#2@2", B: "b1 ~ b1@2 d2@2 b1 f#2@2 b1 f2@4 e2@2",
  C: "b1 ~ b1 ~ b1 ~ b1!2 ~ b1 a1 ~ g#1 ~ g1 ~", D: "f#1 ~ f#1 ~ f#1@2 g#1 a1@2 g#1 a1 ~ c#2@2 e2@2",
  E: "f#1 ~ f#1@2 g#1 ~ a1 c#2@2 b1 a1@2 c#2@2 e2 ~", F: "a2 ~ a2@2 e2@2 a2 ~ f#2 ~ f#2@2 c#2@2 f#2 ~",
  G: "e2 ~ e2 ~ e2@2 f#2 g#2 ~ f#2 e2@2 f#2 e2 g#2@2", H: "b1 ~ b1@2 f#2 ~ f#2@2 b1 ~ b1@2 f#2 ~ f#2@2",
  I: "b1 ~ b1@4 f#1@2 b1 ~ b1@4 f#1@2", J: "b1 ~ b1@4 f#1@2 b1@2 f#1@2 b1@2 f#1 ~", K: "e2 ~ e2@4 b1@2 e2 ~ e2@4 b1@2",
  L: "e2 ~ e2@4 b1@2 e2@2 b1@2 e2@2 b1 ~", M: "b1 ~ b1@3 ~ b1 d2 e2 ~ e2 ~ e2@2 d2 ~",
  N: "b2 ~ b2@2 f#2 ~ f#2@2 b2 ~ b2@2 f#2 ~ f#2 ~", O: "f#2 ~ f#2@2 c#2 ~ c#2@2 f#2 ~ f#2@2 c#2 ~ c#2@2",
  P: "f#2 ~ f#2@2 c#2 ~ c#2@2 f#2 ~ f#2@2 c#2 ~ c#2 ~",
})).s("gm_slap_bass_1").gain(0.36)

// other · distortion guitar · "Distorted Guitar"
const distortion_guitar = note(`<
  ~@2 A B ~@21 A B A B C D E F G H G I ~@13 A B A B A J A J A J A J A J A J A J A J A K ~
>`.pickRestart({
  A: "b2 ~ b2@2 d3@2 b2 e3@2 b2 f3@4 f#3@2", B: "b2 ~ b2@2 d3@2 b2 f#3@2 b2 f3@4 e3@2",
  C: "~@2 b3!6 ~@2 b2@2 d#3 f#3 b3@2", D: "a3@3 b3 c#4@3 ~", E: "b3!8 ~@2 b2@2 d#3 f#3 b3@2", F: "a3@3 b3 c#4@4",
  G: "~@2 e4 ~ e4 ~ e4@2 d#4@2 c#4@2 b3@2 c#4@2", H: "b2@2 f#3@2 b3@2 f#3@2 a3@2 f#3@2 b3@2 c#4 ~",
  I: "f#3 a3 b3 f#3 a3 b3 c#4 b3", J: "f#2 ~ f#2@2 a2@2 f#2 b2@2 f#2 c3@4 c#3@2", K: "f#2 ~ f#2@2 a2@2 ~@10",
})).s("gm_distortion_guitar").gain(0.14)

// chords · piano
const piano = note(`<
  A B A B C D C E F G H I C D C E F G H I J K L M N A B A B C D C E F G H I C D C E F G H I J K L M N A B A B O P Q R S
  P Q R S P Q R S P Q R S T ~
>`.pickRestart({
  A: "[b2,b3] ~ [b2,b3]@2 [d3,d4]@2 [b2,b3] [e3,e4]@2 [b2,b3] [f3,f4]@3 ~ [f#3,f#4] ~", // B D B E B F F#
  B: "[b2,b3] ~ [b2,b3]@2 [d3,d4]@2 [b2,b3] [f#3,f#4]@2 [b2,b3] [f3,f4]@4 [e3,e4]@2", // B D B F# B F E
  C: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~", // B
  D: "[f#3,a3,a#3,c#4] ~ a3 ~ [f#3,a3] ~ [f#3,a3] ~ [f#3,a3] ~ [f#3,a3] ~ [f#3,a3] ~ a3 ~", // F# F#m
  E: "[f#3,a3,c#4] ~ [f#3,a3] ~ [f#3,a3] ~ [f#3,a3] ~ [f#3,a3,c#4] ~ [f#3,a3] ~ [f#3,a3] ~ [f#3,a3,c#4] ~", // F#m
  F: "[e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [f#3,a3] ~ [f#3,a3,c#4] ~ [f#3,a3] ~ [f#3,a3,c#4] ~", // A F#m
  G: "[e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~", // E
  H: "[e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [f#3,a3] ~ [f#3,a3,c#4] ~ [f#3,a3] ~ a3 ~", // A F#m
  I: "[f#3,b3,d#4] ~ [f#3,b3] ~ [f#3,b3] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~", // B B5 B
  J: "[b2,f#3,b3,f#4] ~ [b2,f#3,b3,f#4] ~ [b2,f#3,b3,f#4] ~ [b2,f#3,b3,f#4] ~ [b2,g3,b3,g4] ~ [b2,g3,b3,g4] ~ [b2,g3,b3,g4] ~ [b2,g3,b3,g4] ~", // B5 Em
  K: "[b2,g#3,b3,g#4] ~ [b2,g#3,b3,g#4] ~ [b2,g#3,b3,g#4] ~ [b2,g#3,b3,g#4] ~ [b2,a3,b3,a4] ~ [b2,a3,b3,a4] ~ [b2,a3,b3,a4] ~ [b2,a3,b3,a4] ~", // E B7
  L: "[e3,b3,e4,b4] ~ [e3,b3,e4,b4] ~ [e3,b3,e4,b4] ~ [e3,b3,e4,b4] ~ [e3,c4,e4,c5] ~ [e3,c4,e4,c5] ~ [e3,c4,e4,c5] ~ [e3,c4,e4,c5] ~", // E5 C
  M: "[e3,c#4,e4,c#5] ~ [e3,c#4,e4,c#5] ~ [e3,c#4,e4,c#5] ~ [e3,c#4,e4,c#5] ~ [e3,d4,e4,d5] ~ [e3,d4,e4,d5] ~ [e3,d4,e4,d5] ~ [e3,d4,e4,d5] ~", // C#m E7
  N: "[a2,b2,b3,d4,f#4] ~ [b2,b3,d4,f#4] ~ [b2,b3,d4,f#4] ~ [b2,b3,d4,f#4] d3 [e3,b3,e4,g4] ~ [e3,b3,e4,g4] ~ [b3,e4,g4] ~ [b3,e4,g4] ~, ~@6 e3 d3", // Bm7 Bm Em
  O: "~@2 [b2,b3]@2 [d3,d4]@2 [b2,b3] [e3,e4]@2 [b2,b3] [f3,f4]@4 [f#3,f#4]@2", // B D B E B F F#
  P: "[f#2,f#3] ~ [f#2,f#3]@2 [a2,a3]@2 [f#2,f#3] [b2,b3]@2 [f#2,f#3] [c3,c4]@4 [c#3,c#4]@2", // F# A F# B F# C C#
  Q: "[b2,b3] ~ [b2,b3]@2 [d3,d4]@2 [b2,b3] [e3,e4]@2 [b2,b3] [f3,f4]@4 [f#3,f#4]@2", // B D B E B F F#
  R: "[f#2,f#3] ~ [f#2,f#3]@2 [a2,a3]@2 [f#2,f#3] [b2,b3]@2 [f#2,f#3] [c3,c4]@4 c#3@2, ~@14 c#4 ~", // F# A F# B F# C
  S: "b3 ~ [b2,b3]@2 [d3,d4]@2 [b2,b3] [e3,e4]@2 [b2,b3] [f3,f4]@4 [f#3,f#4]@2", // B D B E B F F#
  T: "[f#2,f#3] ~ [f#2,f#3]@2 [a2,a3]@2 [f#2,f#3] [b2,b3]@2 ~@7", // F# A F# B
})).s("gm_piano").gain(0.34).pan(0.2)

// chords · piano · soft notes
const piano_soft = note("<~@5 A ~ B C ~ D E ~ A ~ B C ~ D E ~@10 A ~ B C ~ D E ~ A ~ B C ~ D E ~@28>".pickRestart({
  A: "~@2 [f#3,c#4] ~ c#4 ~ c#4 ~ c#4 ~ c#4 ~ c#4 ~ [f#3,c#4] ~", B: "~@2 c#4 ~ c#4 ~ c#4 ~@3 c#4 ~ c#4 ~@3",
  C: "~@8 c#4 ~@3 [a#3,c#4] ~@3", D: "~@8 c#4 ~@3 c#4 ~ [f#3,c#4] ~", E: "~@2 d#4 ~ d#4 ~@11",
})).s("gm_piano").gain(0.19).pan(0.2)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@4 A B C D E F E G A B C D E F E G H I J K L M ~@3 A B C D E F E G A B C D E F E G H I J K L M ~@22
>`.pickRestart({
  A: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3] ~ [f#3,b3,d#4] ~ [b3,d#4] ~", // B B5 B
  B: "[f#3,a3,c#4] ~ a3 ~ a3 ~ a3 ~ [f#3,a3,c#4] ~ a3 ~ [f#3,a3] ~ a3 ~", // F#m
  C: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3] ~ [f#3,b3,d#4] ~ [f#3,b3] ~ [f#3,b3,d#4] ~", // B B5 B B5 B
  D: "[f#3,a3,c#4] ~ [f#3,a3] ~ [f#3,a3] ~ [f#3,a3,c#4] ~ a3 ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~", // F#m
  E: "[e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [e3,a3,c#4] ~ [f#3,a3] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~ [f#3,a3,c#4] ~", // A F#m
  F: "[e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~ [e3,g#3,b3] ~", // E
  G: "[f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~ [f#3,b3,d#4] ~", // B
  H: "[f#3,b3,f#4]@4 ~@2 [b2,f#3,b3,f#4] ~ [b2,g3,b3,g4]@5 ~ [b2,g3,b3,g4] ~, b2 ~@15", // B5 Em
  I: "[b2,g#3,b3,g#4]@5 ~ [b2,g#3,b3,g#4] ~ [b2,a3,b3,a4]@5 ~ [b2,a3,b3,a4] ~", // E B7
  J: "[e3,b3]@2 [e3,b3]@3 ~ [e3,b3,e4,b4] ~ [e3,c4]@2 [e3,c4]@3 ~ [e3,c4,e4,c5] ~, [e4,b4]@4 ~@4 [e4,c5]@5 ~@3", // E5 C E5 C
  K: "[e3,c#4]@2 [e3,c#4]@3 ~ [e3,c#4,e4,c#5] ~ [e3,d4]@2 [e3,d4]@4 e3 ~, [e4,c#5]@5 ~@3 [e4,d5]@6 ~@2", // C#m E7 C#m E7
  L: "b3 ~ b3 ~ b3 ~ b3 d4 e4 ~ e4 ~ [d3,e4]@2 d4 ~, b2@3 d3 e3@2 ~@2", M: "b2 ~@15",
})).s("gm_string_ensemble_1").gain(0.17).pan(0.7)

// chords · string ensemble 1 · "Strings" · soft notes
const string_ensemble_1_soft = note(`<
  ~@4 A B C D E ~ E ~ A B C D E ~ E ~ F ~@8 A B C D E ~ E ~ A B C D E ~ E ~ F ~@27
>`.pickRestart({
  A: "~@10 d#4 ~@3 f#3 ~", B: "~@2 [f#3,c#4] ~ [f#3,c#4] ~ [f#3,c#4] ~@3 [f#3,c#4] ~ c#4 ~ [f#3,c#4] ~",
  C: "~@8 d#4 ~@3 d#4 ~@3", D: "~@2 c#4 ~ [a#3,c#4] ~@3 [f#3,c#4] ~@7", E: "~@8 c#4 ~@7", F: "~ b2@3 ~@12",
})).s("gm_string_ensemble_1").gain(0.08).pan(0.7)

// other · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note(`<
  [b2 ~ b2@2 d3@2 b2 e3@2 ~ f3@4 f#3@2]
  [b2 ~ b2@2 d3@2 b2 f#3@2 b2 f3@4 e3@2]
  ~@69
  [~@7 b2@2 ~@7]
  ~
>`).s("gm_electric_guitar_clean").gain(0.24).pan(0.8)

// other · electric guitar clean · "Electric Guitar" · soft notes
const electric_guitar_clean_2 = note("<[~@9 b2 ~@6] ~@70 [~@6 f#2 ~@9] ~>")
  .s("gm_electric_guitar_clean").gain(0.15).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@2 A B C@21 A B A B C@21 A B A B A B A B A B A B A B A B A B A B A D ~>".pickRestart({
  A: "x!2 ~@3 x ~@2", B: "x!2 ~ x!3 ~@2", C: "x!2 ~@2 x!2 ~@2", D: "x!2 ~ x!2 ~@3",
})).gain(0.3)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@2 A ~@22 A ~ A ~@22 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2>".pickRestart({
  A: "~@3 x!2 ~@2 x",
})).gain(0.15)

// drums · snare
const snare = s("sd").struct("<~@2 A B C@21 A B A B C@21 A B A B A B A B A B A B A B A B A B A B A D ~>".pickRestart({
  A: "~@3 x!2 ~@6 x!3 ~ x", B: "~@3 x!3 ~ x ~@3 x!5", C: "~ x ~ x", D: "~@3 x!3 ~ x ~@8",
})).gain(0.25)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@2 A B ~@21 A B A B ~@21 A B A B A B A B A B A B A B A B A B A B A ~@2
>`.pickRestart({
  A: "~@5 x ~ x ~@8", B: "~@9 x ~@6",
})).gain(0.15)

// drums · ride
const ride = s("rd").struct("<~@2 [x!4]!69 [x!3 ~] ~>").gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 A B C D C D C D C D C D C D C D C D C D C D C A B A B C D C D C D C D C D C D C D C D C D C D C A B A B A B A B A
  B A B A B A B A B A B A E ~
>`.pickRestart({
  A: "x ~@2 x!2 ~ x!3 ~ x!3 ~ x!2", B: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~@3 x ~ x!3 ~ x ~ x ~@2 x",
  D: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!2", E: "x ~ x!3 ~ x!3 ~@7",
})).gain(0.3)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@23
>`.pickRestart({
  A: "~ x ~@5 x",
})).gain(0.2)

stack(
  bass, distortion_guitar, piano, piano_soft, string_ensemble_1, string_ensemble_1_soft, electric_guitar_clean,
  electric_guitar_clean_2, kick, kick_soft, snare, snare_soft, ride, tambourine, tambourine_soft
)

More by The Beatles