Strudelify

With Cat-Like Tread

Gilbert & Sullivan

KeyE minorTempo120 bpm
0:00/0:00
// With Cat-Like Tread — Gilbert & Sullivan
// 120 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 32 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@3 C@4 D E F G@2 H@4 I@2 J@6 K@6>".pickRestart({
  A: "[g4 ~@3 [c3,e3,g3] ~@8 [c3,g3] ~@7 e3 ~@8 [c3,e3,g3,c4] ~@5 b4 ~@2 [c3,f3,a3] ~@6 c5 ~ b4@6 a4 ~@2 [c3,g3] ~@6, ~@4 c5@9 c5@8 c5@15 ~@3 a4@6 ~@3 a3@2 ~@7 g4@7]/2", // C C5 C F C5
  B: "[~@2 [e3,g3,c4] ~@3 e4@2 ~@2 [c3,e3,g3] ~@8 [c3,e3,g3] ~@8 [e3,g3] ~@7 c4 [c3,e3,g3] ~@3 e4@4 [g3,b3] f3 ~@4 e4@2 [c3,f3,b3] ~@7 c4 e3 ~@7 [c3,c4] [e3,g3] ~@7 g3 c5@8 ~ c3 ~@5 c5, ~@2 c3@3 ~@5 e4@8 ~ e4@8 ~ e4@12 ~@5 f4@6 ~@2 f4@7 g4@3 ~@25 c5@2 ~@6, ~@61 e4@11 ~@8 c3 ~@15]/3", // C Em C G F C Em
  C: "[~ g3 c3 ~@7 [c3,e3]@2 ~@3 b4@4 [c3,f#3,a3] d#3 ~@5 c5@2 [c3,d#3] ~@5 a4 ~@2 c3 ~@7 [c3,e3,g3,c4] ~@3 f4@2 ~@2 a3 [c3,e3,g3] ~@7 [c3,e3,a3] ~@8 [g3,b3] ~@5 d4@2 [d3,g3,b3] ~@6 b4@2 [d3,g3,c4] ~@8 [d3,c4] ~@8 [g3,b3,g4] ~@5 [b2,g4,b4] ~ [g4,b4]@2 ~@4 [b2,g4,b4] ~ [e2,b2] ~@5, ~ c5@14 ~@4 a4@6 ~@3 b4@6 ~@19 e4@10 ~@8 d4@5 ~@21 f#3@2 ~@15 b2 ~@7 f#4@3 ~@3, ~@10 [g3,c4] ~@51 a4@9 ~@8 g4@6 ~@3 a4@17 ~@17 a4@5 ~]/4", // C F#dim Cm C Am G Csus2 D7 …
  D: "[e4,g4] ~ [e2,b2] ~@5 [f#4,a4] ~ [e2,b2,e4,g4] ~@5 [b4,g5] ~ [b4,g5]@3 ~@3 [b4,g5] ~ [b2,a4] ~@5, ~@2 d#4@4 ~@12 [e2,b2] ~@13, ~ f#4 ~@11 f#5@2 ~", // Em E5 F#m Em B7 E5
  E: "[g4,e5] ~@2 [e2,b2,f#4] ~@4 [a4,f#5] ~@2 g4@3 ~@2 [g4,b4] ~ g4 [e2,b2] ~@4 [g4,b4] ~ [f#4,a4]@4 ~@2, ~ d#5 ~@3 e5@2 ~@2 b4 ~@6, ~@11 b2 ~@14 [e2,b2] ~@5", // C Esus2 D G E5 G F#m E5
  F: "[e4,g4] ~@2 [e2,b2,d#4] ~@4 [f#4,a4] ~@2 e4@4 ~@2 [b3,g4] ~ [b3,g4]@2 ~@4 [b3,g4] ~ [b2,a3,f#4] ~@4, ~@2 f#4@2 ~@7 g4@2 ~@19, ~@11 b2 ~@7 [e2,b2] ~@12", // Em Emaj7 F#m Em B7 E5
  G: "[g3 e4 ~ d#4@2 ~@3 [a3,f#4] ~@2 e4@2 ~@8 [e2,c3]@9 [g3,b3,g4]@4 ~@5 [e2,c3,g3,c4,g4]@9 [b3,g4]@4 ~@5 [e2,c3,g3,c4,g4]@7, ~@3 f#3 ~@7 b2 ~@8 [g3,c4,g4]@10 ~@34]/2", // D C G C Em C C5
  H: "[~@3 [g3,g4]@3 ~@6 [g3,b3,g4]@9 ~@12 [g3,g4]@9 c2@2 ~@7 [g2,e3] ~@16 g2 ~@4 [d4,d5]@4 [d4,d5]@8 ~ c4@7 ~ [c3,g3] ~@7 g3 g2 ~@7 [b3,g4]@7 a4@2 [g2,f3,g3] ~@5 a4@2, ~@2 b3@9 ~@10 [b3,f4]@21 g4@21 ~@31 [c4,g4]@17 [d3,g3] ~@16, ~@3 [e2,b2]@39 g2 ~@17 e4@17 ~@16 e4@18 ~@9 b3@3 ~@5, ~@21 [g3,g4]@12 ~@9 [e4,e5]@17 e5@18 ~@8 c5@11 ~@24 b4@6 ~@2, ~@22 [d2,g2]@21 ~@34 [c3,g3] ~@33 f3@2 ~@15]/4", // G C D C5 Em G7 Bdim C5 …
  I: "[[d3,f3,g3,b3] ~@7 [g2,f3,g3] ~@8 [d3,f3,g3,b3] ~@5 a4@2 [g2,f3,g3] ~@5 a4@2 [d3,f3,g3,b3] ~@7 [g2,g3] ~@7 [e3,g3] c3 ~@7 [g2,c3,g3] ~@5, a4@8 [b3,g4]@8 ~ g4@6 ~@2 b4@6 ~@2 a4@8 g4@8 [e4,e5]@15, ~@25 b3@3 ~@13 b3@3 ~@20]/2", // G7 G Em C5 Em E
  J: "[~@2 [e3,g3] ~@8 g2 ~@3 [d4,d5]@4 [e3,g3] d4@8 [g2,c3,g3] ~@7 [e3,g3] c3 ~@7 [g2,c3,e3,g3] ~@8 [b2,e3,g3] ~@5 a4 ~ [b2,e3,g3,e4] ~@5 c5 ~ [b2,f#3,a3] d#4@2 ~@6 [b2,a3,d#4] ~@8 g3 ~@7 [g3,g4]@2 ~ [g3,g4]@2 [g3,g4]@2 [g3,g4] ~@8 [g3,g4] ~@8 c4@2 ~@6 [g2,g3] ~@8 [g3,c4] ~@7 [g2,g3] ~@3 [d5,d6]@3 ~@2 [e3,g3,c4] ~@7 [c5,c6]@8 c4 g3 ~@7 [g2,g3] ~@7 [d3,g3,b3] ~@3, ~@2 [e4,e5]@13 ~@4 d5@9 c5@8 g4@16 ~@2 g4@6 ~@2 b4@6 ~@2 b4@8 ~ b4@8 ~@34 [e5,e6]@17 [e5,e6]@13 ~@4 [d5,d6]@8 ~@8 [g4,g5]@15 ~@2 [g4,g5]@4, ~@20 c3 ~@7 c4@5 ~@4 e4@16 ~ e4@3 ~@31 e4@16 ~@59 g2 ~@28]/6", // Em D Em C5 Em C Em B7 …
  K: "[~@2 [a4,a5] ~ [b4,b5]@4 ~@2 [a4,a5] ~ [d3,f3,g3,b3] ~@7 [g4,g5]@6 ~@2 [d3,g3,b3] ~@5 a5 a4 ~ [b4,b5]@6 [a4,a5] ~ b3 ~@7 [g2,g4] ~@7 [c3,e3,g3,a#3]@5 ~@3 c2 c3 ~@7 [c3,e3,g3,a#3] ~@7 [c2,c3] ~@2 [d5,d6]@2 ~@3 [f2,f3] ~@7 [c3,f3,a3,c5,c6]@7 ~ [f#2,f#3] ~@7 [f#3,a3,c4,d#4,a4,a5]@7 g3 [g2,c3,e3] ~@14 [g2,g3,g4,b4,f5,g5]@2 ~@6 [g1,d2,g2,b4,f5,g5,b5]@4 ~@4 c3 ~@8 [c3,e3,g3,c4,e4,g4,c5]@4 ~@22, ~@4 [g2,g3] ~@7 [a4,a5]@8 g2 ~@7 g5@6 ~@10 [a4,a5]@7 ~@2 g5@4 ~@4 [e5,g5,e6]@15 ~ [e5,e6]@9 ~@8 [d5,f5,d6]@15 ~ [b4,d#5,f#5,b5]@15 c5@7 g3@9 ~@17 e2@13 ~@21, ~@28 [g4,b4]@3 ~@6 [g2,g3] ~@40 g5@13 ~@34 e5@13 ~ [c3,e5]@4 ~@14 [g2,e5,g5]@13 ~@22, ~@125 [g4,g5]@2 ~@4 g4@9 ~@52, ~@133 [e3,c5]@10 ~@14 [c2,c5,c6]@2 ~@33]/6", // A B A G7 G B A G …
})).s("gm_piano").gain(0.2)

