Strudelify
The Night Before cover art

Help!

The Night Before

The Beatles

KeyC majorTempo171 bpm
0:00/0:00
// The Night Before — The Beatles
// 171 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 3 "E.PIANO" named as a piano, played on epiano1 (its acoustic guitar steel patch is not one)
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(171/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K L M J K L M N O P Q R S T U J K L M J K L M N O P Q R S T V W X Y Z P AA AB@2 J K L M J K L M N
  O P Q R S T U J K L M J K L M N O P Q R S T V W X Y Z P AA AB@2 J K L M J K L M N O P Q R S T AC X AD@3
>`.pickRestart({
  A: "~@7 b2", B: "c3@6 ~@2 g2@7 ~", C: "c3@7 ~ g2@3 ~ c3 ~ d3 ~", D: "d#3@5 ~@3 a#2@7 ~", E: "d#3@7 ~ a#2@3 ~ d#3@3 ~",
  F: "f3@6 ~@2 c3@7 ~", G: "f3@7 ~ c3@6 f#3@2", H: "g3@3 ~ d3@3 d3", I: "g3@2 ~@2 g3@2 ~@2 g3 ~ g3@2 ~@2 g3 ~",
  J: "c3@7 ~ g2@3 ~ c3@3 ~", K: "a#2@6 ~@2 f2@3 ~ a#2@3 ~", L: "f2@7 ~ c2@3 ~ f2@3 ~", M: "g2@6 ~@2 d2@3 ~ g2@2 ~@2",
  N: "a2@6 ~@2 e2@3 ~ a2@3 ~", O: "f2@5 ~ f2@2 c3@6 ~@2", P: "a2@4 ~@2 a2@2 e2@3 ~ a2@3 ~", Q: "f2@4 ~@2 f2 ~ c3@6 ~@2",
  R: "c3@5 ~ c3@2 g2@3 ~ c3@3 ~", S: "f2@2 ~ f2 c3@3 ~", T: "c3@5 ~ c3@2 g2@3 ~ c3@2 ~@2",
  U: "d#3@5 ~ d#3@4 ~@2 f3@2 ~@2", V: "c3@4 ~@2 c3 ~ g2@3 ~ g2@2 ~@2", W: "g2@4 ~@2 g2@2 d2@3 ~ g2@3 ~",
  X: "c3@4 ~@2 c3@2 g2@3 ~ c3@3 ~", Y: "f3@4 ~@2 f3@2 c3@5 ~ c3@2", Z: "f3@5 ~ f3@2 c3@3 ~ f3@2 ~@2",
  AA: "d3@4 ~@2 d3@2 a2@3 ~ d3@3 ~", AB: "g2@3 ~ g2@3 ~ g2@3 ~ g2@3 ~", AC: "d#3@4 ~@2 d#3@2 a#2@3 ~ a#2@3 ~",
  AD: "[c3@17 ~@7]/3",
})).s("gm_acoustic_bass").gain(0.35)

// chords · epiano1 · "E.PIANO"
const epiano1 = note(`<
  ~ A@8 B@2 C D E F@2 G H I J K L M N O B@2 C D E F@2 G H I J K L P Q R S T U V W X Y@4 C D E F@2 G H I J K L M N O B@2
  C D E F@2 G H I J K L P Q R S T U V W X Y@4 C D E F@2 G H I J K L P Q Z AA AB@3
>`.pickRestart({
  A: "[~@4 [c4,e4,g4]@2 g3@2 [c4,e4,g4] ~@5 [c4,e4,g4] ~@5 [d4,f4,g4] ~@3 g3@4 [c4,e4,g4]@4 ~@4 [d#3,g3,a#3]@2 a#2 ~ [d#3,g3,a#3] ~@7 [d#3,g3,a#3] ~ [d#3,g3,a#3]@2 a#2 ~ [d#3,g3,a#3]@4 a#2@2 ~@8 [f3,a3,c4]@2 c3 ~ [f3,a3,c4] ~ [f3,a3,c4]@2 c3@2 [f3,a3,c4] ~ [f3,a3,c4]@4 c3@2 [f3,a3,c4]@4 c3@2 ~@4 g#2 ~@3 [g3,b3,d4]@2 ~@2 [g3,b3,d4] ~ [g3,b3,d4]@2 ~@2 [g3,b3,d4] ~ [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@4 [g3,b3] ~, c3@35 ~@7 [d#3,g3,a#3]@6 ~@12 [d#3,g3,a#3]@6 ~@26 [f3,a3,c4]@6 ~@28 d4@2, ~@10 [c4,e4,g4]@4 ~@2 [d4,f4,g4]@3 ~@3 [f4,g4]@6 ~@68 g2@32, ~@12 g3@5 g3@5 d4@4 ~@6 d#2@6 ~@6 d#2@20 f2@35 ~@29, ~@48 d3@3 d3@2 ~ d3@3 ~@7]/8", // C G7 C D# F G D# F …
  B: "[~@4 [c4,e4,g4]@2 g3@2 ~@2 [c4,e4,g4]@2 g3@2 [c4,e4,g4]@2 ~@4 [a#3,d4,f4]@2 f3 ~@3 [a#3,d4,f4]@6, c3@9 ~@7, g3@3 ~@5 a#2@8]/2", // C A#
  C: "f2@2 ~@2 f2 [f3,a3,c4]@2 [f3,a3,c4], ~@2 [f3,a3,c4]@3 ~@3", // F
  D: "~@4 [g3,b3,d4]@2 ~@2 [g3,b3,d4] ~ [g3,b3,d4]@2 [g2,d3]@2 [g3,b3,d4]@2, [g2,d3]@3 [g2,d3]@2 ~@3", // G G5 G G5
  E: "~@4 [c4,e4,g4]@2 c3@2 [c4,e4,g4] ~ [c4,e4,g4]@2 [c3,g3]@2 [c4,e4,g4]@2, [c3,g3]@6 g3 ~@9", // C C5 C C5
  F: "[~@4 [a#3,d4,f4]@2 f3 ~ [a#3,d4,f4] ~ [a#3,d4,f4]@2 f3 ~ [a#3,d4,f4]@2 ~@4 [f3,a3,c4]@2 ~@2 [f3,a3,c4] ~ [f3,a3,c4]@2 f2@2 [f3,a3,c4]@2, a#2@9 ~@7, ~@16 f2@6 f2@5 ~@5]/2", // A# F
  G: "d3@4 [g3,b3,d4]@2 d3@2 [g3,b3,d4] ~@3 [g2,d3]@3 ~, g2@3 ~, ~@10 [g3,b3,d4]@5 ~", // G G5 G
  H: "[a3,c4,e4]@3 ~ [a3,c4,e4]@2 ~@2 [a3,c4,e4] ~ [a3,c4,e4]@4 [a3,c4,e4]@2, a2@6 a2@5 ~@5", // Am
  I: "~@4 [f3,g#3,c4]@2 ~@2 [f3,g#3,c4] ~ [f3,g#3,c4]@2 ~@2 [f3,g#3,c4] ~, f2@3 f2@2 ~@3", // Fm
  J: "~@4 [a3,c4,e4]@2 ~@2 [a3,c4,e4] ~ [a3,c4,e4]@2 ~@2 [a3,c4,e4] ~, a2@6 a2@5 ~ a2@4", // Am
  K: "[f3,g#3,c4]@3 ~ [f3,g#3,c4]@2 ~@2 [f3,g#3,c4] ~ [f3,g#3,c4]@2 ~@2 [f3,g#3,c4]@2, ~@3 f2@2 ~@3", // Fm
  L: "~@4 [c4,e4,g4]@2 ~@6 g3@2 f3 ~, [c3,g3]@3 c3@5, ~@3 g3@3 ~@2, ~@10 [c4,e4,g4]@5 ~", // C C5 C
  M: "~@3 [f3,a3,c4], [f3,a3,c4]@3 [f3,a3,c4]@3 ~@2, ~@4 f2@4 ~ f2@7", // F
  N: "~@4 [c4,e4,g4]@2 g3 ~ [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@4, [c3,g3]@3 c3@5", // C C5
  O: "[d#2,d#3,g3,a#3]@6 [d#2,d#3,g3,a#3]@6 [f2,f3,a3,c4]@3 ~", // D# F
  P: "f2@4 [f3,a3,c4]@2 f2@2 [f3,a3,c4] ~ [f3,a3,c4]@2 f2@2 [f3,a3] ~, ~@7 c4", // F
  Q: "[c3,g3]@4 [c4,e4,g4]@2 [c3,g3]@2 [c4,e4,g4] ~ [c4,e4,g4]@2 ~@2 [c4,e4,g4] ~, ~@3 [c3,g3]", // C5 C C5 C C5
  R: "[c4,e4,g4]@4 [c3,g3]@2 [c4,e4,g4]@4 [c3,g3] ~ [c4,e4,g4] ~ [c4,e4] ~, ~@7 g4", // C C5 C C5 C
  S: "g2@4 [g3,a#3,d4]@2 g2@2 [g3,a#3,d4] ~@3 g2@2 [g3,a#3,d4]@2, ~@5 [g3,a#3,d4]@2 ~", // Gm
  T: "c3@4 [g3,c4,e4]@2 ~@2 [g3,c4,e4] ~ [g3,c4,e4]@4 [g3,c4,e4]@2, ~@3 c3@2 ~@3", // C
  U: "f2@4 [f3,a3,c4]@2 f2@2 [f3,a3,c4] ~ [f3,a3,c4]@2 f2@2 f3 ~", // F
  V: "~@2 f2 [f3,a3,c4]@2 f2 [f3,a3,c4] ~, [f3,a#3,d4]@3 ~@5", // F A#
  W: "a2@4 [a3,c4,e4]@2 a2@2 [a3,c4,e4] ~ [a3,c4,e4]@2 a2@2 [a3,c4,e4]@2", // Am
  X: "[d3,a3]@4 [d4,f#4,a4]@2 ~@2 [d4,f#4,a4] ~ [d4,f#4,a4]@2 [d3,a3]@2 [d4,f#4,a4]@2, ~@6 [d3,a3]@5 ~@5", // D5 D D5 D D5
  Y: "[[g2,d3]@4 ~@4 [g3,b3,d4] ~ [g3,b3,d4]@2 ~@2 [g3,b3,d4] ~ [a3,c4,d4]@3 ~ [a3,c4,d4]@4 [g3,b3,d4]@3 ~ [g3,b3,d4]@3 ~@5 [c4,e4,g4]@2 g3@2 ~@2 [c4,e4,g4]@2 g3@2 [c4,e4,g4]@2 ~@4 [a#3,d4,f4]@2 f3 ~@3 [a#3,d4,f4]@6, ~@2 [g3,b3,d4]@2 ~@12 c3@9 ~@7, ~@6 [g2,d3]@6 [g2,d3]@23 ~@13 a#2@16, ~@16 g3@3 ~@13]/4", // G5 G D7 G C A# G G5
  Z: "d#2@4 [d#3,g3]@2 d#2@2 [d#3,g3,a#3] ~ [d#3,g3] ~ d#2 ~ [d#3,g3,a#3] ~, ~@4 a#3 ~@5 a#3@2 ~@4", // D#
  AA: "[c3,g3]@4 [c4,g4]@2 c3@2 [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,e4,g4] ~, ~@4 e4 ~ g3 ~@9", AB: "[c2@35 ~@13]/3",
})).s("gm_epiano1").gain(0.38)

// other · overdriven guitar · "LEAD GTR"
const overdriven_guitar = note("<~@65 A B C D A B C E ~@32 F G@2 ~>".pickRestart({
  A: "~@4 [c4,c5] ~ [c4,c5] ~ [a#3,a#4]@4 [g3,g4]@2 ~@2", B: "~@6 [g3,g4] ~ [f3,f4]@4 [d#3,d#4]@3 ~",
  C: "~@2 [g3,g4] ~ [a#3,a#4] ~ [c4,c5] ~ [c4,c5]@4 [a#3,a#4]@2 ~@2", D: "~@3 [d#3,d#4]@3 [c3,c4] ~",
  E: "~@6 [f3,f4] ~ [d#3,d#4]@4 [c3,c4]@2 ~@2", F: "~@4 [c4,c5] ~ [c4,c5] ~ [a#3,a#4]@4 [g3,g4]@4",
  G: "[[c3,c4]@21 ~@11]/2", // C
})).s("gm_overdriven_guitar").gain(0.51)

// other · electric guitar jazz · "mel 2"
const electric_guitar_jazz = note("<~@41 A@4 B@2 C@2 ~@32 A@4 B@2 C@2 ~@20>".pickRestart({
  A: "[c4@2 a#3@2 d4 c#4@2 c4@2 a#3@2 d4@2 c#4@2 c4@3 c4@2 ~@2 a#3 a3@5 ~@4]/4",
  B: "[c4 a3@2 d4@2 a3@2 c4@3 a3 d4@3 ~ a3]/2", C: "[b3@3 ~ b3@4 c4@2 d4@4 g4@17 ~]/2",
})).s("gm_electric_guitar_jazz").gain(0.64)

// drums · kick
const kick = s("bd").struct("<~ A@7 B A@15 C A@15 C A@23 C A@15 C A@23 C A D ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~ x ~@2", C: "x ~@2 x ~ x!3", D: "x",
})).gain(0.53)

// drums · snare
const snare = s("sd").struct("<~ A@7 B A@14 C D A@14 C D A@7 E A@14 C D A@14 C D A@7 E A@14 C D A ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x!2 ~@3 x!2", C: "~@2 x ~@3 x!2", D: "~@2 x ~@2 x ~ x", E: "x ~@3 x ~@3 x ~ x!3 ~ x ~",
})).gain(0.53)

// drums · clap
const clap = s("cp").struct("<~@41 [~@3 x]!7 ~@33 [~@3 x]!7 ~@21>").gain(0.53)

// drums · hihat
const hihat = s("hh").struct("<~ [x!4]!47 ~ [x!4]!39 ~ [x!4]!17 ~@3>").gain(0.53)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ [~ x ~ x ~ x ~ x]!47 ~ [~ x ~ x ~ x ~ x]!39 ~ [~ x ~ x ~ x ~ x]!17 ~@3>")
  .gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~@41 [~@2 x!2 ~@4]!7 ~@33 [~@2 x!2 ~@4]!7 ~@17 [~@6 x!2] ~@3>").gain(0.53)

// drums · open hat
const open_hat = s("oh").struct("<~@48 x ~@39 x ~@17 x ~@2>").gain(0.53)

// drums · crash
const crash = s("cr").struct("<~@106 x ~@2>").gain(0.53)

// drums · ride
const ride = s("rd").struct(`<
  ~ 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 B A B A B A B A B ~@8 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 B ~@8 A B A B A B A B A B A B A B A B A ~@3
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2",
})).gain(0.53)

// drums · shaker
const shaker = s("sh").struct("<~@41 A B A B A B A B ~@32 A B A B A B A B ~@20>".pickRestart({
  A: "x ~@3 x!2 ~@2 x ~@3 x ~@3", B: "x!4",
})).gain(0.47)

stack(
  bass, epiano1, overdriven_guitar, electric_guitar_jazz, kick, snare, clap, hihat, hihat_soft, mid_tom, open_hat,
  crash, ride, shaker
)

More by The Beatles