Strudelify

Polythene Pam

The Beatles

KeyE majorTempo160 bpm
0:00/0:00
// Polythene Pam — The Beatles
// 160 bpm, 4/4, key E major. 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 (4/4 at bar 1, 12/8 at bar 27, 4/4 at bar 31, 2/4 at bar 113, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 8 "Rythm guitar" acoustic guitar steel (copy of ch 6 "Rythm guitar" acoustic guitar steel)
// note: Full arrangement: all 57 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(160/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.

// chords · distortion guitar · "Lead guitar"
const distortion_guitar = note(`<
  ~ A@4 B ~ C ~@3 D ~ E ~ F@2 G ~ H ~ I ~@3 E ~ J ~@2 K ~ K ~ L M@2 N O N P Q@2 R S T U V W X@2 Y Z AA AB AC ~
>`.pickRestart({
  A: "[~@8 g#4 b3 [b3,g#4] ~ [b3,g#4] ~ [e3,b3,g#4]@7 ~@11, ~@5 e3 ~@10]/2", B: "~@8 b4@2 ~@2 b4@3 ~, ~ [e4,g#4]",
  C: "~@8 b4 ~@3 b4@3 ~, ~@8 [e4,g#4]@7 ~", D: "~@8 [e4,g#4]@5 [b3,e4,g#4]@2 ~, ~ b4",
  E: "~@8 [b3,e4,g#4,b4]@5 ~ [b3,e4,g#4,b4]@2", F: "[~@8 [g#3,b3,e4] ~ g#3 ~ [g#3,e4]@2 [g#3,b3,e4]@5 ~@13]/2",
  G: "~@8 [g#3,b3] e4 [g#3,e4] ~ [g#3,b3,e4]@2 [g#3,b3,e4]@2", H: "~@8 [e4,g#4,b4]@5 ~ [e4,g#4,b4]@2",
  I: "~@4 [e4,g#4,b4]@3 [e4,g#4,b4]", J: "~@8 [e4,g#4,b4]@5 ~ [b3,e4,b4]@2, ~@7 b3@6 g#4@2 ~",
  K: "~@2 g#4 b3 [b3,g#4] ~ [b3,g#4] ~ [e3,b3,g#4]@7 ~, ~@2 e3 ~@5", L: "~@8 d4@2 e4@2 g4@3 ~",
  M: "[a4@12 e4 g4 e4 d4@10 ~ e4@3 ~ g4@2, g#4 ~@31]/2", N: "a4@4 a4 g4 e4 ~", O: "e4@7 ~ d4@2 e4@2 g4@2 ~@2",
  P: "e4 ~ d4 ~ e4 g4 ~ a4", Q: "[d5 ~ b4 b4@2 a4 g4 e5@5 ~@2 g4 a4]/2", R: "b4@4 a4 b4@2 a4", S: "g4@2 ~@3 e4 g4 a4",
  T: "b4@2 ~ b4 ~ a4 g4 ~", U: "g4@4 ~ e4 g4 a4", V: "b4@5 ~ a4@2 g4@2 ~@2 e4@2 g4@2", W: "a4@3 g4 ~@2 e4 g4",
  X: "[b4@3 ~ b4@3 ~ b4@2 a4@2 g4@2 e4@6 d4@2 b3@2 a3@2 g3@5 ~]/2", Y: "e3@15 ~", Z: "d3@15 ~", AA: "c#3@15 ~",
  AB: "~@6 a4@2 b4@2 a4@2 g4@3 ~, b2@5 ~@3", AC: "a2@15 ~",
})).s("gm_distortion_guitar").gain(0.48)

// chords · distortion guitar · "Lead guitar" · soft notes
const distortion_guitar_soft = note("<~ A@4 ~@6 B ~@3 C ~ D ~@12 E ~ E ~ F ~@22>".pickRestart({
  A: "[~@9 e4@13 ~@10, ~@9 e3 ~@22]/2", B: "~@8 b3@5 ~@3", C: "~@10 [b3,e4] ~ b3@2 ~@2", D: "~@10 b3 ~@5",
  E: "~@2 e4@13 ~, ~@2 e3 ~@13", F: "~@3 b3 ~@4",
})).s("gm_distortion_guitar").gain(0.3)

