Strudelify
Eleanor Rigby cover art

Revolver

Eleanor Rigby

The Beatles

KeyE minorTempo130 bpm
0:00/0:00
// Eleanor Rigby — The Beatles
// 130 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 73 bars on a 32-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.

// bass · cello · "cello/strings"
const bass = note("<A B@2 C@6 ~@9 D E@8 ~@9 F@7 G@2 H@4 I@2 J@2 ~@10 K L@6 M@3>".pickRestart({
  A: "~@26 g2@3 ~ b2@2", B: "[~@3 c3@20 c3@32 b2@6 ~@3]/2",
  C: "[~@3 g2@3 ~ e2@16 e2@32 ~@4 g2@3 ~ e2@3 ~ c2@20 c2@32 ~@4 b2@3 ~ g2@3 ~ e2@20 e2@32 ~@9]/6", D: "~@3 e2",
  E: "[~@26 e2@32 e2@32 e2@32 e2@32 e2@32 e2@32 e2@33 ~@5]/8", F: "[~@27 e2@33 e2@32 e2@32 e2@32 e2@32 e2@32 e2@4]/7",
  G: "[~@28 e2@33 ~@3]/2", H: "[~@2 g2@3 ~ b2@3 ~ c3@20 ~ c3@32 b2@6 ~@6 g2@3 ~ e2@16 e2@32 ~]/4",
  I: "[~@3 g2@3 ~ e2@3 ~ c2@20 c2@32 ~]/2", J: "[~@3 b2@3 ~ g2@3 ~ e2@20 e2@32 ~]/2", K: "e2 e2@31", L: "~ e2@31",
  M: "[~@2 e3@5 ~@4 b2@6 ~@3 g2@9 f#2@11 ~ e2@46 ~@9]/3",
})).s("gm_cello").gain(0.32)

