Strudelify

What Goes On

The Beatles

KeyE majorTempo95 bpm
0:00/0:00
// What Goes On — The Beatles
// 95 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 69 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/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 · fretless bass
const bass = note(`<
  ~ A B C@3 D C@3 D E C F G F H I F J C@3 D C@3 D E C F G F H I F J K@2 L M N O N P Q R F G F H I F J C@3 D C@3 D E C S
  T@4
>`.pickRestart({
  A: "e2@3 e2@3 b1@3 e2@3 b1@5 b1 f#2@3 a2@3", B: "e2@5 e2 b1@3 d2@3 e2@5 e2 b1@3 d2@3", C: "e2!2 b1 d2 e2!2 b1 d2",
  D: "a2!2 e2 g2 a2!2 e2 g2", E: "b2!2 f#2!2 b2!2 f#2 b2", F: "e2@5 e2 b1@3 d2@3 e2@5 e2 b1@3 e2@3",
  G: "a2@5 a2 e2@3 g2@3 a2@5 a2 e2@3 a2@3", H: "a2@5 a2 e2@3 g2@3 a2@5 a2 e2@3 g2@3",
  I: "a2@5 a2 e2@3 g2@3 b2@5 b2 f#2@3 b2@3", J: "b2@5 b2 f#2@3 f#2@3 b2@5 b2 f#2@3 b2@3",
  K: "e2 g#2 a2 b2 e2 g#2 a2 b2", L: "e2 g#2 a2 b2 e2 g#2 b2 g#2", M: "a1@3 c#2@3 d2@3 d#2@2 e2 e2@3 f#2@3 g2@3 g#2@3",
  N: "e2@3 g#2@3 a2@3 a#2@2 b2 e2@3 g#2@3 a2@3 a#2@2 b2", O: "e2@3 g#2@3 a2@3 a#2@2 b2 e2@3 c#2@3 b1@3 g#1@3",
  P: "a1 c#2 d2 d#2 e2 d2 c#2 b1", Q: "b1@3 d#2@3 e2@3 f2@2 f#2 b1@3 d#2@3 e2@3 f2@2 f#2", R: "e2!2 c#2 d2 e2!2 c#2 d2",
  S: "e2!2 b1!2 e2!2 b1!2", T: "[e2@3 e2@3 b1@3 d2@3 e2@5 e2@79]/4",
})).s("gm_fretless_bass").gain(0.54).pan(0.6)

