Strudelify
Moonlight Serenade cover art

Moonlight Serenade

Moonlight Serenade

Miller

KeyE♭ majorTempo72 bpm
0:00/0:00
// Moonlight Serenade — Miller
// 72 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 66 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/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 A@2 E F G H I J A B C D K L E F M H N O P Q R S T U V W A B C D L K E F X Q I O Y Z R ~ AA AB V W A B C D L K
  E F AC AD AE AF AG@2
>`.pickRestart({
  A: "eb2@5 ~ g2@5 ~ bb2@5 ~ g2@5 ~", B: "eb2@5 ~ gb2@5 ~ a2@5 ~ gb2@5 ~", C: "f2@5 ~ g2@5 ~ ab2@5 ~ a2@5 ~",
  D: "bb2@5 ~ bb1@5 ~ c2@5 ~ d2@5 ~", E: "eb2@5 ~ bb1@5 ~ eb2@5 ~ db2@5 ~", F: "c2@5 ~ db2@5 ~ c2@5 ~ f2@5 ~",
  G: "bb1@5 ~ bb1@5 ~ bb2@5 ~ eb2@5 ~", H: "f2@5 ~ f2@5 ~ f1@5 ~ f1@5 ~", I: "bb1@5 ~ bb1@5 ~ bb2@5 ~ bb1@5 ~",
  J: "eb2@5 ~ db2@5 ~ c2@5 ~ bb1@5 ~", K: "eb2@5 ~ bb1@5 ~ eb2@5 ~ bb2@5 ~", L: "eb2@5 ~ bb1@5 ~ eb2@5 ~ bb1@5 ~",
  M: "bb1@5 ~ bb1@5 ~ bb1@5 ~ eb2@5 ~", N: "bb1@5 ~ bb1@5 ~ bb1@5 ~ bb1@5 ~", O: "eb2@5 ~ bb1@5 ~ eb2@5 ~ g2@5 ~",
  P: "ab2@5 ~ eb2@5 ~ ab1@5 ~ ab2@5 ~", Q: "f2@5 ~ g2@5 ~ ab2@5 ~ f2@5 ~", R: "d2@5 ~ d2@5 ~@13",
  S: "db2@5 ~ e2@5 ~ g2@5 ~ bb1@5 ~", T: "c2@5 ~ d2@5 ~ eb2@5 ~ d2@5 ~", U: "a2@5 ~ a2@5 ~ d2@5 ~ gb2@5 ~",
  V: "g2@5 ~ g2@5 ~ c2@5 ~ c2@5 ~", W: "f2@5 ~ f2@5 ~ bb1@5 ~ bb1@5 ~", X: "bb1@5 ~ bb2@5 ~ bb1@5 ~ gb2@5 ~",
  Y: "ab2@5 ~ ab2@5 ~ eb2@5 ~ ab1@5 ~", Z: "f2@5 ~ g2@5 ~ ab2@5 ~ ab1@5 ~", AA: "c2@5 ~ c2@5 ~ d2@5 ~ a1@5 ~",
  AB: "d2@5 ~ e2@5 ~ gb2@5 ~ d2@5 ~", AC: "bb1@5 ~ bb2@5 ~ bb1@5 ~ eb2@5 ~", AD: "f2@5 ~ g2@5 ~ ab2@5 ~ f1@5 ~",
  AE: "bb1", AF: "eb2", AG: "[~@6 eb1@23 ~@19]/2",
})).s("gm_acoustic_bass").gain(0.38)

// other · piano · "A.PIANO 1"
const piano = note("<~@11 A B ~@10 C D ~@26 E F ~@11 G@2>".pickRestart({
  A: "~@6 g4 ~ eb4 bb3 g3@2 g4 ~ eb4 g3 ~ [bb3,eb4] g4@3 eb4 bb3 g3", B: "c4 ~@5",
  C: "~@5 [f4,g4,ab4] [bb4,c5,d5] f5@8 ~@4 f5 [g5,ab5] bb5 [c6,d6] [eb6,f6], ~@7 eb5 ~@16", D: "g6@11 ~@13",
  E: "~@21 [bb4,c5,d5] [eb5,f5,g5] [ab5,bb5]", F: "c6@13 ~@11",
  G: "[~@17 c6@11 ~@20, ~@7 eb3@4 bb4 eb5 g5@2 bb5@13 ~@20, ~@2 g3@5 ~@5, ~@9 bb3@19 ~@20, ~@10 [eb4,g4]@19 ~@19]/2", // Eb
})).s("gm_piano").gain(0.43)

// other · trumpet
const trumpet = note(`<
  A B C D E F G H I ~ J K A B C D E F G H I ~ J L M N O P ~@4 A B C D E F G H I ~ J L ~@2 Q R ~@4 A B C D E F G H I ~ J
  S T@2
