Strudelify
0:00/0:00
// Kinderszenen Op.15 — Robert Schumann 8. Juni 1810 in Zwickau Königreich Sachsen; 29. Juli 1856 in Endenich Rheinprovinz
// 65 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/1189536; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 39 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. 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 · "Klavier"
const piano = note("<A@2 B@3 C@3 D E@2 F@3 G@3 H@6 I@2 J@7 K@7>".pickRestart({
  A: "[~@12 c4@8 ~@29 e4@4 f4@4 ~ a4@4 c5@2, ~@21 f4@20 ~@23, ~@30 c4@31 ~@3]/2",
  B: "[~@2 f5@3 bb2 ~ f5@16 ~ e5@4 d5@4 c5@4 f5@4 [bb3,g4]@4 a4@4 bb4@8 [f3,f4]@4 [g3,e4,g4]@4 [a3,f4,a4]@8 [g3,c4,e4,g4]@15 ~@9, ~@6 f3@25 ~@65, ~@7 f4@32 ~ e4@15 ~ c4@15 ~@25]/3", // Eb F C Dm C
  C: "[~@32 e4@4 ~ f4@4 ~ a4@4 ~ c5@4 a5@3 db3 ~ a5@13 ~ g5@4 f5@4 e5@4 f5@4 a5@3 d5@4 [ab4,f5]@3, ~ f4@8 ~@15, ~@15 c4@30 ~@10 a3@40 ~]/3", // Db
  D: "~@4 c5@4 e4@4 eb5@4 ~@4 g4@4 ~ e5@7, ~ e5@15 d5@8 ~@8",
  E: "[~ [c4,e4]@5 ~@46 e4@4 f4@4 a4@4, ~ c5@20 ~ f4@22 ~@20, ~@32 c4@31 ~]/2", // C
  F: "[~ c5@3 ~@3 bb2 ~ f5@16 ~@2 e5@4 d5@4 c5@4 f5@4 [bb3,g4]@4 a4@4 bb4@8 [f3,f4]@4 [g3,e4,g4]@4 [a3,f4,a4]@8 [g3,c4,e4,g4]@15 ~@6, ~@5 f5@3 f3@25 ~@63, ~@9 f4@32 ~@2 e4@15 ~ c4@15 ~@22]/3", // Eb F C Dm C
  G: "[~@35 e4@4 ~ f4@4 ~ a4@4 c5@4 ~ a5@3 db3 ~ a5@13 g5@4 f5@4 e5@4 f5@4 a5@4 d5@4, ~@3 f4@16 ~@29, ~@9 c4@15 ~@5 a3@19]/3",
  H: "[[ab4,f5]@3 ~@4 c5@4 e4@4 eb5@4 ~@4 g4@4 ~ e5@8 [c4,e4]@5 ~@46 e4@4 f4@4 ~ a4@4 ~ c5@4 [bb4,eb5]@4 ~@4 a3@4 ~@4 gb4@4 d5@4 c5@4 bb4@4 ~ d5@4 g4@4 [eb4,a4]@4 ~@3 g4@4 bb3@4 a4@4 ~@4 d4@4 ~ g3@4 d4@4 ~@6 g3@4, ~@3 e5@15 ~ d5@8 ~@9 c5@20 ~ f4@33 ~@19 [a4,eb5]@15 ~@26 bb4@15 g4@17 ~@10, ~@67 c4@32 ~@18 d4@31 ~@35 d4@9]/6", // Db C Eb5 Ebdim Adim
  I: "[g2@5 ~ [a2,f4]@5 ~@30 a4@4 bb4@4 ~ d5@4 ~@6 bb5@4, ~@12 bb4@32 ~@11 f5@9, ~@23 f4@30 ~@11]/2", // Dm
  J: "[~@4 e4@4 ~@4 db5@4 a5@4 g5@4 f5@4 a5@4 d5@3 [bb4,e5]@4 ~@4 d5@4 f4@3 e5@4 ~@5 a4@4 d4@4 ~@6 [d4,f4]@10 [e4,g4]@8 ~@27 e4@4 f4@4 a4@4 c5@3 ~@3 bb2 ~ f5@16 ~ e5@4 ~ d5@4 c5@4 f5@4 ~ [bb3,g4]@3 a4@4 bb4@7 [f3,f4]@4 [g3,e4,g4]@4 [a3,f4,a4]@10 ~ [g3,c4,e4,g4]@18, [e5,bb5]@15 ~@24 f5@15 ~ d5@12 ~@34 c4@28 ~@8 f3@26 ~@61, ~@8 a4@29 ~@31 a4@10 ~@14 f4@29 ~@13 f5@4 f4@33 ~@2 e4@14 c4@18 ~@19]/7", // Bbdim Dm Em Eb F C Dm C …
  K: "[~@41 e4@4 f4@4 a4@4 c5@4 a5@5 a5@15 ~ g5@4 f5@4 d5@4 ~ c5@4 f5@4 [bb3,g4]@3 a4@4 bb4@4 d5@4 g4@4 ~ [gb4,a4]@4 ~ bb4@5 ~ d5@5 d4@8 ~ e4@10 [a3,f4]@49 ~@21, ~@3 f4@8 ~@45, ~@23 c4@28 ~@48 [c4,e4]@15 d4@20 ~@10 c4@59 ~@21]/7", // Eb Gbm Dm C
})).s("gm_piano").gain(0.15).pan(0.3)