// chords · acoustic guitar steel · "Rythm guitar"
const acoustic_guitar_steel = note(`<
  A@5 B@2 C@2 D@2 E@2 F@6 B@2 C@2 D@2 E@2 G@3 H I J@2 K L K L K L K L K L K L K L K M@2 N O P Q R ~
>`.pickRestart({
  A: "[~@3 [d3,f#3,a3,d4,f#4]@4 [a2,c#3,e3,a3,c#4,e4]@4 [g#2,b2,e3,g#3,b3,e4]@7 ~ [d3,f#3,a3,d4,f#4]@4 [a2,c#3,e3,a3,c#4,e4]@4 ~@8 [d3,f#3,a3,d4,f#4,a4]@2 [d3,f#3,a3,d4,f#4,a4]!2 [a2,c#3,e3,a3,c#4,e4], ~@54 [g#2,b2,e3,g#3,b3,e4]@23 ~@3]/5", // D A E D A D A E
  B: "[[a2,c#3,c#4,e4] [a2,c#3,e3,a3,c#4,e4]!2 [g#2,b2,e3,g#3,e4] [b2,b3,e4] [g#2,b2,e3,g#3,b3,e4] ~ [e3,g#3,e4]@3 ~ [d3,f#3,a3,f#4,a4] ~ [d3,f#3,a3,d4,f#4,a4]!2 [a2,c#3,e3,a3,c#4,e4], ~@7 [g#2,b2,b3]@2 ~@2 d4@2 ~@3]/2", // A E E5 E D A G#m
  C: "[[a2,c#3,c#4,e4] [a2,c#3,e3,a3,c#4,e4]!2 [g#2,b2,e3,g#3,e4] [b2,b3,e4] [g#2,b2,e3,g#3,b3,e4] ~ [e3,g#3,e4]@3 ~ [g2,b2,d3,g3,b3,d4]@2 [g2,b2,d3,g3] [g2,b2,d3,g3]@2, ~@7 [g#2,b2,b3]@2 ~@4 [b3,d4]@3]/2", // A E E5 E G G#m Bm
  D: "[[g2,b2,g3,b3,d4]@2 [g2,b2,g3,b3,d4]@2 ~@2 [d#3,a3,b3,f#4,a4]@4 [b2,d#3,a3,b3,f#4]@2 [d#3,b3,f#4]@4 [d#3,b3,f#4]@2 [b2,d#3,a3,b3,f#4]@3 ~ [c3,e3,g3,c4,e4,g4]@3 ~ [c3,e3,g3,c4,e4,g4] ~ [c3,e3,g3,c4,e4,g4]@2 [f#3,a3,f#4,a4]@2, d3@4 ~@2 b2@2 ~@4 a4@9 ~@11, ~@12 [b2,a3]@6 ~@12 [d3,d4] ~]/2", // G B7 B B7 C F#m B7 D
  E: "[[d3,f#3,a3,d4,f#4] ~ [d3,f#3,a3,d4,f#4,a4] ~ [f#3,a3,d4,f#4] ~ [e3,g#3,e4,g#4,b4] ~ [e3,g#3,b3,e4,g#4,b4] ~ [e3,g#3,e4,g#4,b4]@3 ~ [e3,g#3,b3,e4,g#4,b4]@8 [c3,e3,g3,c4,e4,g4]@3 ~ [c3,e3,g3,c4,e4,g4] ~ [c3,e3,g3,c4,e4,g4]@2 [f#3,a3,f#4,a4]@2, ~@3 d3@2 ~@25 [d3,d4] ~]/2", // D E C F#m D
  F: "[[d3,f#3,a3,d4,f#4] ~ [d3,f#3,a3,d4,f#4,a4] ~ [f#3,a3,d4,f#4] ~ [e3,g#3,e4,g#4,b4] ~ [e3,g#3,b3,e4,g#4,b4] ~ [e3,g#3,e4,g#4,b4]@3 ~ [e3,g#3,b3,e4,g#4,b4]@8 [d3,f#3,a3,d4,f#4]@8 [a2,c#3,e3,a3,c#4,e4]@8 [g#2,b2,e3,g#3,b3,e4]@14 ~@2 [d3,f#3,a3,d4,f#4]@8 [a2,c#3,e3,a3,c#4,e4]@8 ~@16 [d3,f#3,a3,d4,f#4,a4]@4 [d3,f#3,a3,d4,f#4,a4]@2 [d3,f#3,a3,d4,f#4,a4]@2 [a2,c#3,e3,a3,c#4,e4]@2, ~@3 d3@2 ~@65 [g#2,b2,e3,g#3,b3,e4]@23 ~@3]/6", // D E D A E D A D …
  G: "[[d3,f#3,a3,d4,f#4] ~ [d3,f#3,a3,d4,f#4,a4] ~ [f#3,a3,d4,f#4] ~ [e3,g#3,e4,g#4,b4] ~ [e3,g#3,b3,e4,g#4,b4] ~ [e3,g#3,e4,g#4,b4]@3 ~ [e3,g#3,b3,e4,g#4,b4]@8 [d3,f#3,a3,d4,f#4]@13 [a2,c#3,e3,a3,c#4,e4]@13, ~@3 d3@2 ~@43]/3", // D E D A
  H: "[g#2,b2,e3,g#3,b3,e4]@7 ~", I: "[d3,f#3,a3,d4,f#4] [a2,c#3,e3,a3,c#4,e4]",
  J: "[~@8 [d3,f#3,a3,d4,f#4,a4]@2 [d3,f#3,a3,d4,f#4,a4]!2 [a2,c#3,e3,a3,c#4,e4] [a2,c#3,c#4,e4] [a2,c#3,e3,a3,c#4,e4]!2, [g#2,b2,e3,g#3,b3,e4]@23 ~@9]/2", // D A E
  K: "[g#2,b2,e3,g#3,e4] [b2,b3,e4] [g#2,b2,e3,g#3,b3,e4] ~ [e3,g#3,e4]@3 ~, ~@2 [g#2,b2,b3] ~", // E E5 E G#m
  L: "[d3,f#3,a3,d4,f#4,a4]@2 [d3,f#3,a3,d4,f#4,a4]!2 [a2,c#3,e3,a3,c#4,e4] [a2,c#3,c#4,e4] [a2,c#3,e3,a3,c#4,e4]!2", // D A
  M: "[[b2,g#3,b3,e4]@2 [b2,g#3,e4] ~ [b2,b3]@2 [g#2,b2,g#3,b3] ~ [g#2,b2,e3,g#3,b3] ~ [g#2,b2,e3,g#3,b3,e4] ~ [g#2,b2,e3,g#3,b3,e4]@2 [g#2,b2,g#3,b3]@4 [g#2,b2,g#3,b3]@2 [g#2,b2,g#3,b3,e4] ~ [g#2,b2,g#3,e4] ~ [g#2,b2,e3,g#3,e4] ~ [g#2,b2,e3,g#3,b3,e4] ~ [g#2,b2,e3,g#3,b3,e4]@2 [g#2,b2,e3,g#3,b3,e4]@2, e3@3 ~@4 [e3,e4]@3 e3 ~@5, ~@4 g#3 ~@27]/2", // E B G#m E G#m E
  N: "[g#2,b2,e3,g#3,b3,e4] [g#2,b2,g#3] [g#2,b2,e3,g#3,e4] [g#2,b2,e3,g#3] [g#2,b2,e3,g#3,e4]!2 [g#2,b2,e3,g#3,b3,e4]!2", // E G#m E
  O: "[f#2,a2,f#3,a3,d4] ~ [a2,f#3,a3,d4] ~ [f#2,a2,f#3,a3] ~ [f#2,a2,d3,f#3,a3,d4] ~ [f#2,a2,d3,f#3,a3,d4] ~ [f#2,a2,f#3,a3,d4] ~ [f#2,a2,d3,f#3,a3,d4] ~ [f#2,a2,d3,f#3,a3,d4] ~, d3 ~@7", // D F#m D
  P: "[e2,g#2,c#3,e3,g#3,c#4] ~ [g#2,c#3,g#3,c#4] ~ [e2,g#2,c#3,e3,g#3,c#4] ~ [e2,g#2,c#3,e3,g#3,c#4] ~ [e2,g#2,c#3,e3,g#3,c#4] ~ [e2,g#2,c#3,e3,g#3,c#4] ~ [e2,g#2,c#3,e3,g#3,c#4] ~ [e2,g#2,c#3,e3,g#3,c#4] ~", // C#m C#5 C#m
  Q: "[e2,g#2,b2,d3]@2 [g#2,d3,e3]@2 [e2,g#2,b2,e3]@2 [e2,g#2,b2,d3,e3] ~ [e2,g#2,b2,d3,e3,b3]@2 [e2,g#2,b2,d3,e3,b3]@2 [e2,g#2,b2,d3,e3,b3]@2 [e2,g#2,b2,d3,e3,b3]@2, e3 ~@15", // E7 E E7
  R: "[a2,c#3,e3,a3,c#4,e4]@7 ~", // A
})).s("gm_acoustic_guitar_steel").gain(0.35).pan(0.6)

