Strudelify

I Am The Captain Of The Pinafore

Gilbert & Sullivan

KeyC majorTempo120 bpm
0:00/0:00
// I Am The Captain Of The Pinafore — Gilbert & Sullivan
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 23 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 B@2 C D E@4 F@2 G H I J@4 K L M@2 N>".pickRestart({
  A: "c4@3 ~@2 f4@3 ~@3 f3 ~@3 a4@2 g4 ~ [e3,a#3,f4] ~@2 e4@2 f4@4 ~ [c3,f3,a3] ~@2, ~@10 a4@2 ~@3 c3 ~@8 f2 ~@4 a4@3", // A# F
  B: "[~@2 c2 ~ g4@2 f4 ~ e4@2 ~ f4@2 g4 ~ [a2,f3] ~ a#4@2 ~ [c3,a3,a4] ~@3 [c2,a#3,g4] [c3,c4,e4] ~@8 a2@5 c3 ~@4 f4@4 f2 a#4 ~ a#4 ~ [d3,f3,a#3,a#4] ~ a#4 ~ [f2,a4] ~@4 [c3,f3,a3,a4] ~, ~ a4@2 ~@8 f2 ~@3 a4@2 ~@13 [f2,a3,c4,f4]@10 ~@4 f3 ~@19]/2", // Dm F C7 C A# F
  C: "~@3 [f2,g#4] ~ g#4 ~ g#4 [b2,g#3] g#4 ~@2 a4@2 ~@3 [a3,a4] ~ a4 ~ g4@2 ~@3 [g3,f4] ~ e4 ~ [g2,d4] ~, ~@12 f2 ~@8 g2 ~@10", // Fm E A G7 G5
  D: "~@3 g4@2 ~@3 c2 ~@4 g3@5 [e3,g3]@5 [e3,g3,c4]@4 [f3,b3]@2 ~ e4@2, ~@8 c4@14 ~@5 d4@3 ~@2, ~@9 c3@4 ~@3", // Em C Fdim
  E: "[[c3,b3] ~ g4@2 c4 [c3,g3] ~@3 [c3,e3,g3,c4]@4 ~ f3@2 ~@3 [f3,f4]@2 g4@2 [c3,e4]@5 [c3,e3,g3] ~@4 c3@4 c3 ~ c4@2 ~ [g2,b2,f3] ~@4 [g2,b2,f3] ~@4 c2 ~@3 [g2,c3]@5 e3@6 c4 ~@3 d4 ~ d4@2 d4@2 ~ d4 ~ d4@5 [d3,a#3,d4]@2 d4@2 ~ e4@5 [e3,a3,e4]@2 e4@2 a2 ~@4 [c#3,g3]@3 ~ f4@5 [a2,f3,f4]@4 ~ f4@5 ~@2 f4@3, f4@2 ~@2 e4@9 c3@2 ~ e4@5 ~@9 d4@7 ~ d4@3 ~ d4@3 ~@2 g3@2 ~@3 c4@15 ~@32 e4@8 ~@21, ~@14 d4@7 ~@2 c4 ~@4 c4@2 ~@7 [g2,e3]@2 ~@32 a#2@8 ~@11 c#3@2 ~@11 a3@4 ~@16 [f3,b3,e4]@4 ~, ~@14 b3@4 [c3,b3]@3 ~@11 [g2,e3,e4]@6 ~@42 g2 ~@27 d2 ~@9 d2 ~@9]/4", // Cmaj7 C5 C F C G7 C5 Gm …
  F: "[c2 ~@13 [e3,a#3,c4]@2 c4@2 ~ [f2,a4] ~ a4@2 a4@2 a4@2 ~ b4@5 ~@2 b4@2 c5 ~ c5@2 ~@3 c5@3 c4@6 c4@2 ~ c4@2 ~@3 g4@2 f4, g4@17 ~@24 c5@2 ~@21, ~@5 [e3,g3,c4]@9 ~@14 f3@2 ~@3 [g3,b3,a4]@4 e3@9 ~ [a2,d3,f#3]@10 ~ [g2,g3,g4]@2 ~@4, ~@9 g2@8 ~@25 c4@5 ~@12 [c3,e3]@5]/2", // C7 F C G D G C
  G: "~ e4@2 [g2,g3] [b2,d3] ~@4 g4@5 c2 ~@4 g3@4 c3 ~@4 [c3,e3] ~@3, ~@3 d4@9 ~@2 c4@11 ~@3 c4@4, ~@9 c3@2 ~@5", // G Bm C
  H: "~ c2 b3@2 ~@2 b2 ~@4 [g2,f3] ~@4 g4 ~@5 g4 ~@9, ~@5 g4@7 ~@20", // G7
  I: "g3 ~@3 [c3,e3,g3,c4]@3 ~@10 b3@5 ~@5 b3@4 ~, ~@10 c#2@3 ~ g4@18, ~@11 b3@6 ~@15", // C
  J: "[d2 ~@4 b3@4 ~@6 g4@3 g4@2 ~@7 [c3,a#3]@5 ~ c3@4 [c3,c4]@6 [c3,c4]@2 [d3,d4]@3 ~@2 [f3,f4]@3 ~@17 g4@28 [g#4,b4]@6 ~@4 c5 [f2,f4] ~@4 [f4,d5] ~@3 [f2,f4,c5] ~@4 [c3,f3,f4,a4,d5] ~@4, ~@9 b3@5 ~ b3@5 ~ g4@24 ~@14 [f#4,a4]@11 g3@21 ~@37, ~@10 g3@10 e2@3 ~ c5@21 ~@15 f#3@14 ~@54, ~@32 a#3@13 ~@8 [g3,g4]@10 ~@6 a#3@22 ~@37, ~@33 g3@12 ~@3 [e3,e4]@4 ~@7 a3@6 ~@4 a#4@30 ~@29]/4", // C7 C D F G#m F Dm F5 …
  K: "[f2,f4,a4] ~@4 [c3,f3,f4,a4] ~@3 [f2,f4,a4] ~@4 [c3,f3,f4,a4,d5] ~ [f4,a4,d5] ~ [c2,e4,c5] ~@4 [c3,e3,a#3,g4] ~@4 [c3,e3,a#3] ~ a#4@2, c5@2 ~@3 d5@2 ~@2 c5@5 ~@14 g4@2 ~@2", // F Dm7 Dm C C7
  L: "[e3,a#3] a4 g4 ~@2 [f2,a4]@2 ~@3 [c3,f4] ~@4 [c3,f3,a3] ~@6 [f4,a4,c5]@2 [f2,f4,a4] ~@4 [a2,c3,f3,f4,a4] ~@2, ~@15 f4@7 ~@2 c5@2 ~@2 d5@2 ~@2", // Edim F F5 F
  M: "[~ [f2,f4,a4,c5] ~@4 [a2,c3,f3,f4,a4] ~@3 [f2,f4,a4] ~@4 [a2,c3,f3,a4,d5] ~@5 f4@7 ~@20 [c2,c3]@2 a4@2 [c3,f3,a3] ~ c5@2 [c2,c3,a#4] ~@4 [c3,e3,g3,a#3,e4,g4] ~@2, ~@6 d5@2 ~@2 c5@2 ~@3 f4@2 ~@3 [a4,c5]@8 f5@16 f5@6 ~@14, ~@21 f2 ~@7 [a2,f3,a3,f4,a4]@22 ~@13, ~@29 [c3,c5]@18 c5@3 ~@2 d5@2 ~@10]/2", // F Dm7 C F C7 Am Dm C
  N: "~@2 [f2,f4]@10 [f1,c2,f2,f4,a4,c5,f5]@3 ~@17, ~@2 [c3,f3,a3,c4]@13 ~@17", // F
})).s("gm_piano").gain(0.31)

