Strudelify

Mr. Moonlight

The Beatles

KeyF♯ majorTempo132 bpm
0:00/0:00
// Mr. Moonlight — The Beatles
// 132 bpm, 4/4, key F# 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 83 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// bass · fretless bass
const bass = note(`<
  ~@3 A@5 B C@2 A D E@3 F C@2 A B C@2 G H I J A@9 B C@2 K H I J A@9 B C L M H I J A@9 B C@2 K H I J A@3 ~@5
>`.pickRestart({
  A: "f#2@11 ~ f#2@3 ~ b2@11 ~@5", B: "f#2@5 ~@3 f#2@5 ~@3 g#2@5 ~@3 a#2@5 ~@3", C: "b2@11 ~ b2@3 ~ f#2@11 ~@5",
  D: "f#2@5 ~@7 f#2@3 ~ f#2@5 ~@3 f#2@3 ~@5", E: "d#3@3 ~@9 d#3@3 ~ d#3@5 ~@11",
  F: "d#3@3 ~@9 d#3@3 ~ d#3@5 ~@3 c#3@5 ~@3", G: "f#2@11 ~ f#2@3 ~ f#2@5 ~@3 c#3@8",
  H: "d#3@5 ~@7 d#3@3 ~ d#3@5 ~@3 d#3@5 ~@3", I: "g#2@5 ~@7 g#2@3 ~ g#2@5 ~@3 g#2@5 ~@3", J: "c#3@5 ~@27",
  K: "f#2@11 ~ f#2@3 ~ f#2@5 ~@3 c#3@5 ~@3", L: "f5@3 ~ d#5@8 b2@3 ~@5 f#5@12, b2@11 ~@5 f#2@11 ~@5",
  M: "~@4 f#5@5 ~ f#5@2 ~ f#5@3 ~ f#5@3 ~ c#5@3 ~ c#5@7, f#2@11 ~ f#2@3 ~ f#2@5 ~@3 c#3@5 ~@3",
})).s("gm_fretless_bass").gain(0.78)

// bass · fretless bass · soft notes
const bass_soft = note("<~@78 [f#2@11 ~ f#2@3 ~ b2@11 ~@5]!5>").s("gm_fretless_bass").gain(0.23)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@3 A B@3 C D E@2 F G H I H J K L C M N O P Q R ~ S@2 B T U T V F G M W O X Y R ~ S@2 B T U T@2 F G M W O X Y R ~ S@2
  B T U T V F G M W O X Y R ~ S@8
