Strudelify

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: edit a riff to change every repeat.

// bass · electric bass finger · "BASS"
const bass = note(`<
  A@2 B A C D E@8 F@2 G H I J A@6 K@7 L@6 M@8 N@8 O@8 P@8 Q@8 R@8 S@8 T@8 U@7 V W@2 X@7 Y Z
>`.pickRestart({
  A: "c2@11 ~ g1@11 ~", B: "c2 g1", C: "c2@11 ~@2 g1@11", D: "~ c2@12 g1@11", E: "~ c2@11 ~ g1@11", F: "~ c2@6 ~@17",
  G: "~ f1@11 ~ c2@11", H: "~ f1@6 a1@6 a#1@6 b1@5", I: "~ c2@11 ~ g1@6 c2@5", J: "~ g1@11 ~ d2@6 g1@5",
  K: "[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@2]/7",
  L: "[~@4 a1@6 a#1@6 b1@6 c2@11 ~ 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",
  M: "[~@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",
  N: "[~@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",
  O: "[~@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",
  P: "[~@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",
  Q: "[~@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",
  R: "[~@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",
  S: "[~@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",
  T: "[~@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",
  U: "[~@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",
  V: "~@19 c2@5", W: "[~@19 f1@11 ~ c2@11 ~ f1@5]/2",
  X: "[~ 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",
  Y: "~ e1@6 f1@6 f#1@6 g1@3 f1@2", Z: "~ 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 M N ~@2 O P ~@2 Q R@3 ~@3 S T U@2 V W@2 X Y@3 Z V AA AB@2 X AC AD ~@2 AE AF ~@2
  AG AH@3 ~@3 AI AJ@8 AK@8 AL AM@2 AN AO@2 AP AQ@3 AR AN AS AT@2 AP AU AV ~@2 AW@2 ~@2 AX AY AZ ~@4 BA ~ BA ~ BB BC@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: "~@6 d#4@3 ~ e4@3 [e4,a#4,c5]@2 ~ [e4,a#4]@6 d#4@2, ~@5 c5@2 ~",
  N: "e4@3 g4@3 ~ e4@2 [e4,a#4,c5]@6 [e4,a#4,c5]@6 ~@3, ~@2 [a#4,c5] ~@5", // C7 A#sus2
  O: "~@2 d#4 e4 [e4,a#4,c5] [e4,a#4,c5]@2 d#4", P: "e4 g4 [e4,a#4,c5] [e4,a#4,c5]@2 ~@3",
  Q: "~@4 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@8 ~ [e4,a#4,c5]@2", // C7
  R: "[~ [e4,a#4,c5]@3 a4@3 [e4,a#4,c5]@6 ~@9 a#3@6 ~@18 a#3@6 ~@20]/3", S: "~@5 b3@4 ~@3",
  T: "~@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
  U: "[~ [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
  V: "~ [a3,c4,d#4]@2 ~@2 [a3,c4,d#4]@2 ~", W: "~ [e3,a#3]@2 ~@2 [e3,a#3]@2 ~", X: "~ [f#3,c4]@2 ~@2 [f#3,c4]@2 ~",
  Y: "[~@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
  Z: "~ a3@2 ~@2 [a3,c4]@2 ~", AA: "~ [g3,a#3]@2 ~@2 [e3,a#3]@2 ~",
  AB: "[~@3 [e3,a#3]@6 ~@6 [e3,a#3]@6 [f#3,c4]@8 ~ [f#3,c4]@9 [f#3,c4]@6 ~@3]/2", AC: "~ [f3,b3]@2 ~@2 [f3,b3]@2 ~",
  AD: "~@3 b3@11 ~ [b3,d#4]@6 ~@3", AE: "~ d#4 e4 [e4,a#4,c5] [e4,a#4,c5]@2 d#4 e4",
  AF: "g4 [e4,a#4,c5] [e4,a#4,c5]@2 ~@4", AG: "~@3 d#4@3 e4@3 [e4,a#4,c5]@3 [e4,a#4,c5]@8 ~ [e4,a#4,c5]@3",
  AH: "[[e4,a#4,c5] a4 [e4,a#4,c5]@2 ~@3 a#3@2 ~@6 a#3@2 ~@7]/3", AI: "~@9 b3@8 ~@7",
  AJ: "[~@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
  AK: "[~@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 …
  AL: "~@2 [e3,a#3,c4]@6 [e3,a#3,c4]@3 [e3,a#3,c4]@6 [e3,a#3,c4]@6 ~", // C7
  AM: "[~@2 a#3@6 a#3@3 c4@8 ~ f4@6 a3@6 ~@6 [a3,c4]@6 ~@4]/2", AN: "~ [a3,c4,d#4]@3 ~@3 [a3,c4,d#4]@3 ~@2",
  AO: "~ [e3,a#3]@3 ~@3 [e3,a#3]@3 ~@2", AP: "~ [f#3,c4]@3 ~@3 [f#3,c4]@3 ~@2",
  AQ: "[~@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
  AR: "~ a3@3 ~@3 [a3,c4]@3 ~@2", AS: "~ [g3,a#3]@3 ~@3 [e3,a#3]@3 ~@2",
  AT: "[~@2 [e3,a#3]@6 ~@6 [e3,a#3]@6 [f#3,c4]@9 [f#3,c4]@8 ~ [f#3,c4]@6 ~@4]/2", AU: "~ [f3,b3]@3 ~@3 [f3,b3]@3 ~@2",
  AV: "~@2 b3@11 ~ [b3,d#4]@6 ~@4", // B
  AW: "[~@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
  AX: "~ 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", AY: "~ a4@3 [e4,a#4,c5]@6 ~@9 a#3@5",
  AZ: "~@19 a#3@5", BA: "~@7 b3@6 b3@6 ~@5", BB: "~@7 b3@6 b3@3 ~@8",
  BC: "[~ 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 A@3 B F G H I ~ J H J H@3 K L@3 K L@7 M L@3 K L@7 N ~ K L@5 K O@2 P@5 ~@4 Q P@3 Q P@7 R P@7 Q
  P@3 S T@3 U ~@2 T@8 U ~
>`.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: "~@9 x ~@10 x ~@3", P: "~@2 x ~@2 x", Q: "~@5 x",
  R: "~@2 x!2 ~ x", S: "~@7 x ~@3 x ~@7 x ~@4", T: "~@7 x ~@11 x ~@4", U: "~@7 x ~@16",
})).gain(0.41)

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

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

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

More by The Beatles