Strudelify

Stand by Me

The Beatles

KeyC majorTempo105 bpm
0:00/0:00
// Stand by Me — The Beatles
// 105 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 3 "Piano   (BB)" named as a piano, played on piano (its electric guitar jazz patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(105/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 · synth bass 2 · "Bass    (BB)"
const bass = note(`<
  ~@2 A B C D E F G H I D J K L M N O P Q K R S T U V W X Y Z AA AB G AC AD AE J K E F AF AG P Q AH K AI AJ AK AL AM AN
  AO AP S AQ AK AR AM X Y Z S AQ AS AT W AN AO AP S T AU V W X S AV AA AB AW AX AY AZ K R J K BA BB C AZ L M S AV BC BD
  AM X BE BF AO BG
>`.pickRestart({
  A: "c2@5 ~ c2 ~ c2@6 c2!2", B: "a1@5 ~ a1 ~ a1@4 g2@3 ~", C: "f2@5 ~ f2 ~ f2@6 c2 ~", D: "g2@5 ~ g2 ~ g2@6 g2!2",
  E: "c2@5 ~ c2 ~ c2@6 g1@2", F: "c2@4 ~@2 c2 ~ c2@6 g1@2", G: "a1@3 c3 b2 a2 f2 e2, ~@6 b2 ~@9",
  H: "a1@4 ~@2 a1 ~ a1@4 a1@2 ~@2", I: "f3@5 ~ f3 ~ f3@3 c3 f2@3 ~", J: "c3@6 c3 ~ c3@7 g2",
  K: "c2@5 ~ c2 ~ c2@5 ~ c2 ~", L: "c2@4 ~@2 c2 ~ c2@6 g2@2", M: "c3@6 c3 ~ c3@6 c2@2", N: "a1@5 ~ a1 ~ a1@6 a1@2",
  O: "a2@5 ~ a2 ~ a2@3 e2 a1@3 ~", P: "f2@5 ~ f2 ~ f2@6 f2@2", Q: "g2@4 ~@2 g2 ~ g2@6 d2@2",
  R: "c2@5 ~ c2 ~ c2@4 c2@3 ~", S: "c2@6 ~ c2 c2@6 g1 a1", T: "c2@6 ~ c2!2 ~ c2@6", U: "a1@6 ~ a1!2 ~ a1@4 e2@2",
  V: "a2@7 e2 a1 ~ a1@3 ~ e1 ~", W: "f2@6 ~ f2 f2@6 ~ f2", X: "g2@7 g2!2 ~ g2@4 ~ d2", Y: "c2@7 c2 c2@7 g1",
  Z: "c2@6 ~ c2!2 ~ c2@3 ~ c2 ~", AA: "c2@3 e3 d3 c3 a2 g2, ~@6 d3 ~@9", AB: "c2@4 ~@2 c2 ~ c2@4 c2@2 ~@2",
  AC: "a1@4 ~@2 a1 ~ a1@4 e2@2 ~@2", AD: "f2@5 ~ f2 ~ f2@4 a2@3 ~", AE: "g2@5 ~ g2 ~ g2@6 b1 g2",
  AF: "a1@5 ~ a1 ~ a1@7 a0", AG: "a1@5 ~ a1 ~ a1@5 ~ a1 ~", AH: "c2@5 ~ c2 ~ c2@7 c1", AI: "c2@6 ~ c2 c2@6 g2@2",
  AJ: "c3@7 g2 c2 ~ c2@3 ~ g1 ~", AK: "a1@6 ~ a1 a1@6 e1 f1", AL: "a1@7 a1!2 ~ a1@3 ~ a1 ~", AM: "f2@6 ~ f2 f2@6 f2!2",
  AN: "g2@6 ~ g2!2 ~ g2@4 g2 ~", AO: "c2@6 ~ c2 c2@7 g1", AP: "c2@7 c2!2 ~ c2@4 g2 ~",
  AQ: "c2@7 g1 c2 ~ c2@2 c2 ~ c2 ~", AR: "a1@6 ~ a1!2 ~ a1@6", AS: "a2@7 e2 a1 ~ a1@4 e1 f1",
  AT: "a1@6 ~ a1!2 ~ a1@5 ~", AU: "a1@6 ~ a1 a1@6 e2@2", AV: "c2@7 c2!2 ~ c2@3 ~ c2 ~", AW: "a2@5 ~ a2 ~ a2@6 e2@2",
  AX: "a1@5 ~ a1 ~ a1@6 f#2 ~", AY: "f2@5 ~ f2 ~ f2@6 a2@2", AZ: "g2@5 ~ g2 ~ g2@6 d2 ~", BA: "a1@5 ~ a1 ~ a1@7 e1",
  BB: "a1@5 ~ a1 ~ a1@6 a1 ~", BC: "a1@7 a1 a1@7 e1", BD: "a1@6 ~ a1!2 ~ a1@3 ~ a1 ~", BE: "c2@6 ~ c2 c2@6 c2!2",
  BF: "c2@7 c2!2 ~ c2@4 ~ g1", BG: "c2",
})).s("gm_synth_bass_2").gain(0.42).pan(0)