>`.pickRestart({
  A: "~@9 [c#4,f#4]@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, ~@8 a#3@4 a#3@4 b3@7 ~ b3@7 ~", // F#5
  B: "~ f#4@7 a#3 [a#3,f#4]@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, a#3@8 ~@4 a#3@5 ~@15, ~ c#4@12 ~@3 b3@7 ~ b3@7 ~", // D#m F#5
  C: "~ f#4@7 ~ f#4@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, a#3@8 a#3@4 a#3@5 ~@15, ~ c#4@12 ~@3 b3@7 ~ b3@7 ~", // F#5
  D: "~ f#4@7 ~ f#4@3 ~@5 [e4,f#4]@7 ~ [e4,f#4]@7, a#3@8 a#3@4 a#3@4 a#3@7 ~ a#3@7 ~, ~ c#4@12 [c#4,f#4]@5 ~@14", // Esus2 F#5
  E: "b3@5 ~@4 b4@3 ~ [f#4,b4]@3 ~ [f#4,b4]@7 ~ [f#4,b4]@7, ~@8 [b3,d#4]@4 [b3,d#4]@4 [b3,d#4]@7 ~ [b3,d#4]@7 ~", // B5 B
  F: "~ [c#4,f#4]@7 ~ f#4@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, a#3@7 ~ a#3@4 a#3@4 b3@7 ~ b3@7 ~", // F#5
  G: "~ f#4@7 ~ f#4@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, a#3@8 a#3@4 a#3@4 b3@7 ~ b3@7 ~, ~ c#4@12 ~@19", // F#5
  H: "~@2 a#4@10 ~ [f#4,a#4]@3 [d#4,f#4,a#4]@4 [d#4,f#4,a#4]@4 [d#4,f#4,a#4]@4 [d#4,f#4,a#4]@4, ~ [d#4,f#4]@11 d#4@4 ~@16", // F# D#m
  I: "~@2 a#4@10 ~ [f#4,a#4]@3 ~ [f#4,a#4]@7 ~ [f#4,a#4]@7, ~ [d#4,f#4]@11 d#4@4 d#4@7 ~ d#4@7 ~", // F# D#m
  J: "~@2 a#4@10 ~ [f#4,a#4]@3 ~ [f#4,a#4]@7 ~ [f#4,a#4]@7, ~ [d#4,f#4]@11 d#4@4 d#4@8 d#4@7 ~", // F# D#m
  K: "~@2 f#4@6 ~ b4@3 ~ [f#4,b4]@3 ~ [f#4,b4]@7 ~ [f#4,b4]@7, [b3,b4]@7 ~ [b3,d#4]@4 [b3,d#4]@4 [b3,d#4]@7 ~ [b3,d#4]@7 ~, ~ d#4@7 ~@24", // B5 B
  L: "~@2 f#4@6 ~ b4@3 ~ [f#4,b4]@3 ~ [f#4,b4]@7 ~ [f#4,b4]@7, d#5@29 ~@3, [b3,b4]@9 ~@3 [b3,d#4]@4 [b3,d#4]@7 ~ [b3,d#4]@7 ~, ~ d#4@7 [b3,d#4]@4 ~@20", // B5 B
  M: "~ [c#4,f#4]@5 ~@26, a#3 ~@7", // F#5
  N: "~@2 f#4@6 ~ b4@3 ~ [f#4,b4]@3 ~ [f#4,b4]@7 ~ [f#4,b4]@7, [b3,b4]@8 [b3,d#4]@4 [b3,d#4]@3 ~ [b3,d#4]@7 ~ [b3,d#4]@7 ~, ~ d#4@7 ~@24", // B5 B
  O: "~@2 f#4@6 ~ b4@3 ~ [f#4,b4]@3 [b3,d#4,f#4,b4]@4 [b3,d#4,f#4,b4]@4 [b3,d#4,f#4,b4]@4 [b3,d#4,f#4,b4]@4, [b3,b4]@7 ~ [b3,d#4]@4 [b3,d#4]@3 ~@17, ~ d#4@6 ~@25", // B5 B
  P: "~ [c#4,f#4]@7 ~ [c#4,f#4]@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, a#3@7 ~ a#3@4 a#3@4 a#3@7 ~ a#3@7 ~", // F#5
  Q: "~ [a#4,d#5]@7 ~ [a#4,d#5]@3 ~ [a#4,d#5]@3 [d#4,g4,a#4,d#5]@4 [d#4,g4,a#4,d#5]@4 [d#4,g4,a#4,d#5]@4 [d#4,g4,a#4,d#5]@4, [d#4,g4]@2 [d#4,g4]!2 ~@4", // D#5 D#
  R: "~@2 d#4@6 ~ g#4@3 ~ [d#4,g#4]@3 ~ [d#4,g#4]@7 ~ [d#4,g#4]@7, g#4@7 ~@25, ~ c4@6 ~ c4@4 c4@4 c4@7 ~ c4@7 ~", // G#5
  S: "~ [c#4,f#4]@7 ~ [c#4,f#4]@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, a#3@7 ~ a#3@4 a#3@4 b3@7 ~ b3@7 ~", // F#5
  T: "~ f#4@7 a#3 [a#3,f#4]@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, a#3@8 ~@4 a#3@4 b3@7 ~ b3@7 ~, ~ c#4@12 ~@19", // D#m F#5
  U: "~ [c#4,f#4]@7 ~ f#4@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@7, a#3@7 ~ a#3@3 ~ a#3@4 b3@7 ~ b3@7 ~", // F#5
  V: "~ f#4@7 [a#3,f#4]@4 [a#3,c#4,f#4]@3 ~ [b3,c#4]@4 [a#3,f#4]@4 f#4@2 [a#3,f#4]@4 ~@2, a#3@2 ~@4 [b3,c#4] ~, ~ c#4@11 ~@20", // D#m F# Bsus2 D#m Bsus2
  W: "~@2 f#4@6 ~ b4@3 ~ [f#4,b4]@3 ~ [f#4,b4]@7 ~ [f#4,b4]@7, [b3,b4]@7 ~ [b3,d#4]@4 [b3,d#4]@3 ~ [b3,d#4]@7 ~ [b3,d#4]@7 ~, ~ d#4@7 ~@24", // B5 B
  X: "~ [c#4,f#4]@7 ~ [c#4,f#4]@3 ~ [c#4,f#4]@3 ~ [c#4,f#4]@7 ~ [c#4,f#4]@3 ~@4, a#3@7 ~ a#3@4 a#3@4 a#3@7 ~ a#3@4 ~@4", // F#5
  Y: "~ [a#4,d#5]@7 ~ [a#4,d#5]@3 ~ [a#4,d#5]@3 [d#4,g4,a#4,d#5]@4 [d#4,g4,a#4,d#5]@4 [d#4,g4,a#4,d#5]@4 [d#4,g4,a#4,d#5]@4, [d#4,g4]@7 ~ [d#4,g4]@4 [d#4,g4]@4 ~@16", // D#5 D#
})).s("gm_acoustic_guitar_steel").gain(0.57).pan(0.4)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@9 A@2 B@2 C@4 D@2 E@2 D@2 F G H ~@11 A@2 F G H ~@11 A@2 F G H ~@11 A@2 F G H ~@9
>`.pickRestart({
  A: "[[b4,d#5]@61 ~@3]/2", B: "[[f#4,a#4]@61 ~@3]/2", C: "[[a#4,d#5]@125 ~@3]/4", D: "[b4,d#5]/2",
  E: "[[f#4,a#4]@37 ~@27]/2", F: "[f#4,a#4]@29 ~@3", G: "[d#5,g5]@29 ~@3", H: "[g#4,c5]@29 ~@3",
})).s("gm_drawbar_organ").gain(0.48).pan(1)

