Strudelify
Your Mother Should Know cover art

1967 · Magical Mystery Tour

Your Mother Should Know

The Beatles

KeyA minorTempo120 bpm
0:00/0:00
// Your Mother Should Know — The Beatles
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 78 bars on a 24-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.

// chords · piano · "Grand Piano"
const piano = note(`<
  A B@2 C D E F G H I J K L M N O P J Q R S T U V W@4 X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AH AO AP AQ AR
  AS@2 AT AU AV AW AX B C D E F G H I J K AY M N O P J Q R S T AZ
>`.pickRestart({
  A: "[a4,c5,e5]@3 ~@3 [a4,c5,e5]@3 ~@3 [a4,c5,e5]@3 ~@3 [a4,c5,e5]@4 ~@2", // Am
  B: "[a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5] ~", C: "[f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~",
  D: "[a4,c#5,e5]@3 ~@3 [a4,c#5,e5]@3 ~@3 [a4,c#5,e5]@4 ~@2 [a4,c#5,e5]@3 ~@3", // A
  E: "[d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~ [d4,f4,a4] ~", // Dm
  F: "[g4,b4,d5] ~ [g4,b4,d5] ~ [g4,b4,d5] ~ [b4,d5] ~, ~@18 g4 ~@5", // G Bm
  G: "[c5,e5,g5] ~ [c5,e5,g5] ~ [b4,e5,g5] ~ [b4,e5,g5] ~", // C Em
  H: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~", // A
  I: "[d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~ [d4,f#4] ~, ~@18 a4 ~@5", // D
  J: "[g3,b3,d4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~ [b3,d4] ~, ~@18 g3 ~@5", // G Bm
  K: "[c4,e4,g4]@3 ~@3 [c4,e4,g4]@3 ~@3 [c4,e4,g4]@3 ~@3 [c4,e4] ~@5, ~@6 g4 ~", // C
  L: "[e4,g#4,b4]@3 ~@3 [e4,g#4,b4]@3 ~@3 [e4,g#4,b4]@3 ~@3 [e4,g#4,b4] ~@5", // E
  M: "[a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~ [a3,c4,e4] ~", N: "[f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~",
  O: "[a3,c#4,e4]@3 ~@3 [a3,c#4,e4]@3 ~@3 [a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@3 ~@3", // A
  P: "[d3,f3,a3] ~ [d3,f3,a3] ~ [d3,f3,a3] ~ [d3,f3,a3] ~", Q: "[c4,e4,g4] ~ [c4,e4,g4] ~ [b3,e4,g4] ~ [b3,e4,g4] ~",
  R: "[a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~", // A
  S: "[d3,f#3,a3] ~ [d3,f#3,a3] ~ [d3,f#3,a3] ~ [d3,f#3] ~, ~@18 a3 ~@5", // D
  T: "[g2,b2,d3] ~ [g2,b2,d3] ~ [g2,b2,d3] ~ [b2,d3] ~, ~@18 g2 ~@5", // G Bm
  U: "[c3,e3,g3]@3 ~@3 [c3,e3,g3]@3 ~@3 [c3,e3,g3]@3 ~@3 [c3,e3] ~@5, ~@6 g3 ~", V: "[e4,g#4,b4]@2 ~",
  W: "[~@12 [a4,c5,e5]@19 ~@5 [f4,a4,c5]@18 ~@6 [g4,b4,d5]@16 ~@8 [c4,e4,g4]@3 ~@3 [c4,e4,g4]@4 ~@2]/4", // Am F G C
  X: "[c4,e4,g4]@3 ~@3 [c4,e4,g4] ~@5 [e4,g#4,b4]@3 ~@3 [e4,g#4,b4]@3 ~@3", // C E
  Y: "[e4,g#4,b4] ~ [e4,g#4,b4] ~ [a4,c5,e5] ~ [a4,c5,e5] ~", Z: "[a4,c5,e5] ~ [a4,c5,e5] ~ [f4,a4,c5] ~ [f4,a4,c5] ~",
  AA: "[f4,a4,c5] ~ [f4,a4,c5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~", // F A
  AB: "[a4,c#5,e5]@4 ~@2 [a4,c#5,e5]@3 ~@3 [d4,f4,a4]@3 ~@3 [d4,f4,a4]@3 ~@3", // A Dm
  AC: "[d4,f4,a4] ~ [d4,f4,a4] ~ [g4,b4,d5] ~ [g4,b4,d5] ~", // Dm G
  AD: "[g4,b4,d5] ~ [b4,d5] ~ [c5,e5,g5] ~ [c5,e5,g5] ~, ~@6 g4 ~@17", // G Bm C
  AE: "[b4,e5,g5] ~ [b4,e5,g5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~", // Em A
  AF: "[a4,c#5,e5] ~ [a4,c#5,e5] ~ [d4,f#4,a4] ~ [d4,f#4,a4] ~", // A D
  AG: "[d4,f#4,a4] ~ [d4,f#4] ~ [g3,b3,d4] ~ [g3,b3,d4] ~, ~@6 a4 ~@17", // D G
  AH: "[g3,b3,d4] ~ [b3,d4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~, ~@6 g3 ~@17", // G Bm C
  AI: "[c4,e4,g4]@3 ~@3 [c4,e4] ~@5 [e4,g#4,b4]@3 ~@3 [e4,g#4,b4]@3 ~@3, ~@2 g4 ~@5", // C E
  AJ: "[e4,g#4,b4]@3 ~@3 [e4,g#4,b4] ~@5 [a3,c4,e4]@3 ~@3 [a3,c4,e4]@3 ~@3", // E Am
  AK: "[a3,c4,e4] ~ [a3,c4,e4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~", // Am F
  AL: "[f3,a3,c4] ~ [f3,a3,c4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~", // F A
  AM: "[a3,c#4,e4]@4 ~@2 [a3,c#4,e4]@3 ~@3 [d3,f3,a3]@3 ~@3 [d3,f3,a3]@3 ~@3", // A Dm
  AN: "[d3,f3,a3] ~ [d3,f3,a3] ~ [g3,b3,d4] ~ [g3,b3,d4] ~", // Dm G
  AO: "[b3,e4,g4] ~ [b3,e4,g4] ~ [a3,c#4,e4] ~ [a3,c#4,e4] ~", // Em A
  AP: "[a3,c#4,e4] ~ [a3,c#4,e4] ~ [d3,f#3,a3] ~ [d3,f#3,a3] ~", // A D
  AQ: "[d3,f#3,a3] ~ [d3,f#3] ~ [g2,b2,d3] ~ [g2,b2,d3] ~, ~@6 a3 ~@17", // D G
  AR: "[g2,b2,d3] ~ [b2,d3] ~ [c3,e3,g3] ~ [c3,e3,g3] ~, ~@6 g2 ~@17", // G Bm C
  AS: "[[c3,e3,g3]@3 ~@3 [c3,e3] ~@5 [e4,g#4,b4]@16 ~@20, ~@2 g3 ~@13]/2", AT: "[a4,c5,e5]@19 ~@5",
  AU: "[f4,a4,c5]@3 ~", AV: "[g4,b4,d5]@2 ~", AW: "[c4,e4,g4]@3 ~@3 [c4,e4,g4]@4 ~@2 [c4,e4,g4]@3 ~@3 [c4,e4,g4] ~@5",
  AX: "[e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~", AY: "[e4,g#4,b4] ~ [e4,g#4,b4] ~ [e4,g#4,b4] ~@3",
  AZ: "[c3,e3,g3] ~@7", // C
})).s("gm_piano").gain(0.28).pan(0)