// chords · electric guitar muted · "Lead Gtr Muted"
const electric_guitar_muted = note(`<
  A B C D E F G@2 H I J K L M N M N O P Q D E F G@2 H I J K L M N M N O P Q R S T U V W@2 X Y Z M N M N O AA AB D E F
  G@2 H I J K AC AD AE@4
>`.pickRestart({
  A: "~@5 [g#3,e4] [a3,f#4] [a#3,g4]", B: "~@3 g#4@6 ~@5 d#4@3 ~ d#4@3 ~@3, b3@9 ~@3 f#3@5 f#3@4 ~@3",
  C: "~@3 b3, e3@4 b3@5 ~@3, ~ e4@3 e4@4", D: "~@18 b3@5 g3, ~@4 b3@5 ~@3, ~@12 e4@11 ~",
  E: "~@15 b3@5 ~ g3@2 g#3, g#3@8 b3@7 ~@5 b3@4, ~ e4@3 e4@3 ~", F: "~@3 e4@5 ~@4 e4@12, ~@2 d4 ~@3, ~@3 g#3@5",
  G: "[~@21 e3@2 ~@9 d4@4 e4@12, ~@3 e4@8 e4@6 e4@6 e4@13 ~@12, ~@4 c#4@3 c#4@3 ~@14, ~@9 e3@6 g3@5 g3@4 ~@24]/2",
  H: "~@17 d4@4 b3@3, g#3@8 g#3@9 ~@7, ~ e4@3 e4@4", I: "~@2 g#3 ~, g#3 ~, ~ e4@5 ~@2, ~@4 b3@5 ~@3",
  J: "~@21 g3@2 ~, ~@3 c#4@11 c#4@6 c#4@3 ~, ~@8 g3@13 ~@3, ~@12 e4@5 e4@6 ~",
  K: "~@11 b3@13, b2@11 ~@13, ~ d#3@7, ~ a3@2", L: "~ e4, ~ e4@3 ~@4, ~ g#3@2, ~@3 e3@5",
  M: "e2@2 ~ [e3,g#3,b3]@2 ~ e2 ~ [e3,g#3,b3] ~@3 e2@2 ~ [e3,g#3,b3]@2 ~ e2 ~ [e3,g#3,b3] ~@3", // E
  N: "a2@2 ~ [a3,c4,e4]@2 ~ a2 ~ [a3,c4,e4] ~@3 a2@2 ~ [a3,c4,e4]@2 ~ a2 ~ [a3,c4,e4] ~@3", // Am
  O: "a2@2 ~ [a3,c4,e4]@2 ~ a2 ~ [a3,c4,e4] ~@3 b2@2 ~ [a3,b3,f#4]@2 ~ b2 ~ [a3,b3,f#4] ~@3", // Am B7
  P: "~@11 g3 ~@8 b3@4, ~@3 e4@11 b3@3 d4@7, ~@8 d4@7 e4@9, ~@3 g#3@2 ~",
  Q: "~@5 d#3@3 a3@3 ~@9 b3@4, b2@4 b3@3 b3@3 ~@2, ~ a3@3 f#4@8, ~@11 a3@6 a#3@7",
  R: "~@18 g#3@2 e4 ~@2 c#3, ~@3 e4@9 e4@8 ~@4, ~@4 d#4@5 ~@3",
  S: "e3@2 ~ b4@9 b4@5 ~@4 d#4@3, ~@2 e3@19 ~@3, ~@17 b4@7",
  T: "~@21 e4@2 ~, ~@3 e5@9 e5@5 e5@6 ~, ~@8 b4@6 b4@6 b4@3 ~, ~@5 e4@2 ~",
  U: "~@17 a4@3 ~ a4@2 ~, ~@3 c#5@9 c#5@8 c#5@3 ~, ~@8 a4@9 ~@7, ~@9 e4@6 e4@8 ~",
  V: "~@11 g3 ~@9 g#3@2 f#3, e2@11 ~ g#3@9 ~@3, ~@3 e4@11 e4@6 b3@4, ~@8 d4@9 d4@7",
  W: "[~@3 b3@5 ~@13 g#3@2 e4@4 ~@14 d4@3 ~ g#3@2 b3, g#3@8 b3@6 b3@6 b3@4 ~@8 d4@9 ~@3 d4@3 ~, ~@3 g#3@2 g#3@2 ~@9, ~@12 e4@5 e4@6 ~@4 e4@9 e4@9 ~@3]/2",
  X: "~@21 g3@2 e4, e3@4 c#4@3 c#4@3 c#4@2, ~@3 e4@8 e4@6 e4@6 ~, ~@3 g3@2 g3@2 ~",
  Y: "~@12 a#3@5 ~@4 b3@2 b3, b2 ~, ~ f#4@3 f#4@5 e4@3, ~@5 a3@6 b3@6 b3@4 ~@3",
  Z: "~@17 d4@4 ~@3, ~ e4@3 e4@3 ~, ~@8 d4@9 ~@7", AA: "~ b4@3 ~@4",
  AB: "~@2 b3@3 ~@9 e4@10, b2@11 a3@13, ~@5 d#3@9 ~@10, ~ b3@3",
  AC: "~@3 [e3,g#3]@3 ~@2 g#3 ~@3 [g#3,b3]@2 ~@3 [b3,e4] ~@2 [g#3,b3] ~@3", // E G#m E5 G#m
  AD: "~@3 [e3,g#3,d4]@2 ~@3 [e3,g#3,d4] ~@3 [e3,g#3,d4]@2 ~@3 [e3,g#3,d4] ~@2 [e3,g#3,d4]@2 ~ d3", // E7
  AE: "[~@3 g3@3 a#3 a3 ~@4 e2@5 [e2,b2,e3,g#3,b3]@79, e3@8 g3@9 ~@79, ~@9 e3@8 ~@79]/4", // E
})).s("gm_electric_guitar_muted").gain(0.49).pan(1)