// chords · piano · "Piano   (BB)"
const piano = note(`<
  ~@6 A@2 B@2 C D E@2 A@2 F G H I J@2 K@2 L@2 C D E@2 K@2 M@2 H N K@2 O@2 P@2 Q D A@4 L@2 H I R@2 S@2 P@2 Q D O@2 R@2
  T@2 H N R@2 U@2 V@2 H N S@2 K@2 P@2 C N E@2 S@2 V@2 H N K@2 A@2 W@2 Q I X Y Z AA
>`.pickRestart({
  A: "[~@30 g5!2, c4@22 e6@4 c5@2 e6 c6@2 ~, c5@14 e6 g6 c7@15 ~, [g5,c6,e6]@6 [g5,c6]@10 c5@4 g6@11 ~, ~@4 g4@2 [e6,g6]@7 g4@18 ~]/2", // C C5 Em
  B: "[c5@5 ~ c5@7 ~@18 c5, a3@8 e5 a3@7, [a5,c6]@15 a5@5 e5@9 a5@3, e5@13 c5@3 c5@6 a5@6 c6@4, ~@7 e5 c6@5 c5@2 e5]/2", // Am
  C: "~@6 c5@7 c5!2 f5, [f3,f5,a5], c5@3 ~@5, ~ a4@3", D: "[f5,g5,b5,d6]@13 ~ f5 g5, b4@12 ~ b4@2 ~",
  E: "[g4@5 ~ g4@7 ~@18 g4, c4@8 c5 c4@7, [e5,g5]@15 e5@5 c5@9 e5@3, c5@13 g4@3 g4@6 e5@6 g5@4, ~@7 c5 g5@5 g4@2 c5]/2", // Em
  F: "[a5,c6,e6]@13 ~ a5 c6, e5@12 ~ e5@2 ~", G: "~@6 e5@7 e5!2 a5, [a3,a5,c6], e5@3 ~@5, ~ c5@3",
  H: "~@13 c5!2 ~, [f3,f5,a5]@15 ~, c5@13 ~@3, ~@6 a4@9 ~", // F
  I: "~@6 b4@7 ~@2 f5, [g3,f5,g5], d5@7 d5, b4@6 ~@7 b4@2 ~, ~ g4@3", // G7
  J: "[~@13 c5 ~ e5 [e5,g5]@7 ~@3 c5@2 ~@2 g4@2, c4@31 ~, [e5,g5]@16 ~@7 c6@9, c5@13 ~ c5@2 c5@8 [e5,g5]@8, ~@3 g4@11 c5@2]/2", // Em
  K: "[~@16 g5@7 ~@5 e5@2 g5 ~, c4@23 g5 e5@2 c5@5 ~, c5 c6, e5@15 [e6,g6]@16 ~, g5@6 g4@25 ~]/2", // Em
  L: "[[a5,c6,e6]@16 e6@6 ~@6 c7@2 a6 ~, a3@31 ~, ~@16 [a5,c6]@15 ~, ~@8 a6@4 a6@3 ~, ~@22 e6@9 ~]/2", // Am
  M: "[~@28 c6@2 a5 e5, a3, c6@27 e5@4 ~, [e5,a5]@14 e5 a5@15 ~@2, ~@13 c5@18 ~]/2", // A5
  N: "~@14 d5 ~, [g3,d5,f5,g5]@15 ~, b4@13 b4@2 ~, ~@6 g4@9 ~", // G7
  O: "[c5@10 ~@5 c6 ~@12 g5@2 c6 ~, c4@31 ~, [c6,e6]@14 g5@2 [c6,e6]@15 ~, [e5,g5]@13 e5@3 g5@10 e5@5 ~, ~@10 c5@6 e5@6 c5@9 ~]/2", // C Em
  P: "[~@16 c6@7 ~@5 a5@2 c6 ~, a3@23 c6 a5@2 e5@5 ~, e5 e6, a5@15 [a6,c7]@16 ~, c6@6 c5@25 ~]/2", // Am
  Q: "[f5,a5,c6]@13 ~ f5 a5, c5@12 ~ c5@2 ~", // F
  R: "[~@28 g5@2 e5 c5, c4, g5@27 c5@4 ~, [c5,e5]@14 c5 e5@15 ~@2, ~@13 g4@18 ~]/2", // C
  S: "[[c5,e5,g5]@16 g5@6 ~@6 e6@2 c6 ~, c4@31 ~, ~@16 [c5,e5]@15 ~, ~@8 c6@4 c6@3 ~, ~@22 g5@9 ~]/2", // C
  T: "[~@30 c6!2, a3@22 a6@4 e5@2 a6 e6@2 ~, e5@14 a6 c7 e7@15 ~, [c6,e6,a6]@6 [c6,e6]@10 e5@4 c7@11 ~, ~@4 c5@2 [a6,c7]@7 c5@18 ~]/2", // Am C Am
  U: "[~@14 g5@2 g5@5 ~ [g5,c6,e6]@5 ~@3 e5 c5, c4@31 ~, ~ c5@5 g4@15 g4@10 ~, ~@2 e5@8 c5@6 [c5,e5]@13 c5@2 ~, ~@3 g5@9 e5@4 ~@11 [g5,c6,e6]@4 ~]/2", // C
  V: "[a4@10 ~@5 a5 ~@12 e5@2 a5 ~, a3@31 ~, [a5,c6]@14 e5@2 [a5,c6]@15 ~, [c5,e5]@13 c5@3 e5@10 c5@5 ~, ~@10 a4@6 c5@6 a4@9 ~]/2", // Am C
  W: "[~@14 c6@2 c6@5 ~ [c6,e6,a6]@5 ~@3 a5 e5, a3@31 ~, ~ e5@5 c5@15 c5@10 ~, ~@2 a5@8 e5@6 [e5,a5]@13 e5@2 ~, ~@3 c6@9 a5@4 ~@11 [c6,e6,a6]@4 ~]/2", // Am A5 Am
  X: "[e5,g5,c6]@13 ~ e5 g5, c5@12 ~ c5@2 ~", Y: "~@13 c5!2 ~, [c4,e5,g5]@15 ~, c5@13 ~@3, ~@6 g4@9 ~",
  Z: "[g4,c5,e5]@11 ~ [g4,c5,e5]@3 ~", AA: "[g4,c5,e5]@15 ~",
})).s("gm_piano").gain(0.12).pan(1)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@10 B@2 A C A D A@2 E F D G D G D A D G A@3 D A@3 F A@2 E G A@4 D F D@5 A D H D@3 H D A D H D@3 H D@3 G D@3 F D F
  A E A D A@3 G A C E F A@4 D A D@3 F D A D I
