Strudelify

Sonata for piano, flute & cello in D major, Op. 22 No. 1: I. Spiritoso

Clementi

KeyF majorTempo120 bpm
0:00/0:00
// Sonata for piano, flute & cello in D major, Op. 22 No. 1: I. Spiritoso — Clementi
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 48 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 · "A.PIANO 1"
const piano = note(`<
  A@4 B C D E F@2 G H@2 I@2 J K@3 L M N O@3 P@2 Q R S@2 T@2 U@2 V W@2 X Y@4 Z AA AB@2 AC
>`.pickRestart({
  A: "[f2@3 ~@4 f2@3 ~@4 a4@5 f4@2 f2@3 ~@3 f2@4 f3@3 ~@5 f4@2 ~@4 f3@3 [f2,bb4]@4 ~@7 f3@3 [e4,ab4]@8 a4@7 f2@3 f3@4 ~@4 f3@3 ~@4 g5@2 f5 ~ e5 ~@3 [bb4,d5]@3 ~@4 f3@4 ~@3 d5@2 c5 g4 ~@3 [f4,a4]@3 ~, f4@14 f2@3 ~@4 c5@15 a4@5 ~@3 g4@5 ~@6 c5@7 ~@22 f5@13 ~@9 c5@10 ~@12, ~@24 f3@5 ~@5 [f2,bb4]@7 [f2,e4]@7 ~@36 f2@3 ~@5 f3@5 ~@17 f3@5 ~@9, ~@38 [f3,g4]@4 ~@10 [f3,d5]@5 ~ bb4@4 ~@23 d5@13 c5@8 a4@13 ~ bb4@7 ~]/4", // Bb5 E Bb F Bb5 Fmaj7 Fsus2 Dm
  B: "g4 ~@2 g4 ~ gb4 g4 ~ a4@2 bb4@2 c5@2 d5@3 f4@4 f4@4 e4@2 ~ d4@4, bb2@14 b2@8 ~@6 e4 ~@3, ~@2 a4@2 ~@17 c3@8 ~@3",
  C: "c4@3 d4@4 e4 ~@18 a4@2 ~ [f3,a4]@2 f4, ~@11 a3@21, ~@11 f4@17 f4@3 ~, ~@11 f2@8 f2@7 ~@6, ~@15 f3@7 f3@7 ~@3", // F
  D: "f2@4 ~@15 f4@2 ~@4 [f3,g4]@3 ~ f2@3, c5@18 [f3,g4]@3 [f2,e4]@8 ~@3, ~@4 f3@7 f3@5 a4@5 ~@11, ~@7 f2@7 bb4@7 ~@7 bb4@4", // Fsus2 Fmaj7
  E: "d5@3 ~@4 bb4@4 [e4,ab4]@8 a4@7 f2@3 ~ f3@2, ~@3 f2@5 ~@3 f2@3 ~@18, ~@4 c5@5 ~@23", // E
  F: "[~@6 g3@3 ~@5 f5@2 [c4,e5]@4 [g3,g5]@4 ~@7 f4@3 ~ d5@3 ~ e4@3 g4@3 f5@2 ~@3 e5@2 f5 ~ a5 ~ g5 f5 ~ e5 ~ g5 ~ e5, ~@2 f5@11 [g3,a5]@3 ~@8 b4@10 ~@4 c5@3 ~@6 g5@2 g3@3 ~@12, ~@24 f5 ~@7]/2", // C G Gsus2
  G: "c5@2 f4@2 ~@2 b4 a4 ~ b4 d5 ~ g3@2 b4 c5 ~ e5 ~ c4 c6 ~@2 a5 ~ f5 ~ d5 ~ g4 g5 ~, ~@2 b4 ~ c5@2 ~@3 f4@3 c5 ~@3 e4@2 g5@2 ~@12, ~@5 g3@3 ~@14 f4@2 ~@8",
  H: "[e5 c5 ~ g3 ~ f5 d5 ~@3 e4@4 c5 d5 e5 ~@3 [c5,e5] ~@2 e5 c5 ~@2 [c5,e5] ~@6 g4 ~ gb4 g4@2 ~@2 g3@2 ~ a3 ~@3 b3 ~@6 c5 ~ d5 e5 ~@2 [c5,e5] ~@2, ~@31 [e5,g5]@6 [d5,f5]@14 c4@11 ~@2]/2", // C Em Dm
  I: "[~ [c5,e5] ~@2 e5 c5 ~@6 g4 gb4 ~ g4 ~@2 g3 ~@3 a3 ~@3 b3 ~@3 c4 ~@4 [d5,f5] ~ [g3,c5]@7 [g2,d5]@7 ~@4 c5 ~@2 e4@3 ~ [c4,e4] ~, ~@8 [e5,g5]@7 [d5,f5]@14 [c5,e5]@6 ~ e5@7 ~@8 c3@9 ~@4, ~@57 g4@4 ~@3]/2", // C Dm C5 G5 C Em Dm C
  J: "~@2 e4 ~@2 e4 ~@3 [e4,g4]@5 gb3 ~@5 g2 ~@2 a2 ~@8, ~@8 f4@7 ~", // Em
  K: "[~@9 e4 ~@2 e4 ~@3 [c4,e4] ~@6 g3 ~ gb3 g3@2 ~@2 g2 ~@2 a2 ~@3 b2 ~@2 e4@2 c4 ~ f4 d4 ~ [c4,e4] ~@3 [c4,e4] ~@2 [b3,d4] ~@3 [b3,d4] ~@2 c2@3 ~ c3 ~@2 c3@4 d4@2 e4 f4 ~@2 a4@2 b4@2 ~@3 c3 ~@3 c3@4 ~ e5 ~, ~@20 g4@6 [d4,f4]@12 ~@2 c3@4 f2@2 ~ g2@4 ~@3 g2@7 c4@13 ~@3 g4@2 ~@3 c5@11 d5@2 ~, ~@82 c2@5 ~@9]/3", // C Bm Dm
  L: "f5 ~@2 a5@2 b5@2 [c2,c3,c6]@2 ~@5 [c2,c3,e4,g4] ~@17, ~@2 g5@2 ~@10 c5@5 ~@13", // C
  M: "~@6 e4 g4 ~ c5 ~@2 c5 ~@3 c5 ~@3 c5 ~@8 b4@2 d5, ~@2 c4@17 ~@13",
  N: "~@2 d5 ~@3 d5 ~@2 d5 ~@6 g4@2 bb4@2 e5 ~@2 e5 ~@3 e5 ~@2 e5 ~, ~@13 c4@19",
  O: "[~ db4@2 a4 ~@2 e5@2 db4@3 a5 a3@2 ~@2 bb5@2 [a3,a5]@2 g5 ~ f5 ~ a5 a3@2 f5 ~ e5 g5@2 f5 ~@2 d5 ~ f5@2 e5 d5 ~@2 a4 ~ db5@2 e5@2 a5 ~@2 a5 ~@4 e6 ~ db6 g5 ~ f5 ~ a5 ~ f5 a5 ~ e5 g5 ~ a3@2 g5 d5 ~ f5 d5 ~ f5 ~ c5 eb5@2 c5 gb4 eb5@2 c5 ~ eb5@2 ~ eb5@2, ~@5 [a3,db5]@2 ~ a5 ~@6 [db4,a5]@3 ~@4 d4@5 ~@2 e4@5 e5@2 ~@3 a3@3 db4@3 ~@11 db4@3 a3@3 d4@4 a3@3 e4@4 ~@2 f4@7 gb4@2 ~@5 gb4@7, ~@25 g5 ~@6 a3@3 f4@5 ~@15 a5@2 ~@15 e5 ~@6 a3@2 ~@12 c5@3]/3", // A Gbm
  P: "[c5 ~ d5 ~@2 d5 ~ [g4,c5]@2 d5 [g4,c5]@2 d5 ~ a4 ~@4 d5@2 bb4 ~ d5 bb4@2 ~ bb4@2 db5 ~ e4 db5 ~ bb4 ~ db5 bb4@2 db5@2 bb4 ~ c5 bb4 ~ c5@2 [f4,bb4] c5@2 [f4,bb4] ~ c5 ~ g4 c5 ~@3 c5@2 a4 ~, ~@4 c5@2 ~@8 g4@8 ~@5 e4 ~@6 e4@6 ~@15 f4@7 ~@2, ~@16 d5@3 ~@7 d5@2 ~@36, ~@17 a4@4 ~@10 bb4@2 ~@26 g4@3 ~@2]/2", // C5 Bb5
  Q: "c5 a4 ~ c5 ~ [g3,d4] ~ f5 [g3,d4,b4] ~ f5 ~ [g3,d4] ~ f5 ~@2 f5 ~ [g3,d4] ~ f5 ~ [g3,d4] f5 ~ e5@2 c5 ~ b4 c5, ~@5 b4@2 ~@19 c3@4 c4@2", // G5 G G5
  R: "~ c3@2 c5 b4 ~ c5 ~ [c3,f5]@2 d5 ~@2 d5@2 ~ e5@2 [c4,d5]@2 ~@3 e5@2 [c4,d5]@2 ~ [c3,a5]@2 f5@2, ~ d5 ~@3 c4@3 ~@3 c5@2 ~@7 e5@2 f5@2 ~@3 e5@2 ~@3, ~@12 c4@2 ~ [c3,g5]@3 ~@3 c3@3 ~@8", // F5 Csus2 F C5
  S: "[~ f5@2 ~@3 [c4,g5]@2 a5@2 ~ a5@2 [c4,g5]@2 ~ [c3,bb5]@2 a5@2 ~ a5@2 bb5@2 ~@2 a5@2 ~ g5 ~@3 f5 ~@2 e5 ~@3 d5 ~@2 c5 ~@3 b4 ~@3 bb4 ~@2 a4 ~@3 ab4 ~@4, [c4,e5]@3 [c3,bb5]@4 ~@3 [c3,bb5]@3 ~@7 [c4,g5]@3 c3@13 ~@28, ~@5 a5@2 ~@8 a5@2 ~@47]/2", // C5 C7 C C7 C5
  T: "[~@5 f4@15 a4@5 f4 ~@21 f4@2 [f2,e4]@4 ~@3 bb4@4 d5@4, ~@27 c5@22 ~@15, ~@21 bb4@4 ~@7, ~@44 a4@6 ~@3 g4@5 ~@6, ~@45 [f3,g4]@4 ~@15]/2", // Fmaj7 Fsus2
  U: "[c5@3 bb4@4 [e4,ab4]@8 ~@11 f3@4 eb5@12 ~@4 d5@3 [f3,f5]@4 eb4@4 f3@7, ~@42 g5@5 ~@6 a4@11, ~@45 bb3@5 ~@14]/2", // E F
  V: "~ c5@3 bb4@4 c5@2 d5@2 ~ f5@2 ~ d5@2 eb5@2 g5 ~ f5 eb5 ~ d5@3 ~ f3@3, ~@12 [a3,eb5]@3 [f3,eb5]@3 a3@4 f3@3 bb3@7", // Adim F7
  W: "[~ c5 ~@2 c5 ~ b4 ~ c5 ~@2 d5 ~ c5 ~@5 d4@3 ~@2 bb4@2 c5@2 bb4 ~@2 bb4@2 ~ c5 bb4 ~@3 a4 ~ c5@2 f5 ~@3 bb4 ~ c5 bb4 ~ g5@2 bb4 ~@2 bb4 ~@3 a4 ~ c5, ~ gb3@4 d4@3 gb3@4 d4@3 ~@8 [e3,g3]@15 ~@7 [e3,g3]@15 ~@4, ~@3 d5@2 ~@5 eb5@2 ~@3 bb4@7 ~ c4@11 ~@3 [f3,a3,c4]@6 ~@2 c4@12 ~@7, ~@15 g5 ~@12 c5 ~@3]/2", // Em F
  X: "~@3 bb3@2 d5 bb4 ~ g4 ~@2 c5 ~ a4 ~ f4 ~ c3 bb4 ~ g4 ~ e4 ~@4 f4 ~ g4 ~ a4, ~@5 c4 ~@6 a3@4",
  Y: "[~@2 [f4,a4] ~@3 [f4,a4] ~@2 [f4,a4] ~@7 c4@2 b3 c4@2 ~@2 c3 ~@2 d3 ~@3 e3 ~@8 c5 ~ a4 ~@2 [f4,a4] ~@3 [f4,a4] ~@2 [f4,a4] ~@7 c4 ~@2 c4 ~@3 c3 ~@2 d3 ~@3 e3 ~@3 [f3,f4,a4]@5 bb2 g4 ~ f4@7 [c2,g4]@8 ~@3 f5 ~ g5@2 a5 ~@2 [f5,a5] ~@3 [f5,a5] ~@2 [f5,a5] ~@3 [a5,c6]@4 c5 b4, ~@13 [a4,c5]@7 [g4,bb4]@15 f3@13 ~@37 [c3,a4]@8 ~@8 f2@9 ~@18, ~@39 f5@2 ~@15 [a4,c5]@7 [g4,bb4]@15 ~@5 bb4@2 ~@43]/4", // F C5 F Am Gm F Am Gm
  Z: "~ c5@2 ~ c4 ~@3 d4 ~@3 e4 ~@6 f6 ~ c6 a5 ~@3 [f5,a5] ~@2 f5 a5 ~, ~ [g5,bb5]@14 f4@10 ~@7", // F Gm
  AA: "~ [f5,a5] ~@7 c5 b4 ~@4 c4 ~@3 d4 ~@3 e4 ~@3 f5 ~ [bb3,bb5]@2 g5, ~@4 [a5,c6]@7 c5@2 ~@13 [f4,a5]@3 ~@3, ~@12 [g5,bb5]@13 ~@7", // F Bb Am F Gm
  AB: "[~ [f5,a5] ~@2 [f5,a5] ~@3 [e5,g5] ~@2 [e5,g5] ~@3 [f3,a3] ~@2 [f3,a3] ~@3 [f3,a3]@3 ~ e5 d5 ~ c5@2 ~ a4@2 g4 [f3,a3] ~@3 [f3,a3] ~@3 f3@2 ~@2 e4@2 d4 c4@2 bb3@2 ~ g3@2 f3@2 ~@5, ~ c4@6 ~ c3@5 ~@2 f5@11 ~@5 bb4@2 ~@3 f4@12 ~@16, ~@43 a3 ~@10 a3@2 ~ f2 ~@6]/2", // F Em F
  AC: "~@3 c4@8 ~@21, ~@2 [f2,a3,f4]@9 ~@21, ~@3 f3@2 ~@27", // F
})).s("gm_piano").gain(0.48)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  A B@2 C D@2 E F G H@2 I ~@2 J K@2 ~@3 L@2 ~ M ~@3 N ~@3 O@2 P@3 Q R S ~ T U@2 ~@5
>`.pickRestart({
  A: "~@4 f3@3 ~@4 f3@2 ~@5 f3@3 ~@11", B: "[~@24 f2@3 ~@4 f2@3 f3@3 ~ f2@3 f3@5 ~@18, ~@19 f4@4 ~@9]/2",
  C: "~@10 f2@3 ~@19", D: "[~@28 c2@7 ~@6 e4@3 ~@14 f2@6]/2", E: "~@15 f2@6 ~@11",
  F: "f3@3 ~@5 f3@2 ~@5 f3@3 ~ f2@3 ~ f3@4 ~@5, ~@19 f4@9 ~@4", G: "~@2 b3@4 ~@3 b3@6 ~@9 f4@3 g3@3 ~@2",
  H: "[~@4 b4@2 ~@4 g3@3 ~ b3@2 ~@4 b3@3 ~ g3@2 ~ c4@3 g3@4 ~@30, ~@3 g3@3 ~@58]/2", I: "~@8 b4 ~ c4@5 ~@17",
  J: "~@3 f3 ~@8 b4@8 ~@12",
  K: "[~@2 c4 ~@2 c4 ~@7 g3 ~@13 b2 ~@6 c5 ~ g4 ~ e4 ~@2 c4 ~@2 c4 ~@7 e4@7 ~@5, ~@15 g3@2 ~@14 c3@11 ~@22, ~ d4 ~@2]/2",
  L: "[~@27 f4 ~@36, ~@23 c4@18 ~@23]/2", M: "~@13 a3@4 db4@3 a3@2 ~@10", N: "~@12 b4 ~@3 [g3,d4,b4] ~@2 b4 ~@2 b4 ~@9",
  O: "[g4 ~@15 f3@3 ~ f2@3 f3@3 ~ f2@3 ~@12 f2@7 ~@4 f3@3 ~ f2@3 f3@3 ~, ~@5 f2@8 f2@7 ~@15 f2@7 ~@22, ~@9 f3@7 ~@15 f3@7 f3@7 ~@19]/2",
  P: "[f2@2 ~@2 f3@2 ~ f2@2 ~@2 f3@3 ~ f2@3 ~ f3@4 f2@3 ~@4 a3@4 ~@9 eb5@3 ~@21 a4@2 d4@4 f3@3 ~@20, ~@15 [f4,a4]@9 ~@11 f3@7 f3@5 ~@18 f3@4 ~@27, ~@38 a3@9 ~@14 eb4@8 ~@27]/3", // F
  Q: "~@15 g3@3 ~@14", R: "~@7 [a3,c4], ~@27 f3@5", S: "~ f5 ~@22 f3@8", T: "~@30 b3 ~", U: "[~@29 e4@8 ~@27]/2",
})).s("gm_piano").gain(0.24)

stack(piano, piano_soft)

More by Clementi