Strudelify
For No One cover art

Revolver

For No One

The Beatles

KeyB majorTempo164 bpm
0:00/0:00
// For No One — The Beatles
// 164 bpm, 4/4, key B major. 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 80 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(164/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(`<
  ~@16 A B C D@2 E C F@2 G H I J K L M N O P Q R S T U V W A B C D@2 E C F@2 G H I J K L M N O P Q R S T U V W A B C D@2
  E C X@2 Y@3
>`.pickRestart({
  A: "c#3", B: "g#3@15 ~", C: "c#3@11 ~ d#3@2 ~@2", D: "[e3 ~ f#3 ~ g#3 ~ c4 c#4@9]/2", E: "g#3",
  F: "[e3 ~ f#3 ~ g#3 ~ c4 c#4@8 ~]/2", G: "f#3@6 f#3@2 f#3@7 ~", H: "b2@15 ~", I: "a#2", J: "g#2@15 ~", K: "f#2",
  L: "e2@11 ~ e2@4", M: "a2", N: "b2@3 f#3", O: "b3@11 ~ f#3@4", P: "b3@11 ~ b3@3 ~", Q: "a#3@11 ~ a#3@4",
  R: "g#3@11 ~ g#3@4", S: "f#3@11 ~ f#3@4", T: "e3", U: "a3", V: "b3@3 f#3", W: "b2@11 ~@5",
  X: "[e3@2 ~@2 f#3@2 ~@2 g#3@2 ~@2 c4@2 c#4@17 ~]/2", Y: "[~ f#3@9 f#3@28 ~@10]/3",
})).s("gm_acoustic_bass").gain(0.47)

// other · french horn · "FR.HORN"
const french_horn = note("<~@33 A@3 B C D@2 E F ~@17 A@3 B C G ~@15>".pickRestart({
  A: "[f#4@19 ~ b4@5 f#4 ~ b4 ~ d#5@2 f#5@4 ~ g#5@3 ~ f#5@3 ~ b4@4]/3", B: "~@2 f#4@2 b4 ~ d#5@2 f#5@3 ~ e5@2 d#5@2",
  C: "e5@2 d#5@2 b4@4 f#4@2 e4@2 d#4@3 ~", D: "[e4@4 g#4@3 ~ b4@3 ~ b4@7 ~ a4@2 g#4@2 a4@4 g#4 ~ f#4@2]/2",
  E: "g#4@2 f#4 e4 f#4 e4 d#4 f#4", F: "b3 c#4 d#4 f#4 b4@3 ~", G: "e4@7 ~",
})).s("gm_french_horn").gain(0.32)

// chords · harpsichord · "HARPSICHRD"
const harpsichord = note(`<
  A B C D E F G H A B C D E F G I ~@10 A B C D E F G H A B C D E F G I ~@10 A B C D E F G H A B C D E F G I ~@12
