Strudelify

Piano Concerto No. 4 in G minor Op. 40

Sergueï Rachmaninov

KeyB♭ majorTempo140 bpm
0:00/0:00
// Piano Concerto No. 4 in G minor Op. 40 — Sergueï Rachmaninov
// 140 bpm, 2/2, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/2241871; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 44 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 · "Piano I (soliste)"
const piano = note("<~@6 A@7 B@8 ~@6 C@3 D@3 E@6 F@4 ~>".pickRestart({
  A: "[~ [g3,c4,g4,c5]!2 [c4,eb4,c5,eb5] [c4,eb4,c5,eb5]@2 [c4,eb4,g4,c5,eb5,g5] [g4,g5] g4@3 g4 [bb4,d5,f5,d6,f6] [bb4,d5,f5,d6,f6]@2 [g4,bb4,g5,g6] [g4,bb4,bb5]@2 [f4,g4,bb4,d5,f5,bb5,d6,f6]@2 [f4,d5,f5,d6,f6] f4 ~@5 [d4,d5,d6], ~ eb3@3 [a4,a5]@2 bb3@2 [bb4,d5,bb5,d6]@3 [eb4,c5,c6]@8 ~ [g4,bb4,bb5]@8, ~ [eb4,eb5] [f4,f5] g3@4 [eb4,a4,c5,eb5,a5,c6] d4@4 [g4,bb5] [a4,a5,a6]@8 [a4,f5,a5,f6]@7, ~@2 f3@4 [bb4,bb5] c4@4 eb5@4 [d5,f5,d6,f6] [g5,g6]@6 [eb4,ab4,c5,eb5,ab5,c6,eb6] [d4,d5,d6] [eb4,ab4,c5,eb5,ab5,c6,eb6]@4, ~@2 [d4,d5] [bb3,g4,g5] [a3,f4,f5]@4 g5@3 [a4,a5] f4@4 [eb5,eb6]@5 [d5,d6] f4@6]/7", // C5 Cm G Bb Gm Gm7 Dm D …
  B: "[~ [d4,d5] ~@7 c4 ~@2 c4@2 ~@7 [f3,f4]@2 [eb3,eb4,eb5] ~ [d3,d4,d5]@7, [eb4,eb5,eb6]@42 [c4,c5,c6]@6 [d4,d5]@21 [bb3,bb4,bb5]@3 [f4,ab4,c5,f5,ab5,c6]@42 [a3,a4,a5]@24 [b3,b4]@44 ~@10, [ab4,c5,ab5,c6]@2 [f4,ab4,f5,ab5]@6 [g4,bb4,g5,bb5] [c5,c6] [bb3,c4,bb4,bb5] [a3,a4,a5]@3 [c4,d4,gb4,d5,gb5]@6 [bb3,bb4]@3 [f3,f4] [eb3,gb3,eb4,gb4,eb5]@8, ~@6 d6@6 [c4,c5,c6]@6 bb3@42 [eb4,g4,eb5,g5]@24 [bb3,bb4,bb5]@6 [a3,a4,a5]@6 [bb3,eb4,g4,bb4,eb5,g5]@24 [g3,g4,g5]@24 [c4,c5]@31 ~@17, ~@4 [d4,d5]@2 [bb4,bb5] [c4,c5,c6] [d4,g4,bb4,d5,g5,bb5,d6]@8 d6@16 bb5@8 [eb4,eb5]@2 f5@16 ~@6]/8", // D F Eb D Eb C D Bb …
  C: "[~@8 [ab3,c4,c5]@3 [c4,c5]@3 c4@3 [d4,d5]@6 [d4,d5]@3 [d4,d5]@3 [d4,g4,bb4,d5,g5,bb5,d6]@7, ~@8 [eb3,ab4]@9 [c4,gb4,a4,gb5,a5]@6 [bb3,e4]@13, ~@4 [eb4,eb5]@3 [g3,eb4,eb5]@11, ~@11 [f3,ab3,f4,f5]@12 [g4,bb4,g5,bb5]@3 [c4,gb4,a4,c5,gb5,a5,c6]@10, ~@11 [d4,d5]@3 [g4,c5,g5]@3 a3@19]/3", // Ab C D Gm Ab5 Gbdim Bbdim Eb …
  D: "[~@2 [g4,g5]@3 [f4,d6]@3 [d4,f4,d6,f6]@6 [g3,g4,g5,g6]@3 ~@12 [bb3,eb4,g4,bb4,bb5,eb6,g6,bb6]@7, ~@2 [c5,eb5]@15 [c4,c6]@6 [a3,d4,f4,a4,a5,d6,f6,a6]@13, ~@2 [eb4,c6,eb6]@12 [d4,f4,d6,f6]@3 [g3,g5]@19, ~@2 a4@3 [g4,g5]@3 [a3,a4,a5,a6]@9 [eb4,g4,eb6,g6]@9 [c4,c5,c6,c7]@10, ~@5 [bb4,d5,f5,bb5]@24 ~@7]/3", // G Dm G Eb Cm C Dm Cm …
  E: "[~@65 [ab3,c4,eb4,ab4,eb5,ab5,c6,eb6]@7, ~@4 [a3,a4,a5,a6]@12 [a3,a4,a5,a6]@42 [ab4,ab6]@24 [g3,g4,g5]@6 [f3,f4,f6]@6 [ab3,c4,ab5]@6 [d4,d5,d6]@3 eb3@15 [eb4,eb5,eb6]@6 [d4,d5,d6]@20, ~@10 [bb3,bb4,bb5,bb6]@18 [f4,f6]@3 [g3,g4,g5,g6]@3 [ab3,db4,f4,ab4,ab5,db6,f6,ab6]@18 [g3,g4,g5,g6]@6 [ab3,ab5]@12 [f3,f4,f5,f6]@6 [eb3,eb4,eb5,eb6]@3 [f3,f4,f5,f6]@3 g6@21 [eb4,eb5,eb6]@3 [f3,bb3,db4,f4,f6,ab6,c7]@38, ~@5 [eb4,g4,eb6,g6]@6 [c4,eb4,c6,eb6]@18 [db4,f4,db6,f6]@3 [g3,g4,g5,g6]@3 [bb3,db4]@6 [c4,eb4,c6,eb6]@3 f5@9 c6@6 [g3,b3,g4,g5,b5]@13, ~@11 [g3,g4,g5,g6]@3 [f3,f5]@21 [bb5,db6]@12 [eb3,eb4,eb5,c6,eb6]@3 d3@22]/6", // Ab A Ab G F Ab D Eb …
  F: "[~@5 [g3,g4,g5]@6 ~, ~ [d4,d5,d6]@3 [bb3,bb4]@3 [db4,db5,a5]@12 ~@5, ~@5 [c4,c5,c6]@9 [a3,a4]@3 [ab3,ab4,ab5]@24 ~@7, ~@5 [eb4,eb5]@9 [e4,e5]@3 [f4,f5]@15 ~@16, ~@5 [ab4,ab5]@3 bb5@9 [b3,b4]@19 ~@12]/4", // G D Bb Gbm C A Ab Eb …
})).s("gm_piano").gain(0.45)

