Strudelify

When I Get Home

The Beatles

KeyA minorTempo132 bpm
0:00/0:00
// When I Get Home — The Beatles
// 132 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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.

// other · clarinet · "Harmony"
const clarinet = note("<~@4 A B@2 ~@13 A B@2 ~@13 A B@2 ~@23 A B@2 ~ C D@2 E@2 ~@4>".pickRestart({
  A: "~@5 c5!2 b4", B: "[c5@2 c5 b4 c5 b4 c5 d5@3 ~@6]/2", C: "~@5 b4 c5 b4", D: "[c5@2 c5 b4 c5!3 b4@3 ~@2 b4!4]/2",
  E: "c5/2",
})).s("gm_clarinet").gain(0.4).pan(0.7)

// bass · fretless bass
const bass = note(`<
  A@2 B@2 C D E C F G H G H G H F I@2 B@2 C D E C F G H G H G H F I@2 B@2 C D J C@2 K L K M H F H F C F G H G H G H F
  I@2 B@2 C D J C N D O P@5 ~
>`.pickRestart({
  A: "[~@14 a1@5 ~ a1@3 ~ a1@2 a1@2 a1@2 a1@2]/2",
  B: "[a1@3 ~ a1@3 ~ a1@2 a1@2 a1@2 a1@5 ~ a1@3 ~ a1@2 a1@2 a1@2 a1@2]/2", C: "a1@3 ~ a1@3 ~ a1@2 a1@2 a1@2 a1@2",
  D: "d2@3 ~ d2@3 ~ d2@2 d2@2 d2@2 d2@2", E: "g1@3 ~ g1@2 ~@2 g1@2 g1@2 g1@2 b1@2",
  F: "g1@3 ~ g1@3 ~ g1@2 g1@2 g1@2 g1@2", G: "c2@3 ~ c2@3 ~ c2@2 c2@2 c2@2 c2@2",
  H: "f1@3 ~ f1@3 ~ f1@2 f1@2 f1@2 f1@2", I: "[g1@3 ~ g1@3 ~ g1@2 g1@2 g1@2 a1@5 ~ a1@3 ~ a1@2 a1@2 a1@2 a1@2]/2",
  J: "g1@3 ~ g1@3 ~ g1@2 g1@2 g1@2 b1@2", K: "c2@3 ~ c2@3 ~ g1@2 g1@2 c2@2 g1@2",
  L: "a1@3 ~ a1@3 ~ e2@2 e2@2 c2@2 a1@2", M: "a1@3 ~ a1@3 ~ e2@2 e2@2 c2@2 g1@2",
  N: "a1@3 ~ c#2@2 ~@2 e2@2 ~@2 c#2@2 c#2@2", O: "g1@3 ~ g1@2 ~@2 g1@2 g1@2 g1@3 ~", P: "[c2@39 ~]/5",
})).s("gm_fretless_bass").gain(0.54).pan(0.6)

// chords · electric guitar muted · "Muted Gtr"
const electric_guitar_muted = note(`<
  A@2 B@2 C D E F G H I H I H I J K@2 B@2 C D E L G H I H I H I M K@2 B@2 C D E L@2 H L H L N J O M L G H I H I H I M
  K@2 B@2 C D M F P D M Q@6
>`.pickRestart({
  A: "[~@7 [a2,e3,a3]@3 [a2,e3,a3]@2 [a2,e3,a3]!4]/2", // A5
  B: "[[a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 [a2,e3,a3]@3 [a2,e3,a3]@2 [a2,e3,a3]!4]/2", // A5
  C: "[a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!3 ~", D: "[d3,a3,d4]@2 [d3,a3,d4]!6",
  E: "[g2,d3,g3]@2 [g2,d3,g3]@2 [g2,d3,g3]!3 ~", F: "[a2,e3,a3]@2 [a2,e3,a3]!6",
  G: "[g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3] [g2,d3,g3]@2 [g2,d3,g3]@2 ~ [g2,d3,g3]!3 [g2,d3,g3]@2 [g2,d3,g3]@2", // G5
  H: "[c3,g3,c4]@2 [c3,g3,c4]@2 [c3,g3,c4]!4", I: "[f2,c3,f3]@2 [f2,c3,f3]@2 [f2,c3,f3]!4",
  J: "[g2,d3,g3]@2 [g2,d3,g3]@2 [g2,d3,g3]!4", K: "[[g2,d3,g3]!7 [a2,e3,a3]@3 [a2,e3,a3]@2 [a2,e3,a3]!4]/2",
  L: "[a2,e3,a3]@2 [a2,e3,a3]@2 [a2,e3,a3]!4", M: "[g2,d3,g3]@2 [g2,d3,g3]!6",
  N: "[f2,c3,f3]@2 [f2,c3,f3]!2 [f2,c3,f3]@2 [f2,c3,f3]@2", O: "[f2,c3,f3]@2 [f2,c3,f3]!5 ~", P: "[a2,e3,a3]!8",
  Q: "[~ [g3,c4]@84 ~@11, c3@7 ~]/6", // C5
})).s("gm_electric_guitar_muted").gain(0.31).pan(0.1)