>`.pickRestart({
  A: "x ~@5 x ~ x ~@6 x", B: "x ~@5 x ~ x ~@4 x ~ x", C: "x ~@5 x ~ x ~@4 x ~@2", D: "x ~@6 x!2 ~@6 x",
  E: "x ~@2 x!2 ~@3", F: "x ~@2 x!2 ~@2 x!2 ~@6 x", G: "x ~@4 x!2 ~@8 x", H: "x ~@2 x ~@2 x ~@8 x", I: "x",
})).gain(0.25).pan(1)

// drums · rim
const rim = s("rim").struct("<[x!2] [x!4] ~@102>").gain(0.25).pan(1)

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

// drums · clap
const clap = s("cp").struct("<~@2 [~ x ~ x]!101 ~>").gain(0.25).pan(1)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@23 A ~ A ~ B ~ A ~@3 C ~@7 A ~@3 A ~@3 C ~@3 B ~@7 A ~@9 A ~@13 A ~@7 A ~ A ~@5 A ~@2
>`.pickRestart({
  A: "~@13 x!2 ~", B: "~@7 x ~@5 x!2 ~", C: "~@7 x!2 ~@5 x ~",
})).gain(0.25).pan(1)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@2 A@2 B A@2 C A@3 D A E A@3 F A@3 G ~ H ~ H ~ I ~ H A B A J A E A G A E A H A@3 K ~ G ~ J ~ F ~ I ~@3 F ~@3 K ~@3 F
  ~@3 F ~ H ~ F ~ G ~ G A L M F A N E H A@2 L G A N C K ~ K ~ F ~ G ~ K O ~
