Strudelify
One After 909 cover art

Let It Be

One After 909

The Beatles

KeyC majorTempo171 bpm
0:00/0:00
// One After 909 — The Beatles
// 171 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 122 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(171/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.

// bass · electric bass finger · "BASS"
const bass = note("<A@5 B@9 C@2 D E F G A@6 H@7 I@6 J@8 K@8 L@8 M@8 N@8 O@8 P@8 Q@8 R@7 S T@2 U@7 V W>".pickRestart({
  A: "c2@11 ~ g1@11 ~", B: "~ c2@11 ~ g1@11", C: "~ c2@6 ~@17", D: "~ f1@11 ~ c2@11", E: "~ f1@6 a1@6 a#1@6 b1@5",
  F: "~ c2@11 ~ g1@6 c2@5", G: "~ g1@11 ~ d2@6 g1@5",
  H: "[c2@11 g1@11 ~ c2@11 ~ g1@11 c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@6 ~@18 c2@6 ~@18 f1@11 c2@11 ~ f1@3]/7",
  I: "[~@3 a1@6 a#1@6 b1@6 c2@11 ~@2 g1@6 c2@6 g1@11 ~ d2@6 g1@6 c2@11 ~ g1@11 ~ c2@5 d1@6 ~ d#1@5 e1@6 f1@11 ~ c1@8 ~ c1@3 f1@3]/6",
  J: "[~@3 a1@6 a#1@6 b1@6 c2@11 ~ g1@11 ~ c2@11 ~ c2@6 c#2@6 d2@11 ~ a1@11 ~ d2@11 ~ a1@6 d2@6 g1@6 f2@6 e2@6 d2@6 c2@6 a#1@6 a1@6 g1@6 f1@11 ~ c2@11 ~ f1@3]/8",
  K: "[~@3 a1@6 a#1@6 b1@6 c2@11 ~ g1@11 ~ c2@11 ~ g1@6 c2@6 d2@11 ~ a1@11 ~ d2@11 ~ a1@6 d2@6 g1@11 ~ d1@11 ~ g1@11 ~ d1@6 g1@6 c2@11 ~ g1@11 ~ c2@3]/8",
  L: "[~@9 g1@11 ~ c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@6 ~@18 c2@3]/8",
  M: "[~@21 f1@11 ~ c2@11 ~ f1@6 a1@6 a#1@6 b1@6 c2@11 ~ g1@6 c2@6 g1@11 ~ d2@6 g1@6 c2@11 ~ g1@11 ~ c2@6 a#1@6 g1@6 f1@6 c2@11 g1@6 g1@6 c1@4]/8",
  N: "[~@2 e1@6 f1@6 g1@6 c2@11 ~ g1@6 g1@6 c2@6 c2@6 g1@6 c2@6 c2@6 c2@6 g1@6 g1@6 c2@6 c2@6 g1@6 g1@6 c2@6 c2@6 g1@6 g1@6 c2@6 a#1@6 g1@6 f1@6 c1@6 ~@18 c1@4]/8",
  O: "[~@20 f1@6 a1@6 a#1@6 b1@6 c2@6 d2@6 d#2@6 f2@6 c2@6 ~@6 g2@6 c2@6 g2@6 ~@3 g2@3 d2@6 d#2@6 c2@6 ~@6 g1@11 ~ c2@6 d1@6 d#1@6 e1@6 f1@11 ~ c1@8 ~ c1@3 f1@4]/8",
  P: "[~@2 a1@6 a#1@6 b1@6 c2@11 ~ g1@11 ~ c2@11 ~ c2@6 c#2@6 d2@11 ~ a1@11 ~ d2@11 ~ a1@6 d2@6 g1@6 f2@6 e2@6 d2@6 c2@6 a#1@6 a1@6 g1@6 f1@11 ~ c2@11 ~ f1@4]/8",
  Q: "[~@2 a1@6 a#1@6 b1@6 c2@11 ~ g1@11 ~ c2@11 ~ g1@6 c2@6 d2@11 ~ a1@11 ~ d2@11 ~ a1@6 d2@6 g1@11 ~ d1@11 ~ g1@11 ~ d1@6 g1@6 c2@11 ~ g1@11 ~ c2@4]/8",
  R: "[~@8 g1@11 ~ c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@11 ~ g1@11 ~ c2@11 g1@11 ~ c2@11 ~ g1@11 ~ c2@5]/7",
  S: "~@19 c2@5", T: "[~@19 f1@11 ~ c2@11 ~ f1@5]/2",
  U: "[~ a1@6 a#1@6 b1@6 c2@11 ~ g1@6 c2@6 g1@11 ~ d2@6 g1@6 c2@11 ~ g1@6 c2@6 g1@11 ~ d2@6 g1@6 c2@11 ~ g1@6 c2@6 g1@11 ~ d2@6 g1@6 c1@5]/7",
  V: "~ e1@6 f1@6 f#1@6 g1@3 f1@2", W: "~ d#1@3 c1@3 ~@6 c1@6 ~@5",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · electric guitar jazz · "GUITAR"
const electric_guitar_jazz = note(`<
  A B C D E F ~@2 G H ~@2 I J K@2 ~@3 L G M ~@2 G N ~@2 O P@3 ~@3 Q R S@2 T U@2 V W@3 X T Y Z@2 V AA AB ~@2 AC AD ~@2 AE
  AF@3 ~@3 AG AH@8 AI@8 AJ AK@2 AL AM@2 AN AO@3 AP AL AQ AR@2 AN AS AT ~@2 AU@2 ~@2 AV AW AX ~@4 AY ~ AY ~ AZ BA@2
>`.pickRestart({
  A: "~@2 [e4,g4,a#4,c5] [e4,g4,a#4,c5]@2 [e4,g4,a#4,c5] [e4,g4,a#4,c5]@2", // C7
  B: "d#4 e4 c5 [e4,g4,a#4,c5]@2 [e4,g4,a#4,c5]@2 [e4,g4,a#4,c5]", // C7
  C: "[e4,g4,a#4,c5] [e4,g4,a#4,c5]@3 [e4,g4,a#4,c5] [e4,g4,a#4,c5]@2 [e4,g4,a#4,c5]", // C7
  D: "d#4@3 e4@3 g4@3 [e4,g4,a#4,c5]@6 ~ [e4,g4,a#4]@2 [e4,g4,a#4,c5]@6, ~@5 c5 ~@2", // C7 Edim C7
  E: "~ e4@6 [a#3,c4]@6 ~@6 [a#3,c4]@5", F: "~@7 [a#3,c4]@6 ~@6 [a#3,c4]@5",
  G: "~@7 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@6 d#4@2", H: "~ e4@3 g4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@6 ~@8",
  I: "~@7 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@8", J: "~ [e4,a#4,c5]@3 [e4,a#4,c5]@3 a4@3 [e4,a#4,c5]@6 ~@8",
  K: "~ a#3@6 ~@17", L: "~@13 b3@8 ~@3", M: "e4@3 g4@3 ~ e4@2 [e4,a#4,c5]@6 [e4,a#4,c5]@6 ~@3, ~@2 [a#4,c5] ~@5",
  N: "e4 g4 [e4,a#4,c5] [e4,a#4,c5]@2 ~@3", O: "~@4 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@8 ~ [e4,a#4,c5]@2",
  P: "[~ [e4,a#4,c5]@3 a4@3 [e4,a#4,c5]@6 ~@9 a#3@6 ~@18 a#3@6 ~@20]/3", Q: "~@5 b3@4 ~@3",
  R: "~@4 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@6 d#4@3 [e4,a#4,c5]@2", // C7
  S: "[~ [e4,a#4,c5]@3 [e4,a#4,c5]@5 a#4@3 ~ a4@3 g#4@2 g4@3 f4@6 a3@6 ~@6 [a3,c4]@6 ~@3]/2", // C7 Am
  T: "~ [a3,c4,d#4]@2 ~@2 [a3,c4,d#4]@2 ~", U: "~ [e3,a#3]@2 ~@2 [e3,a#3]@2 ~", V: "~ [f#3,c4]@2 ~@2 [f#3,c4]@2 ~",
  W: "[~@3 [f#3,c4]@6 ~@6 [f#3,c4]@6 [g3,b3]@6 [g3,b3]@6 [g3,b3]@6 [g3,b3]@6 [b3,f4,g4]@8 ~ [b3,f4,g4]@14 ~@4]/3", // F#dim G G7
  X: "~ a3@2 ~@2 [a3,c4]@2 ~", Y: "~ [g3,a#3]@2 ~@2 [e3,a#3]@2 ~",
  Z: "[~@3 [e3,a#3]@6 ~@6 [e3,a#3]@6 [f#3,c4]@8 ~ [f#3,c4]@9 [f#3,c4]@6 ~@3]/2", AA: "~ [f3,b3]@2 ~@2 [f3,b3]@2 ~",
  AB: "~@3 b3@11 ~ [b3,d#4]@6 ~@3", AC: "~ d#4 e4 [e4,a#4,c5] [e4,a#4,c5]@2 d#4 e4",
  AD: "g4 [e4,a#4,c5] [e4,a#4,c5]@2 ~@4", AE: "~@3 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@8 ~ [e4,a#4,c5]@3",
  AF: "[[e4,a#4,c5] a4 [e4,a#4,c5]@2 ~@3 a#3@2 ~@6 a#3@2 ~@7]/3", AG: "~@9 b3@8 ~@7",
  AH: "[~@3 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@6 d#4@3 e4@6 [a#3,e4]@6 ~@3 c5@3 c5@2 c5@3 ~ d#5@6 c5@6 g4@2 c5@3 g4@5 ~ f4@14 ~ d#4@6 g4@3 f4@6 e4@6 [e4,a#4,c5]@3 [e4,a#4,c5]@2 ~ [e4,a#4,c5]@6 [e4,a#4]@3 [e4,a#4]@3 [e4,a4]@3 [e4,g4]@6 c4@3 d#4@3 f4@3 f#4@3 g4@3 c5@3 g4@6 f4@6 c5@3 f#4@3 g4@3 c5@3 f#4@6 g4@8 ~@5, ~@45 a#4@23 ~@124, ~@15 g4@4 ~@45]/8", // C7 A#dim C7 Edim A5 Em
  AI: "[~@2 a#3@3 g3@3 [g3,b3]@3 [g3,b3]@6 [g3,b3]@6 [g3,a#3]@6 [g3,a#3]@9 [e3,g3]@3 ~@3 [a#3,c4]@5 f4 d#4@4 ~ c4 d#4@6 c4@3 ~@6 f#4@3 f#4@3 g4@3 d#4@6 c4@3 ~@3 [d#4,a4]@6 ~@3 c5@3 d#5@3 f5@3 g5@3 g5@6 g5@3 g5@3 g5@3 f5@3 d#5@3 c5@5 ~ d#5@6 c5@3 c5@6 f4@3 d#4@3 ~@6 d#4@3 f#4@3 g4@3 f#4@6 d#4@2 f4@2 d#4@2 c4@3 ~, ~@68 [a#3,c4]@6 ~@24 [d#4,a4]@28 ~@2 a4@11 ~ [g4,a#4]@11 ~@13 [b3,d4]@6 ~@22, ~@64 c5@3 ~@29]/8", // G Gm Em A#sus2 D#dim A#sus2 D#dim Gm …
  AJ: "~@2 [e3,a#3,c4]@6 [e3,a#3,c4]@3 [e3,a#3,c4]@6 [e3,a#3,c4]@6 ~", // C7
  AK: "[~@2 a#3@6 a#3@3 c4@8 ~ f4@6 a3@6 ~@6 [a3,c4]@6 ~@4]/2", AL: "~ [a3,c4,d#4]@3 ~@3 [a3,c4,d#4]@3 ~@2",
  AM: "~ [e3,a#3]@3 ~@3 [e3,a#3]@3 ~@2", AN: "~ [f#3,c4]@3 ~@3 [f#3,c4]@3 ~@2",
  AO: "[~@2 [f#3,c4]@6 ~@6 [f#3,c4]@6 [g3,b3]@6 [g3,b3]@6 [g3,b3]@6 [g3,b3]@6 [b3,f4,g4]@8 ~ [b3,f4,g4]@14 ~@5]/3", // F#dim G G7
  AP: "~ a3@3 ~@3 [a3,c4]@3 ~@2", AQ: "~ [g3,a#3]@3 ~@3 [e3,a#3]@3 ~@2",
  AR: "[~@2 [e3,a#3]@6 ~@6 [e3,a#3]@6 [f#3,c4]@9 [f#3,c4]@8 ~ [f#3,c4]@6 ~@4]/2", AS: "~ [f3,b3]@3 ~@3 [f3,b3]@3 ~@2",
  AT: "~@2 b3@11 ~ [b3,d#4]@6 ~@4", // B
  AU: "[~@2 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@6 d#4@3 e4@3 g4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@6 ~@13]/2", // C7
  AV: "~ d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@8 ~ [e4,a#4,c5]@3 [e4,a#4,c5]@2", AW: "~ a4@3 [e4,a#4,c5]@6 ~@9 a#3@5",
  AX: "~@19 a#3@5", AY: "~@7 b3@6 b3@6 ~@5", AZ: "~@7 b3@6 b3@3 ~@8",
  BA: "[~ a#3@6 a3@6 g#3@6 [g3,e4]@8 ~ [g3,e4]@3 ~@6 [a2,e4,g4,a#4,c5]@6 ~@5]/2", // C Am7
})).s("gm_electric_guitar_jazz").gain(0.41)

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

// drums · snare
const snare = s("sd").struct(`<
  A B A C D E D@8 F G D@4 H C D@3 I J K L M N O P Q P@3 R P@3 S P@3 T P@3 U P@3 V P@7 W X Y P@2 Z@3 ~ Z@6 AA AB AC@2 AD
  AE Z@3 AE Z@7 AF Z@7 AE Z@3 AG Z@3 AH AI O AJ@8 AH AK
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "~@6 x ~@4 x ~@12", D: "~@7 x ~@11 x ~@4", E: "~@7 x ~@2 x!2 ~@7 x ~@2 x ~",
  F: "~ x ~@22", G: "~ x ~@14 x!2 ~@6", H: "~@7 x ~@11 x ~@3 x", I: "~@6 x ~@4 x ~@6 x ~@2 x ~@2",
  J: "~@5 x ~@11 x ~@6", K: "~@5 x ~@10 x ~@7", L: "~ x ~@2 x ~", M: "~@2 x ~@5 x ~@2 x", N: "~@8 x ~@2 x",
  O: "~@13 x ~@2 x ~@2 x ~@4", P: "~ x ~@3 x ~@2", Q: "~@4 x ~@5 x ~@2 x ~@2 x ~@2 x ~@4", R: "~@3 x ~@6 x ~@5 x ~@7",
  S: "~@3 x ~@5 x ~ x!2 ~ x!2 ~ x!2 ~ x ~@3", T: "~ x ~@6", U: "~@3 x ~@4 x ~@6 x ~@2 x ~@5", V: "~ x ~ x ~ x ~@2",
  W: "~@3 x ~@3 x ~@7 x ~@2 x ~@2 x ~@2", X: "~@12 x!2 ~@4 x!2 ~@4", Y: "~@12 x!2 ~@10", Z: "~ x ~@5 x ~@4",
  AA: "~@2 x ~@11 x ~@4 x ~@4", AB: "~@2 x ~@4 x!2 ~@2 x ~@2 x ~@2 x ~@2 x ~@3", AC: "~@5 x", AD: "~@2 x ~@2 x",
  AE: "~ x ~@2 x ~@2 x ~@4", AF: "x!2 ~ x ~@3 x ~ x ~@2", AG: "~ x ~ x ~@8", AH: "~ x ~@11 x ~@5 x ~@4",
  AI: "~@19 x ~@4", AJ: "~ x ~@11 x ~@10", AK: "~ x ~@5 x ~@5 x ~@10",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@17 A ~@23 B ~@23 C ~@35 D ~@16>".pickRestart({
  A: "~@21 x ~ x", B: "~@7 x ~ x!2 ~", C: "~ x ~@4 x ~@2 x ~@2 x ~@2 x ~@2 x ~@5", D: "~@8 x!2 ~@2",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@17 A ~@23 B ~@23 C ~@35 D ~@16>".pickRestart({
  A: "~@9 x!2 ~", B: "~@12 x ~@2 x ~ x ~@6", C: "~ x ~@6", D: "~@14 x!2 ~@8",
})).gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  A@3 B C@10 D@2 C@5 E C@3 F G H I@2 J@2 K L K@3 J K@7 M K@16 N O K P@13 Q@2 P@21 R P@3 S P@2 C@2 N@2 C@8 T U
>`.pickRestart({
  A: "x!4", B: "x ~@5 x ~@4 x ~@12", C: "~ x ~@5 x ~@5 x ~@5 x ~@4", D: "~ x ~@22", E: "x!3 ~", F: "x ~ x ~ x ~ x!2",
  G: "x ~@4 x ~@5 x ~@5 x ~@5 x", H: "~@5 x ~@5 x ~@4 x ~@5 x ~", I: "~@2 x ~@2 x ~@2 x ~@2 x", J: "~@11 x",
  K: "~ x ~ x ~ x ~ x", L: "~@2 x ~@2 x ~ x ~@3 x", M: "~ x ~ x ~@3 x", N: "~@19 x ~@4", O: "~@7 x",
  P: "~ x ~@2 x ~@2 x ~@2 x ~", Q: "~@5 x", R: "~ x ~@5 x ~@2 x ~", S: "~@2 x ~@4 x ~@11 x ~@4",
  T: "~ x ~@5 x ~@5 x ~@10", U: "~@13 x ~@10",
})).gain(0.26)

stack(bass, electric_guitar_jazz, kick, snare, low_tom, mid_tom, crash)

More by The Beatles