// bass · electric bass pick · "Picked Bass"
const bass = note(`<
  A@2 B C D E F G B H F I J K L M N O P K N Q R S T@2 U V W X@6 Y@5 Z AA AB AC AD AE AF AG AH V AI AJ AK L Q R M B C D E
  F G B H F I AL K L M N O P K N Q AM
>`.pickRestart({
  A: "~ a3, a1@19 ~@5", B: "a1@11 ~", C: "f2@19 ~@5", D: "e2@19 ~@5", E: "d2@11 ~", F: "g1@11 ~",
  G: "c2@9 ~@3 b1@7 ~@5", H: "d1@7 ~", I: "c1@7 ~", J: "e1@3 ~@3 e1@3 ~@3 e1@3 ~@3 e1 ~@5", K: "a1 ~ a1 ~ a1 ~ a1 ~",
  L: "f2 ~ f2 ~ f2 ~ f2 ~", M: "e2 ~ e2 ~ e2 ~ e2 ~", N: "d2 ~ d2 ~ d2 ~ d2 ~",
  O: "g1@3 ~@3 g1@3 ~@3 g1@3 ~@3 g1@4 ~@2", P: "c2 ~ c2 ~ b1 ~ b1 ~", Q: "g2 ~ g2 ~ g2 ~ g2 ~",
  R: "c2 ~ c2 ~ c2 ~ c2 ~", S: "e2 f#2 g#2 e2", T: "[f#2@6 g#2@6 a2@18 e2@4 ~@2 f2@3 ~@3 f2@3 ~@3]/2",
  U: "f2 ~ f2 ~ g2 ~ g2 ~", V: "g2 ~ g2 ~ c2 ~ c2 ~", W: "c2 ~ c2 ~ e2 ~ e2 ~",
  X: "[e2@3 ~@3 e2@3 ~@3 a1@22 ~@2 f2@19 ~@5 e2@19 ~@5 d2@22 ~@2 g1@22 ~@2 c2@9 ~@3]/6",
  Y: "[b1@7 ~@5 a1@22 ~@2 d1@21 ~@3 g1@22 ~@2 c1@21 ~@3 e1@3 ~@3 e1@3 ~@3]/5", Z: "e1@3 ~@3 e1 ~@5 a1@3 ~@3 a1@3 ~@3",
  AA: "a1 ~ a1 ~ f2 ~ f2 ~", AB: "f2 ~ f2 ~ e2 ~ e2 ~", AC: "e2 ~ e2 ~ d2 ~ d2 ~", AD: "d2 ~ d2 ~ g1 ~ g1 ~",
  AE: "g1@3 ~@3 g1@4 ~@2 c2@3 ~@3 c2@3 ~@3", AF: "b1 ~ b1 ~ a1 ~ a1 ~", AG: "a1 ~ a1 ~ d2 ~ d2 ~",
  AH: "d2 ~ d2 ~ g2 ~ g2 ~", AI: "c2 ~ c2 ~ e2@2 f#2@2", AJ: "g#2 e2 f#2 g#2", AK: "a2@9 e2@2 ~",
  AL: "e1 ~ e1 ~ e1 ~@3", AM: "c2 ~@7",
})).s("gm_electric_bass_pick").gain(0.32).pan(0.6)