// chords · acoustic guitar nylon · "Nylon Gtr"
const acoustic_guitar_nylon = note(`<
  A@2 B@2 C D E F G H I H I H I J K@2 B@2 C D L F G H I H I H I M N@2 O@2 P Q M R S T U V W X Y X Y Z AA H I H I H I M
  N@2 O@2 AB Q M AC@2 Q AD AE@6
>`.pickRestart({
  A: "[~@7 [a2,e3,g3,c#4,e4,a4]@3 [a2,e3,g3,c#4,e4,a4]@2 ~ [a2,e3,g3,c#4,e4,a4] ~ [a2,e3,g3,c#4,e4,a4]]/2", // A7
  B: "[~@2 [a2,e3,g3,c#4,e4,a4]@2 [c#4,e4,a4]!2 [a2,e3,g3,c#4,e4,a4] [a2,e3,g3,c#4,e4,a4]@3 [a2,e3,g3,c#4,e4,a4]@2 ~ [a2,e3,g3,c#4,e4,a4] ~ [a2,e3,g3,c#4,e4,a4], ~@2 [a2,e3,g3] ~@5]/2", // A7 A A7
  C: "~@2 [a2,e3,g3,c#4,e4,a4]@2 [c#4,e4,a4]!2 [a2,e3,g3,c#4,e4,a4] ~, ~@2 [a2,e3,g3] ~", // A7 A A7
  D: "~@2 [c4,f#4,a4]!2 ~ [c4,f#4,a4]!2 ~, ~@2 [d3,a3]@2 ~ [d3,a3]@2 ~", E: "~@2 [g2,d3,f3,b3,f4,g4] ~@5",
  F: "~@2 [a2,e3,a3,c4] ~@2 [a2,e3,a3,c4]@2 [g2,d3,f3,b3,d4,g4]", // Am G7
  G: "~ [g2,d3,f3,b3,d4,g4]@2 [b3,d4,g4] [b3,d4,g4]@2 [b3,d4,g4]@2 ~ [b3,d4,g4]!3 [b3,d4,g4]@2 [b3,d4,g4]@2, ~@4 [g2,d3,f3]@4 ~ [g2,d3,f3]@3 [g2,d3,f3]@4", // G7 G G7
  H: "~@2 [c3,e3,a#3,c4] ~@2 [c3,e3,a#3,c4]@2 ~", I: "~@2 [f2,c3,d#3,a3,d#4,f4] ~@2 [f2,c3,d#3,a3,d#4,f4]@2 ~",
  J: "~@3 [g2,d3,f3,b3,f4,g4] ~@2 [g2,d3,f3,b3,f4,g4] ~", // G7
  K: "[[g2,d3,f3,b3,f4,g4]@2 ~@5 [a2,e3,g3,c#4,e4,a4]@3 [a2,e3,g3,c#4,e4,a4]@2 ~ [a2,e3,g3,c#4,e4,a4] ~ [a2,e3,g3,c#4,e4,a4]]/2", // G7 A7
  L: "~@2 [b3,f4,g4]!2 ~ [g2,d3,f3,b3,f4,g4] ~ [g2,d3,f3,b3,f4,g4], ~ [g2,d3,f3] ~@2", // G7
  M: "~@2 [b3,f4,g4]!2 ~ [b3,f4,g4]!3, ~@2 [g2,d3,f3]@2 ~ [g2,d3,f3]@3", // G7
  N: "[~@3 [g2,d3,f3,b3,f4,g4] ~ [b3,f4,g4]!2 [a2,e3,g3,c#4,e4,a4]@3 [a2,e3,g3,c#4,e4,a4]@2 ~ [a2,e3,g3,c#4,e4,a4] ~ [a2,e3,g3,c#4,e4,a4], ~@5 [g2,d3,f3]@2 ~@9]/2", // G7 A7 G7
  O: "[~@2 [a2,e3,g3,c#4,e4,a4]@2 ~ [a2,e3,g3,c#4,e4,a4] ~ [a2,e3,g3,c#4,e4,a4]@3 [a2,e3,g3,c#4,e4,a4]@2 ~ [a2,e3,g3,c#4,e4,a4] ~ [a2,e3,g3,c#4,e4,a4]]/2", // A7
  P: "~@2 [a2,e3,g3,c#4,e4,a4] ~ [c#4,e4,a4]!2 ~@2, ~@2 [a2,e3,g3] ~", // A7 A A7
  Q: "~@2 [c4,f#4,a4]!2 ~ [c4,f#4,a4]!3, ~@2 [d3,a3]@2 ~ [d3,a3]@3", // F#dim D5
  R: "~@2 [a2,e3,a3,c4]@2 ~ [a2,e3,a3,c4] ~ [a2,e3,a3,c4]", S: "~@2 [a2,e3,a3,c4]@2 [a3,c4]!3 ~, ~@4 [a2,e3]@3 ~",
  T: "~@2 [c3,e3,g3,c4]@2 ~ [g3,c4]!2 ~, ~@5 [c3,e3]@2 ~", U: "~@2 [a3,c4]!2 ~ [a2,e3,a3,c4] ~@2, ~ [a2,e3] ~@2",
  V: "~ [c3,e3,g3,c4] ~ [c3,e3,g3,c4]", W: "~@2 [a2,e3,a3,c4] ~ [a3,c4]!2 ~@2, ~@2 [a2,e3] ~",
  X: "~ [f2,c3,f3,a3,c4,f4] ~ [f2,c3,f3,a3,c4,f4]", Y: "~@2 [g2,d3,f3,b3,f4,g4] ~ [b3,f4,g4]!2 ~@2, ~@2 [g2,d3,f3] ~",
  Z: "~@2 [a2,e3,a3,c4] ~ [a2,e3,a3,c4] [a2,e3,a3,c4]@2 ~", // Am
  AA: "[b3,d4,g4] [b3,d4,g4]@2 [b3,d4,g4] [b3,d4,g4]@2 [b3,d4,g4]@2 ~ [b3,d4,g4]!3 [b3,d4,g4]@2 [b3,d4,g4]@2, [g2,d3,f3]@4 [g2,d3,f3]@4 ~ [g2,d3,f3]@3 [g2,d3,f3]@4", // G G7
  AB: "~ [a2,e3,g3,c#4,e4,a4] ~ [a2,e3,g3,c#4,e4,a4]", // A7
  AC: "~@2 [c#4,g4,a4]!2 ~ [c#4,g4,a4]!2 ~, ~@2 [a2,e3,g3]@2 ~ [a2,e3,g3]@2 ~", // A7
  AD: "~@2 [b3,f4,g4]!2 ~ [b3,f4,g4]!2 ~, ~@2 [g2,d3,f3]@2 ~ [g2,d3,f3]@2 ~", // G7
  AE: "[~ [g3,c4,e4]@84 ~@11, [c3,e3]@85 ~@11]/6", // C
})).s("gm_acoustic_guitar_nylon").gain(0.3).pan(0.9)

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

// drums · snare
const snare = s("sd").struct("<~ A B A@5 C A@7 B A B A@5 C A@7 B A B A@15 C A@7 B A B A@8 ~@6>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!2 ~ x!2 ~ x ~@2 x!4 ~ x ~",
})).gain(0.35)

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

// drums · mid tom
const mid_tom = s("mt").struct("<A ~ A ~@13 A ~ A ~@13 A ~ A ~@23 A ~ A ~@14>".pickRestart({
  A: "~@4 x!3 ~",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<A ~ A ~@13 A ~ A ~@13 A ~ A ~@23 A ~ A ~@8 B ~@5>".pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.3)

stack(clarinet, bass, electric_guitar_muted, acoustic_guitar_nylon, kick, snare, open_hat, mid_tom, crash)

More by The Beatles