>`.pickRestart({
  A: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@4, b2", // B
  B: "~@4 [a#3,d#4,f#4] ~@3 [a#3,d#4,f#4] ~@3 [a#3,d#4,f#4]@4, a#2@15 ~", // D#m
  C: "~@4 [b3,d#4,g#4] ~@3 [b3,d#4,g#4] ~@3 [b3,d#4,g#4]@3 ~, g#2@15 ~", // G#m
  D: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@4, f#2@15 ~", // B
  E: "~@4 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4]@3 ~, e2", // E
  F: "~@4 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~@3 [a3,c#4,e4]@4, a2@15 ~", // A
  G: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@2 f#2@2, b2@13 ~@3", // B
  H: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@2 f#2@2, b1@13 ~@3", // B
  I: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@2 ~@2, b1@13 ~@3", // B
})).s("gm_harpsichord").gain(0.31)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D E F G H A B C D E F G I J K L M N O P Q R S A B C D E F G H A B C D E F G I J K L M N O P Q R S A B C D E F G
  H A B C D E F G I J K P Q N O P Q T U@3
>`.pickRestart({
  A: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@4, b2", // B
  B: "~@4 [a#3,d#4,f#4] ~@3 [a#3,d#4,f#4] ~@3 [a#3,d#4,f#4]@4, a#2@15 ~", // D#m
  C: "~@4 [b3,d#4,g#4] ~@3 [b3,d#4,g#4] ~@3 [b3,d#4,g#4]@3 ~, g#2@15 ~", // G#m
  D: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@4, f#2@15 ~", // B
  E: "~@4 [g#3,b3,e4] ~@3 [g#3,b3,e4] ~@3 [g#3,b3,e4]@3 ~, e2", // E
  F: "~@4 [a3,c#4,e4] ~@3 [a3,c#4,e4] ~@3 [a3,c#4,e4]@4, a2@15 ~", // A
  G: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@2 f#2@2, b2@13 ~@3", // B
  H: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@2 f#2@2, b1@13 ~@3", // B
  I: "~@4 [b3,d#4,f#4] ~@3 [b3,d#4,f#4] ~@3 [b3,d#4,f#4]@2 ~@2, b1@13 ~@3", // B
  J: "[c#4,e4]@2 g#3 ~ [c#4,e4] ~ g#3 ~ [c#4,e4] ~ g#3@2 [c#4,e4]@2 g#3@2", // C#m
  K: "[c4,f#4]@2 g#3@2 [d#4,f#4] ~ g#3@2 [c4,d#4,f#4] ~ g#3@2 [c4,d#4,f#4]@2 g#3@2, d#4 ~@3 c4@2 ~@10", // Cdim D#m Cdim
  L: "[c#4,e4]@2 g#3 ~ [c#4,e4]@2 g#3@2 [c#4,e4]@2 g#3@2 [c#4,d#4]@2 g#3@2", // C#m C#sus2
  M: "[c#4,e4] g#3 [c#4,d#4] g#3 [c#4,e4] g#3 d#4 [g#3,c#4], ~@12 c4 ~@3", // C#m C#sus2 C#m C#5
  N: "[c#4,e4] ~ g#3@2 [c#4,e4] ~ g#3@2 [c#4,e4] ~ g#3@2 [c#4,e4]@2 g#3@2", // C#m
  O: "[c4,d#4,f#4] ~ g#3@2 [c4,d#4,f#4] ~ g#3@2 [c4,d#4,f#4] ~ g#3@2 [c4,d#4,f#4] ~ g#3@2", // Cdim
  P: "[c#4,e4] g#3 [c#4,e4] g#3 [c#4,e4] g#3 c#4 g#3, ~@12 d#4 ~@3", // C#m
  Q: "[c#4,e4] g#3 c#4 g#3 e4 g#3 d#4 [g#3,c#4], ~@4 d#4 ~@3 c#4 ~@3 c4 ~@3", // C#m C#5
  R: "[g#3,c#4,e4] ~@3 [g#3,c#4,e4] ~@3 [g#3,c#4,e4] ~@3 [g#3,c#4,e4] ~@3", S: "[f#3,b3,c#4]@3 ~ [f#3,a#3,c#4]@4",
  T: "[g#3,e4]@2 ~@2 [g#3,c#4,e4] ~@3 [g#3,c#4,e4] ~@3 [c#4,e4] ~@3, c#4 ~@11 g#3@2 ~@2", // C#m
  U: "[~ [f#3,b3,c#4]@7 ~@2 [f#3,a#3,c#4]@26 ~@12]/3", // F#sus4 F#
})).s("gm_piano").gain(0.35)

// drums · kick
const kick = s("bd").struct("<~@26 x!16 ~@10 x!16 ~@12>").gain(0.14)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@34 [~@7 x]!7 ~@19 [~@7 x]!7 ~@13>").gain(0.07)

// drums · snare
const snare = s("sd").struct("<~@16 [~ x]!9 ~ [~ x]!25 ~ [~ x]!25 ~@3>").gain(0.21)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@26 [~ x ~@2]!16 ~@10 [~ x ~@2]!16 ~@12>").gain(0.07)

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

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@8 B ~@17 A@8 B ~@17 A@8 B ~@11>".pickRestart({
  A: "~@2 x!2", B: "~ x",
})).gain(0.14)

// drums · ride
const ride = s("rd").struct("<~@25 x ~@25 x ~@25 [~ x ~@8 x ~@5] ~@2>").gain(0.29)

// drums · tambourine
const tambourine = s("tb").struct("<~@16 A@9 B A@25 C A@24 D E F ~>".pickRestart({
  A: "x!8", B: "x!3 ~", C: "x!16", D: "x ~ x ~ x ~ x ~ x ~ x ~@2 x ~ x", E: "~ x!4 ~ x!6 ~ x!3",
  F: "x!2 ~ x!6 ~ x!4 ~@2",
})).gain(0.07)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@16
  [~ x ~ x ~ x ~ x]!9
  ~@17
  [~ x ~ x ~ x ~ x]!9
  ~@17
  [~ x ~ x ~ x ~ x]!8
  [~@2 x ~@3 x ~@3 x ~@4 x]
  ~@3
>`).gain(0.72)

// drums · shaker
const shaker = s("sh").struct("<~@16 [x!4]!9 ~@17 [x!4]!9 ~@17 [x!4]!8 [x ~@3 x ~@3 x ~@4 x ~@2] ~@3>").gain(0.36)

stack(
  bass, french_horn, harpsichord, piano, kick, kick_soft, snare, snare_soft, hihat, open_hat, ride, tambourine, cabasa,
  shaker
)

More by The Beatles