Strudelify

Souvenir d'un lieu cher Op.42

P. Tchaikovsky Op. 42

KeyE♭ majorTempo78 bpm
0:00/0:00
// Souvenir d'un lieu cher Op.42 — P. Tchaikovsky Op. 42
// 78 bpm, 3/4, key Eb 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/6353276; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 81 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(78/3)

// 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@2 A B C D I J K L M N O@2 P Q@3 R S@2 T@2 U@3 V@7 W X Y Z ~@2 AA@7 AB@2 AC@3 AD@6 AE AF@3 AG@5 AH AI@2
  AJ AK@3 ~
>`.pickRestart({
  A: "[eb2,eb3]@8 [bb3,eb4,g4]@15 ~ [bb3,eb4,g4]@15 ~ [bb3,eb4,g4]@8", // Eb
  B: "[eb2,eb3]@8 [a3,c4,eb4,f4]@15 ~ [a3,c4,eb4,f4]@15 ~ [a3,c4,eb4,f4]@8", // Eb F7
  C: "[eb2,eb3]@8 [a3,c4,eb4,gb4]@15 ~ [a3,c4,eb4,gb4]@15 ~ [a3,c4,eb4,gb4]@8", // Eb Adim
  D: "[eb2,eb3]@8 [ab3,b3,eb4,f4]@8 ~@8 [g3,bb3,eb4]@15 ~ [g3,bb3,eb4]@8, ~@8 [eb2,eb3]@15 ~", // Eb Fm7b5 Eb
  E: "~@8 [g3,bb3,e4]@15 ~ [g3,bb3,e4]@8 ~@8 [g3,bb3,e4]@8, db3@30 ~@2 c3@15 ~", // Edim
  F: "~ [bb3,e4] ~ [ab3,c4,f4] ~ [ab3,c4,f4], f2@23 ~, ~@16 c3@16 f3@15 ~", // Bbdim Fm
  G: "~@8 [c4,f4,c5]@15 ~ [c4,f4,c5]@8 ~@8 [c4,eb4,f4]@8, ab3@30 ~@2 ab2@15 ~", // F5 F7
  H: "[~@8 [b3,eb4,f4]@8 ~@8 [bb3,d4,f4]@15 ~ [bb3,d4,f4]@38 ~@18, a2@15 ~ bb2@61 ~@19]/2", // Fm7b5 Bb
  I: "~@8 [g3,bb3,eb4]@15 ~ [g3,bb3,eb4]@8 ~@8 [g3,bb3,db4]@8, eb2@30 ~@2 eb3@15 ~", // Eb Gdim
  J: "~ [a3,c4,d4] ~ [bb3,d4] ~ [g3,bb3,eb4], d3@15 ~ g3@15 ~ eb3@15 ~", // D7 Bb Eb
  K: "~ [g3,a3,eb4] ~ [gb3,a3,d4] ~ [c4,d4,gb4], c3@15 ~ d3@15 ~ d2@15 ~", // Am7b5 D D7
  L: "~ bb5 g5 d5 bb4 a4, g2@15 ~ [d3,g3,bb3,d4]@30 ~@2", M: "[g2,d3,g3,bb3,d4,g4]@5 ~@11",
  N: "[f2,c4,f4,ab4]@6 ~@8 [f3,ab3,c4,f4]@6 ~@7 d4@13 ~ eb2@6 ~, ~@27 [bb2,ab3,f4]@19 ~@2", // Fm Bb7
  O: "[~@6 eb3@13 ~ db3@13 [c3,f3,ab3,c4]@13 ~ [bb2,g3,c4,e4]@13 ~ [ab2,f3,c4,f4]@13 eb3@7 d3@6 ~ [g2,d3,b3,g4]@6 ~@2, ~@3 [g3,bb3]@13 ~@21 [ab2,c4,gb4]@7 ~@4]/2", // Fm C7 Fm G Gm Ab7
  P: "~@21 [f2,c4,f4,ab4]@6 ~@7 [f3,ab3,c4,f4]@6 ~@8", // Fm
  Q: "[[bb2,ab3,d4,f4]@13 ~ [eb2,bb2,g3,eb4]@6 ~@7 [g2,eb3,c4,eb4]@13 ~ [ab2,ab3,c4,eb4]@13 [f2,f3,ab3,c4,f4]@13 ~ [ab2,f3,c4,f4]@13 [a2,f3,c4,eb4,f4]@13 ~ [bb2,f3,bb3,d4,f4]@13 ~@32 [f2,c4,f4,ab4]@4]/3", // Bb7 Eb Cm Ab Fm F7 Bb Fm
  R: "~@9 [f3,ab3,c4,f4]@6 ~@8 [bb2,ab3,d4,f4]@13 [eb2,bb2,g3,eb4]@6 ~@6", // Fm Bb7 Eb
  S: "[~@2 eb3@13 db3@13 ~ [c3,f3,ab3,c4]@13 ~ [bb2,g3,c4,e4]@13 [ab2,f3,c4,f4]@13 ~ eb3@6 ~ d3@6 [g2,d3,b3,g4]@6 ~@7, ~@2 [g3,bb3]@26 ~@42 [ab2,c4,gb4]@13 ~@13]/2", // Fm C7 Fm G Gm Ab7
  T: "[~@16 [f2,c4,f4,ab4]@6 ~@8 [f3,ab3,c4,f4]@6 ~@8 [bb2,ab3,d4,f4]@13 [eb2,bb2,g3,eb4]@6 ~@8 [g2,eb3,bb3,eb4]@13 [ab2,eb3,ab3,c4,eb4]@12]/2", // Fm Bb7 Eb Ab
  U: "[~@2 [f2,f3,ab3,c4,f4]@13 [ab2,f3,c4,f4]@13 ~ [bb2,f3,bb3,d4,f4]@13 ~ [g2,g3,bb3,d4,g4]@13 [bb2,g3,d4,g4]@13 ~ [c3,g3,c4,eb4,g4]@13 [c3,c4]@15 ~ [b2,b3]@15 ~ [bb2,ab3]@15 ~ [a2,a3]@13, ~@83 [eb3,f4,eb5]@30 ~@2 [eb3,g4,eb5,g5]@29]/3", // Fm Bb Gm Cm C B Bb7 A …
  V: "[~@3 [ab2,d3,ab3,c5,gb5,c6]@30 ~@2 [g2,d3,g3,b4,g5,b5]@6 ~ [d4,b4,b5]@7 [c4,a4,a5]@7 [b3,g4,g5]@6 [a3,gb4,gb5]@7 [b3,g4,g5]@7 [a4,a5]@6 ~ [d4,d5]@7 [a3,e4,e5]@6 [d4,f4,f5]@7 [b3,gb4,gb5]@7 [g4,g5]@6 ~ g2@6 [d4,b4,b5]@7 [c4,a4,a5]@7 [b3,g4,g5]@7 [a3,gb4,gb5]@7 [b3,g4,g5]@6 [a4,a5]@6 ~ [d4,d5]@7 [a3,e4,e5]@7 [d4,f4,f5]@6 [gb4,gb5]@7 [g4,g5]@6 ~@8 [d4,b4,b5]@7 [c4,a4,a5]@6 [b3,g4,g5]@7 [a3,gb4,gb5]@7 [b3,g4,g5]@6 ~@8 [d4,b4]@6 [c4,a4]@7 [b3,g4]@7 [a3,gb4]@7 [b3,g4]@6 ~@8 [b3,d4]@8 [a3,c4]@8 [g3,b3]@8 [gb3,a3]@7 [g3,b3]@7 ~@11, ~@42 g3@32 ~@2 g3@39 ~@8 g3@34 g3@39 ~@2 g3@39 ~@2 g3@39 ~ g2@44 ~@13, ~@76 c4@13 ~@68 c4@13 ~@14 b3@13 ~@139]/7", // Ab7 G F Em D Em A D …
  W: "~@14 [g3,b3,d4,g4,b4]@7 [g3,b3,d4,g4,b4,d5]@7 ~ [g3,b3,d4,g4,b4,d5,g5]@7 ~ [f3,ab3,c4,f4,ab4,c5,f5,ab5]@11", // G Fm
  X: "~@12 [f3,ab3,c4,f4,ab4,c5]@7 ~ [f3,ab3,c4,f4,ab4,c5,f5]@7 ~ [f3,ab3,c4,f4,ab4,c5,f5,ab5]@7 ~ [eb3,f3,a3,c4,eb4,a4,c5,f5,a5]@12", // Fm F7
  Y: "~@11 [eb3,f3,a3,c4,eb4,a4,c5]@7 ~ [eb3,f3,a3,c4,eb4,a4,c5,f5]@7 ~ [eb3,f3,a3,c4,eb4,a4,c5,f5,g5]@7 ~ [d3,f3,bb3,d4,bb4,f5,bb5]@13", // F7 Bb
  Z: "~@2 [c3,f3,c4,a4,eb5,a5]@15 ~ [b2,f3,b3,ab4,eb5,ab5]@15 [bb2,f3,bb3,ab4,d5,ab5]@15", // F7 Fm7b5 Bb7
  AA: "[~@11 [eb2,eb3]@11 ~@17 [bb3,eb4,g4]@15 ~ [bb3,eb4,g4]@8 eb3@8 [eb5,eb6]@8 [d5,d6]@8 [c5,c6]@8 [d5,d6]@8 [a3,c4,f4,eb5,eb6]@8 eb3@8 ~@16 [a3,c4,eb4,gb4]@15 ~ [a3,c4,eb4,gb4]@8 eb3@8 [ab3,b3,f4,eb5,eb6]@8 [eb3,b4,b5]@8 [bb4,bb5]@8 [d5,d6]@8 [g3,bb3,eb4,eb5,eb6]@8 ~@8 [bb3,d4,g4]@15 ~@17 [bb3,d4,g4]@8 f2@8 [g3,bb3,e4,c5]@8 [f3,f4,f5]@8 [g4,g5]@8 [ab4,ab5]@8 [ab3,c4,f4,c5,c6]@8 ~@8 [c4,f4,c5]@15 ~ [c4,f4,c5]@8 ab2, ~@23 [bb3,eb4,g4]@15 ~@33 [a3,c4,f4]@15 ~ [a3,c4,f4]@15 ~@17 [a3,c4,eb4,gb4]@15 ~@49 [g3,bb3,eb4]@15 ~@9 db3@30 ~@2 c3@15 ~@82, ~@31 [bb4,bb5]@30 ~@66 [c5,c6]@30 ~@74 [bb3,d4,g4]@15 ~@33 [ab3,c4,f4]@15 ~@9 ab3@30 ~@3]/7", // Eb D C D F7 Adim Fm7b5 Abm …
  AB: "[~@7 [c4,eb4,f4]@8 ~@8 [b3,eb4,f4]@8 [bb3,bb4]@8 [c4,c5]@8 [d4,d5]@8 [f4,f5]@8 [bb4,bb5]@30 ~@3, ~@15 a2@15 ~ bb2@30 ~@35, ~@39 [f3,ab3,bb3]@15 ~ [f3,ab3,bb3]@38 ~@3]/2", // F7 Fm7b5 Bb C D F Bb Bb7
  AC: "[~@23 [g3,bb3,eb4]@15 ~ [g3,bb3,eb4]@8 ~@8 [g3,bb3,eb4]@8 c3@8 ~@8 [g4,g5]@8 [e4,e5]@8 ~@8 [g3,bb3]@8 ~@8 [ab3,c4,f4]@15 ~ [ab3,c4,f4]@8 eb3, ~@15 eb3@30 ~@2 db3@15 ~@9 [g3,bb3,e4]@15 ~ [g3,bb3]@15 ~@9 f3@30 ~@3, ~@95 [c4,c5]@15 ~@34]/3", // Eb G E Gm Fm Edim Gm C
  AD: "[~@7 [ab3,c4,f4]@8 d3@8 ~@8 [a4,a5]@8 [gb4,gb5]@8 ~@8 [a3,c4]@8 ~@8 [bb3,d4,g4]@15 ~ [bb3,d4,g4]@8 ~@8 [bb3,d4,ab4]@8 [eb2,eb3]@8 [bb3,eb4,g4,g5]@8 [eb3,gb4,gb5]@8 [g4,g5]@8 [ab4,ab5]@8 [bb3,eb4,bb4,bb5]@8 [ab2,ab3]@8 ~@16 [ab3,c4]@16 ~@2 [ab3,c4]@8 [a2,a3]@9 ~@19 [a3,c4]@17 ~ [a3,c4]@9 [bb2,eb3,g3,bb3,g4,bb4,eb5,g5]@15 ~@9, ~@23 [a3,c4,gb4]@15 ~ [a3,c4]@15 ~@9 [g2,g3]@30 ~@2 [f2,f3]@15 ~@57 [ab3,c4]@16 ~@36 [a3,c4]@17 ~@52, ~@47 [d4,d5]@15 ~@73 [bb3,eb4]@15 ~@9 [c5,c6]@15 ~ [f4,f5]@33 ~ [c5,c6]@17 ~@2 [gb4,gb5]@35 ~@25]/6", // Fm A Gb Am Gm Bb7 Eb Ebm …
  AE: "~@8 [bb2,g3,c4,e4]@15 ~ [ab2,f3,c4,f4]@15 ~@9", // C7 Fm
  AF: "[~@8 [ab3,c4]@15 ~ [g3,b3,d4]@16 ~@2 [eb3,g3,bb3,eb4]@16 ~ c3@8 ~ b2@8 [bb2,ab3,d4,bb4]@40 ~@3 [bb2,f3,ab3,bb3]@25, ~@59 [g3,a3,eb4]@16 ~@69]/3", // Ab G Eb Bb7 Am7b5
  AG: "[~@3 [eb2,eb3,g3,bb3]@8 [eb3,g3,bb3]@15 ~ [eb3,g3,bb3]@15 ~ [eb3,g3,bb3]@8 [eb3,gb3,a3,c4]@8 ~@8 [b4,b5]@8 [gb4,gb5]@8 ~@8 [eb3,gb3,a3,c4]@8 [eb2,eb3]@8 [eb3,g3,bb3]@15 ~ [eb3,g3,bb3]@15 ~ [eb3,g3,bb3]@8 [eb3,gb3,a3,c4]@8 ~@8 [b4,b5]@8 [gb4,gb5]@8 ~@8 [eb3,gb3,a3,c4]@8 [eb3,g3,bb3,bb4,bb5]@45, ~@59 [eb3,gb3,a3,c4]@15 ~ [eb3,gb3,a3,c4]@15 ~@65 [eb3,gb3,a3,c4]@15 ~ [eb3,gb3,a3,c4]@15 ~@54, ~@83 [b4,b5]@15 ~ [bb4,bb5]@23 ~@57 [b4,b5]@15 ~@46]/5", // Eb Ebdim B Gb Ebdim Eb Ebdim B …
  AH: "~@3 [eb3,bb3,eb4,g4,bb4,g5]@30 ~@2 [eb3,bb3,eb4,g4,bb4,eb5]@13", AI: "[~@3 [eb3,bb3,eb4,g4,bb4]@61 ~@32]/2",
  AJ: "~@3 [eb5,g5,bb5]@30 ~@2 [eb5,gb5,a5,c6]@13", // Eb Ebdim
  AK: "[~@3 [eb5,g5,bb5]@32 ~@2 [eb5,gb5,a5,c6]@17 ~ [eb5,g5,bb5]@57 ~@4 [eb2,eb3,g3,bb3,eb4]@28]/3", // Eb Ebdim Eb
})).s("gm_piano").gain(0.2)

stack(piano)