// chords · piano · "Klavier"
const piano_2 = note("<A@3 B C@5 D@8 E@6 F@2 G@5 H@2 I@7>".pickRestart({
  A: "[~@21 f2@48 ~@2 d4@16 ~ c4@4 bb3@4]/3", B: "[c3,a3]@2 ~ a3 ~ d5 a2 c3, ~@8 c3@15 ~@9, ~@2 g3 ~",
  C: "[~@4 c5@4 c3@4 d3@4 c3@4 bb2@4 d4 ~@5 a2@5 ~ f2@50 ~@2 [e4,g4]@24 ~@2 [d3,d4]@11 f3@4 g4@4 ~@7 [a3,c4,gb4]@4 b3@4 ~@5 a3@4 b3@2 c5, f3@8 ~@17 [g2,c4]@11 ~@52 a4@35 ~@2 c4@14 ~@21, ~@129 g3@15 [g3,f4]@16]/5", // Em D Gbdim C5 G7
  D: "[~ c3@5 d3@5 ~ bb2@5 [g2,c4]@5 f2@49 ~@2 d4@16 ~@2 c4@4 bb3@4 [c3,a3]@8 ~@4 a3@4 ~@4 d5@4 a2@4 c3@4 ~@4 c5@4 c3@4 d3@4 c3@4 bb2@4 d4 ~@5 a2@5 f2@50 ~@3 [e4,g4]@24 ~ [d3,d4]@11 ~, ~@107 c3@15 ~@33 [g2,c4]@11 ~@90, ~@115 g3@8 ~@8 f3@8 ~@80 a4@35 ~@2]/8", // C5 F Em D C5
  E: "[f3@3 g4@4 ~@8 [a3,c4,gb4]@4 b3@4 ~@5 a3@4 ~@2 c5@2 c3@5 d3@5 bb2@5 ~ [g2,c4]@5 ~@10 [c3,f3,a3]@32 ~@6 [c3,g3]@4 gb3@4 ~@16 gb3@4 g3@12 ~ [c3,gb3]@4 d4@4 ~@7 [eb3,c4]@4 d3@12 ~ c4@4 ~ bb3@9, c4@14 ~@18 b3@4 ~@73 d3@23 ~@18 [d3,g3]@15 bb3@4 ~@9 [d3,a3]@9 ~@5, ~@3 g3@15 ~ [g3,f4]@16 ~@22 f2@42 ~@26 a4@8 ~@59]/6", // Gbdim C5 F C5 Cdim Cm G5 D5 …
  F: "[~@12 bb1@11 [f3,bb3,d4]@30 ~@7 [g3,d4]@4]/2", // Bb G5
  G: "[db4@4 ~@16 db4@4 d4@11 [g3,db4]@4 a4@4 ~@7 [bb3,g4]@4 ~ f4@4 ~@9 [db4,e4,g4]@5 a3@5 ~@5 c4@3 ~@4 c4@2 ~@9 f3@28 ~@9 d4@16 ~ c4@4 ~, a3@23 ~@16 [a3,d4]@15 ~ a3@17 ~@6 bb3@9 ~ c3@4 f2@44 ~@24, ~@2 e5 ~@17]/5", // Gdim Eb Dbdim D5
  H: "[bb3@4 [c3,a3]@8 ~@4 a3@4 ~@4 d5@3 a2@4 c3@4 ~@6 c5@5 c3@5 ~ d3@4 ~ c3@4 ~ bb2@2, ~@13 c3@14 ~@37, ~@20 g3@7 ~@8 f3@10 ~@19]/2", // F
  I: "[~@2 d4 [g2,c4]@4 a2@4 ~@12 f3@28 ~@11 [g2,b2,b3,f4,g4,d5]@27 ~@2 [c3,a3,c4]@8 ~@3 a3@4 g3@8 [bb2,g3]@4 ~ [d3,a3]@4 ~ [g3,bb3]@11 ~@9 c2@10 f2@49 ~@21, ~@12 f2@47 ~@40 c3@15 ~@21 c3@67 ~@22, ~@135 [g3,bb3]@18 ~@71]/7", // C5 G7 F Eb D5 Gm
})).s("gm_piano").gain(0.15).pan(0.6)

// chords · piano · "Klavier" · soft notes
const piano_soft = note("<A@3 ~@2 B@2 ~@3 C@2 ~@2 D@2 ~@12 E@2 ~@2 F@2 ~@5>".pickRestart({
  A: "[~@10 [c3,a3]@13 ~@9]/3", B: "[~@15 [c3,a3]@39 ~@10, ~@15 f3@30 ~@19]/2", C: "[[c3,a3]@39 ~@25]/2",
  D: "[~@18 [c3,a3]@39 ~@7, ~@9 f3@15 ~@8]/2", E: "[~@5 [c3,a3]@36 ~@23]/2", F: "[~@23 [c3,a3]@36 ~@5]/2",
})).s("gm_piano").gain(0.1).pan(0.6)

stack(piano, piano_2, piano_soft)