Strudelify
I Will cover art

The Beatles

I Will

The Beatles

KeyF majorTempo120 bpm
0:00/0:00
// I Will — The Beatles
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 8 "doubled vocal" piccolo (copy of ch 9 "Vocal" piccolo)
// note: Full arrangement: all 46 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · acoustic bass · "Bass"
const bass = note(`<
  A B C D C E F G F A B C D C E F G F H I J D H I J D K C D C E F L F L F M F N@2 H@2 I O D P
>`.pickRestart({
  A: "f2@3 ~ c2@3 ~", B: "g2@3 ~ d2@3 ~", C: "f2@3 ~ d2@3 ~", D: "g2@3 ~ c2@3 ~", E: "a2@3 ~ f2@3 ~",
  F: "bb1@3 ~ c2@3 ~", G: "d2@3 ~ a1@3 ~", H: "f2@3 ~ f2@3 ~", I: "bb1@3 ~ a1@3 ~", J: "d2@6 ~@2 g2@3 ~ a2@3 ~",
  K: "c2@3 ~ c2@3 ~", L: "d2@3 ~ bb1@3 ~ f1@6 ~@2", M: "d2@3 ~ c2@3 ~", N: "db2@3 ~ db2@3 ~",
  O: "d2@6 ~@2 g2@3 ~ g2@3 ~", P: "f1@13 ~@3",
})).s("gm_acoustic_bass").gain(0.37).pan(0.6)

// chords · piano · "Rhythm 2/ Piano"
const piano = note(`<
  A B A B A C D E F A B A B A C D E F A G H I A G H I A B@2 A J K L D L D M N O@2 A@2 P Q R S
>`.pickRestart({
  A: "~@4 [a3,c4]@3 ~@5 [a3,c4]@3 ~", B: "~@4 [bb3,d4]@3 ~@5 [g3,bb3]@3 ~", C: "~@4 e4@3 ~ eb4@3 ~ c4@3 ~",
  D: "~@4 [f3,bb3]@3 ~@5 [e3,bb3]@3 ~", E: "~@4 [f3,a3]@3 ~@5 f3@3 ~", F: "~@4 bb3@3 ~@5 bb3@3 ~",
  G: "~@4 [f3,a3]@3 ~@5 [a3,c4]@3 ~", H: "~@4 a3@3 ~ [g3,e4]@3 ~ [a3,f4]@3 ~", I: "~@4 [bb3,d4]@3 ~@5 [f3,a3]@3 ~",
  J: "~@4 c4@3 ~ eb4@3 ~ c4@3 ~", K: "~@4 [f3,a3]@3 ~@5 [e3,bb3]@3 ~", L: "d4@3 ~ bb3@3 ~ f3@6 ~@2",
  M: "~@4 [f3,a3]@3 ~@5 [f3,a3]@3 ~", N: "~@4 [f3,bb3]@3 ~@5 [g3,bb3]@3 ~", O: "~@4 [ab3,b3]@3 ~@5 [ab3,b3]@3 ~",
  P: "~@4 [d3,f3]@3 ~@5 [e3,a3,c4]@3 ~", Q: "~@4 a3@3 ~ e4@3 ~ f4@3 ~", R: "~@4 [bb3,d4]@3 ~ [e3,bb3]@3 ~@5",
  S: "[c3,a3]@13 ~@3", // F
})).s("gm_piano").gain(0.37).pan(0.4)

// chords · piano · "Rhythm 1/ Piano"
const piano_2 = note("<A B@2 C D@5 A E F@2 G@6 H@2 I@2 H@2 J K L@6 M@2 N@3 O@8>".pickRestart({
  A: "~@2 f5@3 d5 a4@2 f5@2 ~ d5@2 a4 ab4 a4", B: "[~@2 f5@3 d5 bb4@2 ~@4 e4@2 f4@5 ~ c5@2 a4 ~@5 f4@2 g4@2]/2",
  C: "g4 g4@4 ~ e4 f4",
  D: "[f4@3 ~ c5@2 a4@5 ~ f4@2 c5@8 ~@2 f5@3 ~ d5@7 ~ bb4@2 g4@5 ~ c5@2 a4@4 f4@5 ~@3 c5@2 f5@2 d5@5 ~ bb4@2 ~@6 e4@2 f4@2]/5",
  E: "~@2 f5@3 d5 bb4@2 f5@6 ~@2", F: "[~@2 c5@3 ~ a4@5 ~ f4@2 g4@4 g4@8 ~@2 e4@2 f4@2]/2",
  G: "[f4@3 ~ c5@2 a4@5 ~ f4@2 c5@8 ~@2 f5@3 ~ d5@7 ~ bb4@2 g4@5 ~ c5@2 a4@4 f4@5 ~@3 c5@2 f5@2 d5@4 bb4@3 ~ g4@5 ~ e4@2 f4@5 ~ f5@2 f5 c5 a4@2 eb5@2 d5 c5!2 a4]/6",
  H: "[[bb4,d5]@2 [a4,c5]@2 [bb4,d5]@2 [c5,e5]@4 [d5,f5]@3 ~ [a4,d5]@5 ~ [d4,f4]@2 [f4,a4]@4 [a4,c5]@5 ~]/2", // Bb Am Bb C Dm D5 Dm F …
  I: "[[bb4,d5]@2 [a4,c5]@2 [bb4,d5]@2 [c5,e5]@2 [c5,e5]@2 c5@3 ~ [a4,c5]@4 f5@3 c5 a4@2 eb5@2 d5 c5@2 a4 ab4 a4]/2", // Bb Am Bb C Am
  J: "[bb4,d5]@2 [a4,c5]@2 [bb4,d5]@2 [c5,e5]@4 [c5,e5]@3 ~ [c5,e5]@2", // Bb Am Bb C
  K: "g4@2 [d4,bb4]@2 [d4,bb4]@2 [c4,a4]@4 [bb3,g4]@5 ~", // Gm F Eb
  L: "[~@4 c5@2 a4@5 ~ f4@2 g4@4 bb4@5 ~ bb4@2 ~@2 e4@2 f4@5 ~ c5@2 a4@5 ~ f4@2 c5@8 ~@2 c5@3 ~ f5@2 d5@5 ~ bb4@2 g4@5 ~ c5@2 a4@4 f4@2 f4@3 ~ [a3,c4]@6 ~@2]/6", // Am
  M: "[~@4 bb4@2 g4@5 ~ c5@2 a4@4 [bb3,db4,f4]@5 ~@3 c5@2 f5@2 d5@2, ~@3 [a3,c4]]/2", // Bbm Am
  N: "[~@4 bb4@2 g4@5 ~ c5@2 f5@4 d5@3 ~ a4@4 f5@3 ~ d5@5 ~ bb4@2 g4@5 ~ e4@2 f4@2]/3",
  O: "[~@2 f4@3 eb4 db4 f4@3 ~@4 db4@2 ~@2 f4@3 ~ db4 f4@3 ~@4 db4@2 ~@2 f5@3 d5 c5@2 f5@2 ~ d5@2 a4 ab4 a4 ~@2 f5@3 d5 c5@2 f5@2 ~ eb5@3 d5@2 [bb4,d5]@2 [a4,c5]@2 [bb4,d5]@2 [c5,e5]@4 [d5,f5]@3 ~ [a4,d5]@5 ~ [d4,f4]@2 [f4,a4]@4 [a4,c5]@5 ~ [bb4,d5]@2 [c5,e5]@2 [d5,f5]@2 [e5,g5]@2 [f5,a5]@2 [g5,bb5]@3 ~ [a5,c6]@15 ~@3, ~@11 eb4@10 eb4@6 eb4@98 ~@3]/8", // Bb Am Bb C Dm D5 Dm F …
})).s("gm_piano").gain(0.37).pan(0.7)

