Strudelify

The Sun, Whose Rays

Gilbert & Sullivan

KeyG majorTempo120 bpm
0:00/0:00
// The Sun, Whose Rays — Gilbert & Sullivan
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 34 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@7 B@2 C@2 D@7 E@3 F@7 G@6>".pickRestart({
  A: "[~@13 b4@5 ~@13 b4@4 ~@14 b4@5 ~@9 a4@10 ~ d3@18 ~@49 b4@5 ~@14 b4@5 ~@10 e4@11 ~ f#3@19 a4@18, g2@18 a4@4 g4@13 d5@5 ~@4 a4@11 ~@37 b4@31 b4@9 g4@5 a4@9 ~ b3@8 a4@10 a4@12 ~@47, ~@5 g4@14 d3@17 d3@18 [d3,f#3,c4,d4]@21 ~@35 g2@36 ~@5 g4@15 [e3,g3,a3,c#4]@22 ~@36, ~@9 a4@9 b3@17 b3@20 ~@18 [b3,d4,b4]@19 ~@27 a4@8 b3@19 [g3,d4,d5]@21 ~@57, ~@27 a4@11 ~@2 g4@15 ~@59 g4@13 a4 d3@39 ~@19 [d3,a3,d4,a4]@21 ~@17]/7", // D7 A7 Bm G5 D5
  B: "[~@19 f5@5 ~@14 f5@4 ~@16 f5@6, ~@5 [d3,a3,d4]@20 [f3,d4]@17 [d3,f3]@22, ~@10 d5@15 ~ a3@17 [a3,d4,a4]@21, ~@15 e5@9 e5@9 ~ e5@10 ~@9 e5@10 ~, ~@29 d5@15 ~@4 d5@16]/2", // D5 Dm D5
  C: "[~@10 c#5@11 ~ d3@22 ~@20, [c#4,e5]@21 [f3,a3,d5]@24 ~@19]/2", // C#m Dm
  D: "[~@52 c5@6 ~@11 g#4@11 [a3,c4,a4]@22 a4@17 ~@22 f#5@4 ~@14 e5@5 ~@51 d5@9, a2@36 c4@22 b4@14 ~@55 f#3@18 [g4,g5]@21 ~@3 a4@18 g4@19 [g3,b3,d4]@18, ~@4 a4@14 b4@5 a4@14 e4@11 b4@10 d4@24 ~@20 [f#3,c4]@24 [c4,d4,d5]@5 f#5@5 a5@10 ~@4 e5@9 ~@5 [d3,a3,c4,c5]@24 g2@23 ~@13, ~@9 b4@9 c4@14 c5@6 ~@4 a4@18 ~@59 a4@27 d4@19 d4@16 d4@24 b4@19, ~@13 c5@14 b4@8 e3@24 e3@15 ~@28 [d3,f#4]@44 ~@9 b4@11 ~@9 f#4@18 ~@3 a4@15 ~@13]/7", // Am G F#dim Csus2 D7 D
  E: "[~@19 g4@3 ~@24 d5@2, ~ d5@43 ~@39 c5@11 ~@2, ~@2 [a3,c4,d4,f#4]@21 d4@21 [d4,b4]@50 ~@2, ~@17 g2@8 ~@2 b4@17 ~@29 g4@21 ~@2, ~@22 g4@10 a4@12 ~@19 [g3,f4]@21 c3@12]/3", // D7 G G7
  F: "[~@14 g5@11 [g3,d4,f4,g4,b4]@16 ~@73 e5@7 ~@22 d5@5 c5@6 b4@6 a4@8 ~@12 b4@8 ~@6 a4@7 f#4 d3@3 ~@2 b4@6 ~ [d3,b3,e4]@10, ~@4 c4@26 ~@18 g4@15 c5@3 e4@49 ~@6 f#5@12 d5@5 c5@10 ~@20 c5@22 ~@23 [d4,g4]@11, ~@4 e5@13 ~@8 g5@41 c4@21 c4@28 ~@12 e5@23 ~@74, ~@5 e4@26 ~@16 c5 e4@4 e5@6 d5@9 g3@21 g3@28 ~@17 c4@55 ~@13 [c4,d4,d5]@14 ~@9, ~@5 g3@20 ~@16 c3@28 e5@40 a2@41 ~@38 [d3,c4,b4]@15 ~@21]/7", // G7 E7 G5 Csus2 G
  G: "[~@2 d3@15 ~@29 g4@11 ~@23 d5@4 ~@10 b4@6 a4@6 f#4@6 ~@27 g4@42 ~@11, ~ [g3,b3,d4,e4]@17 [d3,c4]@41 ~@16 e5@8 ~ b4@10 ~@26 f#4@15 b3@47 ~@10, ~@17 a4@31 ~@22 g5@14 ~@6 g4@10 ~@12 d4@21 g3@48 ~@11, ~@18 [f#3,d4]@32 ~@8 [g2,g4]@25 ~@17 d3@31 d3@51 ~@10, ~@80 [b2,d4]@20 [f#3,c4]@37 d4@44 ~@11]/6", // Em7 D7 D G Bm F#dim
})).s("gm_piano").gain(0.15)

// chords · piano · soft notes
const piano_soft = note("<A@2 B@3 C@4 D@2 E@6 ~ F@2 G ~@2 H@2 I@3 ~ J@3 K@2>".pickRestart({
  A: "[~@19 g3@17 g3@19 ~@9]/2",
  B: "[~@9 [g2,g3]@19 ~ d3@35 g3@18 ~@14, ~@14 d4@27 ~@7, ~@7 [g3,b3]@9 ~@8, ~@29 g2@17 ~@50]/3", // G
  C: "[~@47 [d3,f#3,a3,d4]@22 f3@20 d3@16 ~@23, ~@27 f#4@42 ~@59]/4", // D
  D: "[~ [g3,a3,a4]@21 ~@21 [b3,e4]@21, [d3,e4]@22 [d4,a4]@23 ~@19, ~@21 [e3,g#3,b4]@11]/2", // Gsus2 E5 Dsus2 D5 E
  E: "[~@19 a3@17 a3@22 ~ a2@15 ~@7 e3@21 a3@44 [g3,b3]@20 ~@26, ~@18 e3@17 ~@23 g#3@24 ~@110, ~@58 e4@15 ~@7 [a2,e4]@24 ~@88]/6", // G A5
  F: "[~@4 g3@19 [g3,b3]@21 [g3,b3]@19 ~]/2", G: "b3@29 ~@3", H: "[~@24 e3@27 ~@13]/2",
  I: "[~@60 [d4,f#4]@13 ~@23, ~@2 [e3,g3]@19 ~@11]/3", // D Em
  J: "[~@27 d4@21 ~ g4@3 ~@16 d4@6 ~@22, ~@13 b3@11 [g3,b3]@10 ~@14]/3", K: "[~ g2@52 ~@11]/2",
})).s("gm_piano").gain(0.05)

stack(piano, piano_soft)

More by Gilbert & Sullivan