>`.pickRestart({
  A: "x!8", B: "x ~ x ~ x ~ x ~ x ~ x ~ x!3 ~", C: "x ~ x ~ x!3 ~ x ~ x ~ x ~@3", D: "x ~ x ~ x!3 ~ x ~ x ~ x!2 ~@2",
  E: "x ~ x ~ x!3 ~ x ~ x ~ x ~ x ~", F: "x ~ x!6 ~@8", G: "~ x!6 ~", H: "x ~ x ~@4 x!2 ~@7", I: "~ x ~ x!3 ~@2",
  J: "x!4 ~@2 x ~@9", K: "x!11 ~@5", L: "x!7 ~", M: "x ~ x ~ x ~ x ~ x ~ x ~ x!2 ~@2", N: "x ~ x ~ x!3 ~ x ~ x ~ x!3 ~",
  O: "x!16",
})).gain(0.25).pan(1)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@2 A B C A@2 D A@3 E B D A B A F A B@2 ~@2 G ~ G ~ H ~ G A C B ~ A D B ~ A D B G A B@2 ~@6 F ~ H ~@3 F ~@7 F ~@3 F ~
  G ~ F ~@4 A B C F B I D G B@3 ~ B E D ~@4 F ~@6
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", B: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~ x ~ x ~ x ~@4",
  D: "~ x ~ x ~@3 x ~ x ~ x ~ x ~ x", E: "~ x ~ x ~@3 x ~ x ~ x ~@4", F: "~ x ~@14", G: "~ x ~@3 x ~@4 x ~@5",
  H: "~ x ~@3 x ~@3 x ~@6", I: "~ x ~ x ~@3 x ~ x ~ x ~@3 x",
})).gain(0.11).pan(1)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@21 A ~ B ~ B ~ C ~ B ~@3 D ~@3 A ~@3 B ~@3 E ~ A ~ D ~@3 C ~@7 E ~@9 B ~@3 A ~ A ~@7 B ~@3 A ~@3 E ~ E ~@3 A ~ E ~@2
>`.pickRestart({
  A: "~@13 x!2 ~", B: "~@6 x ~@4 x!2 ~@3", C: "~@3 x!2 ~@6 x ~@4", D: "~@5 x ~@10", E: "~@11 x ~@4",
})).gain(0.25).pan(1)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~ A@3 B A@3 C ~@2 A ~ A ~ A ~@4 D ~ D ~@3 D A@2 ~@2 A ~@3 A ~@2 D A ~@28 D ~@6 A B C ~@4 D ~@2 B ~@2 A B ~@11
>`.pickRestart({
  A: "~@15 x", B: "~@7 x", C: "~@14 x!2", D: "~@9 x ~@6",
})).gain(0.22).pan(1)

// drums · high tom
const high_tom = s("ht").struct(`<
  ~@21 A ~ B ~ B ~ C ~ B ~@3 D ~@3 A ~@3 B ~@3 E ~ A ~ D ~@3 C ~@7 E ~@9 B ~@3 A ~ A ~@7 B ~@3 A ~@3 E ~ E ~@3 A ~ E ~@2
