Strudelify
Fixing a Hole cover art

Sgt. Pepper's Lonely Hearts Club Band

Fixing a Hole

The Beatles

KeyF minorTempo130 bpm
0:00/0:00
// Fixing a Hole — The Beatles
// 130 bpm, 12/8, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/4 at bar 1, 12/8 at bar 3) are rendered on a constant 12/8 grid of one bar per cycle
// note: pitch bends are ignored
// note: ch 4 "Bass double" named as a bass, played on acoustic bass (its electric guitar muted patch is not one)
// note: duplicate parts dropped: ch 4 "Bass double" acoustic bass (copy of ch 2 "Bass" acoustic bass)
// note: Full arrangement: all 73 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/6)

// 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 · harpsichord
const harpsichord = note(`<
  A B@2 C D E F E F E F C D E F E F E G H@3 I J@3 K L@4 E F E F C D E F E F E G H@3 I J@3 K L@4 E F E F E F E F E F E F
  E F E F E ~
>`.pickRestart({
  A: "~@13 c4 [f4,a4] ~ [c4,f4,a4] ~@2 [c4,f4,a4] ~ [c4,f4,a4] ~@2, ~@13 [c2,c3,f3,a3]@10 ~", // F
  B: "[[c4,e4,ab4] ~ [c4,e4,ab4] ~@2 [c4,e4,ab4] ~@2 [c4,e4,ab4] ~ [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~ [c4,eb4,ab4] ~@2 [c4,eb4,ab4] ~ [bb2,f3,c4,d4,ab4]@28, [c2,c3,g3]@5 [c2,c3,f3]@5 ~@14]/2", // Caug Ab Bb7 C5 F5
  C: "[a3,c4,f4]@2 ~ [a3,c4,f4]@2 ~ [ab3,c4,e4]@2 ~ [ab3,c4,e4]@2 ~", // F Abaug
  D: "[ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 ~ [ab3,c4,d4]@2 ~ [ab3,c4,d4]@2 ~", // Ab Dm7b5
  E: "[ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 ~", // Ab
  F: "[ab3,c4,d4]@2 ~ [ab3,c4,d4]@2 ~ [ab3,c4,d4]@2 ~ [ab3,c4,d4]@2 ~", G: "[bb1,f2,bb2,f3,bb3,d4]",
  H: "[c4,f4,a4]@4 ~@2 [c4,f4,a4]@3 ~@3 [bb3,d4,g4]@4 ~@2 [bb3,d4,g4]@3 ~@3, [f2,f3]@11 ~ [c2,c3]@11 ~", // F Gm F C
  I: "[f2,f3,c4,f4,a4]@2 ~ [f2,f3,c4,f4,a4]@2 ~ [e2,e3,c4,f4,a4]@2 ~ [d2,d3,c4,f4,a4]@2 ~", // F Fmaj7 Dm7
  J: "[c2,c3,c4,e4,g4]@2 ~ [c2,c3,c4,e4,g4]@2 ~ [g1,g2,b3,d4,g4]@2 ~ [g1,g2,b3,d4,g4]@2 ~", // C G
  K: "[c2,c3,c4,e4,g4]@2 ~ [c2,c3,c4,e4,g4]@2 ~ [d2,d3,c4,e4,g4]@2 ~ [e2,e3,c4,e4,g4]@2 ~", // C
  L: "[~@90 [ab3,c4,d4]@5 ~, f2@9 ~@3 c2@8 ~@4 f2@8 ~@4 c2@8 ~@4 f2@8 ~@4 c2@8 ~@4 f2@8 ~@4 c2@8 ~@4, ~@3 [a3,c4,f4]@4 ~@2 [ab3,c4,e4]@4 ~@2 [ab3,c4,eb4]@4 ~@2 [ab3,c4,d4]@4 ~@2 [ab3,c4,eb4]@4 ~@2 [ab3,c4,eb4]@4 ~@2 [ab3,c4,d4]@4 ~@5]/4", // Dm7b5 F Abaug Ab Dm7b5 Ab Dm7b5
})).s("gm_harpsichord").gain(0.25).pan(0.1)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@3 A B@3 C@4 A B@3 D@4 E@3 F G@3 H A B@3 C@4 I J@2 K L M@2 ~ E@3 F G@3 H A B@3 C@4 I J@3 N O@8 ~
>`.pickRestart({
  A: "f2@9 ~@3 c2@8 ~@4", B: "f2@2 ~ c2@2 ~",
  C: "[f2@7 ~@3 c2@2 ~@4 f2@2 ab2@14 ~@2 c2@2 ~@4 f2@2 ab2@14 ~@2 c2@2 ~@4 f2@2 ab2@14 ~@2 c2@2 ~@4 f2@2 ab2@5 ~]/4",
  D: "[f2@9 ~ c2@2 ~@4 f2@2 ab2@14 ~@2 c2@2 ~@4 f2@2 ab2@14 ~@2 c2@2 ~@4 f2@2 ab2@14 ~@16]/4",
  E: "f2@3 ~@3 f2@3 ~@3 c2@3 ~ d2@2 f2@3 ~ d2@2", F: "f2 ~ f2 ~ e2 ~ d2 ~",
  G: "c2@3 ~@3 c2@3 ~@3 g1@3 ~ a1@2 b1@3 ~ a1@2", H: "c2 ~ c2 ~ d2 ~ e2 ~", I: "f2@5 ~ f2@5 ~ c2@4 ~@2 c2@4 ~@2",
  J: "f2@2 ~ f2@2 ~ c2@2 ~ c2@2 ~", K: "f2@4 ~@2 f2@4 ~@2 c2@3 ~ f2@2 ab2@5 ~", L: "~@10 c2@2 ~@4 f2@2 ab2@5 ~",
  M: "~@5 c2 ~@2 f2 ab2@3", N: "f2@4 ~@2 f2@4 ~@2 c2@3 ~ f2@2 ab2@6",
  O: "[~@5 c2 ~@2 f2 ab2@7 ~ c2 ~@2 f2 ab2@7 ~ c2 ~@2 f2 ab2@7 ~ c2 ~@2 f2 ab2@7 ~ c2 ~@2 f2 ab2@7 ~ c2 ~@2 f2 ab2@7 ~ c2 ~@2 f2 ab2@7 ~ c2 ~@2 f2 ab2@3]/8",
})).s("gm_acoustic_bass").gain(0.19)

// chords · overdriven guitar · "Guitar 1"
const overdriven_guitar = note(`<
  ~@9 A@2 ~@6 B C ~@3 D E@3 F@3 ~@4 A@2 G@4 H@4 ~@3 D E@3 I@2 ~@5 B C ~@6 J@6 ~@2