// chords · percussive organ
const percussive_organ = note("<~@45 A@2 B@2 C D E@2 ~@30>".pickRestart({
  A: "[[f#4,a#4,c#5]@6 [f#4,a#4,c#5]@6 [f#4,a#4,c#5]@4 [f#4,a#4,c#5]@31 ~ [f#4,b4,d#5]@7 ~ [f#4,a#4,c#5]@4 [f#4,a4,c5]@4]/2", // F# B F# F#dim
  B: "[[f#4,a#4,c#5]@61 ~@3]/2", // F#
  C: "[f#4,a#4,c#5]@6 [f#4,a#4,c#5]@4 ~@2 [f#4,a#4,c#5]@4 ~ [f#4,b4,c#5]@3 ~@3 [f#4,b4,c#5]@3 ~@2 [f#4,b4,c#5]@3 ~", // F# F#sus4
  D: "~ [f#4,b4,c#5]@3 ~@3 [f#4,b4,c#5]@3 ~@3 [f#4,b4,c#5]@3 ~ [f#4,b4,d#5]@6 ~ [f#4,a#4,c#5]@4 [f#4,a4,c5]@4", // F#sus4 B F# F#dim
  E: "[[f#4,a#4,c#5]@35 ~@29]/2", // F#
})).s("gm_percussive_organ").gain(0.56)

// other · epiano2
const epiano2 = note("<~@5 A@2 B ~@5 C D E ~@10 F G ~ H I B ~ J@2 K ~@22 F G ~ H I B ~ J@2 K ~@8 F L ~@5>".pickRestart({
  A: "[a#4@4 ~@2 a#4@4 ~@2 a#4@3 ~ a#4@23 ~@9 b4@7 ~ a#4@3 ~ a4@3 ~]/2", B: "a#4@19 ~@13",
  C: "~@8 d#5@2 ~ d#5@2 ~ d#5@2", D: "~ d#5@11 ~@4 d#5@6 d#5@4 ~@2 d#5@4", E: "d#5@5 ~@27",
  F: "~@17 c#4@3 ~ c#4@4 ~ c#4@4 ~@2", G: "c#4 ~", H: "a#4@4 ~@2 a#4@4 ~@2 a#4@3 ~ a#4@7 ~@9",
  I: "~@16 b4@7 ~ a#4@3 ~ a4@3 ~",
  J: "[a#4@3 ~ a#4@3 ~ a#4@8 a#4@3 ~ a#4@3 ~ a#4@13 ~@11 b4@3 ~ a#4@3 ~ a4@3 ~ a4@3 ~]/2", K: "a#4@11 ~@21",
  L: "[c#4,f#4] ~", // F#5
})).s("gm_epiano2").gain(0.8).pan(0.6)

