Strudelify
Honey Pie cover art

The Beatles

Honey Pie

The Beatles

KeyG majorTempo130 bpm
0:00/0:00
// Honey Pie — The Beatles
// 130 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 91 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · piano
const piano = note(`<
  A@7 B@7 C@3 D E@2 F G H I E J E@2 F G H I E K L M N O P Q R S E@2 F G H T E U E@2 V W H T E X E@2 V W H T E Y L M N O
  P Q R S E@2 F G H T E U E@2 V W H T E Z AA
>`.pickRestart({
  A: "[~@14 b3@8 [b3,e4]@7 f#4@8 g4@8 [c4,e4,a4]@4 [c4,e4,b4]@8 [c4,e4,a4]@19 [d#4,b4]@4 [d#4,c5]@8 a4@8 b4@7 ~@12 d4@2 g4@21 ~ b3@7 [b3,e4]@8 f#4@8 g4@6, ~@14 e3@15 [a2,a3,c#4]@16 d3@31 [c2,c3]@31 g2@31 ~ [e2,e3]@16 ~@13, ~@103 d4@10 b3@25 ~@30, ~@109 d3@29 ~@16 [a2,a3,c#4]@14, ~@37 g3@9 ~@10]/7", // E5 Am Cmaj7 Am G#m Cm E5 A …
  B: "[~@2 [c4,e4,a4]@4 [c4,e4,b4]@7 [c4,e4,a4]@20 [d#4,b4]@8 [d#4,c5]@8 [d#4,a4]@3 [d#4,b4]@8 ~@12 g4@2 d4@2 g4@12 [d4,b4]@7 [d4,b4]@8 [c#4,a4]@8 [c#4,g4]@4 [c#4,f#4]@4 [c#4,e4]@8 [c#4,f#4]@7 [c#4,g4]@8 [c#4,b4]@16 [c4,a4]@8 [c4,g4]@2, ~@2 d3@31 [c2,c3]@31 g2@31 [a2,g3]@62 ~@11, ~@30 g4@5 b3@9 ~@40, ~@66 d3@29 ~@63 d3@10, ~@68 g3@27 ~@73]/7", // Am Cmaj7 Am G#m Cm D#dim G#m G …
  C: "[~@5 [c4,f#4]@8 [c4,e4]@8 [d2,a2,d3,c4,d4]@51]/3", D: "~@2 [d3,d4] [c3,d4]@2 ~ [b2,d4]@3 [a2,d4]@3",
  E: "[g4,b4,d5,g5]!4", F: "[d#4,g4,a#4,d#5]!4", G: "[e4,g#4,b4,e5]!4", H: "[a4,c#5,e5,g5]!4", I: "[d4,f#4,a4,c5]!4",
  J: "[d#4,a#4,d#5,g5]!2 [d4,a4,c5,f#5]!2", K: "[f#4,a#4,g5]!2 [f4,a4,c5,g5]!2", L: "[e3,b3,e4,g4]!4",
  M: "[c#3,c#4,e4,g4]!4", N: "[g2,g3,d4,f4,g4]!4", O: "[g2,g3,b3,d4,g4]!2 [a2,a3,b3,d4,g4] [b2,b3,d4,g4]",
  P: "[c3,c4,e4,g4]!4", Q: "[b2,b3,e4,g#4]!4", R: "[a2,a3,c4,e4,a4]!4",
  S: "[d2,d3,c4,e4,a4]@2 [d2,d3,c4,e4,a4] ~@2 [d2,d3,c4,e4,a4] ~@6", T: "[d4,a4,c5,f#5]!4",
  U: "[d#4,g4,a#4,d#5]!2 [d4,f#4,a4,c5]!2", V: "[d#2,d#3,g3,a#3,d#4]@5 [d#2,d#3,g3,a#3,d#4]@4 ~@3",
  W: "[e2,e3,g#3,b3,e4]@5 [e2,e3,g#3,b3,e4]@4 ~@3", X: "[d#4,a#4,d#5,g5]@5 [d4,a4,d5,f#5]@4 ~@3",
  Y: "[a#4,g5]!2 [a4,c5,g5]!2, f#2 f2", Z: "[d#2,d#3,g3,a#3,d#4]@5 [d2,d3,a3,d4]@4 ~@3", AA: "[g2,g3,g4] ~@3",
})).s("gm_piano").gain(0.36).pan(1)

