Strudelify

When a merry maiden marries

Gilbert & Sullivan

KeyD majorTempo120 bpm
0:00/0:00
// When a merry maiden marries — Gilbert & Sullivan
// 120 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 40 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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
const piano = note("<A@2 B@8 C@7 D E F@2 G@8 H@8 I@3>".pickRestart({
  A: "[~@9 e4@4 g4@4 ~ e4@4 ~ d3@2 ~ e4@5 ~@14 e4@6 ~@11 d4@2, ~@4 d4@10 ~@8 [b3,g4]@5 ~@4 f#4@10 d5@22 ~, ~@22 g2@2 ~@7 c4@3 ~@2 d4@14 ~@14, ~@8 [g2,d3]@5 ~@3, ~@41 f#4@11 ~@12]/2", // Em G5
  B: "[~@3 e4@4 g4@4 e4@4 ~@5 e4@4 ~ c4@2 ~@3 d4@5 f#4@3 ~ e4@5 c4@4 ~@8 b4@5 ~@9 [e4,b4]@5 ~@4 d5@5 ~@45 [a3,a4]@6 ~@14 f#3@5 ~@5 b3@6 ~@29 b4@5 d4@2 ~@2 f#4@4 ~ c#4@4 ~@10 b3@5 ~ d3@3 ~@11 b4@5 ~@4 b4@4 a4, ~@15 g4@9 ~@11 d5@22 ~@4 b4@9 ~@45 b4@21 ~@4 a4@7 ~@7 d4@12 ~@19 b4@9 ~@14 e4@19 g4@12 ~@8 d5@9, ~@16 b3@9 [g2,d3,f#4]@12 ~@19 b3@2 ~@3 d4@13 ~ [d4,c#5]@12 ~@8 a3@19 e3@22 ~@8 d3@21 ~@34 [d3,f#3,a3,a4]@10 ~@8 c#4@10 ~@29, ~@65 a#4@9 ~@11 a4@24 a4@6 c#4@9 c#4@11 g4@10 f#4@34 ~ [f#4,a4]@19 ~@8 a3@2 ~@4 a3@14 [a3,c#4]@4 ~@25, ~@66 g4@9 ~@9 d3@3 ~@17 [f#2,g#4]@9 e2@3 ~@3 g3@16 ~ g3@9 a3@10 ~@35 d5@10 ~@17 a4@21 [f#4,a4]@9 ~@9]/8", // E5 A Gmaj7 Dmaj7 D F#m A F#sus2 …
  C: "[f#3@2 ~@2 f#4@5 ~@4 a3@5 a4@20 a4@5 ~@5 b4@4 ~@46 f#4@4 g#4@6 b4@6 [f4,a#4]@9 ~@2 g#4@12 f#4@11 ~@15 c#5@5 ~@5 c#4@4 ~ [f#3,c#4]@4 [f#3,c#4,f4,g#4]@4 c#4 f#3 ~@3 [f4,g#4]@6 f#4@9 ~@13 c#4@4 ~, ~@9 e4@10 ~@19 f#4@18 d3@8 c5@7 [a#3,c#5]@31 b3@2 ~@10 [c#3,c#4]@3 ~@74 [f#3,c#4]@4 ~@11 [f#3,f#4,a#4]@18, ~@43 a4@10 [b3,b4]@4 c5 [c4,a4]@13 a#4@26 ~@56 g#4@15 [f#4,a#4]@9 ~ f#4@8 [f#4,a#4]@9 ~@20 a#3@9, ~@44 a3@13 a3@17 ~@18 [d#4,b4]@10 f4 ~@5 f4@2 ~@48 a#4@10 ~@9 a#4@9 ~@11 c#5@27, ~@48 d4@10 f#4@35 ~@4 [c#4,a#4]@5 ~@71 [f4,g#4]@9 ~@28 g#3@14]/7", // A#5 F#5 C# Fm A#m C# F#5 F# …
  D: "~ [f#3,c#4]@2 ~@4 c#4@4 ~ f#3 ~@4 f#3@4 ~ f#4@5 ~ f#3@2 ~@2, a#4@10 ~@11 a#4@6 ~@5, ~ f#4@10 [f#4,a#4]@5 ~@16, ~@6 [f4,g#4]@6 ~@4 [f4,g#4]@6 ~@5 [f4,g#4]@5", // F#5 F# Fm
  E: "~@14 a#4@13 ~ [e3,a#4]@4, ~@3 c#5@16 ~@13", // Edim
  F: "[~@59 b4@5, ~ a#4@10 ~@6 d5@19 a4@14 ~@14, ~@7 b3@20 ~@8 c4@29, ~@7 b4@17 ~@6 b4@9 ~@7 d5@18, ~@9 [d3,f#3]@7]/2", // D
  G: "[~@24 g4@5 ~@18 d4@5 d4@5 [b3,d4]@3 ~@24 d2@5 ~@23 b4@7 ~@26 g4@6 ~@10 d3@9 ~ c2@4 ~@21 e4@4 ~@24 [d4,f#4]@4 ~@5 [d4,f#4]@4 ~@6 e4@5 ~@4 e4@4, ~ g4@23 ~@6 f#4@27 b4@5 b4@20 b4@7 ~@30 [b3,d4]@32 a3@23 ~@7 d4@19 [g3,g4]@9 a3@19 ~ f#3@9 d4@5 ~@5 g4@8, ~@14 f#4@15 c4@28 d3@32 [a3,c4,f#4,a4]@30 g4@20 a4@12 d2@19 ~@22 g4@8 ~@8 c3@20 [c3,a3]@11 g3@11 ~@6, ~@20 a4@10 ~@27 d2@27 ~@6 f#3@30 b2@33 ~@17 c3@11 ~ b2@19 b2@9 ~@9 d5@20 ~@17, ~@57 g4 ~@11 d5@21 ~@9 d5@23 ~@11 f#4@17 ~ f#4@31 ~@5 e4@9 ~@9 e4@5 f#4@14 ~@4 [d4,f#4]@5 ~@4 d3@13 ~@6]/8", // Bm D Bm G F#dim F D
  H: "[~@6 e4@3 ~ f#4@4 ~ [a3,c4,f#4]@4 ~ c4@4 c4@5 c4@5 ~@13 e5@5 ~@48 d5@5 e5@5 ~@39 [a3,c4,d4]@10 g3@6 ~@3 b3@2 ~@19 g4@14 ~ [c2,g4]@31 ~ [c2,c3]@2 ~@3 [c2,c3,d#4,a4,c5]@5 [d2,d4,b4]@2 ~@3 [d2,b4] d3 ~@3, ~ [b2,g4]@8 a2@2 ~@8 f#4@10 ~@5 c4@7 d5@8 ~@3 g5@10 d5@4 b4@5 c4@19 [c4,d4]@10 b3@19 d5@5 b4@5 [d3,a4]@30 g2@4 ~@7 [b4,d5]@12 b4@22 e4@15 ~@16 d#4@2 ~@14 [d4,d5]@2 ~@3, ~@19 a3@5 ~@5 [a3,f#4]@13 b3@30 [f#3,a4]@30 ~@8 g5@19 c4@20 ~@10 [g4,b4]@13 ~@9 d5@22 c3@12 ~@31 [d3,g4] ~@9, ~@20 d5@19 d3@18 e5@15 d3@24 g2@34 f#3@30 ~@10 f4@39 ~@27 b4 ~@19, ~@37 g2@38 ~@6 d5@16 d3@18 e5@24 d5@21 ~@5 [a4,c5]@7 ~@3 c#5@9 ~@19 [c5,e5]@32 ~ d5@5 ~@15]/8", // F#dim D7 C5 C Adim G Em Csus2 …
  I: "[~@2 g4@5 ~@6 [d3,f#4,a4]@6 ~@9 [d3,g4]@47 ~@21, ~ b4@5 ~@90, ~ d4@3 ~@8 c4@6 ~@78]/3", // D G5
})).s("gm_piano").gain(0.2)