// chords · piano · "Piano I (soliste)" · soft notes
const piano_soft = note("<~@19 A@5 ~@17 B@3>".pickRestart({
  A: "[~@9 [f3,bb3,f4,bb4,db5]@3 ~@11 [bb3,bb4]@4 ~@5 [a3,a4]@24 ~@4, ~@18 db4@37 [d2,a2,gb3,bb3,d4,gb4,bb4]@48 ~@17, ~@18 db3@6 [f3,f4]@7 [c3,e3,c4,e4,c5]@48 ~@41, ~ db5@2 ~@2, ~@12 [bb3,bb4]@7 [db3,f3,b3,f4,b4]@24 ~@17]/5", // Bbm Bb A D F C Bb Db7
  B: "[~@4 [gb3,bb3,eb4,gb4,bb4,eb5,gb5]@6 eb5@6 ~@22 [eb4,eb5]@4 ~@11 [d4,d5]@18 ~, ~@10 [bb3,bb4,gb5]@32 [a2,d3,gb3,c4,eb4,gb4,c5,eb5]@29 ~, ~@10 [gb3,gb4]@23 f3@38 ~, ~@10 eb4@6 [f3,eb5]@8 [ab2,e3,b3,e4,b4,e5]@47 ~, ~@2 [a3,f4,a4,f5]@6 ~]/3", // Ebm Eb D Ebm D7 Gb F7 E …
})).s("gm_piano").gain(0.25)

