Strudelify

Little Red Riding Hood Suite for 2 Pianos

Alexander Unseth

KeyF majorTempo140 bpm
0:00/0:00
// Little Red Riding Hood Suite for 2 Pianos — Alexander Unseth
// 140 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: metre changes (4/4 at bar 1, 2/4 at bar 65, 4/4 at bar 70) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5862623; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 113 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(140/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 A B A B A B C D E F A B A B C D E F ~@14 G ~@2 H I J K L M ~@3 N@2 O ~ P@4 Q@5 R@3 S@6 ~ T@5 U@8 V@5 ~@2 W X Y@2
  Z@2 AA@4 ~ AB AC AD AE@4 AF AG AH AI@2 AJ
>`.pickRestart({
  A: "[f2,f3]@3 ~@3 [c4,f4,a4]@4 f4@2 [d2,d3,c4,f4,a4,c5]@11 ~", // F Dm7
  B: "[g2,g3]@3 ~@3 [d4,f4,bb4]@4 g4@2 [c2,c3,bb3,e4,c5]@11 ~", // G Bb C7
  C: "[bb1,bb2]@3 ~@3 [f4,bb4,d5]@4 bb4@2 [bb1,bb2,f4,bb4,d5,f5]@11 ~", // Bb
  D: "[bb1,bb2]@3 ~@3 [f4,bb4,db5]@4 bb4@2 [bb1,bb2]@6 [b1,b2]@6, ~@12 [f4,bb4,db5,f5]@11 ~", // Bb Bbm Bb B Bbm
  E: "[c2,c3]@3 ~@3 [c4,e4,bb4]@4 g4@2 [c2,c3,bb3,e4,c5]@11 ~", F: "~@2 [c2,c3,bb3,c4,e4] ~ [f1,f2,a3,c4,f4] ~@3",
  G: "~@5 [a0,a1,c4,e4,a4] ~@2", // Am
  H: "~@6 [f2,f3] ~@2 [a3,c4,d4,f4] ~@2 [c2,c3] ~@2 [a3,c4,d4,f4] ~@2 [f2,f3] ~@2 [a3,c4,d4,f4] ~@2", // F Dm7 C Dm7 F Dm7
  I: "[c2,c3] ~@2 [a3,c4,d4,f4] ~@2 [f2,f3] ~@2 [a3,c4,d4,f4] ~@2 [c2,c3] ~@2 [a3,c4,d4,f4] ~@2 [f2,f3] ~@2 [a3,c4,d4,f4] ~@2", // C Dm7 F Dm7 C Dm7 F Dm7
  J: "[c2,c3] ~@2 [a3,c4,d4,f4] ~@2 [g2,g3] ~@2 [bb3,d4,g4] ~@2 [d2,d3] ~@2 [bb3,d4,g4] ~@2 [g2,g3] ~@2 [bb3,db4,g4] ~@2", // C Dm7 G Gm D Gm G Gdim
  K: "[db2,db3] ~@2 [bb3,db4,g4] ~@2 [c2,c3] ~@2 [a3,c4,f4] ~@2 [c2,c3] ~@2 [a3,c4,f4] ~@2 [d2,d3] ~@2 [a3,c4,gb4] ~@2", // Db Gdim C F C F D Gbdim
  L: "[gb1,gb2] ~@2 [a3,c4,gb4] ~@2 [g1,g2] ~@2 [f3,g3,b3,d4] ~@2 [d1,d2] ~@2 [f3,g3,b3,d4] ~@2 [c1,c2] ~@2 [g3,bb3,c4,e4] ~@2", // Gb Gbdim G G7 D G7 C C7
  M: "[c2,c3] ~@2 [g3,bb3,c4,e4] ~@2 [f2,f3] ~@2 [a3,c4,f4] ~@2 [c2,c3] ~@2 [a3,c4,f4] ~@2 [f1,f2,a3,c4,f4]@3 ~@3", // C C7 F C F
  N: "[~@12 [c1,c2]@3 eb4 ~@8 [c1,c2]@3 e4 e4@2 ~@6 [db1,db2,f3,ab3,db4,f4]@6 ~@6, ~@5 [c1,c2]@3 ~ [c1,c2] ~@6, ~@2 eb4 ~@3, ~@6 e4@3 ~@7]/2", // C Db C
  O: "[c1,c2,e3,g3,bb3,e4] ~ [c2,g3,bb3,c4,e4] [f1,f3,a3,c4,f4]", // C7 F
  P: "[~@23 [bb3,eb4,g4]@10 [bb3,eb4,g4]@5 ~@5 [bb3,e4,g4]@10 [bb3,e4,g4]@5 ~@4 [c4,eb4,f4,ab4]@10 [c4,eb4,f4,ab4]@5 ~@5 [eb4,f4,ab4,c5]@10 [eb4,f4,ab4,c5]@4, ~@18 eb2@20 c2@20 f2@19 ab2@19]/4", // Eb Edim Fm7
  Q: "[~@6 [ab3,bb3,d4,f4]@10 [ab3,bb3,d4,f4]@5 ~@15 [ab3,bb3,d4,f4]@5 ~@5 [bb3,eb4,g4]@9 [bb3,eb4,g4]@5 ~@5 [ab3,bb3,d4,f4]@10 [ab3,bb3,d4,f4]@5 ~@5 [bb3,eb4,g4]@10 [bb3,eb4,g4]@5 ~@5 [bb3,eb4,g4]@10 [bb3,eb4,g4]@5, ~ bb2@20 d2@20 eb2@20 ~@19 eb2@20 g2@20, ~@13 [ab3,bb3,d4,f4]@5 ~@42, ~@31 f2@10 ~@19 bb1@20 ~@40]/5", // Bb7 Eb Bb7 Eb Bb7
  R: "[~@5 [c4,eb4,ab4]@9 [c4,eb4,ab4]@5 ~@5 [b3,eb4,f4,ab4]@10 [b3,eb4,f4,ab4]@5 ~@5 [bb3,eb4,g4]@10 [bb3,eb4,g4]@5 ~@5 [bb3,d4,ab4]@8, ab2@19 ab2@20 bb2@20 bb1@13]/3", // Ab Fm7b5 Eb Bb7
  S: "[~@2 [bb3,d4,ab4]@5 ~@5 [bb3,eb4,g4]@10 eb4@4 [eb2,bb2,g3,eb4]@40 ~@8 [c4,e4,ab4]@2 ~@8 [db4,f4,a4]@3 ~@8 [d4,gb4,bb4]@2 ~@8 [eb4,g4,b4]@3 ~@5 [d4,gb4,bb4]@5 ~@6 [eb4,g4,b4]@5 ~@5 [e4,ab4,c5]@5 ~@5, ~@7 eb2@19 ~@40 [bb0,bb1]@10 [bb0,bb1]@11 [bb0,bb1]@10 [bb0,bb1]@11 [bb0,bb1]@10 [bb0,bb1]@11 [bb0,bb1]@11 ~@4, ~@22 [bb3,g4]@44 ~@3 [bb3,d4,gb4]@8 ~@5 [c4,e4,ab4]@5 ~@3 [c4,e4,ab4]@8 ~@5 [d4,gb4,bb4]@5 ~@36, ~@71 [b3,eb4,g4]@5 ~@3 [b3,eb4,g4]@8 ~@5 [db4,f4,a4]@5 ~@3 [db4,f4,a4]@8 ~@36]/6", // Bb7 Eb Caug Dbaug Daug Ebaug Daug Ebaug …
  T: "[~@8 db4 ~@4 f3 ~@2 d4 ~@7 db4 ~@7 gb4 ~@4 gb3 ~ [eb3,c4], ~ db2@8 bb1@8 eb2@8 gb2@8 ab2@7, ~ f4@3 db4@3 [ab2,ab3]@2 ~@2 [bb2,ab3]@3 f3@3 ~ gb3@3 [eb3,gb4]@4 ~ bb3@3 [gb3,bb4]@4 ~ gb3@2 eb4@4, ~@2 f3@3 [db3,f4]@4 ~ f3@2 d4@3 [bb2,ab3]@2 ~@2 [bb2,bb3]@3 gb3@3 bb4@3 gb4@3 [eb3,db4]@2 ~@2 [eb3,c4]@3 gb3@2, ~@3 [ab2,ab3]@3 f3@3 f4@4 f4@4 gb4@3 db4@3 [bb2,bb3]@2 ~@2 [eb3,db4]@3 bb3@3 ab4@4 ab4@3]/5", // Cm Ab Bb7 Ebm Gb Db Bb7 Bb …
  U: "[eb4 ~@4 gb3 ~@2 eb4 ~@7 c4 ~@7 c4 ~@7 db4 ~@7 f4 ~@7 gb4 ~@7 gb4 ~@4 f3 ~ [db3,ab3], ~ [ab1,bb4]@8 db2@8 db2@8 db2@8 ~@2 [db3,db4]@3 ab3@3 bb4@3 gb4@3 [db3,db4]@2 ~@2 [eb3,eb4]@3 a3@3 f4@3 db4@4, ~@2 gb3@3 ab4@4 f4@3 c4@3 [ab2,ab3]@2 ~@2 [ab2,ab3]@3 f3@3 f4@3 db4@3 [ab2,ab3]@2 f2@8 gb2@8 gb2@8 ab2@7, ~@3 [eb3,c4]@3 gb3@3 ~ f3@3 [db3,f4]@4 ~ f3@3 [db3,f4]@4 ~ f3@3 [db3,f4]@4 ~ ab3@3 [f3,ab4]@4 ~ bb3@3 [gb3,bb4]@4 ~ a3@3 [gb3,a4]@4 ~ f3@3 f4@3, ~@4 eb4@3 [eb3,c4]@2 ~@2 [ab2,ab3]@3 f3@3 f4@3 c4@3 [ab2,ab3]@2 ~@2 [ab2,ab3]@3 f3@3 ab4@3 f4@3 [db3,db4]@2 ~@2 [db3,db4]@3 bb3@3 a4@3 gb4@3 [eb3,eb4]@2 ~@2 [db3,ab3]@3 f3@2]/8", // Db5 Absus2 Db Eb Ab Cm Db Fm …
  V: "[db4 ~@4 gb3 ~@2 eb4 ~@7 db4 [db2,ab2,f3,db4]@16 ~@7, ~ ab1@8 db2@6 ab2@2 ~@23, ~ ab4@3 eb4@3 [eb3,c4]@2 ~@2 [ab2,ab3]@3 f3@3 ~@23, ~@2 gb3@3 ab4@4 f4@3 db4@3 ab3@16 ~@9, ~@3 [eb3,c4]@3 gb3@3 ~ f3@3 [db3,f4]@16 ~@11]/5", // Db Cm Ab Cm Db
  W: "~@15 bb2@2 ~@3 [a3,bb3,d4,f4]@2 ~@2", X: "f2@2 ~@3 [a3,bb3,d4,f4]@2 ~@3 bb2@2 ~@2 [a3,bb3,d4,f4]@2 ~@3 f2@2 ~@3",
  Y: "[[a3,bb3,d4,f4]@2 ~@2 ab2@2 ~@3 [gb3,ab3,c4,eb4]@2 ~@3 eb2@2 ~@2 [gb3,ab3,c4,eb4]@2 ~@3 [ab2,a2]@2 ~@3 [f3,a3,c4,eb4]@2 ~@2 [e2,f2]@2 ~@3 [f3,a3,c4,f4]@2 ~@3 [bb2,b2]@2 ~@2 [bb3,b3,eb4,gb4]@2]/2", // Bbmaj7 Ab7 Amaj7 F7 Fmaj7 F Bmaj7
  Z: "[~@2 [f2,gb2]@2 ~@2 [bb3,b3,eb4,gb4]@2 ~@2 [bb2,b2]@2 ~@3 [bb3,b3,eb4,gb4]@2 ~@2 [f2,gb2]@2 ~@2 [bb3,b3,eb4,gb4]@2 ~@2 a2@2 ~@2 [g3,a3,db4,e4]@2 ~@3 [eb2,e2]@2 ~@2 [g3,a3,db4,e4]@2 ~@2 [a2,bb2]@2 ~@2]/2", // Gbmaj7 Bmaj7 Gbmaj7 Bmaj7 A7 Emaj7 A7 Bbmaj7
  AA: "[[gb3,bb3,db4,e4]@2 ~@2 [f2,gb2]@2 ~@3 [gb3,bb3,db4,gb4]@2 ~@7 c4@2 d4@2 ~@8 c4 d4@2 [d4,e4]@2 ~@6 c4@2 d4@2 ~@7 c4@2 d4@2 [d4,e4]@2 ~@16 c4@2 d4@2 [d4,e4]@2 [c1,c2,e3,g3,ab3,b3,c4]@6 ~@10, ~@13 [a0,bb0,b0,c1,db1,d1]@9 d4@9 c4@4 ~@8 c4@3 [a0,bb0,b0,c1,db1,d1]@11 ~@12 [a1,bb1,b1,c2,db2,d2]@11 ~@16, ~@18 bb3@6 [a0,bb0,b0,c1,db1,d1]@11 [a0,bb0,b0,c1,db1,d1]@10 d4@9 c4@4 ~@18 c4@4 ~@16, ~@20 c4@9 ~ bb3@6 ~@5 bb3@11 bb3@6 ~@16 bb3@6 ~@16, ~@22 e4@11 ~@12 e4@11 ~@40]/4", // Gb7 Gbmaj7 Gb Dsus2 Cmaj7
  AB: "~@5 [bb1,bb2]@2 ~@2 [f3,bb3,d4] ~ [f1,f2]@2 [f3,bb3,d4]@2 ~ f4@2 [bb1,bb2]@2 ~@2 [f3,bb3,d4] ~", // Bb F Bb
  AC: "[f1,f2]@2 [f3,bb3,d4]@2 f4@2 ~ [g1,g2]@2 ~@2 [g3,bb3,d4] ~ [d1,d2]@2 [g3,bb3,d4]@2 g4@2 ~ [g1,g2]@2 ~@2", // F Bb G Gm D Gm G
  AD: "[g3,bb3,d4] ~ [d2,d3]@2 [g3,bb3,d4]@2 g4@2 [c2,c3]@2 ~@3 [g3,c4,eb4] ~ [g1,g2]@2 [g3,c4,eb4]@2 g4@2 [c2,c3]@2 ~", // Gm D Gm C Cm G Cm C
  AE: "[~@2 [g3,c4,eb4] ~ [g1,g2]@2 [g3,c4,eb4]@2 g4@2 [f1,f2,a3,c4,eb4,f4]@2 ~@11 [f1,f2]@2 c4 ~@2 a3 ~ [a1,a2]@2 eb3 ~ c3 ~ [bb1,bb2]@2 ~@2 [f3,bb3,d4] ~@2 [f1,f2]@2 [f3,bb3,d4]@2 f4@2 [bb1,bb2]@2 ~@2 [f3,bb3,d4] ~@2 [f1,f2]@2 [f3,bb3,d4]@2 f4@2 [eb1,eb2]@2 ~@2 [g3,bb3,eb4] ~ [bb1,bb2]@2 ~ [g3,bb3,eb4]@2 g4@2 [bb1,bb2]@2 ~@2 [f3,bb3,d4] ~ [f1,f2]@2 ~ [f3,bb3,d4]@2 f4@2 [g1,g2]@2 ~@2 [g3,b3,d4] ~ [b1,b2]@2, ~@23 eb4 ~@6 f3 ~@65]/4", // Cm G Cm F7 F A Bb F …
  AF: "[g3,b3,d4]@2 ~ f4@2 [c2,c3]@2 ~@2 [g3,c4,eb4] ~ [g1,g2]@2 [g3,c4,eb4]@2 ~ g4@2 [f1,f2]@2 ~@2 [f3,a3,c4] ~", // G C Cm G Cm F
  AG: "[a1,a2]@2 [f3,a3,c4]@2 eb4@2 ~ [bb1,bb2]@2 ~@2 [f3,bb3,d4] ~ [f1,f2]@2 [f3,bb3,d4]@2 f4@2 ~ [bb1,bb2]@2 ~@2", // A F Bb F Bb
  AH: "[f3,bb3,d4] ~ [f1,f2]@2 [f3,bb3,d4]@2 f4@2 [bb1,bb2]@2 ~@3 [f3,bb3,d4] ~ [f1,f2]@2 [f3,bb3,d4]@2 f4@2 [eb1,eb2]@2 ~", // Bb F Bb F Bb Eb
  AI: "[~@2 [g3,bb3,eb4] ~ [bb1,bb2]@2 [g3,bb3,eb4]@2 g4@2 [bb1,bb2]@2 ~@3 [f3,bb3,d4] ~ [f1,f2]@2 [f3,bb3,d4]@2 f4@2 [eb1,eb2,bb3,eb4,g4]@3 ~@10 [f1,f2,c4,eb4,f4,a4]@3 ~@9]/2", // Eb Bb Eb Bb F Bb Eb F7
  AJ: "~ [bb1,bb2,d4,f4,bb4]@3 ~@4 [f1,f2,c4,eb4,f4,a4]@3 ~@3 [bb0,bb1,d4,f4,bb4]@3 ~@7", // Bb F7 Bb
})).s("gm_piano").gain(0.64)

// chords · piano · soft notes
const piano_soft = note("<~@21 A B C D E F@2 G H I J K@2 L ~@8 M@4 ~@39 N O P@2 ~@7 Q@2 ~@14>".pickRestart({
  A: "~@12 [a1,a2]@3 ~@2 [ab3,a3,c4,e4]@3 ~@2 [e1,e2]@2", // A Am E
  B: "~@4 [ab3,a3,c4,e4]@3 ~@2 [a1,a2]@3 ~@2 [ab3,a3,c4,e4]@3 ~@2 [e1,e2]@3 ~@2", // Am A Am E
  C: "~ [ab3,a3,c4,e4]@3 ~@2 [a1,a2]@3 ~@2 [ab3,a3,c4,e4]@3 ~@2 [e1,e2]@3 ~@3 [ab3,a3,c4,e4]@2", // Am A Am E Am
  D: "~@3 [a1,a2]@3 ~@2 [ab3,a3,c4,e4]@3 ~@2 [e1,e2]@3 ~@3 [ab3,a3,c4,e4]@3 ~@2", // A Am E Am
  E: "[a1,a2]@3 ~@2 [ab3,a3,c4,e4]@2 ~@2 [ab3,a3,c4,e4] [e1,e2]@3 ~@3 [ab3,a3,c4,e4]@3 ~@2 [a1,a2]@3", // A Am E Am A
  F: "[~@2 [ab3,a3,c4,e4]@2 ~@2 [ab3,a3,c4,e4] [e2,e3]@3 ~@3 [ab3,a3,c4,e4]@3 ~@2 [d2,d3]@3 ~@2 [a3,db4,d4,f4]@3 ~@2 [a1,a2]@3 ~@3 [a3,db4,d4,f4]@3 ~@2 [eb2,eb3]@3 ~@2 [a3,c4,eb4,gb4]@3 ~]/2", // Am E Am D Dm A Dm Eb …
  G: "~ [a1,a2]@3 ~@3 [a3,c4,eb4,gb4]@3 ~@2 [e2,e3]@3 ~@2 [ab3,a3,c4,e4]@3 ~@2 [e2,e3]@2", // A Adim E Am E
  H: "~@4 [ab3,a3,c4,e4]@3 ~@2 [e1,e2]@3 ~@2 [ab3,b3,d4,e4]@3 ~@2 [e1,e2]@3 ~@2", // Am E E7 E
  I: "~ [ab3,b3,d4,e4]@3 ~@2 [a1,a2]@3 ~@2 [ab3,a3,c4,e4]@3 ~@2 [ab1,ab2]@3 ~@3 [ab3,a3,c4,e4]@2", // E7 A Am Ab Am
  J: "~@3 [g1,g2]@3 ~@2 [ab3,a3,c4,e4]@3 ~@2 [gb1,gb2]@3 ~@3 [ab3,a3,c4,e4]@3 ~@2", // G Am Gb Am
  K: "[b3@7 [e1,e2,ab3,b3,d4,e4]@7 [a1,a2,ab3,a3,c4,e4] ~, [f1,f2,a3,c4,f4]@7 ~]/2", // E7 Am F
  L: "~@4 [e2,e3,b3,d4,e4,ab4]@3 ~@17", // E7
  M: "[c4@2 ~@2 c4 ~@10 c4 ~@11 d4 d4@2 ~@9 eb4 ~@11 e4 e4@2 ~@6 [c1,c2]@3 c4 ~@8 [c1,c2]@3 d4 d4@2 eb4@9 ~@9, ~@6 c4@9 ~ c4@8 ~@18 e4@9 ~@15 d4@9 ~@21, ~@4 [c1,c2]@4 [c1,c2]@2 ~@2 [c1,c2]@4 [c1,c2]@2 ~@3 [c1,c2]@3 ~ [c1,c2] ~@6, ~@18 d4@9 ~@3 eb4@9 ~ eb4@8 ~@6 c4@9 ~ c4@8 ~@24]/4", // C
  N: "~@3 a2@3 ~@2 [ab3,a3,db4,e4]@3 ~@2 e2@3 ~@3 [ab3,a3,db4,e4]@3 ~@2", // Amaj7
  O: "a2@3 ~@2 [ab3,a3,db4,e4]@3 ~@2 e2@3 ~@3 [ab3,a3,db4,e4]@3 ~@2 g2@3", // Amaj7
  P: "[~@2 [f3,g3,b3,d4]@3 ~@2 d2@3 ~@3 [f3,g3,b3,d4]@3 ~@2 ab2@3 ~@2 [e3,ab3,b3,d4]@3 ~@2 e2@3 ~@3 [e3,ab3,b3,e4]@3 ~@11]/2", // G7 E7 E
  Q: "[~@12 [a1,bb1,b1,c2,db2,d2]@3 [a1,bb1,b1,c2,db2,d2,c4]@2 ~@2 e4@11 ~@18, ~@15 bb3@11 ~@22, ~@17 c4@9 ~@22, ~@17 d4@2 d4@9 ~@20, ~@6 [a1,bb1,b1,c2,db2,d2] ~@9]/2",
})).s("gm_piano").gain(0.32)

stack(piano, piano_soft)