// chords · percussive organ · "Perc Organ"
const percussive_organ = note("<~@23 A B C D E@3 ~@20 F G H I J K@2 ~@21>".pickRestart({
  A: "[e5,g#5] [f#5,a5] b5@2, ~@4 g#5@3 ~", B: "a5 b5 c6 b5, f#5@4 ~@2 g#5@3 ~@3 a5@12", C: "a5@2 [f5,c6] [g5,b5]",
  D: "a5@2 [d5,f5] [e5,g5]", E: "[[f5,a5]@6 g5@12 g#5@11 ~@7, ~@12 e5@43 ~@17]/3", F: "~@2 [e5,g#5] [f#5,a5]",
  G: "b5@2 a5 b5, g#5@9 ~@3 f#5@4 ~@2 g#5@3 ~@3", H: "c6 b5 a5@2, a5 ~", I: "[f5,c6] [g5,b5] a5@2",
  J: "[d5,f5] [e5,g5] [f5,a5]@2", K: "[g5@12 g#5@11 ~, e5@43 ~@5]/2",
})).s("gm_percussive_organ").gain(0.25).pan(0.8)

// other · tubular bells · "Tublr Bells"
const tubular_bells = note("<~@23 A B@6 ~@20 C D E F G@3 ~@21>".pickRestart({
  A: "g#5@4 ~@2 a5@6 b5@7 ~@5", B: "[a5@6 b5@6 c6@19 ~@5 c6@24 a5@66 ~@18]/6", C: "~@6 g#5@2 ~ a5@3",
  D: "b5@7 ~@5 a5@6 b5@6", E: "c6@19 ~@5", F: "c6", G: "[a5@11 ~]/3",
})).s("gm_tubular_bells").gain(0.25).pan(0)

// other · fiddle
const fiddle = note("<~@50 A B C@2 D E@2 F@2 G H I@4 J@2 K ~@10>".pickRestart({
  A: "~@12 [e5,g#5]@5 ~ [f#5,a5]@6", B: "[g#5,b5]@2 a5 [g#5,b5], ~@12 f#5@5 ~@7",
  C: "[c6@23 ~ c6@6 [g5,b5]@6 a5@12, a5@21 ~@2 f5@7 ~@18]/2", D: "[d5,f5] [e5,g5] [f5,a5]@2", E: "[g5 g#5, e5@47 ~]/2",
  F: "[e5 ~ a5@2 ~ c6 e6@2 ~ c6 ~ e6@2 ~ d6@2 ~ c6 b5 ~ c6 b5@2 a5]/2", G: "g5@2 ~ e5 ~ a5@3 ~ e5@2 ~",
  H: "g5@2 a5 g5 ~ f5@4 ~@3",
  I: "[g5 ~ a5 b5 ~ c6@2 ~ d6@2 ~ e6@2 ~ e6@2 ~ e6@3 ~ e6 ~ e6@4 ~@3 e6 ~ d6 c#6 ~ d6@4 ~@9]/4",
  J: "[~@6 d6 ~ c6 b5 ~ c6@4 ~@9]/2", K: "e5@2 ~@2 g#5@2 ~@5 d6@6 ~@7",
})).s("gm_fiddle").gain(0.19).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~@29 [~@3 x!2 ~] [x!2 ~ x!2 ~]!38 ~@10>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@29 [~@3 x] [~ x ~ x]!38 ~@10>").gain(0.32)

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

// drums · open hat
const open_hat = s("oh").struct("<~@13 [~ x ~ x]!10 ~@6 [~@3 x] [~ x ~ x]!47 ~>").gain(0.36)

// drums · splash
const splash = s("cr").struct("<~@23 A B@3 ~@23 B ~ A@4 ~@11 C ~@10>".pickRestart({
  A: "x", B: "~ x", C: "~@3 x",
})).gain(0.36)

stack(piano, bass, percussive_organ, tubular_bells, fiddle, kick, snare, hihat, open_hat, splash)

More by The Beatles