Strudelify

fly me to the moon

Andrew X. Bo

KeyD majorTempo125 bpm
0:00/0:00
// fly me to the moon — Andrew X. Bo
// 125 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/4693666; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 66 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(125/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.

// chords · piano · "Grand Piano"
const piano = note(`<
  ~@4 A B C D E F G H B C D E F G I ~ A B C D E F G H B C D E F G I ~@15 A B C D E F G H B C D ~@5
>`.pickRestart({
  A: "~@5 a3 ~@2 [c4,e4,g4]@3 [c4,e4,g4], a3@9 ~@3 a3@11 ~, ~ [c4,e4,g4] ~@2", // C
  B: "~@5 d4 ~@2 [f4,a4,c5]@3 [f4,a4,c5], d4@9 ~@3 d4@11 ~, ~ [f4,a4,c5] ~@2", // F
  C: "~@5 g3 ~@2 [b3,d4,f4]@3 [b3,d4,f4], g3@9 ~@3 g3@11 ~, ~ [b3,d4,f4] ~@2", // Bdim
  D: "~@5 c4 ~@2 [g4,b4,e5]@3 [g4,b4,e5], c4@9 ~@3 c4@11 ~, ~ [g4,b4,e5] ~@2", // Em
  E: "~@5 f3 ~@2 [a3,c4,e4]@3 [a3,c4,e4], f3@9 ~@3 f3@11 ~, ~ [a3,c4,e4] ~@2", // Am
  F: "~@5 b3 ~@2 [d4,f4,a4]@3 [d4,f4,a4], b3@9 ~@3 b3@11 ~, ~ [d4,f4,a4] ~@2", // Dm
  G: "~@5 e3 ~@2 [g#3,b3,d4,f4]@3 [g#3,b3,d4,f4], e3@9 ~@3 e3@11 ~, ~ [g#3,b3,d4,f4] ~@2", // G#dim
  H: "~@5 a3 ~@2 [c#4,e4,g4]@3 [c#4,e4,g4], a3@9 ~@3 a3@11 ~, ~ [c4,e4,g4] ~@2", I: "[a3,c4,e4,a4,c5] ~@3",
})).s("gm_piano").gain(0.3)

// bass · acoustic bass
const bass = note(`<
  ~@4 A B C D E F G H B C D E F G I J A B C D E F G H B C D E F G K ~@15 A B C D E F G H B C D E F G L@2
>`.pickRestart({
  A: "a2@3 g2@3 f2@3 e2@2 e3", B: "d3@3 c3@3 b2@3 c3@2 f2", C: "g2 f2 e2 f2", D: "c3 b2 a2 g2",
  E: "f2@3 e2@2 c2 d2@3 f2@3", F: "b2 a2 g#2 f2", G: "e2 d2 c2 e2", H: "a2 b2 c3 a2", I: "a2 b2 c3 b2",
  J: "a2@3 g2@3 a2@2 b2 c3@3", K: "c3", L: "[a1@3 ~]/2",
})).s("gm_acoustic_bass").gain(0.3)

// chords · vibraphone
const vibraphone = note(`<
  ~@4 A B C D E F G H I J K L F M N ~ A B C D E F G H I J K L F M N O P Q R S T U V P Q R S T U W A B C D E F G H I J K
  L F M X@2
>`.pickRestart({
  A: "[a3,c4,e4,g4]@2 e4", B: "[d4,f4,a4,c5]@2 a4", C: "[g3,b3,d4,f4] [c4,e4,g4] [d4,f4,a4] [e4,g4,b4]",
  D: "[g4,b4,e5]@5 ~@3 e4@4", E: "[f3,a3,c4,e4]@2 c4", F: "[b3,d4,f4,a4]", G: "[e3,g#3,b3,d4,f4]@2 b3",
  H: "[a3,c4,e4,g4] [a3,c#4,e4,g4]", I: "[d4,f4,a4,c5]@2 e4", J: "[g3,b3,d4,f4]@5 ~@3 e4@4", K: "[c4,g4,b4,e5]",
  L: "[f3,a3,c4,e4]@2 f4 e4", M: "[e3,g#3,b3,d4,f4] f4", N: "[c4,e4,a4,c5] ~@3",
  O: "~@5 a3 ~@2 [c4,e4,g4]@3 [c4,e4,g4], a3@5 ~ a3@6, ~ [c4,e4,g4] ~@2", // C
  P: "~@5 d4 ~@2 [f4,a4,c5]@3 [f4,a4,c5], d4@5 ~ d4@6, ~ [f4,a4,c5] ~@2", // F
  Q: "~@5 g3 ~@2 [b3,d4,f4]@3 [b3,d4,f4], g3@5 ~ g3@6, ~ [b3,d4,f4] ~@2", // Bdim
  R: "~@5 c4 ~@2 [g4,b4,e5]@3 [g4,b4,e5], c4@5 ~ c4@6, ~ [g4,b4,e5] ~@2", // Em
  S: "~@5 f3 ~@2 [a3,c4,e4]@3 [a3,c4,e4], f3@5 ~ f3@6, ~ [a3,c4,e4] ~@2", // Am
  T: "~@5 b3 ~@2 [d4,f4,a4]@3 [d4,f4,a4], b3@5 ~ b3@6, ~ [d4,f4,a4] ~@2", // Dm
  U: "~@5 e3 ~@2 [g#3,b3,d4,f4]@3 [g#3,b3,d4,f4], e3@5 ~ e3@6, ~ [g#3,b3,d4,f4] ~@2", // G#dim
  V: "~@5 a3 ~@2 [c#4,e4,g4]@3 [c#4,e4,g4], a3@5 ~ a3@6, ~ [c4,e4,g4] ~@2", W: "[e3,a3,c4,e4]",
  X: "[[c4,e4,a4,c5]@3 ~]/2", // Am
})).s("gm_vibraphone").gain(0.48)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@19
  [~@18 x!5 ~]
  ~@14
  [~@6 x!7 ~@3 x ~ x ~@3 x ~]
  ~@14
  [x ~@17 x!6]
  ~@15
  [~@12 x!5 ~@7]
>`).gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<A@3 B A@3 B A@3 B A@6 ~@2 A@3 B A@3 B A@6 ~@16 A@3 B A@3 B A@3 ~@5>".pickRestart({
  A: "x ~@2 x ~ x!2 ~@2 x ~ x", B: "x ~@2 x ~@2 x ~ x!2 ~@2",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@34 x!2 ~@30>").gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@35 [~@3 x ~ x!2 ~@2 x ~ x] [x ~@2 x ~ x!2 ~@2 x ~ x]!13 ~@17>").gain(0.3)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@4
  [~@3 x ~@4 x ~@2 x]!14
  ~@2
  [~@3 x ~@4 x ~@2 x]!29
  ~
  [~@3 x ~@4 x ~@2 x]!11
  ~@5
>`).gain(0.95)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~@3
  [~@2 x!2]
  [x ~@4 x!2 ~@5]!14
  ~@2
  [x ~@4 x!2 ~@5]!29
  ~
  [x ~@4 x!2 ~@5]!11
  ~@5
>`).gain(0.95)

// drums · claves
const claves = s("clave:2").struct("<~@3 [~@2 x!2] [x!4]!14 ~@2 [x!4]!29 ~ [x!4]!11 ~@5>").gain(1.46)

stack(piano, bass, vibraphone, kick, snare, mid_tom, crash, ride, congas, congas_2, claves)