>`.pickRestart({
  A: "~@4 bb4@2 bb4@4 g4@2 bb4@4 g4@5 ~@3", B: "~@4 a4@2 a4@4 gb4@2 a4@4 gb4@5 ~@3", C: "~ ab4@2 eb5@3",
  D: "d5@2 ~@2 c5@2 ~@4 bb4@2 ~@4 bb4@7 ~", E: "~@4 f5@2 f5@4 f5@2 eb5@4 g4@5 ~@3",
  F: "~@4 eb5@2 eb5@4 eb5@2 d5@4 g4@5 ~@3", G: "~ d5@2 db5@3", H: "c5@6 db5@6 c5@6 b4@5 ~", I: "bb4@7 ~@17",
  J: "g4@6 g4@3 g4@3 bb4@8 bb4@2 bb4@2", K: "g4", L: "bb4 c5", M: "g4@2 g4 g4@6 f4@3", N: "bb4@2 bb4 bb4@5 ~ ab4@3",
  O: "g4@5 ~ d4 ~ eb4 ~ f4 ~", P: "g4@5 ~", Q: "~@12 d5 ~@3 eb5 ~@3 f5 ~@3", R: "g5@5 ~@3", S: "bb4@23 ~",
  T: "[~@6 c5@23 ~@19]/2",
})).s("gm_trumpet").gain(0.25).pan(0.7)

// chords · trumpet
const trumpet_2 = note("<~@10 A ~@11 A B C D E F ~@4 G H I J K L M N O ~ A B ~@2 P Q ~@14 A R S@2>".pickRestart({
  A: "[c4,eb4]@6 [c4,eb4]@3 [c4,eb4]@3 [c4,d4,gb4]@8 [c4,d4,gb4]@2 [c4,d4,gb4]@2", B: "[c4,eb4,g4] [db4,f4,g4]",
  C: "[ab3,c4,eb4]@2 [ab3,c4,eb4] [ab3,c4,eb4]@6 [ab3,c4,eb4]@3", // Ab
  D: "[b3,eb4,g4]@2 [b3,eb4,g4] [b3,eb4,g4]@5 ~ [b3,eb4,f4]@3", // Baug Fm7b5
  E: "[a3,d4,f4]@5 ~ [f3,g3,b3] ~ [g3,a3,c4] ~ [g3,b3,d4] ~", F: "[g3,bb3,e4,g4]@5 ~",
  G: "~@4 [c4,eb4,g4]@2 [c4,eb4,g4]@4 [bb3,c4,eb4]@2 [c4,eb4,g4]@4 [bb3,c4,eb4]@5 ~@3", // Cm Cm7 Cm Cm7
  H: "~@4 [eb4,gb4]@2 [eb4,gb4]@4 [c4,eb4]@2 [eb4,gb4]@4 [c4,eb4]@5 ~@3", I: "~ [eb4,f4]@2 [g4,ab4,c5]@3",
  J: "[ab4,bb4]@2 ~@2 [f4,ab4]@2 ~@4 [f4,ab4]@2 ~@4 [gb4,ab4]@7 ~", // Absus2 Fm Gbsus2
  K: "~@4 [g4,bb4,d5]@2 [g4,bb4,d5]@4 [g4,bb4,d5]@2 [g4,bb4,c5]@4 [c4,eb4]@5 ~@3", // Gm C7 Cm
  L: "~@4 [g4,bb4,c5]@2 [g4,bb4,c5]@4 [g4,bb4,c5]@2 [f4,g4,bb4]@4 [c4,eb4]@5 ~@3", M: "~ [f4,g4,bb4]@2 [f4,g4,bb4]@3",
  N: "c4@6 db4@6 c4@6 [f4,ab4]@5 ~", O: "[eb4,g4]@7 ~@17", P: "~@12 [f4,g4,b4] ~@3 [g4,a4,c5] ~@3 [a4,b4,d5] ~@3",
  Q: "[bb4,db5,e5]@5 ~@3", R: "[c4,eb4,g4]@23 ~", S: "[~@6 [eb4,g4,bb4]@23 ~@19]/2",
})).s("gm_trumpet").gain(0.19).pan(0.7)

// chords · baritone sax · "BARITONSAX"
const baritone_sax = note(`<
  A B C D E F G H I J ~@2 A B C D E F K H I J ~@5 L M N O P Q R S T U@2 V W X Y ~@2 Z AA AB ~ AC AD AE AF A B C D E F K
  H I J ~ AG AH@2