// chords · piano · soft notes
const piano_soft = note("<A B@2 C@3 D E@3 F@2 G@4 H I J@3 K@2 L M@5 N ~ O@2 ~ P@2 ~ Q@3>".pickRestart({
  A: "~@5 [g2,d3,b3]@10 ~@17", // G
  B: "[~@20 a3 ~@10 g2@10 ~@7 [g2,d3]@3 ~@13, ~@18 d4@11 ~@35, ~@9 c4@2 ~@21, ~@19 d3@11 [d3,b3]@11 ~@23]/2", // G5 G
  C: "[~@14 a3@2 ~@9 [g2,d3]@16 ~@2 b3@2 ~@13 d3@23 ~@15, ~@4 d4@4 ~@6 g3 ~@17, ~@13 d3@11 ~@17 d3@10 ~ f#2@20 ~@24]/3", // G5
  D: "~@8 a2@9 ~@15, ~@7 c#4@9 ~@16", E: "[~@6 [d3,a3]@14 ~ d3@18 ~@9 d3@19 ~@11 d3@17 ~, ~@20 a3@18 ~@40 a3@11 ~@7]/3",
  F: "[[d3,a3,d4]@3 ~@5 [a3,c#4]@3 ~@7 c#4@3 ~@8 [d3,a3]@10 d3@17 ~@8, ~@8 d3@20 [c#4,g4]@11 ~@25, ~@23 b3@16 ~@25]/2", // D5 A D5 C#dim
  G: "[~@29 [c#3,f#4]@5 c#3@4 ~ c#3@5 d4@2 ~@15 [b3,f4]@11 ~ [f#2,f#3,a#3]@5 ~@6 f#4@20 ~ [f#3,c#4]@4 f#3@5 ~@14, ~@7 c#3@21 ~@33 c#3@3 ~@64, ~@8 c#4@25 ~@95]/4", // F#5 Bdim F# F#5
  H: "~@5 [f#3,c#4]@4 ~@23", I: "~@7 f#3@4 ~ c#4@4 c#4@5 ~ c#4@2 ~@3 c#4 ~@4, ~@22 f#3 ~@9",
  J: "[~@39 g3@32 ~@25, ~@3 [f#3,a#3,c#4,f#4]@40 ~@53, ~@39 d3@29 ~@28]/3", // F#
  K: "[~@2 [d3,b3]@27 ~ f#3@27 ~@7, ~ g3@28 d3@28 ~@7]/2", L: "~@13 e3 ~@2",
  M: "[~@24 [d2,g3]@31 d4@22 ~@9 [b1,b3]@19 ~@10 d4@9 d4@4 ~@13 b2@13 ~@6, ~@24 d3@6 ~@25 a2@19 ~@11 g3@19 ~@9 d3@27 ~@20, ~@114 f#3@19 ~@27]/5", // G5 B
  N: "~@2 d3@8 ~@15 a3@4 ~@3, ~ g3@8 ~@23", O: "[~@27 a3@11 ~@26]/2", P: "[~@11 b3@38 ~@15, ~@7 g3@42 ~@15]/2",
  Q: "[~@2 d2@2 ~@9 d2@6 ~@9 [g2,b3]@47 ~@21, ~ d3@2 ~@93]/3", // G
})).s("gm_piano").gain(0.1)

stack(piano, piano_soft)

More by Gilbert & Sullivan