// bass · fretless bass · "Fretless E. Bass"
const bass = note(`<
  ~@18 A@2 B C D E A F A@2 B C D E A G H I J K L M N O A@2 B C D E A F A@2 P Q D E A R A@2 S T D E A G H I J K L M N O
  A@2 B C D E A F A@2 U V D E A R W
>`.pickRestart({
  A: "g2 ~ d2 ~", B: "d#2 ~ a#1 ~", C: "e2 ~ b1 ~", D: "a2 ~ e2 d#2", E: "d2 ~ a1 ~", F: "d#2 ~ d2 ~", G: "c#2 ~ c2 ~",
  H: "b1 ~ e2 ~", I: "c#2 ~ e2 ~", J: "d2 ~ g2 ~", K: "g2!2 a2 b2", L: "c2 ~@2 c2", M: "b1 ~@2 b1", N: "a1 ~@3",
  O: "d2@2 e2 ~@2 f#2 ~@6", P: "d#2@9 ~ d#2@2 d#2@6 ~@6", Q: "e2@9 ~ e2@2 e2@6 ~@6", R: "d#2@9 ~ d2@7 ~@7",
  S: "d#2@4 ~@6 d#2@7 ~@7", T: "e2@4 ~@6 e2@7 ~@7", U: "d#2@9 ~ d#2@2 ~@12", V: "e2@9 ~ e2@2 ~@12", W: "g2 ~@3",
})).s("gm_fretless_bass").gain(0.49).pan(0.6)

// chords · electric guitar jazz · "Jazz Gtr Lead"
const electric_guitar_jazz = note("<~@2 A@2 B@3 C@2 ~ D ~@3 E@3 ~@16 F ~@16 G H I J ~@6 K L ~@3 F ~@25>".pickRestart({
  A: "[~@10 g5@5 ~@9]/2", B: "[~@19 b4@2 c5@2 b4@4 g5@8 [b3,d4]@2 [c4,e4]@2 [b3,d4]@12 ~@21]/3",
  C: "[~@4 e5@2 b4@2 g4@2 a4 [a4,b4] b4 a4 b4 a4 b4 a4 b4 a4 b4 a4 b4 a4 b4 a4 b4 a4 b4 a4@4 ~@15, ~@10 [a3,c4]@23 ~@15]/2", // Asus2 Am
  D: "~@2 e5 g5@5 ~@4, g4@2 ~, ~ b4@6 ~@5",
  E: "[~@29 c4@4 f4 [f#4,g4] [g#4,a4,a#4] [b4,c5,c#5] d5@35, ~@7 d3@4 ~@13, ~@25 f#3@8 e4@4 ~@35]/3", // Gmaj7
  F: "[f#3,a#3] [f3,a3]", G: "b4@2 d5 ~@2 g4 ~@6", H: "~@5 g4 b4@2 d5 b4@2 g4", I: "d#4@2 d#4 g4@2 c5 c#5@2 d#5@2 e5@2",
  J: "f#5@3 f5 e5@2", K: "g4@3 f4@2 g4 ~@2 f4@4", L: "g#4@2 g4@3 g#4@7",
})).s("gm_electric_guitar_jazz").gain(0.42).pan(0.3)