// chords · piano · soft notes
const piano_soft = note("<A B C D E F G H ~ I J K L M ~ N O P ~ Q R S T U V W X Y ~@4>".pickRestart({
  A: "~@13 e3 ~@8 [c3,g3] ~@9", B: "~@16 [c3,f3] ~@8 e3 ~@6", C: "~@28 c3 ~@3", D: "~@14 c3 ~@6 g3 ~@8 c3 ~",
  E: "~@16 e3 ~@8 [e3,g3] ~@6", F: "~ e3 ~@26 [f#3,a3] ~@3", G: "~@4 [e3,g3] g4@13 ~@14", H: "~@7 d3 ~@24",
  I: "~@26 e2 ~@5", J: "~@11 e2 ~@20", K: "~@11 e2 ~@15 e2 ~@4", L: "~@3 [e2,b2] ~@8 [e2,g3] ~@17 [e2,b2]@2",
  M: "~@17 g3@3 ~@12, ~@16 [e2,b2]@3 ~@13", N: "~@19 [c3,g3] ~@8 [c3,e3,g3]@3 ~",
  O: "~@4 [c3,g3] ~@8 e3 ~@8 [g2,e3,g3] ~@7 e3 ~, ~ e3@2 ~@5", P: "~@7 e3 ~@24", Q: "~@9 f3 ~@16 e3 ~@5",
  R: "~@2 c3 ~@8 [c3,e3,g3] ~@16 e3 ~@3", S: "~@5 c4@12 ~@15", T: "~@15 [f#3,b3] ~@8 [e3,b3] ~@7",
  U: "~@25 [c3,e3]@2 ~@5, ~@25 g3 ~@6", V: "~@10 c3@2 ~@15 c3 ~@4, ~@10 e3 ~@21", W: "~@3 g3 ~@7 e3 c3 ~@19",
  X: "~@21 g3 ~@7 f3 ~@2", Y: "~@13 [d3,f3,g3] ~@7 g3 ~@10",
})).s("gm_piano").gain(0.15)

stack(piano, piano_soft)

More by Gilbert & Sullivan