// other · epiano2 · soft notes · F#5
const epiano2_soft = note(`<
  ~@78
  [~@17 f#4@3 ~ f#4@4 ~ f#4@4 ~@2]
  [[f#4,c#5] ~]
  [~@17 f#4@3 ~ f#4@4 ~ f#4@4 ~@2]
  [[f#4,c#5] ~]
  ~
>`).s("gm_epiano2").gain(0.4).pan(0.6)

// other · drawbar organ
const drawbar_organ_2 = note("<~@44 A B@2 C@2 D@4 ~@30>".pickRestart({
  A: "~@14 c#2 f#2", B: "[a#2@2 ~ a#3@44 ~ b3@13 ~@3, ~ f#3 ~@30]/2", C: "[a#3@13 ~@3]/2", D: "[a#3@51 ~@13]/4",
})).s("gm_drawbar_organ").gain(0.8).pan(0.6)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@3 A B@5 ~@2 C B D E D F ~@2 B G ~@2 H ~ I ~ B@6 J B@2 G ~@2 K ~ L ~ B@9 G ~@2 K ~ L ~ B@6 J B@2 G ~@2 K ~ L ~ B@8
>`.pickRestart({
  A: "f#2@7 ~ f#3@4 f#3@4 f#3@7 ~ f#3@7 ~", B: "f#3@8 f#3@4 f#3@4 f#3@7 ~ f#3@7 ~",
  C: "f#3@7 ~ f#3@4 f#3@3 ~ f#3@7 ~ f#3@7 ~", D: "d#3@3 d#3!5", E: "d#3@11 ~ d#3@4 d#3@7 ~ d#3@7 ~",
  F: "d#3@12 d#3@4 d#3@8 d#3@7 ~", G: "f#3@5 ~@27", H: "f#3@8 f#3@4 f#3@4 f#3@7 ~ f#3@8",
  I: "g#3@7 ~ g#3@4 g#3@4 g#3@7 ~ g#3@8", J: "f#3@8 f#3@4 f#3@3 ~ f#3@4 f#3@4 f#3@2 f#3@4 ~@2",
  K: "f#3@8 f#3@4 f#3@4 f#3@7 ~ f#3@4 ~@4", L: "g#3@7 ~ g#3@4 g#3@4 g#3@7 ~ g#3@7 ~",
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.1)

// drums · kick
const kick = s("bd").struct("<~@2 A ~@17 B ~@5 B ~@9 B ~@5 B ~@9 B ~@5 B ~@9 B ~@5 B ~@8>".pickRestart({
  A: "~@3 x", B: "~ x ~@2",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@2 A ~@17 B ~@5 B ~@9 B ~@5 B ~@9 B ~@5 B ~@9 B ~@5 B ~@8>".pickRestart({
  A: "~@3 x", B: "~ x ~@2",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@2 A ~@17 B ~@5 B ~@9 B ~@5 B ~@9 B ~@5 B ~@9 B ~@5 B ~@8>".pickRestart({
  A: "~@3 x", B: "~ x ~@2",
})).gain(0.4)

// drums · bongos
const bongos = s("bongo:18").struct(`<
  ~@3 A B@3 C D B@11 ~ B@5 ~ B@9 E B@5 E B@9 E B@5 E B@9 E B@5 E B@3 ~@5
>`.pickRestart({
  A: "~@7 x ~ x ~@3 x ~@4 x ~@5 x ~@7", B: "x ~@6 x ~ x ~@3 x ~@4 x ~@5 x ~@7", C: "x ~@8 x ~@3 x ~@4 x ~@5 x ~@7",
  D: "x!4", E: "x",
})).gain(1.06)

// drums · bongos · soft notes
const bongos_soft = s("bongo:18").struct("<~@78 [x ~@6 x ~ x ~@3 x ~@4 x ~@5 x ~@7]!5>").gain(0.32)

stack(
  bass, bass_soft, acoustic_guitar_steel, drawbar_organ, percussive_organ, epiano2, epiano2_soft, drawbar_organ_2,
  electric_guitar_muted, kick, low_tom, mid_tom, bongos, bongos_soft
)

More by The Beatles