>`.pickRestart({
  A: "[c4,eb4,g4,bb4]@10 [d4,f4,ab4,bb4] [eb4,g4,bb4,c5]", B: "[c4,eb4,gb4,a4]@10 [d4,gb4,g4,bb4] [eb4,gb4,a4,c5]",
  C: "[c4,eb4,f4,ab4]@4 [d4,eb4,g4,bb4] [eb4,f4,ab4,c5] [c4,eb4,f4,ab4]@4 [d4,eb4,g4,bb4] [eb4,f4,ab4,c5]", // Fm7 Ebmaj7 Fm7 Ebmaj7 Fm7
  D: "[e4,g4,bb4,db5]@3 [f4,ab4,c5,d5]@5 ~ [gb4,a4,c5,d5]@3", // Edim Dm7b5 D7
  E: "[d5,f5]@12 [c5,eb5]@7 ~ [ab4,b4,d5,g5]@2 [bb4,c5,eb5,g5]@2, [g4,bb4]@5 ~", // Dm Cm G Cm7 Gm
  F: "[g4,bb4,c5,eb5]@10 [ab4,b4,d5,f5] [bb4,c5,eb5,g5]", // Cm7 Abdim Cm7
  G: "[f4,g4,bb4,d5]@4 [gb4,c5,eb5] [g4,d5,f5] [f4,g4,bb4,db5]@4 [gb4,ab4,c5,eb5] [g4,bb4,d5,f5]", // Gm7 Cdim G7 Gm7b5 Ab7 Gm7
  H: "[bb4,c5,e5,g5]@6 [e4,g4,bb4,db5]@11 ~ [f4,ab4,b4,eb5]@6", I: "[bb4,c5,eb5,g5] [d4,f4,g4,bb4]@2 [eb4,g4,bb4,c5]",
  J: "[ab4,b4,eb5,f5] [b3,eb4,f4,ab4]@2 [c4,eb4,f4,ab4]", // Fm7b5 Fm7
  K: "[f4,g4,bb4,d5]@4 [gb4,ab4,c5,eb5] [g4,bb4,d5,f5] [f4,g4,bb4,db5]@4 [gb4,ab4,c5,eb5] [g4,bb4,d5,f5]", // Gm7 Ab7 Gm7 Gm7b5 Ab7 Gm7
  L: "~@9 [e4,g4,db5,eb5]@2 [e4,g4,db5,eb5]", M: "[g4,a4,c5,eb5]@2 [g4,a4,c5,eb5] [g4,a4,c5,eb5]@6 [d4,gb4,a4,c5]@3",
  N: "[gb4,bb4,d5,gb5]@2 [gb4,bb4,d5,gb5] [gb4,bb4,d5,gb5]@5 ~ [a4,c5,d5,gb5]@3", // Gbaug D7
  O: "[g4,bb4,db5,f5]!3 [e4,g4,bb4,c5]@3", P: "[f4,ab4,c5,eb5]!3 [ab3,d4,f4,ab4]@3", Q: "[c3,c4]@10 [d3,d4] [eb3,eb4]",
  R: "[c3,c4]@9 ~ [d3,d4] [eb3,eb4]", S: "[c3,c4]@4 [d3,d4] [eb3,eb4] [c3,c4]@4 [d3,d4] [eb3,eb4]",
  T: "[e3,e4]@3 [f3,f4]@5 ~ [gb3,gb4]@3", U: "[g3,g4]@10 [ab3,ab4] [bb3,bb4]",
  V: "[g3,g4]@4 [ab3,ab4] [bb3,bb4] [g3,g4]@4 [ab3,ab4] [bb3,bb4]", W: "[c4,c5] [e3,e4]@2 [f3,f4]",
  X: "[bb3,bb4] [d3,d4]@2 [eb3,eb4]", Y: "[ab3,ab4] [b2,b3]@2 [c3,c4]", Z: "[eb3,ab3,c4,eb4]", AA: "[f3,ab3,b3,eb4]",
  AB: "[f3,a3,c4,d4] ~", AC: "[eb4,g4] [d4,gb4], [a3,c4]", AD: "[c4,d4,gb4,bb4] [c4,eb4,gb4,a4]",
  AE: "[f4,g4,bb4,db5]@2 [f4,g4,bb4,db5]!2 [e4,g4,bb4,c5]@4", // Gm7b5 C7
  AF: "[f4,ab4,c5,eb5]@2 [f4,ab4,c5,eb5]!2 [b3,d4,f4,ab4]@4", // Fm7 Bdim
  AG: "[c4,eb4,g4]@3 [d4,f4,ab4] [eb4,g4,bb4] ~ [c4,eb4,g4]@3 [d4,f4,ab4] [eb4,g4,bb4] ~ [f4,ab4,c5]@3 [g4,bb4,d5] [ab4,c5,eb5] ~ [f4,ab4,c5]@3 [g4,bb4,d5] [ab4,c5,eb5] ~", // Cm Ddim Eb Cm Ddim Eb Fm Gm …
  AH: "[[g4,bb4,eb5] ~@5 [eb3,bb3,eb4,g4]@23 ~@19]/2", // Eb
})).s("gm_baritone_sax").gain(0.19).pan(0.3)

// chords · trombone
const trombone = note(`<
  A B C D E F G H I ~ J K A B C D E F G H I ~ J L M N O P ~@4 A B C D E F G Q I ~ J L ~@2 R S ~@4 A B C D E F G H I ~ J
  T U@2