// chords · piano · soft notes
const piano_soft = note("<A B ~ C D E F@2 G H I J K L M ~@2 N O P ~@3>".pickRestart({
  A: "~@10 a3 c3 ~@20", B: "~@6 [c3,a#3] ~@8 c3 ~@16", C: "~@8 f3 ~@8 [c3,f3] ~@8 c3 e3 ~@4",
  D: "~@3 b3 g3 ~@8 [c3,e3]@5 ~@8 c3@3 ~@3", E: "f3@2 ~@3 e3 ~@17 g3 e3 ~@7",
  F: "[~@24 e3@5 ~ g2@5 ~@2 c4 ~@6 [d3,f3,a#3]@3 ~@6 g3@3 ~@8, ~@29 c3@5 ~@30]/2", G: "~@17 d3@4 ~@6 d3@4 ~",
  H: "~@14 g3@3 ~@6 [f3,a3]@4 ~@5", I: "~@5 g3@2 ~@9", J: "~@18 e3@4 ~ [e3,g3] ~@4 g3 ~@3",
  K: "~@6 g2@2 ~@4 b2 ~@4 [g2,b2,f3] ~@4 c2@2 ~@2 g3 [c3,e3] ~@4, ~@6 f3 ~@18 c4@7", // G7 C
  L: "[c3,e3] ~@16 [f3,g3]@5 [f3,g3,b3]@5 [f3,g3]@4 ~", M: "~@5 [f3,g3]@5 f3@10 ~@7 g3@5",
  N: "~@13 a4 ~@4 [a2,c3,f3,a4] ~@3 a4 ~@4 a2 ~@4", O: "~@5 a2 ~@8 a2 ~@17", P: "c3 ~@9 [f3,a3] ~@21",
})).s("gm_piano").gain(0.15)

stack(piano, piano_soft)

More by Gilbert & Sullivan