// other · string ensemble 1 · "cello/strings"
const string_ensemble_1 = note(`<
  ~@8 A B@2 C D E B@2 F G H ~@7 I J@2 K@3 J@2 L M N@8 ~@8 O@2 B@2 P@2 Q R S T@2 ~@10
>`.pickRestart({
  A: "~@24 e2@3 ~@5", B: "e2@3 ~@5 e2@3 ~@5 e2@3 ~@5 e2@3 ~@5", C: "e2@3 ~@5 e2@3 ~@5 e2@3 ~@5 c3@4 ~@4",
  D: "g3@4 ~@4 c4@4 ~@4 g3@3 ~@5 c3@3 ~@5", E: "c3@3 ~@5 e2@3 ~@5 e2@3 ~@5 e2@3 ~@5",
  F: "e2@3 ~@5 d2@3 ~@5 d2@3 ~@5 c3@4 ~@4", G: "[c3,g3]@4 ~@4 [c3,c4]@4 ~@4 [c3,g3]@4 ~@4 c3@3 ~@5",
  H: "d2@3 ~@5 e2@3 ~@6 e2@3 ~@12", I: "~@27 e2@3 ~@2", J: "~@3 e2@3 ~@5 e2@3 ~@5 e2@3 ~@5 e2@3 ~@2",
  K: "[~@3 e2@3 ~@5 e2@3 ~@5 e2@3 ~@5 c3@3 ~ d3@2 ~@2 e3@2 ~@2 f#3@2 ~@2 g3@2 ~@2 a3@2 ~@2 b3@2 ~@2 c4@14 ~@6 e2@3 ~@5 e2@3 ~@5 e2@3 ~@2, ~@71 e4@20 ~@5]/3",
  L: "~@3 e2@3 ~@5 e2@3 ~@5 e2@3 ~@5 c3@3 ~ d3", M: "~@3 e3@2 ~@2 f#3@2 ~@2 g3@2 ~@2 a3@2 ~@2 b3@2 ~@2 c4@9",
  N: "[~@11 e2@3 ~@6 e2@3 ~@233, ~@7 e4@249]/8", O: "[~@31 e2@3 ~@6 e2@3 ~@5 e2@3 ~@5 e2@3 ~@5]/2",
  P: "[c3@3 ~ d3@2 ~@2 e3@2 ~@2 f#3@2 ~@2 g3@2 ~@2 a3@2 ~@2 b3@2 ~@2 c4@14 ~@6 e2@3 ~@5 e2@3 ~@5]/2",
  Q: "e2@3 ~@5 e2@3 ~@5 e2@3 ~ b2@2 ~@2 e3@2 ~@2 f#3@2 ~@2", R: "g3 ~ a3 ~ b3 ~ d4@4 c#4 ~ b3 ~ c#4@2",
  S: "~@2 b3 ~ a3 ~ b3@4 a3 ~ g3 ~ a3 ~",
  T: "[c3@3 ~ d3@2 ~@2 e3@2 ~@2 f#3@2 ~@2 g3@2 ~@2 a3@2 ~@2 b3@2 ~@2 c4@14 ~@6 e2@3 ~@5 e2@3 ~@5, a3 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.42)

// chords · string ensemble 1 · "strings ens 1"
const string_ensemble_1_2 = note(`<
  A B@8 C@2 D E F G@2 H I J K L@6 M N@2 O P Q@6 R@7 S T@8 U C@2 E V W X Y Z AA AB@6 AC AD@3
>`.pickRestart({
  A: "~@22 [c4,e4]@3 ~@5 [c4,e4]@2", // C
  B: "[~@7 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@6 [e3,e4]@3 ~@5]/8", // C E5 C E5 E
  C: "[e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5", // E
  D: "[e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [c4,e4]@3 ~@5", // E C
  E: "[c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5", // C
  F: "[c4,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e4,b4]@3 ~ b4@2 ~@2", // C E E5
  G: "[e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2", // E5
  H: "[e4,b4]@3 ~ b4@2 ~@2 [d4,b4]@3 ~ b4@2 ~@2 [d4,b4]@3 ~ b4@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2", // E5 G C
  I: "[c4,c5]@3 ~ c5@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2", // C
  J: "[d4,c5]@3 ~ c5@2 ~@2 [e4,b4]@3 ~ b4@2 ~@3 [e4,b4]@3 ~ b4@2 ~@2 [g4,b4]@3 ~@4", // D7 E5 G
  K: "~ [g4,b4]@3 ~@6 [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@3 ~@3", // G
  L: "~@2 [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@3 ~@3", // G
  M: "~@2 [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@4 ~@5 [e3,e4]@3 ~@2", // G E
  N: "~@3 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@2", // E
  O: "~@3 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [c4,e4]@3 ~@2", // E C
  P: "~@3 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@2", // C
  Q: "[~@3 [c4,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [d4,b4]@3 ~ b4@2 ~@2 [d4,b4]@3 ~ b4@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2 [c4,c5]@3 ~ c5@2 ~@2 [d4,c5]@3 ~ c5@2 ~@2 [e4,b4]@3 ~ b4@2 ~@3 [e4,b4]@3 ~ b4@2 ~@2 [g4,b4]@3 ~]/6", // C E E5 G C D7 E5 G
  R: "~@4 [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@3 ~", // G
  S: "~@4 [g4,b4]@3 ~@6 [g4,b4]@3 ~@5 [g4,b4]@4 ~@5 [c4,e4]@2", // G C
  T: "[~@6 [c4,e4]@3 ~@5 [c4,e4]@3 ~@6 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [b3,e4]@3 ~@5 [e3,e4]]/8", // C E5 C E5 E
  U: "~@8 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5", V: "[c4,e4]@3 ~@5 [c4,e4]@3 ~@5 [e3,e4]@3 ~@5 [e3,e4]@3 ~@5",
  W: "[e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e2,b4]@3 ~ b4@2 ~@2 [e2,b4]@3 ~ b4@2 ~@2", // E5
  X: "[e2,b4]@3 ~ b4@2 ~@2 [e2,b4]@3 ~ b4@2 ~@2 [e2,b4]@3 ~ b4@2 ~@2 [e2,b4]@3 ~ b4@2 ~@2", // E5
  Y: "[e2,b4]@3 ~ b4@2 ~@2 [e2,b4]@3 ~ b4@2 ~@2 [d2,b4]@3 ~ b4@2 ~@2 [d2,b4]@3 ~ b4@2 ~@2", // E5 G
  Z: "[c2,c5]@3 ~ c5@2 ~@2 [g2,c5]@3 ~ c5@2 ~@2 [c3,c5]@3 ~ c5@2 ~@2 [c3,c5]@3 ~ c5@2 ~@2", // C C5 C
  AA: "[c3,c5]@3 ~ c5@2 ~@2 [d2,c5]@3 ~ c5@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2 [e4,b4]@3 ~ b4@2 ~@2", // C D7 E5
  AB: "~ [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@3 ~@4", // G
  AC: "~ [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@3 ~@5 [g4,b4]@4 ~@3", // G
  AD: "[~@2 [g4,b4]@5 ~@4 [g4,b4]@6 ~@3 [g4,b4]@9 [f#4,a4]@11 ~ [e4,g4]@46 ~@9]/3", // G F#m Em
})).s("gm_string_ensemble_1").gain(0.22).pan(0.3)

// chords · bassoon · "pan/bassoon/flute"
const bassoon = note("<~@44 A@4 B@4 ~@21>".pickRestart({
  A: "[~@30 [c5,e5]@20 [d5,f#5]@4 ~ [e5,g5]@4 [f#5,a5]@8 [e5,g5]@8 [d5,f#5]@8 [c5,e5]@8 [g4,b4]@4 [f#4,a4]@3 ~ [e4,g4]@13 ~@16]/4", // C D Em F#m Em D C G …
  B: "[~@31 [c5,e5]@20 [d5,f#5]@4 [e5,g5]@4 [f#5,a5]@8 [e5,g5]@8 [d5,f#5]@8 [c5,e5]@8 [g4,b4]@4 [f#4,a4]@3 ~ [e4,g4]@7 ~@22]/4", // C D Em F#m Em D C G …
})).s("gm_bassoon").gain(0.45)

// other · violin
const violin = note("<~@18 A B@8 ~@5 C@4 D@7 E@2 ~@9 F@2 G H I J@2 K L M N O P M N O Q@3>".pickRestart({
  A: "~@22 d4@3 d4@7", B: "[~@26 c#4@32 c4@32 b3@32 d4@32 c#4@32 c4@32 b3@33 ~@5]/8",
  C: "[~@15 b3@4 e4@4 f#4@4 g4@8 ~@4 f#4@12 ~@4 e4@12 ~@4 d4@12 ~@4 e4@4 e4@32 e4@4 f#4]/4",
  D: "[~@3 g4@20 ~@2 d4@3 d4@32 c#4@32 c4@32 b3@32 d4@32 c#4@32 c4@4]/7", E: "[~@28 b3@33 ~@3]/2",
  F: "[~@3 b4@4 a4@4 g4@4 c4]/2", G: "c4", H: "c4 e4", I: "~@5 b3 e4 f#4", J: "[g4@2 ~ f#4@3 ~ e4@3 ~ d4@3 ~ e4]/2",
  K: "e4", L: "e4@4 f#4@4 g4@20 ~ d4@3", M: "~ d4@31", N: "~ c#4@31", O: "~ c4@31", P: "~ b3@31",
  Q: "[~@2 b4@5 ~@4 b4@6 ~@3 g4@9 f#4@11 ~ e4@46 ~@9]/3",
})).s("gm_violin").gain(0.45).pan(0.8)

// other · violin
const violin_2 = note("<A@8 B ~@16 C D@2 ~@11 E@4 F@5 G@4 H@3 I@8 ~@2 J@2 K L M N@3>".pickRestart({
  A: "[~@22 g4@33 g4@32 g4@24 a4@3 ~ b4@3 ~ g4@3 ~ b4@3 ~ f#4@3 ~ b4@3 ~ g4@3 ~ b4@3 ~ e4@3 ~ b4@3 ~ g4@32 g4@32 g4@24 a4@3 ~ b4@3 ~ g4@3 ~ b4@3 ~ f#4]/8",
  B: "~@3 b4@3 ~ g4@3 ~ b4@3 ~ e4@3 ~@2 b4@3 ~@9", C: "~@22 b4@3 ~ g5@6", D: "[~@2 e5@4 b4@8 a4@8 g4@4 ~ g4@33 ~@4]/2",
  E: "[~@13 e5@5 f#5@4 g5@4 a5@4 b5@16 b5@5 ~@13]/4",
  F: "[~@24 b4@3 ~ g5@8 e5@4 b4@8 a4@8 ~ g4@4 g4@33 g4@32 g4@24 a4@3 ~ b4@3 ~ g4@2]/5",
  G: "[~@2 b4@3 ~ f#4@3 ~ b4@3 ~ g4@3 ~ b4@3 ~ e4@3 ~ b4@3 ~ g4@32 g4@32 g4@24 a4@3 ~ b4@3 ~ g4@2]/4",
  H: "[~@2 b4@3 ~ f#4@3 ~ b4@3 ~ g4@3 ~ b4@3 ~ e4@3 ~@2 b4@3 ~ e5@32 e5@32 ~]/3",
  I: "[~@31 e5@32 e5@32 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@5 e5@3 ~@6 e5@3 ~@5]/8",
  J: "[~@31 e5@10 f#5@8 g5@8 a5@7]/2", K: "~ b5@31", L: "~ b5@10 ~@21", M: "~@29 b4@3",
  N: "[~@2 g5@8 e5@9 b4@9 ~ a4@11 g4@46 ~@10]/3",
})).s("gm_violin").gain(0.32).pan(0.9)

// other · ocarina
const ocarina = note("<~@63 A@2 B ~ A@2 B ~@3>".pickRestart({
  A: "[~ e5@20 f#5@4 g5@4 a5@8 g5@8 f#5@8 e5@8 b4@3]/2", B: "~ a4@4 g4@8 ~@19",
})).s("gm_ocarina").gain(0.36).pan(0.3)

// other · ocarina · "ocarina/synth string"
const ocarina_2 = note("<~@52 A@2 B@3 C D B@3 C ~@10>".pickRestart({
  A: "[~@31 a6@3 ~@2 a6@3 ~ b6@3 ~ g6@7 ~ e6@7 ~@5]/2",
  B: "[g6@3 ~ a6@3 ~ b6@3 ~ d7@7 ~ c#7@3 ~ b6@3 ~ c#7@7 ~ b6@3 ~ a6@3 ~ b6@7 ~ a6@3 ~ g6@3 ~ a6@14 ~@22]/3",
  C: "g6@4 a6@4 b6@4 c7@8 b6@7 ~@5", D: "a6@3 ~ a6@3 ~ b6@3 ~ g6@7 ~ e6@7 ~@5",
})).s("gm_ocarina").gain(0.16).pan(0.8)

// other · synth strings 1 · "ocarina/synth string"
const synth_strings_1 = note("<~@63 A@4 B@6>".pickRestart({
  A: "[~ a4@7 ~ g4@4 a4@10 ~@2 b4@4 g4@8 e4@12 ~@8 e4@4 e5@12 b4@4 a4@8 g4@8 e4@7 ~@28]/4",
  B: "[~ g4@5 ~@3 g4@4 a4@10 ~@2 b4@4 g4@8 e4@12 ~@8 e4@4 g5@12 e5@4 b4@4 g4@4 a4@8 ~ g4@4 g5@8 ~ e5@9 b4@9 a4@11 ~ g4@46 ~@9]/6",
})).s("gm_synth_strings_1").gain(0.28).pan(0.8)

stack(bass, string_ensemble_1, string_ensemble_1_2, bassoon, violin, violin_2, ocarina, ocarina_2, synth_strings_1)

More by The Beatles