// chords · acoustic guitar steel · "Rythm guitar" · soft notes
const acoustic_guitar_steel_2 = note(`<
  ~@5 A ~ A ~ B ~ C ~ C ~@5 A ~ A ~ B ~ C ~ C ~@5 D E D E D E D E D E D E D E D E F G H I J K ~@2
>`.pickRestart({
  A: "[e3,a3] ~@2 b3 g#3 ~@3", B: "~@5 a4 ~@2", C: "~@4 a4 ~ b3 ~@3 b3@3 ~@3", D: "~@5 [e3,a3] ~@2", E: "b3 g#3 ~@6",
  F: "~@2 b3 ~ g#2@2 e3 ~ e4 ~@7, g#2 e4 ~@2", G: "~@6 b3 ~ b3 ~@7", H: "~ [e3,b3,e4] b3 [b3,e4] b3!2 ~@2",
  I: "~@2 f#2 ~ [d3,d4] ~@5 d3 ~@5", J: "~@2 [e2,e3] ~@13", K: "~ [e2,b2] d3 ~@5, b3@7 ~@9",
})).s("gm_acoustic_guitar_steel").gain(0.2).pan(0.6)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~ A@5 B@2 C@4 D@3 A@5 B@2 C@4 D@3 ~ E F@2 G H I H I H I H I H I H I H I J K L M N O P Q R
>`.pickRestart({
  A: "[~@8 e3 ~ e3@2 e3@2 e3@8 d#3@2 e3@16 e3@2 e3@2 e3@2 e3@8 d2@8 a1@8 e2@5 ~@5]/5",
  B: "[e2@4 ~@2 d2@8 a1@8 e2@6 e2@3 ~]/2",
  C: "[e2@3 ~ e2@2 g2@5 ~ g2@6 d2@2 [a2,b2]@2 b2 ~ b2 ~ b2 ~ b2@8 b1@3 ~@7 d2@8 e2@6 e2@4]/4", // Asus2
  D: "[e2@3 ~ e2@2 c2@8 d2@8 e2@2 e2 ~ e2@2 e2@2 e2@5 ~@13]/3", E: "~@2 e3 ~ e3@2 e3@2 e3@8",
  F: "[d#3 e3@8 e3!3 e3@4]/2", G: "d2 a1", H: "e2@5 ~@5 e2@4 ~@2", I: "~ a1", J: "e2@5 ~@5 b1@2 d2@2 d#2@2, ~@5 e2@2 ~",
  K: "e2@2 e2 ~ e2 ~ e2 ~ e2@2 e2 ~ e2 ~ e2 ~", L: "e2 ~ e2 ~ e2 ~ e2 ~ e2@2 b1@2 d2@2 d#2@2",
  M: "e2@2 e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2@2", N: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2@2",
  O: "c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2 ~ c#2@2", P: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1@2", Q: "a1",
  R: "d2 ~@3",
})).s("gm_electric_bass_finger").gain(0.5)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note(`<
  ~@2 A ~@2 B C D ~@2 E ~@5 A ~@2 B C D ~@2 E ~@5 F ~@3 G ~ G ~ G ~ G ~ G ~ G ~ G ~ G ~@8