>`.pickRestart({
  A: "~@4 [c4,eb4,g4,bb4]@2 [c4,eb4,g4,bb4]@4 [bb3,eb4,g4,bb4]@2 [c4,eb4,g4,bb4]@4 [bb3,eb4,g4,bb4]@5 ~@3", // Cm7 Eb Cm7 Eb
  B: "~@4 [c4,gb4,a4]@2 [c4,gb4,a4]@4 [a3,c4,gb4]@2 [c4,gb4,a4]@4 [a3,c4,gb4]@5 ~@3", // Gbdim
  C: "~@4 [c4,f4,ab4]@8 [f4,ab4,c5,eb5]@11 ~", D: "[bb3,e4,bb4] ~ [bb3,f4,bb4] ~@2 [bb3,f4,ab4] ~@2 [bb3,d4,ab4]@3 ~",
  E: "~@4 [g4,bb4,d5,f5]@2 [g4,bb4,d5,f5]@4 [g4,bb4,d5,f5]@2 [g4,bb4,c5,eb5]@4 [bb3,eb4,g4]@5 ~@3", // Gm7 Cm7 Eb
  F: "~@4 [g4,bb4,c5,eb5]@2 [g4,bb4,c5,eb5]@4 [g4,bb4,c5,eb5]@2 [f4,g4,bb4,d5]@4 [bb3,eb4,g4]@5 ~@3", // Cm7 Gm7 Eb
  G: "~@4 [f4,g4,bb4,d5]@8 [f4,g4,bb4,db5]@11 ~", H: "[e4,g4,bb4,e5]@3 [eb4,b4]", I: "[eb4,g4,bb4,c5]@7 ~@17",
  J: "[bb3,d4,f4]@6 [bb3,d4,f4]@3 [bb3,d4,f4]@3 [bb3,d4,e4,ab4]@8 [bb3,d4,e4,ab4]@2 [bb3,d4,e4,ab4]@2", // Bb Bb7
  K: "[eb4,c5,eb5] [db4,f4,db5,f5] [c4,eb4,a4,eb5] [bb3,d4,ab4,d5], bb4 c5", L: "[eb3,bb3,eb4,g4] [eb3,eb4,g4,bb4]",
  M: "[ab3,c4,eb4,g4]@2 [ab3,c4,eb4,g4] [ab3,c4,eb4,g4]@6 [ab3,c4,eb4,f4]@3", // Abmaj7 Fm7
  N: "[ab3,eb4,f4,ab4]@2 [ab3,eb4,f4,ab4] [ab3,eb4,f4,ab4]@5 ~ [ab3,eb4,f4,ab4]@3", // Fm7
  O: "[d4,f4,a4]@5 ~@3 eb4 ~ [d4,f4] ~", P: "[db4,e4,g4]@5 ~", Q: "[e4,g4,bb4,e5]@3 [eb4,f4,b4]",
  R: "~@12 [f4,g4,b4,d5] ~@3 [eb4,g4,a4,c5] ~@3 [d4,f4,g4,bb4] ~@3", S: "[db4,e4,g4,bb4]@13 ~@11",
  T: "[eb3,bb3,eb4,g4]@23 ~", U: "[~@6 [eb3,c4,g4]@23 ~@19]/2",
})).s("gm_trombone").gain(0.2).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x!4]!26 [x!2 ~@2] [x!4]!19 [x!2 ~@2] ~ [x!4]!14 x ~@3>").gain(0.3)

// drums · snare
const snare = s("sd").struct("<[x!4]!26 [x!2 ~@2] [x!4]!19 [x!2 ~@2] [x!13 ~@11] [x!4]!14 x ~@3>").gain(0.1)

// drums · ride
const ride = s("rd").struct("<[x!4]!26 [x!2 ~@2] [x!4]!19 [x!2 ~@2] ~ [x!4]!14 x ~@3>").gain(0.3)

stack(bass, piano, trumpet, trumpet_2, baritone_sax, trombone, kick, snare, ride)

More by Miller