Strudelify
Fool on the Hill cover art

Love

Fool on the Hill

The Beatles

KeyD majorTempo140 bpm
0:00/0:00
// Fool on the Hill — The Beatles
// 140 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 138 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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 · acoustic guitar steel · "12 String Gtr Bank 8"
const acoustic_guitar_steel = note(`<
  ~@3 A@2 B@2 A@2 ~@18 A@2 B@2 A@2 ~@42 C@2 D ~ E@2 ~@15 F@2 ~ C@2 G@2 H@2 ~@2 C@2 G@2 H@2 ~@2 C@2 G@2 H@2 ~@2 C@2 G@2
  H@2 ~@2 C@2 G@2 H@2 ~
>`.pickRestart({
  A: "[~@3 d4@5, a2, ~ b3@2 ~@5, ~ f#4@3]/2", B: "[~@3 b3@5, g3, ~ d4@2 ~@5, ~ e4@3]/2",
  C: "[~@3 d4@5, a3, ~ b3@2 ~@5, ~ f#4@3]/2", D: "~@3 d4", E: "[~@3 b3 d4@4, a3, ~ b3@2 ~@5, ~ f#4@3]/2",
  F: "[d3,a3,b3,f#4]/2", G: "[~@3 b3@5, g3, ~ d4@2 ~@5, ~ g4@3]/2", H: "[~@3 b3@5, a3, ~ b3@2 ~@5, ~ f#4@3]/2",
})).s("gm_acoustic_guitar_steel").gain(0.52).pan(0.9)

// chords · piano
const piano = note(`<
  A@2 B@2 C@2 B@2 C@2 D E F G H E I J K@2 L M N@2 B@4 C@2 B@2 C@2 D E F G H E I J K@2 L M O@4 P@2 Q@2 P@2 Q@2 D E F G H
  E I J K@2 L M O@4 P@2 Q@2 P@2 Q@2 D E F G H E I J K@2 R M N@2 B@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 P@2 Q@2 P@2
  Q@2 P@2 Q@2 P@2 Q@2 P@2 Q@2
>`.pickRestart({
  A: "[[b3,d4,f#4,a4]!2 [b3,d4,f#4,a4]!2, d3]/2", B: "[[b3,d4,f#4,a4]!4 [b3,d4,f#4,a4]!4, d3]/2",
  C: "[[d4,e4,g4,b4]!4 [d4,e4,g4,b4]!4, d3]/2", D: "[d4,e4,g4,b4]!4, e3", E: "[c#4,e4,a4]!4, a2",
  F: "[b3,d4,f#4,a4]!4, d3", G: "[b3,d4,f#4,a4]!4, b2", H: "[e4,g4,b4]!4, e3", I: "[d4,f4,a4]!2 [d4,f4,a#4]!2, d3!2",
  J: "[d4,f4,a4]!4, d3!2", K: "[d4,f4,a#4]!4, d3!2", L: "[c4,e4,g4]!4, g3 e3", M: "[c4,e4,g4]!4, c3",
  N: "[[d4,f4,a4]@4 [d4,f4,a#4] [d4,f4,b4]@2 ~@7 d3@2, d3@5 d3@2 ~, ~@7 [d4,f4,c5]@5 [d4,f4,c5]@4]/2", // Dm A# Bdim Dm7
  O: "[[d4,f4,a4]@4 [d4,f4,a#4] [d4,f4,b4]@2 ~@5 [d4,f4,c5] ~@5 [d4,f#4,b4]@2 [d4,f#4,b4]@2 [d4,f#4,b4]@2 [d4,f#4,b4] [d4,f#4,b4]@2 [d4,f#4,b4]!3 [d4,f#4,b4]@2, d3@5 d3@2 d3 d3@8, ~@7 [d4,f4,c5]@5 ~ [d4,f4,c5]@2 [d4,f#4,b4]@3 ~@14]/4", // Dm A# Bdim Dm7 Bm Dm7 Bm
  P: "[d3,b3,d4,f#4,a4] [b3,d4,f#4,a4] [a2,b3,d4,f#4,a4] [b3,d4,f#4,a4]", // Bm7
  Q: "[d3,d4,e4,g4,b4] [d4,e4,g4,b4] [a2,d4,e4,g4,b4] [d4,e4,g4,b4]", R: "[c4,e4,g4]!4, g3",
})).s("gm_piano").gain(0.59).pan(0.4)