// chords · piano · "Piano II (orchestre)"
const piano_2 = note("<A B C@2 D E@2 F G H I J K L M N O P Q R ~@2 S@3 T@3 U V@5 W@2 X Y@3 Z AA AB ~>".pickRestart({
  A: "~@9 [a3,d4] gb3 [a3,d4], ~@3 gb4", // D5
  B: "[d3,gb3,a3] a2 [a3,d4,gb4] [d4,gb4] a3 [d4,gb4] [gb3,a3,d4] d3 [d4,gb4,a4] [gb4,a4] d4 [gb4,a4], gb4@2 ~ a4@3 a4@2 ~ d5@3", // D Gbm
  C: "[[a3,d4,gb4]@2 gb3@2 [gb4,a4,d5]@2 [a4,d5]@2 gb4@2 [a4,d5]@2 [d4,gb4,a4]@2 a3@2 [a4,d5,gb5]@2 [d5,gb5]@2 a4@2 [d5,gb5]@2 [gb4,a4,d5]@2 d4@2 ~@2 [gb3,a3,db4,db5,a5,db6]@3 ~@3 [gb3,a3,db4,db5,a5,db6]@3 ~@3 [gb3,a3,d4,d5,a5,d6]@3 ~@3, d5@4 ~@2 gb5@6 gb5@4 ~@2 a5@11 ~@19]/2", // D D5 D Gbm D
  D: "[c3,g3,eb4,eb5,g5,c6,eb6]@3 ~@3 [c5,eb5]@2 g4@2 [c5,eb5]@2 [ab2,eb3]@2 [c5,eb5]@2 g4@2 [c5,eb5]@2 g4@2 [c5,eb5]@2, ~@12 eb4@11 ~", // Cm Ab5 Cm
  E: "[~@3 [g4,c5,eb5] eb4 [g4,c5,eb5] eb4 [g4,c5,eb5] eb4 [g4,c5,eb5] eb4 [g4,c5,eb5] eb4 ~ g3 c4 eb4 c4 [d4,f4] c4 [d4,f4] c4 [eb4,g4] c4, c2@35 ~@13, [g2,c3,eb3,g3]@24 [g2,c3]@11 ~@13]/2", // Cm Dm Eb Cm C5
  F: "[eb4,f4] ~ c4 [eb4,f4] c4 [eb4,f4] c4 [eb4,g4] c4 [eb4,a4] c4 [eb4,a4], [f2,c3,a3] ~@3", // Ebsus2 Eb Ebdim F
  G: "d3@2 d3 [g3,bb3] d3 [g3,bb3] ~ d3 [g3,c4] d3 [g3,c4] d3, [g2,bb3] ~ [a1,a2] ~", // Gm C5 Gm A
  H: "~ [g3,d4] d3 [g3,d4] d3 [g3,d4] ~ [bb3,f4] g3 [bb3,f4] g3 [bb3,f4], [bb1,bb2] ~ d2 ~, ~@13 bb2@5 ~@6, ~@7 f3@2 ~@3", // G5 Bb5 Bb
  I: "~ [eb4,g4,bb4] bb3 [eb4,g4,bb4] bb3 [eb4,g4,bb4] ~ [g4,bb4] bb3 [d4,g4,bb4] bb3 [d4,g4,bb4], eb2@3 ~@4 d4@2 ~@3, ~ bb2@5 ~@6 bb2@6 ~@6, ~@2 g3@4 ~@7 g3@5 ~@6", // Eb Gm
  J: "~ [d4,f4,a4] a3 [d4,f4,a4] a3 [d4,f4,a4] ~ [ab3,c4,f4,ab4] ab3 [c4,f4,ab4] ab3 [c4,f4,ab4], d2 ~ f2 ~, ~ a2@5 ~@7 c3@5 ~@6, ~ f3@2 ~@9", // Dm Fm
  K: "~@2 [eb4,ab4,c5] c4 [eb4,ab4,c5] c4 ~@2 [c4,eb4] g3 [c4,eb4] g3, ab2 ~ eb2 ~, [eb4,ab4,c5] c4@2 ~@3 [c4,eb4] g3@2 ~@3, ~ eb3@5 ~@7 c3@5 ~@6", // Ab Cm Ab Cm
  L: "~@2 eb4 c4 eb4 c4 [d4,f4] c4 [d4,f4] c4 [d4,f4] c4, ab2 ~@2 [d2,d3], ~ eb3@5 ~@18, ~ c4@2 ~@9", // Dm D
  M: "~@2 [d4,g4,bb4] bb3 [d4,g4,bb4] bb3 ~@2 [bb3,d4] f3 [bb3,d4] f3, g2 ~ d2 ~, [d4,g4,bb4] bb3@2 ~@3 [bb3,d4] f3@2 ~@3, ~ d3@5 ~@7 bb2@5 ~@6", // Gm Bb Gm Bb
  N: "~@2 d4 bb3 d4 bb3 [c4,eb4] bb3 [c4,eb4] bb3 [c4,eb4] bb3, g2 ~@2 [c2,c3], ~ d3@5 ~@18, ~ bb3@2 ~@9", // Cm C
  O: "~@2 [c4,f4,ab4] ab3 [c4,f4,ab4] ab3 ~ [d4,gb4] c4 [d4,gb4] c4 [d4,gb4], f2 ~ [d2,gb3] ~, [c4,f4,ab4] ab3@2 ~@9, ~ c3@5 ~@18", // Fm D Fm
  P: "bb3 [eb4,g4] bb3 [eb4,g4] bb3 [eb4,g4] ~ [eb4,g4] bb3 [eb4,f4] bb3 [eb4,f4], [eb2,bb2,g3] ~@3", // Eb Ebsus2 Eb
  Q: "bb3 eb4 bb3 eb4 bb3 eb4 [ab1,ab2] [b3,eb4] f3 [b3,eb4] f3 [b3,eb4]", R: "[a1,a2] c4 gb3 [c4,d4] ~@8",
  S: "[d2@2 [gb3,a3,d4]@2 [a3,d4]@2 gb3@2 [a3,d4]@2 [d3,gb3,a3]@2 a2@2 [a3,d4,gb4]@2 [d4,gb4]@2 a3@2 [d4,gb4]@2 [gb3,a3,d4]@2 d3@2 [d4,gb4,a4]@2 [gb4,a4]@2 d4@2 [gb4,a4]@2 [a3,d4,gb4]@2 gb3@2 [gb4,a4,d5]@2 [c2,g2,eb3,g4,c5,eb5]@4 [g3,c4,eb4,g4,c5,eb5]@2 [c5,eb5,g5]@4 [c5,eb5,g5]@2 [eb5,g5]@2 c5@2 [eb5,g5]@2 [eb4,g4,c5]@2 c4@2 ~@2 [b2,eb3,gb3,b3,b4,eb5,gb5,b5]@3 ~@3 [bb2,eb3,g3,bb3,c5,eb5,g5,c6]@2, ~@2 gb4@3 gb4@2 ~ a4@3 a4@2 ~ d5@3 d5@2 ~@4 [c4,eb4,g4]@6 ~@7, ~@13 c6@3 ~@2]/3", // D D5 D Gbm D Cm Eb Cm …
  T: "[~@4 [a2,d3,gb3,a3,d5,gb5,c6,d6]@3 ~@3 [ab2,c3,eb3,ab3,eb5,ab5,c6,eb6]@3 ~@3 [c5,eb5]@2 ab4@2 [c5,eb5]@2 ~@2 [c5,eb5]@2 ab4@2 [c5,eb5]@2 ab4@2 [c5,eb5]@2 ~@6 [ab4,c5,eb5]@2 eb4@2 [ab4,c5,eb5]@2 [ab4,c5,eb5]@2 eb4@2 [ab4,c5,eb5]@2 [ab4,c5,eb5]@2 eb4@2 [ab4,c5,eb5]@2 [ab4,c5,eb5]@3 ~@3 c4@2 eb4@2 c4@2 [d4,f4]@2, ~@22 eb4@12 [eb2,ab2,c3,eb3,g3]@24 [eb2,ab2,c3]@11 ~@3, ~@22 [f2,c3,ab3]@6 ~@6 ab1@35 ~@3]/3", // D7 Ab Cm Ab Dm Abmaj7 Ab Fm
  U: "c4@2 [d4,f4]@2 c4@2 [eb4,g4]@2 c4@2 [d2,a2,gb3,c4,d4,gb4,a4]@3 ~@3 c4@2 [d4,gb4]@2 c4@2 [d4,e4,g4]@2", // Dm Eb D7 D Em7
  V: "[bb3 [d4,e4,g4] c4 [d4,gb4,a4] c4 ~ bb3!2 [d4,g4,bb4] bb3 [d4,g4,bb4] ~ [g4,c5] c4 [g4,c5] c4 [g4,c5] ~ [g4,d5] d4 [g4,d5] d4 [g4,d5] ~ [bb4,d5] [f4,g4] [bb4,d5] [f4,g4] [bb4,d5] ~ [eb4,g4,c5,eb5] eb4 [g4,c5,eb5] eb4 [g4,c5,eb5] ~ [g4,bb4,d5] f4 [g4,bb4,d5] f4 [g4,bb4,d5] ~ g4 [bb4,eb5,g5] g4 [bb4,eb5,g5] g4 [g4,bb4,d5] d4 [g4,bb4,d5] d4 [g4,bb4,d5] d4 ~ [eb4,g4,bb4] bb3 [eb4,g4,bb4] bb3 [eb4,g4,bb4] eb4, ~@5 g2@3 ~@3 [a1,a2]@3 ~@3 [bb1,bb2]@3 ~@4 d4@2 ~@10 f3@2 ~@3 [bb4,eb5,g5] g3@2 ~@10 g3@2 ~@4, ~@10 [d4,g4,bb4]@2 ~@35 g3@5 ~@7 g3@5 ~@7 bb2@5 ~@7 bb2@5 ~@19 bb2@5 ~@8, ~@11 d3@5 ~@30 b2@6 ~@6 c3@6 ~@6 d2@6 ~@6 eb2@6 ~@6 [bb1,bb2]@6 ~@6 eb2@6 ~@8]/5", // Em7 D Gm C5 G5 Bb Fsus2 Bb …
  W: "[[g4,c5,eb5] eb4 [g4,c5,eb5] f4 [g4,c5,eb5] ~ f4 [ab4,db5,f5] f4 [ab4,db5,f5] f4 [f4,ab4,c5] c4 [f4,ab4,c5] c4 [f4,ab4,c5] c4 ~ [db4,f4,ab4] ab3 [db4,f4,ab4] ab3 [db4,f4,ab4] db4, ~@2 [a2,eb3,c4]@3 db2@3 ~@3 [ab1,ab2]@3 ~@3 [db2,ab2,f3]@3 ~@4, ~@5 [ab4,db5,f5] f3@2 ~@16, ~@11 ab2@5 ~@32]/2", // Cm Db Fm Db Adim Ab Db
  X: "[f4,bb4,db5] db4 [f4,bb4,db5] db4 [f4,bb4,db5] ~ eb4 [g4,c5,eb5] eb4 [g4,c5,eb5] eb4 ~, ~@2 [g1,g2]@3 c2@3 ~@4, ~@5 [g4,c5,eb5] eb3@2 ~@4, ~@11 g2@5 ~@8", // Bbm Cm G Cm
  Y: "[[eb4,ab4,c5] c4 [eb4,ab4,c5] c4 [eb4,ab4,c5] [f4,bb4,db5] db4 [f4,bb4,db5] db4 [f4,bb4,db5] db4 ~ [b3,eb4,f4,b4] b3 [db4,f4,b4] b3 [db4,f4,b4] c4 [eb4,c5] c4 [eb4,c5] c4 [eb4,c5] ~ [ab3,c4] eb3 [ab3,d4] eb3 [ab3,d4] [c2,c3,eb3] [ab3,eb4] eb3 [ab3,eb4] eb3 [ab3,eb4] ~, ~@2 [f2,f3]@3 [bb1,bb2]@3 ~@3 g2@3 ~@3 [ab2,eb3,ab3]@3 ~@3 [ab1,ab2]@3 [bb1,bb2]@3 ~@7, ~@23 f3@5 ~@44]/3", // Ab Bbm Fm7b5 Db7 Cm Ab Abdim Cm …
  Z: "eb4 bb3 [db2,db3,e4] a3 e4 [d2,d3,ab3] [b3,f4] ab3 [b3,f4] ab3 [b3,f4] ~", // Dbm Ddim Bdim
  AA: "f4@2 b3@2 [eb2,eb3,eb4,gb4]@2 bb3@2 [eb4,gb4]@2 [f2,f3]@2 eb4@2 bb3@2 [eb4,f4]@3 a3@2 [eb4,f4]@3", // Ebm F Ebsus2
  AB: "[ab2,e3]@5 ~@13 [a2,d3,gb3,c4]@5 ~, b3@3 ~@5", // Dbm D7
})).s("gm_piano").gain(0.35)

