Strudelify
In My Life cover art

Rubber Soul

In My Life

The Beatles

KeyG majorTempo95 bpm
0:00/0:00
// In My Life — The Beatles
// 95 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 50 bars on a 16-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 · "bas"
const bass = note(`<
  ~ A B C A@2 B C A D E F G H I J K L M A B C A@2 B C A N O P Q R S T U V W D O P X H S Y K V Z AA ~@2
>`.pickRestart({
  A: "g1@4 ~@2 g1 ~ g1@4 ~@2 g1 ~", B: "e2@4 ~@2 e2 ~ g1@4 ~@2 g1 ~", C: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2 ~",
  D: "e2@5 ~@2 e2 e2@4 ~@2 a#1 b1", E: "c2@5 ~@2 c2 c2@4 ~@2 g1 e1", F: "f1@5 ~@2 c1 f1@4 ~@2 a1 g#1",
  G: "g1@5 ~@2 g1 g1@4 ~@2 d2 f2", H: "e2@5 ~@2 e2 e2@4 ~@2 e2 g1", I: "a1@5 ~@2 a1 a1@4 ~@2 a#1 c#2",
  J: "c2@5 ~@2 g1 c2@4 ~@2 f1 f#1", K: "g1@5 ~@2 g1 g1@4 ~@2 d1 e1", L: "g1@5 ~@2 g1 g1@4 ~@2 b1 e2",
  M: "d2@5 ~@2 d2 d2@4 ~@2 a1 f#1", N: "e2@5 ~@2 e2 e2@4 ~@2 a#1 c#2", O: "c2@5 ~@2 g1 c2@4 ~@2 g1 e1",
  P: "f1@5 ~@2 f1 f1@4 ~@2 a1 g#1", Q: "g1@5 ~@2 d1 g1@4 ~@2 d2 d#2", R: "e2@5 ~@2 b1 e2@4 ~@2 b1 g1",
  S: "a1@5 ~@2 a1 a1@4 ~@2 a#1 b1", T: "c2@5 ~@2 c2 c2@4 ~@2 f1 f#1", U: "g1@5 ~@2 d1 g1@4 ~@2 d1 e1",
  V: "g1@5 ~@2 g1 g1@4 ~@2 b1 c2", W: "d2@5 ~@2 f#1 g1@4 ~@2 d2 d#2", X: "g1@5 ~@2 g1 g1@4 ~@2 d2 d#2",
  Y: "c2@5 ~@2 c2 c2@4 ~@2 a1 g#1", Z: "d2@5 ~@2 d2 d2@4 ~@2 b2 a2", AA: "d2@5 ~@11",
})).s("gm_fretless_bass").gain(0.38)