>`.pickRestart({
  A: "[[ab4,c5]@5 ~ [f4,ab4]@5 ~ [c4,f4]@3 ~@3 [ab3,eb4]@4 [f3,d4]@24 ~@2]/2", // Ab Fm F5 Ab5 Dm
  B: "[ab4,c5]@5 ~ [f4,ab4]@5 ~ [c4,f4]@4 ~@2 [ab3,eb4]@4 ~@2", C: "[f3,d4]", D: "~@6 f2@5 ~ e2@5 ~ d2@5 ~",
  E: "c3@5 ~ e3@4 g3 ~ g2@5 ~ b2@4 d3 ~", F: "[c3@4 e3@2 g3@2 ~@2 a3@2 bb3@2 ~@2 c4@2 d4@35 ~@19]/3",
  G: "[[c4,f4]@8 ~@2 eb4@8 ab4@10 f4@5 ~ ab4@2 c4@5 ~ f4@4 ab3@4 ~@2 c4@2 f3@5 ~ ab3@4 c4@6 f4@6 ab4@15 ~@5, a4@5 ~@43]/4", // F5
  H: "[~@4 eb3@2 f3@4 ab3@2 c4@3 ~ ab3@5 ~ f3@5 ~ eb3@5 ~ d3@5 ~ c3@5 ~ bb2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ f2@11 ~@15]/4",
  I: "[c3@2 e3 g3 ~ a3 bb3 ~ c4 d4@15]/2", J: "[[ab4,c5]@5 ~ [f4,ab4]@5 ~ [c4,f4]@4 ~@2 [ab3,eb4]@4 [f3,d4]@20 ~@6]/2",
})).s("gm_overdriven_guitar").gain(0.4).pan(0.9)

// chords · overdriven guitar · "Guitar 1" · soft notes
const overdriven_guitar_soft = note("<~@71 A@2>".pickRestart({
  A: "[[ab4,c5]@5 ~ [f4,ab4]@5 ~ [c4,f4]@4 ~@2 [ab3,eb4]@4 [f3,d4]@20 ~@6]/2", // Ab Fm F5 Ab5 Dm
})).s("gm_overdriven_guitar").gain(0.13).pan(0.9)

// chords · electric guitar clean · "Guitar 2"
const electric_guitar_clean = note(`<
  ~@9 A@2 ~@6 B C ~@3 D E@3 F@3 ~@4 A@2 G@4 H@4 ~@3 D E@3 I@2 ~@5 B C ~@6 J@4 B ~@3