// chords · piano · "Piano II (orchestre)" · soft notes
const piano_soft_2 = note("<A ~@18 B C D@2 ~@21>".pickRestart({
  A: "~@2 [d3,gb3,a3]!2 ~ [gb3,a3] gb3 a2 [gb3,a3,d4] ~@3, ~@6 d2@11 ~@7, ~@3 a2@4 ~@5, ~ d4 ~@2, ~@8 d3@4 [d3,d4]@5 ~@7", // D Gbm D
  B: "~@4 gb3 [c4,d4] ~ [c4,d4] gb3 [bb1,bb2,bb3,db4] f3 [bb3,db4]", // Csus2 Bbm
  C: "[c2,c3]@2 bb3@2 ~ e3@2 [bb3,c4]@2 e3@2 ~ [bb3,c4]@2 [db2,ab2,f3,b3]@4 ~@6", // C Bbsus2 Db7
  D: "[~@13 [d3,gb3,a3]@3 [d3,gb3,a3]@2 ~@2 [gb3,a3]@2 [a2,d4]@5 ~@21, ~@2 d2 ~@3, ~@8 [a2,d4]@3 gb3 ~@12, ~@6 d3@3 ~@7]/2", // D Gbm D5
})).s("gm_piano").gain(0.2)

stack(piano, piano_soft, piano_2, piano_soft_2)