>`.pickRestart({
  A: "~ b2@2 ~@5", B: "~@12 e2@3 ~", C: "~@4 e2@3 ~@9", D: "~@12 a#1 ~@3", E: "~@3 c2@4 ~", F: "~@3 b2",
  G: "~@6 e2@3 ~@5 e2@2",
})).s("gm_electric_bass_finger").gain(0.29)

// drums · kick
const kick = s("bd").struct(`<
  ~ A ~ A B A C D E F G ~ G H ~ A ~ A B A C D E F G ~ G H ~@2 I ~ I J K J K J K J K J K J K J K J K L@6 I ~
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~@3 x", C: "~ x ~ x ~@3 x", D: "~@4 x!2 ~@2", E: "~ x ~ x ~@2 x ~", F: "~ x ~ x!4 ~",
  G: "~ x ~ x ~@4", H: "~@5 x ~ x", I: "x", J: "x!2", K: "x ~@2 x", L: "x!4",
})).gain(0.54).pan(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@6 A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A ~@5 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@8
>`.pickRestart({
  A: "~ x ~@6", B: "~@3 x",
})).gain(0.54).pan(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@53 [x!8]!2 ~@2>").gain(0.42).pan(0.3)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~ A ~ A B C D E F@2 G C F C H A ~ A B C D E F@2 G C F C H ~ I ~ I J K J K J K J K J K J K J K J K L M N O@3 ~@2
>`.pickRestart({
  A: "~@4 x!2 ~ x", B: "~@3 x ~ x!3", C: "x!2 ~@2 x!2 ~ x", D: "x!3 ~ x!2 ~ x", E: "~ x!2 ~ x!2 ~ x", F: "x!4 ~ x!2 ~",
  G: "x!4 ~ x!3", H: "x!2 ~@6", I: "~ x!2 ~ x ~@3", J: "x ~ x!5 ~", K: "~ x!2 ~ x!4", L: "~@4 x ~@5 x ~@3 x!2",
  M: "~ x!4 ~ x!2", N: "x ~ x ~@3 x ~ x ~@3 x!2 ~@2", O: "x!8",
})).gain(0.54).pan(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@33 A B A C D E D F A G D B H I A B J@2 ~@6>".pickRestart({
  A: "x ~ x ~ x ~ x!2", B: "~ x!2 ~ x ~ x!2", C: "~@3 x ~ x ~@2 x ~@7", D: "x ~@3 x ~@3 x ~@3 x ~@2 x",
  E: "~ x!2 ~ x!4", F: "~@2 x ~@2 x ~@3 x!2 ~ x ~ x ~", G: "~@3 x!2 ~@3 x ~ x ~ x ~ x ~", H: "x!3 ~ x ~ x!2",
  I: "~ x!2 ~ x ~ x ~", J: "x!4",
})).gain(0.54).pan(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@49 [x!2 ~ x!2 ~ x ~] [~@5 x ~@2] [~@2 x ~@2 x ~@2] ~@5>").gain(0.42).pan(0.3)

// drums · crash
const crash = s("cr").struct("<~@55 x!2>").gain(0.54).pan(0.3)

stack(
  distortion_guitar, distortion_guitar_soft, acoustic_guitar_steel, acoustic_guitar_steel_2, bass, bass_soft, kick,
  snare, low_tom, mid_tom, open_hat, high_tom, crash
)

More by The Beatles