>`.pickRestart({
  A: "[[ab4,c5]@5 ~ [f4,ab4]@5 ~ [c4,f4]@3 ~@3 [ab3,eb4]@4 [f3,d4]@24 ~@2]/2", // Ab Fm F5 Ab5 Dm
  B: "[ab4,c5]@5 ~ [f4,ab4]@5 ~ [c4,f4]@4 ~@2 [ab3,eb4]@4 ~@2", C: "[f3,d4]", D: "~@6 f2@5 ~ e2@5 ~ d2@5 ~",
  E: "c3@5 ~ e3@4 g3 ~ g2@5 ~ b2@4 d3@2", F: "[c3@4 e3@2 g3@2 ~@2 a3@2 bb3@2 ~@2 c4@2 d4@35 ~@19]/3",
  G: "[[c4,f4,a4]@8 ~@2 eb4@8 ab4@10 f4@5 ~ ab4@2 c4@5 ~ f4@4 ab3@4 ~@2 c4@2 f3@5 ~ ab3@4 c4@6 f4@6 ab4@15 ~@5]/4", // F
  H: "[~@4 eb3@2 f3@4 ab3@2 c4@2 ~@2 ab3@5 ~ f3@5 ~ eb3@5 ~ d3@5 ~ c3@5 ~ bb2@5 ~ ab2@5 ~ f2@5 ~ eb2@5 ~ f2@8 ~@18]/4",
  I: "[c3@2 e3 g3 ~ a3 bb3 ~ c4 d4@15]/2", J: "[[ab4,c5]@5 ~ [f4,ab4]@5 ~ [c4,f4]@4 ~@2 [ab3,eb4]@4 [f3,d4]@20 ~@6]/2",
})).s("gm_electric_guitar_clean").gain(0.1).pan(0.9)

// chords · electric guitar clean · "Guitar 2" · soft notes
const electric_guitar_clean_2 = note("<~@69 A@2 B@2>".pickRestart({
  A: "[~@11 [f3,d4]@10 ~@3]/2", B: "[[ab4,c5]@5 ~ [f4,ab4]@5 ~ [c4,f4]@4 ~@2 [ab3,eb4]@4 [f3,d4]@20 ~@6]/2",
})).s("gm_electric_guitar_clean").gain(0.04).pan(0.9)

// drums · kick
const kick = s("bd").struct("<~@15 A@3 B A@3 C A@4 ~@4 A@3 D A@7 B A@3 C A@4 ~@4 A@17 ~>".pickRestart({
  A: "x ~@2 x!2 ~", B: "x", C: "x ~ x ~@3 x ~@2 x ~@2", D: "x!2",
})).gain(0.33).pan(0)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@11 A B A B ~@12 A B A B ~@11 C ~@8 A B A B ~@18>".pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x ~@4 x!2 ~@5", C: "~ x ~@2",
})).gain(0.11).pan(0)

// drums · snare
const snare = s("sd").struct(`<
  ~@11 A B A B C@3 ~ D@3 E F@4 A B A B C@3 G F@4 C@3 B D@3 E F@4 A B A B C@17 ~
>`.pickRestart({
  A: "~@9 x ~ x", B: "~@3 x", C: "~@3 x ~ x ~@3 x ~@2", D: "~@3 x ~ x ~@3 x ~ x", E: "~@3 x ~ x!2 ~ x!2 ~ x",
  F: "~ x ~ x", G: "~@3 x ~ x ~@2 x ~@2 x",
})).gain(0.22).pan(0)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 A@3 B ~@7 C A@4 ~@3 D ~@4 A@3 B ~@22>".pickRestart({
  A: "~@11 x", B: "~@5 x ~@5 x", C: "~@9 x!2 ~", D: "~ x ~@2",
})).gain(0.11).pan(0)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A B C D E F D E@3 G E H I@3 ~ J@3 K ~@4 L G E H I@3 M ~@4 I@3 N J@3 K ~@4 L G E G I@17 ~
>`.pickRestart({
  A: "~ x ~@2 x ~@3 x ~@2 x ~@4 x ~ x ~@3 x ~", B: "~@2 x!2 ~ x!2 ~ x!2 ~ x", C: "x ~ x!2 ~ x ~@2 x ~@2 x",
  D: "x ~ x!2 ~ x!2 ~@4 x", E: "x ~ x!2 ~ x!2 ~ x!2 ~ x", F: "~@2 x ~@2 x!2 ~ x!2 ~ x", G: "x ~ x!2 ~ x!2 ~ x ~@3",
  H: "x ~ x!2 ~ x ~@2 x ~@3", I: "~@2 x ~@2 x ~@2 x ~@2 x", J: "x ~@2 x ~ x ~@3 x ~ x", K: "~@5 x ~@6",
  L: "~@5 x!2 ~ x!2 ~ x", M: "~@2 x ~@2 x ~@2 x ~@3", N: "~ x ~@2",
})).gain(0.49).pan(0)

// drums · low tom
const low_tom = s("lt").struct("<~@11 [~@3 x ~ x ~@6]!4 ~@12 [~@3 x ~ x ~@6]!4 ~@20 [~@3 x ~ x ~@6]!4 ~@18>")
  .gain(0.16).pan(0)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A B C ~ D C ~@3 E ~ B F@3 A G@3 H F@4 A E ~ B F@11 A G@3 H F@4 A E ~ E F@17 ~
>`.pickRestart({
  A: "x", B: "~@2 x!2", C: "~@2 x", D: "x!2 ~@2", E: "~@3 x", F: "x!4", G: "~ x", H: "x!2 ~ x",
})).gain(0.38).pan(0)

stack(
  harpsichord, bass, overdriven_guitar, overdriven_guitar_soft, electric_guitar_clean, electric_guitar_clean_2, kick,
  kick_soft, snare, snare_soft, hihat, low_tom, open_hat
)

More by The Beatles