// chords · acoustic guitar nylon · "Nylon Gtr Rythm"
const acoustic_guitar_nylon = note(`<
  ~@18 A@2 B C D E A F A@2 B C D E A ~ G@3 ~ H I J K A@2 B C D E A F ~@4 D E A L A@2 ~@2 D E A ~ G@3 ~ H I J K A@2 B C D
  E A F A@2 M N D E A L O
>`.pickRestart({
  A: "~@3 [d3,b3,e4,g4]@3 ~@2 [d3,b3,e4,g4] [d3,b3,e4,g4]@2 ~", // Em7
  B: "~@3 [d#3,g3,c#4,d#4]@3 ~@2 [d#3,g3,c#4,d#4] [d#3,g3,c#4,d#4]@2 ~", // D#7
  C: "~@3 [e3,g#3,d4,e4]@3 ~@2 [e3,g#3,d4,e4] [e3,g#3,d4,e4]@2 ~", // E7
  D: "~@3 [e3,c#4,f#4,a4]@3 ~@2 [e3,c#4,f#4,a4] [e3,c#4,f#4,a4]@2 ~", // F#m7
  E: "~@3 [d3,f#3,c4,d4,e4]@3 ~@2 [d3,f#3,c4,d4,e4] [d3,f#3,c4,d4,e4]@2 ~", // D7
  F: "~@3 [d#3,g3,c#4,d#4]@3 ~@2 [d3,f#3,c4,d4,e4] [d3,f#3,c4,d4,e4]@2 ~", // D#7 D7
  G: "~@3 [g3,b3,e4]@3 ~@2 [g3,b3,e4] [g3,b3,e4]@2 ~", H: "~@3 [g3,c4,e4,g4]@3 ~@2 [g3,c4,e4,g4] [g3,c4,e4,g4]@2 ~",
  I: "~@3 [e3,b3,d4,g#4]@3 ~@2 [e3,b3,d4,g#4] [e3,b3,d4,g#4]@2 ~", // E7
  J: "~@3 [a3,c4,e4,a4]@3 ~@2 [a3,c4,e4,a4] [a3,c4,e4,a4]@2 ~", // Am
  K: "[d3,a3,c4,f#4]@2 [d3,a3,c4,f#4] ~@2 [d3,a3,c4,f#4] ~@6", L: "[d#3,g3,c#4,d#4]@5 [d3,f#3,c4,d4,e4]@3 ~@4",
  M: "[d#3,g3,c#4,d#4]@5 [d#3,g3,c#4,d#4]@3 ~@4", N: "[e3,g#3,d4,e4]@5 [e3,g#3,d4,e4]@3 ~@4", O: "[d3,b3,e4,g4] ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.36).pan(0.3)

// other · trombone · "T Bone 1"
const trombone = note("<~@24 A B C@2 ~@4 D E F ~@13 G B ~@8 H I J K L M N ~ F ~@13 G B O ~@4 P Q ~@2>".pickRestart({
  A: "~ b3!3", B: "c#4 c4", C: "b3/2", D: "b3 d4", E: "c#4 f#3 f3 c4", F: "b3 ~@3", G: "~ b3",
  H: "b3@3 b3@2 b3 ~@2 b3@4", I: "g4 e4", J: "d#4@5 d#4@4 ~@3", K: "e4@5 e4@4 ~@3", L: "b3@2 b3!2", M: "d4 a#3",
  N: "g3", O: "~@5 b3@4 ~@3", P: "~ d4 c#4 c4", Q: "b3 c4 d4 g3",
})).s("gm_trombone").gain(0.47).pan(0.2)

// other · trombone · "T Bone 2"
const trombone_2 = note(`<
  ~@24 A B ~ C D E F G H I J ~@3 K L M N ~@2 O P L K Q R ~@4 L K L S T U V W X Y L ~ J ~@3 K L M N ~@2 O P L K Q R ~@9
>`.pickRestart({
  A: "~@2 d4!2", B: "d#4 d4", C: "b3 d4!2 e4", D: "g4@5 g4@7", E: "e4 g4", F: "e4", G: "f#4", H: "g4!2",
  I: "f#4 a#3 a3 f4", J: "e4 ~@3", K: "c4", L: "b3", M: "a3", N: "a3@2 a3 ~@2 a3 ~@6", O: "a#3 d#4", P: "b3 e4",
  Q: "~ g4", R: "g4 f#4", S: "c#4@5 c4@4 ~@3", T: "d4@3 d4@2 d4 ~@2 d4@4", U: "b4 g4", V: "g4@5 g4@4 ~@3",
  W: "g#4@5 g#4@4 ~@3", X: "c#4@2 c#4!2", Y: "f#4 c4",
})).s("gm_trombone").gain(0.47).pan(0.3)

// other · trombone · "T Bone 3"
const trombone_3 = note("<~@25 A ~@8 B C D E F G H I J K ~@14 L M N O P Q F ~ B C D E F G H I J K ~@15>".pickRestart({
  A: "g4 e4", B: "b3", C: "c#4", D: "d4@21 d4 d#4 e4", E: "f4", F: "g4", G: "g#4", H: "e4", I: "c4@2 c4 ~@2 c4 ~@6",
  J: "b4@3 g4", K: "g4 e4 d4 b3", L: "~@3 e4@2 g4 ~@2 b4@4", M: "d5 b4", N: "a#4@5 a#4@4 ~@3", O: "b4@5 b4@4 ~@3",
  P: "g4@2 g4!2", Q: "d5 a#4",
})).s("gm_trombone").gain(0.47).pan(0.2)

// other · trombone · "T Bone 3"
const trombone_4 = note("<~@34 A B C D E F B G H I ~@20 J K A B C D E F B G H I ~@6 L M N O P Q R S T>".pickRestart({
  A: "g4", B: "a4", C: "b4@21 b4 c5 c#5", D: "d5", E: "c5", F: "b4", G: "f#4@2 f#4 ~@2 f#4 ~@6", H: "d5@3 b4",
  I: "b4 ~@3", J: "~@3 g4 a4 a#4 b4 a#4 a4 g#4 g4 f#4", K: "f4 e4 d#4 d4 c#4 c4 b3 a#3 a3 g#3 g3 f#3",
  L: "g4@2 e4@3 e4@4 ~@3", M: "~@2 g4 b4@2 d5@3 d5 ~@3", N: "d#4@2 d4@3 d#4@4 ~@3", O: "~@2 d4 e4@2 b4@3 d4 d4@2 d4",
  P: "d4@3 b3@2 c#4@4 ~@3", Q: "~ b4 a#4 a4", R: "g4 a4 b4 e4", S: "g4@5 f#4@4 ~@3", T: "d4 ~@3",
})).s("gm_trombone").gain(0.47).pan(0.9)

// other · trumpet
const trumpet = note(`<
  ~@24 A B C D E F G C ~@5 H G C I J K L M N O P Q R S T U V O W T X ~@6 Y Z ~@3 H G C I J K L M N O P Q R AA AB AC AD
  AE AF AG AH AI
>`.pickRestart({
  A: "~ d5 e5 g5", B: "a#5 a5 g5 e5", C: "d5", D: "d5 e5 g5 b5", E: "d#6@5 a#5@7", F: "e6@2 a#5 b5", G: "e5",
  H: "~ g5 f#5 f5", I: "c5", J: "b4@2 b4 ~@2 b4 ~@6", K: "g5@3 e5", L: "d5 b4 g4 e4", M: "d#4 a#4", N: "e4@2 a#4 b4",
  O: "g4", P: "a4", Q: "~ d5", R: "d#5 e5", S: "b4", T: "d4", U: "d#4@5 d#4@4 ~@3", V: "e4@5 e4@4 ~@3", W: "e4",
  X: "f4@5 e4@4 ~@3", Y: "~@3 b4 c5 c#5 d5 c#5 c5 b4 a#4 a4", Z: "g#4 g4 f#4 f4 e4 d#4 d4 c#4 c4 b3 a#3 a3",
  AA: "b4@2 g4@3 g4@4 ~@3", AB: "~@2 d5 e5@2 g5@3 e5 d5@3", AC: "a#4@2 a4@3 a#4@4 ~@3",
  AD: "~@2 a#4 b4@2 e5@3 b4 a#4@2 b4", AE: "g4@3 f#4@2 g4@4 ~@3", AF: "~ d5 c#5 c5", AG: "b4 c5 d5 g4",
  AH: "a#4@5 a4@4 ~@3", AI: "g4 ~@3",
})).s("gm_trumpet").gain(0.42).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@18 A@16 B@7 C A@10 D@2 A@3 D A@2 D@2 A@4 B@7 C A@10 D@2 A@3 D B>".pickRestart({
  A: "x!2", B: "x", C: "x ~ x ~@2 x ~@6", D: "x ~@4 x ~@6",
})).gain(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~@18 A@15 B C D E F C@2 G ~ A@7 H A I ~@2 A@3 ~ A@2 ~@2 A@3 I C D E F C@2 G ~ A@7 J A I ~@2 A@3 ~@2
>`.pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x ~@2 x ~ x!2 ~ x ~@2 x", C: "x!4", D: "x ~@2 x ~ x!2 ~@2 x ~@2",
  E: "x ~@2 x ~@2 x ~@2 x ~ x", F: "x ~@2 x ~ x!2 ~@2 x ~ x", G: "x ~@4 x!2 ~@2 x ~@2", H: "x ~@9 x ~@5 x ~@2 x!5",
  I: "x ~@4 x ~@6", J: "x ~@5 x ~@5 x!4 ~@2 x ~ x ~@3",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct(`<
  ~@18 A@15 ~@7 B C A@9 D ~@2 A@3 ~ A@2 ~@2 A@3 E ~@6 B C A@7 F A D ~@2 A@3 ~ G
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x ~ x ~@2 x ~@6", D: "~ x!3", E: "~@3 x ~@4 x!2 ~@2", F: "~@8 x ~@2 x", G: "x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@41 A ~@10 B@2 ~@3 A ~@2 B@2 ~@11 A ~@10 A@2 ~@3 A ~>".pickRestart({
  A: "~@8 x!2 ~@2", B: "x ~@4 x ~@2 x!2 ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@73 [x ~@3 x ~@5 x ~@2 x ~@10] ~@16 [x!2 ~@4]>").gain(0.4)

stack(
  piano, bass, electric_guitar_jazz, acoustic_guitar_nylon, trombone, trombone_2, trombone_3, trombone_4, trumpet, kick,
  snare, clap, hihat, crash
)

More by The Beatles