// chords · acoustic guitar nylon · "guitar"
const acoustic_guitar_nylon = note(`<
  ~ A B C@2 D@2 E F G H@2 I@2 J@3 K L@5 M N O P@2 Q@2 R@2 S T@2 M U V W X@3 Y@3 A Z@2 ~@2
>`.pickRestart({
  A: "g3@5 ~@2 d4, g4, d4@7 ~, b3@3 b3, ~@5 g3@3",
  B: "[g3,b3,g4]@4 b3@2 ~ d4, [e3,e4], ~ [g3,f4,g4], ~@4 d4@3 ~, ~@3 b3", // G E G7
  C: "[g3@4 ~@2 c4@2 c3@2 ~@6 [g3,b3,d4,g4]@15 ~, [c3,e4,g4]@2 g3!2 ~@4, c4@3 ~ d#4@4 ~@8, ~@4 g3@4 c4@6 c4@17 ~, ~@5 c3@3 ~@8]/2", // G C
  D: "[g3@5 g3 [g3,b3]@2 ~@2 g3 [b3,g4] b3@2 ~ d4, g4@8 [b3,e4]@3 ~ d4@3 ~, [b3,d4]@3 d4@3 [f4,g4]@2, ~@8 g3@2 ~ [g3,e4]@5, ~@9 e3@3 ~@2 b3@2]/2", // G Em E5 Bm Fsus2 C
  E: "c3 ~ g3 [g3,c4,g4] ~@2 g3 [g3,c4,d#4,g4], [c4,e4,g4]@3 e4@5, g3@2 ~@2 [c4,d#4,g4]@3 ~, ~ c3@3 g3@2 ~@2, ~@5 c3@3", // C5 Cm C Cm
  F: "g3@5 ~@2 d4, d4@7 ~, b3@3 b3, ~@5 g3@3", G: "b3@5 ~@2 e4, g4, e4@7 ~, d4@3 d4, ~@5 b3@3",
  H: "[g3@10 ~@6 [a3,c4,f4]@15 ~, g4 ~, e4@14 e4@17 ~, c4@3 c4 ~@4, ~@5 g3@3 ~@8]/2", // F
  I: "[g3@10 g3@2 [b3,d4,g4]@4 [b3,d4,e4,g4]@15 ~, [b3,d4]@12 g3@19 ~]/2", // G Em7 Bm
  J: "[c#4@10 ~@6 c3@10 ~@2 g3@4 [g3,b3,d4,g4]@15 ~, a4 ~@2, g4@7 g4@9 ~@8, e4@6 e4@2 ~@5 c3@3 ~@8, ~@10 c#4@6 [g3,c4,d#4]@12 [c4,d#4]@19 ~]/3", // G Cm
  K: "[g3,b3,d4]@15 ~", // G
  L: "[a3@10 ~@6 g3@10 ~@10 g3@2 [b3,g4]@2 ~@12 g3@2 [g3,c4]@2 ~@8 [g3,b3,d4,g4]@15 ~, d3@16 b3@10 g3@4 d4@10 [f4,g4]@6 d4@10 d#4@6 c4@17 ~, f#4@7 f#4@9 g3@2 ~ g3 b3 g3@3 g3@2 ~@2 c4@2 g3@2 ~@8, d4@6 d4@2 g4@8 ~ e3@3 d4@2 b3@2 [c4,e4]@3 [e4,g4]@5 ~@8, ~@5 a3@3 d4@6 b3@2 [b3,e4,g4]@3 e4@5 ~ c3@2 c3 g3 c3@3 ~@8]/5", // Em C5 G Fsus2 C Em
  M: "[g3,b3,d4,g4]@15 ~", // G
  N: "g3@2 ~ b3 ~@2 b3 [g3,b3,d4,f4,g4], [e4,g4]@4 [d4,f4,g4]@3 ~, b3@3 ~ b3@2 ~@2, ~@2 g3@2 ~ g3@2 ~", // G7 Em G7
  O: "c3 ~ g3 [g3,c4,g4] g3@2 ~ c4, [c4,e4,g4]@3 e4@5, g3 ~ [d#4,g4]@2, ~ c3@3 c4@3 ~, ~@3 g3", // C5 C D#
  P: "[g3@5 g3 [b3,d4,g4]@2 b3@5 ~@2 e4, [b3,d4,g4]@3 g3@5, ~ [e3,g4], ~@4 e4@3 d4, ~@8 d4@5 b3@3]/2", // G Em
  Q: "[g3@10 ~@6 [a3,c4,f4,a4]@15 ~, e4@14 e4@17 ~, c4@3 c4 ~@4, ~@5 g3@3 ~@8]/2", // F
  R: "[g3@5 g3 [b3,d4]@2 b3@5 ~@2 e4, [b3,d4]@3 g3@5, ~ g4, ~@4 e4@3 d4, ~@8 d4@5 b3@3]/2", // Bm
  S: "c#4@5 ~@2 g4, a4, g4@7 ~, e4@3 e4, ~@5 c#4@3",
  T: "[g3@5 ~@3 g3@5 g3 [g3,b3,d4]@2, g4 g4, d#4@7 d#4@9, c4@3 c4 [b3,d4]@3 ~, ~@5 g3@3 ~@8]/2", // G Bm
  U: "~@3 d4 g3!2 ~ b3, [f#4,a4] ~, d4@3 ~ [d4,g4]@4, a3@2 a3@2 b3@3 ~, ~ d3@3 ~@2 g3@2", // F#m G5
  V: "b3@5 ~@2 e4, [e3,g4], e4@7 ~, d4@3 d4, ~@5 b3@3", W: "[g3,c4,e4,g4]@15 ~",
  X: "[a3@5 ~@3 g3@5 g3 [b3,d4,g4]@2 b3@5 ~@2 e4, a4 ~ g4, f4@7 f4@9 e4@6 d4@2, c4@6 c4@2 [b3,d4]@6 ~@2 d4@5 b3@3, ~@5 a3@3 ~@6 g3@10]/3", // G Bm
  Y: "[~@8 g3@5 ~@3 g3@5 ~@2 d4, [c#4,e4,g4,a4]@3 [c#4,e4,g4,a4]@5 g4@4, ~@5 a2@3 d#4@7 d#4@9, ~@4 c4@3 c4 d4@3 b3, ~@13 g3@3 b3@5 g3@3]/3", // A7
  Z: "[d3,a3,d4,f#4,a4]@15 ~", // D
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// chords · string ensemble 2 · "STRINGS"
const string_ensemble_2 = note("<~@8 A@8 B@2 ~@8 A@8 B@2 A@8 C@6>".pickRestart({
  A: "[~@15 [d5,e5,g5,b5]@15 ~@2 [c5,g5]@15 [f5,a5,c6]@15 ~ [g5,b5,d6]@15 ~ [d5,e5,g5,b5]@16 [g5,a5,c#6,e6]@15 ~ [c5,d#5,g5]@16 ~, ~@31 e5@15 ~@82]/8", // Em7 C5 F G Em7 A7 Cm
  B: "[[g5,b5,d6]@15 [g5,b5,d6,g6]@12 ~@5]/2", // G
  C: "[[g5,b5,d6]@15 [g5,b5,d6,g6]@16 [d6,f#6,a6]@15 ~@2 f#6@15 [b5,d6,g6]@32 ~, ~@47 [d6,a6]@17 ~@32]/6", // G D G D5
})).s("gm_string_ensemble_2").gain(0.15)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B@2 C B A@2 D A@3 C A B@3 A D B A@2 D B@3 C B@2 A C B@5 D A@2 B D B A B A@2 B E ~@2
>`.pickRestart({
  A: "x ~@2 x!3 ~ x", B: "x ~@2 x!2 ~@2 x", C: "x ~@2 x!3 ~@2", D: "x ~@2 x!2 ~@3", E: "x",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct("<~ A@3 B A@3 B A@3 ~ A@5 ~ A@3 B A@3 B A@3 ~ A@5 ~ A@3 ~ A@6 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.36)

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

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

// drums · open hat
const open_hat = s("oh").struct("<~ A ~@14 B ~@3 B ~ C ~@6 B ~@3 B ~ B ~@8 B ~@5>".pickRestart({
  A: "x", B: "~@15 x", C: "~@14 x!2",
})).gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@5 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@8>".pickRestart({
  A: "x",
})).gain(0.36)

stack(bass, acoustic_guitar_nylon, string_ensemble_2, kick, rim, snare, hihat, open_hat, crash)

More by The Beatles