>`.pickRestart({
  A: "~@4 x!2 ~@5 x ~@4", B: "~@3 x!2 ~@11", C: "x", D: "~@3 x ~@12", E: "~ x",
})).gain(0.25).pan(1)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@3 A ~@3 A ~@3 A ~@2 B A ~@2 B A ~ A ~ A ~ A ~ A ~@3 A ~@2 B A ~@3 A ~@3 A B A ~ A B A ~ A ~@2 B A ~@3 A ~@2 B
  A ~@2 B A ~ A B A B A B A ~@2 B A ~@3 A ~@2 B A ~@3 A ~ A B A B A ~ A@2
>`.pickRestart({
  A: "x", B: "~@15 x",
})).gain(0.22).pan(1)

// drums · ride
const ride = s("rd").struct(`<
  ~@22 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A B C ~ A D C ~ A E C ~ A B C ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "x ~ x!3 ~ x!3 ~ x!6", B: "x ~ x!5 ~ x!3 ~ x!4", C: "x!16", D: "x ~ x!3 ~ x ~ x!3 ~ x!4",
  E: "x ~ x!5 ~ x ~ x ~ x!4",
})).gain(0.25).pan(1)

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~@22 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A B ~@2 A B ~@2 A C ~@2 A B ~@2 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~ x ~@3 x ~@3 x ~@6", B: "~ x ~@5 x ~@3 x ~@4", C: "~ x ~@5 x ~ x ~ x ~@4",
})).gain(0.14).pan(1)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 A@20 B A B A B A B A@17 B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A@17 B A B A B A B A@2 ~
>`.pickRestart({
  A: "~ x ~@2", B: "~ x ~ x",
})).gain(0.32).pan(1)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@2 A@24 B A B A@19 B A B A@4 B A@4 B A C B A@8 B A@3 D A@17 D A C A@6 ~
>`.pickRestart({
  A: "~@2 x!2 ~@12", B: "~@3 x ~@12", C: "~@3 x ~@5 x ~@6", D: "~@2 x!2 ~@5 x ~@6",
})).gain(0.69).pan(1)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@2 A@24 B A B A@17 C A D A E A C A C F G A C@2 D A B@2 H A G C@2 A C A I A C A@21 F A C A C A@2 ~
>`.pickRestart({
  A: "~@11 x ~ x!3", B: "x ~ x ~@8 x ~ x!3", C: "x ~@10 x ~ x!3", D: "x ~ x ~@4 x ~@3 x ~ x!3", E: "~@2 x ~@8 x ~ x!3",
  F: "x ~ x ~@3 x ~@4 x ~ x!3", G: "~@7 x ~@3 x ~ x!3", H: "x ~@7 x ~@2 x ~ x!3", I: "x ~ x ~@5 x ~@2 x ~ x!3",
})).gain(0.69).pan(1)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@22 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "x!8",
})).gain(0.25).pan(1)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@22 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A@3 ~ A@3 ~ A@3 ~ A@3 ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.14).pan(1)

stack(
  bass, piano, kick, rim, snare, clap, low_tom, hihat, hihat_soft, mid_tom, open_hat, high_tom, crash, ride, ride_soft,
// … 2 more lines

More by The Beatles