Strudelify
Getting Better cover art

Sgt. Pepper's Lonely Hearts Club Band

Getting Better

The Beatles

KeyC majorTempo120 bpm
0:00/0:00
// Getting Better — The Beatles
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 82 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · electric bass finger · "Bass guitar"
const bass = note(`<
  ~@4 A B C@5 D E F G H E F G H A B A B C@5 D E F G H E F G H I@2 E F J K E F G H ~@5 L B C@4 E F G H E F G H I@2 E F J
  K E F G H M I N@3
>`.pickRestart({
  A: "g2@2 ~ g2@2 ~ g3@2 ~ g3@3", B: "g2@2 ~ g2@3 g3@2 ~ g3@3", C: "g2@2 ~ g2@2 ~ g3@2 ~ g3@2 ~",
  D: "g2@2 ~ g2@2 ~ g3@2 ~ d3@2 ~", E: "c2@2 ~ c2@2 ~ e2@2 ~ g2@2 ~", F: "a2@2 ~ c3@2 ~ a2@2 ~ g2@2 ~",
  G: "e2@2 ~ f2@2 ~ g2@2 ~ c3@2 ~", H: "f2@2 ~ g2@2 ~ a2@2 ~ c3@2 ~", I: "f2@2 ~ e2@2 ~ f2@2 ~ e2@2 ~",
  J: "e2@2 ~ f2@2 ~ g2@3 c3@2 ~", K: "f2 g2 a2 c3", L: "~@11 g3", M: "f2@2 ~ e2@2 ~ f2@2 ~ e2 ~@2", N: "[c2@25 ~@11]/3",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · percussive organ · "Electric Organ"
const percussive_organ = note(`<
  ~ A@3 B C@5 D E F G F G F G H I B E B C@5 D E F G F G F G H I J K@2 G H G L M N M ~@5 O@5 P F G F G F G H I J K@2 G H
  G L M N M Q R S ~@2
>`.pickRestart({
  A: "[~@12 [c4,e4,g4]@2 ~ [c4,e4,g4] ~@2 [c4,e4,g4] ~@5 [c4,f4]@2 ~ [c4,f4,g4] ~@2 [c4,f4,g4] ~@2 [c4,f4,g4] c3 ~, ~@11 c3@11 c3@12 ~@2, ~@21 [c4,e4,g4]@2 ~ g4 ~@11]/3", // C F5 Csus4 C
  B: "[g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~ g2@2 [c3,c4,e4,g4,g5]@3 ~ c3@2, g2 ~", // G C
  C: "[[g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~ g2@2 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~ g2@2 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~ g2@2 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~ g2@2 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~ g2@2, g2@7 ~@4 g2@8 ~@4 g2@8 ~@4 g2@8 ~@4 g2@11 ~@2]/5", // G
  D: "[g3,b3,d4,f4,g5]@3 ~ g2@2 [g3,b3,d4,f4,g5]@3 ~ g2@2 [g3,c4,e4,g4,g5]@3 ~ c3@2 [c4,e4,g4,g5]@3 ~ c3@2", // G7 C
  E: "[g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~@3 [g3,b3,d4,g5]@3 ~ g2@2 [g3,b3,d4,g5]@3 ~ g2@2, g2@7 ~@5", // G
  F: "[e4,g4,c5]@3 ~@3 [e4,g4,c5]@3 ~@3 [e4,g4,c5]@3 ~ c3@2 [e4,g4,c5]@3 ~ c3@2, c3@7 ~@5", // C
  G: "[f4,a4,c5]@3 ~@3 [f4,a4,c5]@3 ~@3 [f4,a4,c5]@3 ~ f3@2 [f4,a4,c5]@3 ~ f3@2, f3@7 ~@5", // F
  H: "[e4,g4,b4]@3 ~@3 [e4,g4,b4]@3 ~@3 [e4,g4,b4]@3 ~ e3@2 [e4,g4,b4]@3 ~ e3@2, e3@7 ~@5", // Em
  I: "[f3,f4,a4,c5]@3 ~@3 [f4,a4,c5]@3 ~ f3@2 [f4,a4,c5]@3 ~ f3@2 [f4,a4,c5]@3 ~ f3@2", // F
  J: "[f3,f4,a4,c5] ~ [c3,e4,g4,c5] ~ [f3,f4,a4,c5] ~ [c3,e4,g4,c5] ~", // F C F C
  K: "[[f3,f4,a4,c5]@3 ~@3 [c3,e4,g4,c5]@3 ~@3 [f3,f4,a4,c5]@3 ~@3 [f4,a4,c5]@3 ~ [e4,g4,c5]@3 ~@3 [e4,g4,c5]@2 [e4,g4,c5]@3 ~ c3@2 [e4,g4,c5]@3 ~ c3@2 [e4,g4,c5]@3 ~ c3@2, ~@11 c3@6 ~@7]/2", // F C F C
  L: "[e4,g4,c5]@3 ~@3 [e4,g4,c5]@3 ~@3 [e4,g4,c5]@3 ~@3 [e4,g4,c5]@3 ~ c3@2, c3@5 ~", // C
  M: "[f4,a4,c5]@3 ~@3 [f4,a4,c5]@3 ~@3 [f4,a4,c5]@3 ~@3 [f4,a4,c5]@3 ~ f3@2, f3@5 ~", // F
  N: "[e4,g4,b4]@3 ~@3 [e4,g4,b4]@3 ~@3 [e4,g4,b4]@3 ~@3 [e4,g4,b4]@3 ~ e3@2, e3@5 ~", // Em
  O: "[~@12 [g3,b3]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 g2 [c4,e4,g4]@2 ~ [c4,e4,g4]@2 c3, ~@11 g2@12 g2@11 ~ g2@11 ~ g2@5 ~@2 c3@4 ~@2, ~@12 d4 ~@47]/5", // G C
  P: "[g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~ [g3,b3,d4]@2 g2, g2@7 ~ g2@2 ~@2", // G
  Q: "[f3,f4,a4,c5]@2 ~ [c3,e4,g4,c5]@2 ~ [f3,f4,a4,c5]@2 ~ [c3,e4,g4,c5]@2 ~", // F C F C
  R: "[f3,f4,a4,c5]@2 ~ [c3,e4,g4,c5]@2 ~ [f4,a4,c5]@2 f3 [f4,a4,c5]@2 f3, ~@6 f3 ~@5", S: "[e4,g4,c5]@7 ~@5, c3@2 ~",
})).s("gm_percussive_organ").gain(0.58).pan(0.4)

// chords · flute
const flute = note(`<
  ~@5 A ~ A B@2 ~ C D E@2 F@2 G@3 ~@3 A ~ A B@2 ~ C D E@2 F@2 G@3 ~@20 C D E@2 F@2 G@3 ~@15
>`.pickRestart({
  A: "~@2 d5 f5 ~ a#5@2 ~ f5 g5@3", B: "~@8 [a5,c6] [g5,b5]@2 ~", C: "~@2 [a5,d6] [e5,a5]", D: "c5@5 ~, g5@2 ~",
  E: "[~@6 [b4,e5] ~ g5@15 ~, ~@4 d5@7 ~]/2", // E5
  F: "[~@2 [c5,g5] [c5,g5]@2 ~ [e5,a5] ~ [e5,g5]@2 ~ g5@3 ~@10, ~@11 c5@2 ~@11]/2", // C5 A5 Em
  G: "[~@6 [b4,e5] ~ g5@20 ~@8, ~@2 d5@4 ~@3]/3", // E5
})).s("gm_flute").gain(0.45)

// other · melodic tom · "Tom"
const melodic_tom = note(`<
  ~@48
  [~@3 g3 ~ g3 ~@3 g4 ~@2]!5
  [~@3 g3 ~ g3 ~@5 g4]
  ~@23
  [~@3 g3 ~ g3 ~@3 f4 ~@2]
  [~@3 g3 ~ g3 ~@3 g4 ~@2]!3
  ~
>`).s("gm_melodic_tom").gain(0.8)

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

// drums · rim
const rim = s("rim").struct("<~@20 [~ x ~@2]!10 ~@18 [~ x ~ x]!11 ~@23>").gain(0.8)

// drums · clap
const clap = s("cp").struct("<~@20 [~ x ~@2]!10 ~@18 [~ x ~ x]!11 ~@23>").gain(0.8)

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

// drums · low tom
const low_tom = s("lt").struct("<~@4 [x!4]!8 ~@8 [x!4]!10 ~@24 [x!4]!5 ~@23>").gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@3 B C A@3 ~@10 A@3 B C A@6 B C A@5 ~@11 A@3 B C A@6 B C A@7 ~@3>".pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~@2 x ~ x", C: "~ x!3",
})).gain(0.64)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 [~ x ~@2]!8 ~@8 [~ x ~@2]!10 ~@24 [~ x ~@2]!5 ~@23>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@4 [~@2 x]!8 ~@8 [~@2 x]!10 ~@24 [~@2 x]!5 ~@23>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@4 A@8 ~@8 A@10 ~@18 B ~@5 A@5 ~@23>".pickRestart({
  A: "~@2 x", B: "x",
})).gain(0.56)

// drums · congas
const congas = s("conga:13").struct("<~@48 [~@3 x]!10 ~@19 [~@3 x]!4 ~>").gain(2.56)

// drums · congas
const congas_2 = s("conga:33").struct("<~@48 [~@3 x ~ x ~@6]!11 ~@18 [~@3 x ~ x ~@6]!4 ~>").gain(2.56)

stack(
  bass, percussive_organ, flute, melodic_tom, kick, rim, clap, snare, low_tom, hihat, hihat_soft, open_hat, crash,
  congas, congas_2
)

More by The Beatles