// other · flute · "Flute 1"
const flute = note(`<
  A@2 ~ B@3 ~@2 C D E F G H I@2 J@4 K@2 A@2 L@2 ~ B@3 ~@2 M N O P@2 Q O P J@4 R S T U V@2 ~@2 W X Y ~ W Z E F G H I@2
  J@4 R S T U L@2 ~@2 W X Y ~ W Z E AA AB@2 AC AD AE@4 AF@2 AE@2 A@2 ~@2 W X Y ~ W X ~@2 W X Y ~ W X ~@2 W X Y ~ W X ~@2
  W X Y ~ W X ~@2 W X Y ~ W X
>`.pickRestart({
  A: "a4/2", B: "[~ d5@5]/3", C: "~@3 b4", D: "d5 e5 b4 a4", E: "g4", F: "e4", G: "f#4", H: "~ b4 f#4 a4", I: "g4/2",
  J: "f5/2", K: "c5/2", L: "f#5!2 d5!2", M: "~@6 g5 f#5", N: "g5@2 e5 b4 e5@2 f#5@2", O: "g5", P: "a5", Q: "f#5",
  R: "d5 a#4", S: "g4 d5", T: "d5", U: "f5", V: "[f#5 e5 ~ d#5 d5 d#5 ~ e5 f#5@16 f#5 g5 ~ g#5 a5@4]/2",
  W: "~@2 g5 f#5", X: "g5 f#5 g5 e5", Y: "f#5 d5", Z: "g5 e5 b4 a4", AA: "a4 b4 c#5 a4", AB: "[d5@5 b4 f#4 d4]/2",
  AC: "g4 a4 b4@2", AD: "c#5", AE: "d5/2", AF: "e5/2",
})).s("gm_flute").gain(0.4).pan(0.1)

// other · flute · "Flute 2"
const flute_2 = note(`<
  A@2 ~@14 B@4 C@2 D@2 E@2 ~@8 F@2 G H F@2 B@4 I J ~@4 K@2 L@2 M@4 N ~@5 B@4 I J ~@2 E@2 K@2 L@2 M@4 N ~@5 O@2 P@2 ~ Q
  ~@2 R@2 K@2 L@2 S@4 K@2 L@2 S@4 K@2 L@2 S@4 K@2 L@2 S@4 K@2 L@2 S@4
>`.pickRestart({
  A: "f#4/2", B: "d5/2", C: "g4/2", D: "f4/2", E: "f#5 a4 f#4 a4", F: "e5", G: "f#5", H: "d5", I: "a#4 g4", J: "e4 a#4",
  K: "[f#5 f#5@2 f#5 f#5@10 ~ f#5]/2", L: "[g5@3 a5@2 b5@3 b5@24]/2",
  M: "[a5@3 b5@2 c#6@3 d6@4 d6@2 d6@6 d6@2 c#6@6 a5@2 b5@5 e6@2 e6@3 ~@8 e5@4 b4@4 g4@4 f#4@4, ~@10 e6@5 ~]/4", N: "e4",
  O: "a4/2", P: "a#4/2", Q: "~ c5", R: "[~@24 f#5@2 a5@4 g5 f#5, f#4]/2",
  S: "[a5@3 b5@2 c#6@3 d6@4 d6@2 d6@6 d6@2 c#6@6 a5@2 b5@5 e6@2 e6@3 e6@20 ~@4]/4",
})).s("gm_flute").gain(0.4).pan(0.9)

// chords · harmonica
const harmonica = note("<~@10 A B C D A E ~@18 A B C D A E ~@18 A B C D A E ~@18 A B D@2 A@2 ~@50>".pickRestart({
  A: "[e4,g4]", B: "[e4,a4]", C: "[f#4,a4]", D: "[d4,f#4]", E: "[c#4,e4]",
})).s("gm_harmonica").gain(0.07).pan(0.8)

// bass · fretless bass · "Fretles E. Bass"
const bass = note("<~@50 [d2 ~ a1 ~]!8 ~@16 [d2 ~ a1 ~]!8 ~@16 [d2 ~ a1 ~]!40>").s("gm_fretless_bass").gain(0.45)

// drums · kick
const kick = s("bd").struct("<~@98 [x!2]!40>").gain(0.31)

// drums · crash
const crash = s("cr").struct("<~@106 x ~@23 x ~@7>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@98 [x!2]!8 [~ x] [x!2]!23 [~ x] [x!2]!6 ~>").gain(0.4)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  ~@23 A ~@23 A ~@2 B ~ B ~ B ~ B ~@14 A ~@2 B ~ B ~ B ~ B ~@14 A ~@2 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B
  ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(4.73)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@16 A@7 ~@17 A@7 ~@3 B@8 ~@6 A@7 ~@3 B@8 ~@6 A@7 ~@3 B@40>".pickRestart({
  A: "x!8", B: "x!4",
})).gain(1.59)

// drums · triangle
const triangle = s("triangles:35").struct("<~@16 A@7 ~@17 A@7 ~@17 A@7 ~@17 A@7 ~@43>".pickRestart({
  A: "~ x ~@2",
})).gain(3.9)

// drums · shaker
const shaker = s("sh").struct("<~@16 A@7 ~@17 A@7 ~@3 B@8 ~@6 A@7 ~@3 B@8 ~@6 A@7 ~@3 B@40>".pickRestart({
  A: "x!8", B: "x!4",
})).gain(0.18)

stack(
  acoustic_guitar_steel, piano, flute, flute_2, harmonica, bass, kick, crash, ride, vibraslap, cabasa, triangle, shaker
)

More by The Beatles