// other · synth brass 1 · "Rhythm Guitar 2"
const synth_brass_1 = note(`<
  A B C B A D E F E A G A B A D H I J K L M B N L O P Q A B A D E R E R J I E S@2 T K U M G V
>`.pickRestart({
  A: "~ c4 g4 c4 ~ a3 e4 a3", B: "~ d3 a3 d3 ~ g3 d4 g3", C: "~@2 f3 a3 [c4,g4]@2 c4@2 ~@2 d3 f3 [a3,e4]@2 a3@2",
  D: "~ e3 b3 e3 ~ c4 g4 c4", E: "~ f3 c4 f3 ~ g3 d4 g3", F: "~@2 a3@2 e4@2 a3@2 ~@2 a2 a3 [c4,g4]@2 c4@2",
  G: "~@2 d3@2 a3@2 d3@2 ~@2 c3 e3 [g3,d4]@2 g3@2", H: "~@2 f3@2 c4@2 f3@2 ~@2 c3 e3 [g3,d4]@2 g3@2",
  I: "~ a3 e4 a3 ~ c4 g4 c4", J: "~@2 bb2 d3 [f3,c4]@2 f3@2 ~@2 g3@2 d4@2 g3@2", K: "~ c4 g4 c4 ~ c4 g4 c4",
  L: "[bb3,d4]@2 [a3,c4]@2 [bb3,d4]@2 [c4,e4]@4 [d4,f4]@3 ~ [a3,d4]@2", M: "~ a3 e4 ~ f4 e4 ~ e4, ~@6 a3@5 ~ a3@4",
  N: "[a2,c3]@2 f3@3 c3 a2@2 eb3@2 d3 c3@2 a2 ab2 a2", O: "~@2 d3 f3 [a3,e4]@2 ~@2 f4@2 e4@2 ~@2 e4@2, ~@3 a3@2 ~ a3@2",
  P: "~ d3 a3 ~ b3 a3 ~ a3, ~@3 d3@2 ~ d3@2", Q: "g3@2 [d3,bb3]@2 [d3,bb3]@2 [c3,a3]@4 [bb2,g3]@5 ~",
  R: "~ a3 e4 a3 ~ f3 c4 f3",
  S: "[~@2 ab3@2 eb4@2 ~@2 f4@2 eb4@2 ~@2 eb4@4 db3 f3 eb4@2 ~@2 f4@2 eb4@2 ab3@2 eb4 ~, ~@6 ab3@4 ~@2 ab3@7 ~ ab3 ~ ab3@5 ~@5]/2",
  T: "~ c4 g4 ~@2 g4 ~ g4, ~@6 c4@5 ~ c4@4, ~@2 a4 ~", U: "~ f3 c4 f3 ~ e3 b3 e3",
  V: "~ c4 g4 ~ a4 g4 ~@2, ~@6 c4@5 ~@5",
})).s("gm_synth_brass_1").gain(0.11).pan(0.3)

// drums · kick
const kick = s("bd").struct("x!2").gain(0.37)

// drums · snare
const snare = s("sd").struct("~ x ~ x").gain(0.37)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  A@3 ~ A ~ A@4 ~@2 A ~@2 A@2 ~ A@2 ~ A ~ A@5 ~@3 A ~ A@2 ~ A ~@3 A@3 ~ A ~
>`.pickRestart({
  A: "~@7 x",
})).gain(0.37)

stack(bass, piano, piano_2, synth_brass_1, kick, snare, hihat, open_hat)

More by The Beatles