Strudelify

petite valse du dimanche soir

o.pouech

KeyG majorTempo160 bpm
0:00/0:00
// petite valse du dimanche soir — o.pouech
// 160 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5892045; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(160/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// 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@2 B@2 C@2 D@2 E F G H A@2 B@2 C@2 D@2 E F G H A@2 B@2 C@2 D@2 E F G H I@2 J@2 K@2 L M N O P Q R S T U V W X Y Z AA
  AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ BA A@2 B@2 C@2 D@2 E F G H BB BC BD BE@2 BF
>`.pickRestart({
  A: "e3@5 [e4,g4,b4]@5 ~ [e4,g4,b4]@5", B: "b2@5 [d4,f#4,b4]@5 ~ [d4,f#4,b4]@5",
  C: "d3@5 [d4,f#4,a4]@5 ~ [d4,f#4,a4]@5", D: "g2@5 [b3,d4,g4]@5 ~ [b3,d4,g4]@5", E: "a2@5 [c4,e4,a4]@5 ~ [c4,e4,a4]@5",
  F: "b2@5 [d#4,f#4,a4]@5 ~ [d#4,f#4,a4]@5", G: "b1@5 [d#4,f#4,a4,b4]@5 ~ [d#4,f#4,a4,b4]@5",
  H: "e2@5 [e4,g4,b4]@5 ~ [e4,g4,b4]@5", I: "b4@3 g4@2 e4@3 g4@3 b4@2 c5@3, e3@5 [g3,b3]@5 ~ [g3,b3]@5",
  J: "b4@3 f#4@2 d4@3 f#4@3 b4@2 c5@3, b2@5 [d3,f#3]@5 ~ [d3,f#3]@5", // D
  K: "a4@3 f#4@2 d4@3 f#4@3 a4@2 b4@3, d3@5 [f#3,a3]@5 ~ [f#3,a3]@5", // F#m
  L: "g4@3 f#4@2 d4@3 f#4@3 g4@2 b4@3, g2@5 [d3,g3]@5 ~ [d3,g3]@5", // G5
  M: "g4@3 f#4@2 d4@3 f#4@3 g4@2 b4@3, g2@5 [b2,d3]@5 ~ [b2,d3]@5", // Bm
  N: "a4@3 e4@2 c4@3 e4@3 a4@2 b4@3, a2@5 [c3,e3]@5 ~ [c3,e3]@5", // C
  O: "a4@3 f#4@2 d#4@3 f#4@3 a4@2 b4@3, b2@5 [d#3,f#3]@5 ~ [d#3,f#3]@5", // D#m
  P: "a4@3 f#4@2 d#4@3 f#4@3 c5@2 b4@3, b1@5 [f#3,a3]@5 ~ [f#3,a3]@5", // F#m
  Q: "e5@3 f#5@2 g5@3 c6@3 b5@2 a#5@3, e2@5 [e3,g3,b3]@5 ~ [e3,g3,b3]@5", // Em
  R: "b5@3 g5@2 ~@3 g5@3 [g3,b3]@5, e3@5 [g3,b3]@5 ~ b5@3 ~@2", // G
  S: "~@3 [e5,e6]@2 ~@3 b5@3 g5@2 e5@3, e3@5 [g3,b3]@5 ~ [g3,b3]@5", // E G
  T: "f#5@3 d5@2 ~@3 d5@3 [d3,f#3]@5, b2@5 [d3,f#3]@5 ~ f#5@3 ~@2", // D
  U: "~@3 [d5,d6]@2 ~@3 b5@3 f#5@2 d5@3, b2@5 [d3,f#3]@5 ~ [d3,f#3]@5", // D
  V: "f#5@3 a5@2 ~@3 d6@3 [f#3,a3]@5, d3@5 [f#3,a3]@5 ~ c6@3 ~@2", // F#m
  W: "~@3 [d5,d6]@2 ~@3 a5@3 f#5@2 d5@3, d3@5 [f#3,a3]@5 ~ [f#3,a3]@5", // D F#m
  X: "g5@3 b5@2 ~@3 f#5@3 [d3,g3]@5, g2@5 [d3,g3]@5 ~ g5@3 ~@2", // G5
  Y: "~@3 [d5,d6]@2 ~@3 g5@3 d5@2 b4@3, g2@5 [b2,d3]@5 ~ [b2,d3]@5", // D Bm
  Z: "c5@3 e5@2 ~@3 g5@3 [c3,e3]@5, a2@5 [c3,e3]@5 ~ a5@3 ~@2", // C
  AA: "~@3 [a4,a5]@2 ~@3 [a#4,a#5]@3 ~@2 [b4,b5]@3, b2@5 [d#3,f#3]@5 ~ [d#3,f#3]@5", // A A# B D#m
  AB: "~@3 [d#5,d#6]@2 ~@3 b5@3 a5@2 f#5@3, b1@5 [f#3,a3]@5 ~ [f#3,a3]@5", // D# F#m
  AC: "[e2,b4,b5]@5 [e3,g3,b3]@5 ~ [e3,g3,b3]@5", AD: "[e3,g5,b5,e6]@5 [g3,b3]@5 ~ [g3,b3,g5,b5]@5",
  AE: "e3@5 [g3,b3,g5,b5]@5 ~ [g3,b3]@5", AF: "[b2,f#5,b5,d6]@5 [d3,f#3]@5 ~ [d3,f#3,f#5,b5]@5",
  AG: "b2@5 [d3,f#3,f#5,b5]@5 ~ [d3,f#3]@5", AH: "[d3,f#5,a5,d6]@5 [f#3,a3]@5 ~ [f#3,a3,f#5,a5]@5",
  AI: "d3@5 [f#3,a3,f#5,a5]@5 ~ [f#3,a3]@5", AJ: "[g2,g5,b5,d6]@5 [d3,g3]@5 ~ [d3,g3,d5,g5]@5",
  AK: "g2@5 [b2,d3,d5,g5]@5 ~ [b2,d3]@5", AL: "[a2,a5,c6]@5 [c3,e3]@5 ~ [c3,e3,f#5,a5]@5",
  AM: "[b2,g5,b5]@5 [d#3,f#3]@5 ~ [f#3,f#5,a5]@5", AN: "b1@5 [f#3,a3,a5,b5]@5 ~ [f#3,a3]@5",
  AO: "e2@5 [e3,g3,b3,e5,g5,b5]@5 ~ [e3,g3,b3]@5", // Em
  AP: "e5@2 b5@2 ~ g5@2 e5@2 b5@2 ~ g5@2 e5@2, e3@4 e5@2 ~@5 e5@2 ~@3, ~@5 [g3,b3]@5 ~ [g3,b3]@5", // G
  AQ: "b4@3 b5@2 b4@3 a5@3 b4@2 g5@3, [g3,b3]@5 [g3,b3]@5 ~ [g3,b3]@5", // G
  AR: "d5@2 b5@2 ~ f#5@2 d5@2 b5@2 ~ f#5@2 d5@2, b2@4 d5@2 ~@5 d5@2 ~@3, ~@5 [b3,d4]@5 ~ [b3,d4]@5", // Bm
  AS: "b4@3 b5@2 b4@3 a5@3 b4@2 g5@3, [b3,d4]@5 [b3,d4]@5 ~ [b3,d4]@5", // Bm
  AT: "d5@2 a5@2 ~ f#5@2 d5@2 a5@2 ~ f#5@2 d5@2, d3@4 d5@2 ~@5 d5@2 ~@3, ~@5 [d4,f#4]@5 ~ [d4,f#4]@5", // D
  AU: "d5@3 c6@2 d5@3 b5@3 d5@2 a5@3, [d4,f#4]@5 [d4,f#4]@5 ~ [d4,f#4]@5", // D
  AV: "g5@2 d6@2 ~ b5@2 g5@2 d6@2 ~ b5@2 g5@2, g2@4 g5@2 ~@5 g5@2 ~@3, ~@5 [b3,d4]@5 ~ [b3,d4]@5", // Bm
  AW: "d5@3 b5@2 d5@3 a5@3 d5@2 g5@3, [b3,d4]@5 [b3,d4]@5 ~ [b3,d4]@5", // Bm
  AX: "e5@2 c6@2 ~ a5@2 e5@2 c6@2 ~ a5@2 e5@2, a2@4 e5@2 ~@5 e5@2 ~@3, ~@5 [a3,c4]@5 ~ [a3,c4]@5", // Am
  AY: "d#5@3 b5@2 d#5@3 a5@3 d#5@2 g5@3, b2@5 [b3,d#4]@5 ~ [b3,d#4]@5", // B
  AZ: "f#5@2 c6@2 ~ a5@2 f#5@2 d#6@2 ~ a5@2 g5@2, b2@4 f#5@2 ~@5 f#5@2 ~@3, ~@5 c#3@5 ~ d#3@5",
  BA: "e5@3 b4@2 g4@3 f#4@3 e4@2 f#4@3, e3@5 ~@6 b2@5", BB: "[b1,b2]@5 [f#4,a4,b4]@5 ~@6",
  BC: "[b1,b2,a4,b4,d#5]@5 ~@6 [b4,d#5,f#5]@5", BD: "[b1,b2]@5 [b4,d#5,f#5,b5]@5 ~@6", BE: "[e2,e3,e4,g4,b4,e5]@5 ~@11",
  BF: "[e2,e3,e4,e5]@5 ~@11", // E
})).s("gm_piano").gain(0.25)

stack(piano)