Strudelify

Canon in C for Flute & Piano

enunetxu

KeyC majorTempo65 bpm
0:00/0:00
// Canon in C for Flute & Piano — enunetxu
// 65 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: Transcription provider: pdmx. https://musescore.com/score/5529162; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(65/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 C D E F G H I J K L M N O P Q R O P S T U V W X G Y Z AA AB AC AD AE AF AG AH AI AF AG S T U V AH AI AF AJ@2 ~
>`.pickRestart({
  A: "[c2,g3,c4,e4]@2 [g3,d4] [g3,b3,d4], ~ [g2,c4]", // C G5 G C5
  B: "[a2,e3,g3,a3,c4]@4 [b3,g4]@2 ~ [c4,a4], ~ [e2,g3], ~@3 [b3,g4]", // Am7 Em F Em
  C: "~@7 g3, [f2,a3]@3 c4, f4@3 f4@5, ~ e4@3 [c2,e4]@4, ~@2 d4@2 g3 d4@3", // F C
  D: "~@7 d4, [f2,f3], a3@3 [a3,c4], ~ b3 [g2,g3,b3]@2, ~@3 c4@3 ~@2", // F Am G
  E: "~@3 b3, [c3,c5]@5 d3@3, g4 [g2,g4,d5], ~ g3@7, ~ e4@3", // C G5
  F: "~@7 [b4,g5], [a2,c5]@4 b4 b2 g3@2, e4 [e2,e4], ~ e3@7, ~ c4@3", // Em Am E
  G: "~@7 [c4,g4], f2@4 [c2,g4,e5] [g2,f4,d5] [e3,e4,c5]@2, [a4,f5] a3@3, ~ c3@7, ~ [g4,e5] [f4,d5] [a4,f5]@5", // C5 C G7 C Dm C Dm
  H: "~@2 a4 ~@3 [b3,b4,d5]@2, f2@4 b4 [d3,a4,c5]@3, [f4,a4] [a3,f4]@3, ~ c3@7, ~@3 [a4,c5] [g2,g4]@4", // Bm D7 F Dm Am G
  I: "~@3 e5 ~@3 [g3,b4], c3@3 c4 [g2,c5,e5] [d3,d5] [b3,c5]@2, e5@3 g5@13, ~ g4 c5@2 e4@12, ~@2 g3@3 g4@11", // G C D Cmaj7
  J: "~@3 c5 ~@3 g4, a2@5 e4 a3@2 [e2,a4,c5]@2 [b2,b4,d5]@2 [g3,a4,c5]@4, c5@3 e5@13, ~ e4 a4@2 c4@12, ~ e3@7", // Am Bm Am7
  K: "~@7 [c3,g4], f2@8 [c2,g4] c4 [g2,e4] c5 e3 c4@3, f4 f4@7, ~ c4@2 c5 a3@12, ~@2 c3@3 c4 [f3,a4]@10", // C5 C F
  L: "~@7 [g3,b4,d5], f2@6 [f3,a4]@2 [g2,g4,b4] d4 [d3,g4,b4] d4 [b3,a4,c5]@4, a4 a3@3, ~ c4@2 c5@2 c4@11, ~ [c3,f4]@7", // G F G F F5
  M: "[c5,e5]@2 ~@13 d5, [c3,c4]@9 g4 [d3,a4] b4 [b3,c5] d5 e5@2, ~@2 g3@3 d5 [c5,e5] [b4,d5] [g2,g3]@8, ~@2 c5@2 e5 f5@11, ~@2 e5 [d5,f5] [e4,g5]@12", // C D5 Cmaj7 C Bm G Dm Em
  N: "[a4,c5]@2 ~@13 b4, a2@9 e4 [b2,f4] g4 [g3,a4] b4 c5@2, ~@2 e3@3 b4 [a4,c5] [g4,b4] [e2,e3]@8, ~@2 a4@2 c5 d5@11, ~@2 c5 [b4,d5] [c4,e5]@12", // Am Bdim Gsus2 Am G E Bm C
  O: "a4@2 ~@2 f4@2 ~@9 c5, [f2,f3]@11 f4 [e3,g4] c5 b4@2, ~@2 c5@4 g4 f4 [c2,c3]@8, ~@2 c3 g4 [a3,a4]@12, ~@2 a4 b4@5 g4 f4 [g2,e4]@6", // F Em C A C
  P: "~@15 f5, [f2,f3]@8 b4 g4 [d3,a4] b4 [b3,c5] d5 e5@2, a4@3 c5 a3@12, ~ c5 b4@2 a4 c5 b4 c5 [g2,g3]@8, ~ c3@7", // F D5 Cmaj7 G
  Q: "e5@2 ~@13 f5, [c3,c4]@10 [d3,a4] b4 [b3,c5] d5 e5@2, g5@2 e5 [d5,f5] [e4,g5]@12, ~@2 g3@3 d5 [c5,e5] [b4,d5] [g2,g3]@8, ~@2 c5@2 e5 f5@4 g4@7", // C D5 Cmaj7 Dm Em C Bm G
  R: "~@15 b4, [a2,a3]@9 e4 [b2,f4] g4 [g3,a4] b4 c5@2, e5@2 c5 [b4,d5] [c4,e5]@12, ~@2 e3@3 b4 [a4,c5] [g4,b4] [e2,e3]@8, ~@2 a4@2 c5 d5@11", // A Bdim Gsus2 Bm C Am G E
  S: "~@3 e5 ~@3 [g3,d5], c3@3 c4 [g2,c5,e5] [d3,f5] [b3,e5]@2, e5@3 g5@13, ~ g4 c5@2 e4@12, ~@2 g3@3 g4@11", // G5 C Dm E5
  T: "~@3 c5 ~@3 b4, a2@5 e4 a3@2 [e2,a4,c5]@2 [b2,b4,d5]@2 [g3,a4,c5]@4, c5@3 e5@13, ~ e4 a4@2 c4@12, ~ e3@7", // Am Bm Am7
  U: "~@7 g4, f2@8 [c2,g4] c4 [g2,e4] c5 e3 c4@3, a4 a3@3, ~ c4@2 c5@2 c4 [f3,a4]@10, ~ [c3,f4]@7", // C5 C F F5
  V: "~@7 [b4,d5], f2@6 [f3,a4]@2 [g2,g4,b4] d4 [d3,g4,b4] d4 [b3,a4,c5]@4, a4 a3@3, ~ c4@2 c5@2 c4@11, ~ [c3,f4]@7", // Bm F G F F5
  W: "~@3 [b3,g4,d5], [c3,e5]@4 [g4,d5] d3@3, g4 [g2,c5], ~ g3@7, ~ e4@3", // G C G5 C5
  X: "~@7 [c5,a5], [a2,e4]@4 [b4,g5] b2 [g3,b4,g5]@2, c5 e2, ~ e3@7, ~ c4@3", // F A5 Em G
  Y: "~@2 a4 ~@4 [b4,d5], f2@8 [g4,b4]@2 d3@2 [b3,g4,b4] [a4,c5]@3, [f4,a4] [a3,f4]@3, ~ c3@7, ~@3 [a4,c5] g2@4", // Bm G Em Am F Dm Am
  Z: "~@2 e5!2 ~@3 d5, [c3,c5]@4 e5 [d3,f5] [b3,e5]@2, e5 [e4,g5]@3, ~ g3@7, ~ g2", // C Dm E5 Em
  AA: "~@7 b4, [a2,a4]@4 c5 [b2,d5] [g3,c5]@2, c5 e2, ~ e3@7, ~ c4@3", // A Bm C5
  AB: "~@2 a4 ~@3 g4!2, [f2,f4]@4 [c2,e4,g4] g2 [e3,c5]@2, a4 a3@3, ~ c3@7, ~@2 c5 a4@5", // F C
  AC: "~@3 b3, f2@10 d3 [a4,c5]@5, [f4,a4] [a3,f4]@3, ~ c3@7, ~@4 a4 [g4,b4] [a4,c5]@2 [g2,g4,b4]@8", // Am F Dm G Am G
  AD: "[c5,e5]@2 ~@13 f5, c3@9 g4 [d3,a4] b4 [b3,c5] d5 [g3,e5]@2, ~@2 g3@3 d5 c4@10, ~@2 c5@2 e5 f5 [c5,e5] [b4,d5] g2@8, ~@2 e5 [d5,f5] [e4,g5]@12", // C D5 Cmaj7 C Bm Dm Em
  AE: "c5@2 ~@13 b4, a2@6 [a4,c5] [g4,b4] [e2,e3] e4 [b2,f4] g4 [g3,a4] b4 [e3,c5]@2, ~@2 e3@3 b4 a3@10, ~@2 a4@2 c5 d5@11, ~@2 c5 [b4,d5] [c4,e5]@12", // Am G E Bdim Gsus2 C Bm C
  AF: "a4@2 ~@2 f4@2 ~@9 c5, f2@8 [c3,g4] f4 [g2,e4] f4 [e3,g4] c5 [c3,b4]@2, f3@2 a4 b4@3 g4 f4 c2@8, ~ c5@2 f3@5, ~@2 c3 g4 [a3,a4]@12", // C5 C Em Cmaj7 A
  AG: "~@15 f5, f2@6 b4 c5 [g2,g3,b4] g4 [d3,a4] b4 [b3,c5] d5 [g3,e5]@2, f3@3 c5 a3@12, a4@2 b4@2 a4 c5 f3@10, ~ c5 c3@14", // G D5 Cmaj7 C
  AH: "e5@2 ~@13 f5, c3@8 g3 g4 [d3,a4] b4 [b3,c5] d5 [g3,e5]@2, c4@2 e5 [d5,f5] [e4,g5]@12, g5@2 c5@2 e5 f5 [c5,e5] [b4,d5] g2@8, ~@2 g3@3 d5 c4@10", // D5 Cmaj7 C Dm Em C Bm
  AI: "~@15 b4, a2@6 [a4,c5] [g4,b4] [e2,e3] e4 [b2,f4] g4 [g3,a4] b4 [e3,c5]@2, a3@2 c5 [b4,d5] [c4,e5]@12, e5@2 a4@2 c5 d5@11, ~@2 e3@3 b4 a3@10", // Am G E Bdim Gsus2 C Bm C
  AJ: "[~@16 f5 ~@7 c6 [g5,c6,d6,e6]@7, f2@6 b4 c5 [g2,g3,b4] g4 [d3,a4]@2 b4@5 [e5,g5]@3 c4 d5 e5 g5@2 ~@7, f3@3 c5 a3@9 [b3,c5]@5 e3@14, a4@2 b4@2 a4 c5 f3@8 d5@4 ~ g3@13, ~ c5 c3@13 [g3,e5]@2 [c3,c5]@15]/2", // C G D5 Em Cmaj7 C
})).s("gm_piano").gain(0.29)

stack(piano)