// chords · electric guitar muted · "Gtr 2 Muted"
const electric_guitar_muted_2 = note(`<
  ~ A B@4 C B@3 C D B@2 E B E F B G B@3 C B@3 C D B@2 E B E F B G B@3 H I@3 H J K B E B E L M N B@3 C B@3 C D B@2 O@4
>`.pickRestart({
  A: "e2@2 ~@3 g2 g#2@2 [b2,e3] ~@3 [d#3,f#3]@5 f#3@3 g3 f#3@3, ~@17 d#3@7", // E5 D#m
  B: "e2@2 ~@3 g2 g#2@2 [b2,e3] ~@3 e2@2 ~@3 g2 g#2@2 [b2,e3] ~@3", // E5
  C: "a2@2 ~@3 c3 c#3@2 [e3,a3] ~@3 a2@2 ~@3 c3 c#3@2 [e3,a3] ~@3", // A5
  D: "b2@2 ~@3 d3 d#3@2 [f#3,a3] ~@3 b2@2 ~@3 d3 d#3@2 [f#3,a3] ~@3", // F#m
  E: "~@3 [e3,a3]@3 ~@2 [e3,a3] ~@2 [e3,a3] ~@3 [e3,a3]@3 ~@2 [e3,a3] ~@2 [e3,a3]", F: "a2 ~ a2 ~ b2@2 f#2 g#2",
  G: "b2@2 ~@3 d3 d#3@2 f#3 ~@3 b2@3 ~@9", H: "a2@2 ~@3 c3 c#3@2 [e3,a3] ~@3 [e3,a3]@2 ~@3 [e3,a3] ~@2 [e3,a3] ~@3",
  I: "e2@2 ~@3 g2 g#2@2 [b2,e3] ~@3 [b2,e3]@2 ~@3 [b2,e3] ~@2 [b2,e3] ~@3", // E5
  J: "b2@2 ~@3 d3 d#3@2 [f#3,b3] ~@3 [f#3,b3]@2 ~@3 [f#3,b3] ~@2 [f#3,b3] ~@3", // B5
  K: "e2@2 ~@3 g2 g#2@2 [b2,e3] ~@3 [b2,e3]@2 ~@3 [b2,e3] ~@2 b2 ~@3", L: "a2@3 ~@8 a2 a2@3 ~@3 a2@3 ~@2 a2",
  M: "b2@5 g2 g#2@2 b2 a2@3 b2@12, a#2 ~@23", N: "b2@2 ~@3 d3 d#3@2 [f#3,b3] ~@3 [f#3,b3]@2 ~@3 [f#3,b3] ~@2 f#3 ~@3",
  O: "[e2@2 ~@3 g2 g#2@2 [b2,e3] ~@3 e2@5 [e2,b2]@79]/4", // E5
})).s("gm_electric_guitar_muted").gain(0.48).pan(0.1)

// drums · kick
const kick = s("bd").struct(`<
  ~
  [x ~@5 x ~@4 x!2 ~@5 x ~@4 x]!44
  [x ~@5 x ~@4 x!2 ~@5 x ~@5]
  [x ~@5 x ~@4 x!2 ~@5 x ~@4 x]!19
  [x ~@5 x ~@4 x!2 ~@4 x ~@6]
  ~@3
>`).gain(0.48)

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A@4 B A@6 B C A@2 D A@3 C A@2 E A@3 B A@2 F A@2 B A@2 B C@2 A C A@3 C@3 A B A@4 B C A B A@3 B A@4 G ~@3
>`.pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!4",
  C: "~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x", D: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!5 ~ x!2 ~ x",
  E: "x ~ x!2 ~ x!2 ~ x!5 ~ x!2 ~ x!2 ~ x!2 ~ x", F: "~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!4",
  G: "x ~ x!2 ~ x!2 ~ x!2 ~ x ~@12",
})).gain(0.38)

// drums · low tom
const low_tom = s("lt").struct("<~@65 [~@14 x!2 ~@8] ~@3>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@8 [~@11 x] ~@56 [~ x] ~@3>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@13 A ~@6 A ~@9 A ~@6 A@2 ~ A ~@3 A@3 ~@7 A ~@10 B ~@3>".pickRestart({
  A: "x", B: "~@17 x ~@6",
})).gain(0.43)

stack(bass, electric_guitar_muted, electric_guitar_muted_2, kick, snare, hihat, low_tom, open_hat, crash)

More by The Beatles