Strudelify

From the Bohemian Forest Op.68

Antonín DvoÅák

KeyD♭ majorTempo52 bpm
0:00/0:00
// From the Bohemian Forest Op.68 — Antonín DvoÅák
// 52 bpm, 4/4, key Db 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 28, 4/4 at bar 29) 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/6363353; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 58 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(52/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 · "Grand Piano"
const piano = note("<A B C D E@2 F@2 ~@2 G H I J K L@2 M ~ N O P Q R S T@8 U V@6 ~@5 W X@8 Y@4>".pickRestart({
  A: "[db2,db3,f3] [ab2,db3,f3] [db2,db3,f3] [ab2,db3,f3]", // Db
  B: "[db2,db3,gb3] [gb2,db3,gb3] [db2,db3,gb3,bb3] [gb2,db3,gb3,bb3,db4]", // Gb5 Gb
  C: "~ [gb3,bb3] ~ [eb3,gb3], [db1,db2,db3,ab3,c4] [db1,db2,db3,f3,ab3]", // Gb Ebm Dbmaj7 Db
  D: "[gb3,bb3]@15 ~ [gb3,eb4]@8 [eb4,gb4]@4 [c4,eb4]@4, [db1,db2]", // Gb Ebm Cm Db
  E: "[f4 [db3,f3,f4] ~@2 [db2,eb5] [db3,f4,db5,f5] [bb2,db3,gb4,db5,gb5] [ab2,db3,ab4,db5,ab5], [db2,db4]@2 ab4@3 ~@3, ~ db2 ~@2, ~@3 [db3,f3,db5]@2 ~@3]/2", // Db Dbsus2 Db Gb Db5 Db
  F: "[[g2,eb3,bb4,db5]@2 [eb3,eb5]@2 ~ [ab4,c5] [e4,bb4,e5] [f4,ab4,f5] [g4,eb5] [f4,db5] ~ [bb3,g4] ~ [bb3,db4]@3, bb5@3 ~@5, ~@8 [g2,bb4,db5]@16 [db2,db3]@15 ~ [eb1,eb2,eb4,c5]@8 [ab1,ab2,ab4]@16, ~@2 [ab2,eb3,eb5] ~@3 ab3 ~]/2", // Eb7 Eb Ab Edim Fm Cm Db Eb …
  G: "~@2 [eb3,bb3,eb4,gb4]@2 b2@2 ~ a3, ~ [b1,gb2,eb3], ~@4 a3@3 ~, ~@3 [b2,gb3,b3]", // Ebm B B5
  H: "~@7 db4 ~@6 bb3@2, [e1,e2,db3] [gb1,gb2,b3], [e3,ab3]!2 ~ [db3,e3,ab3], ~ e4@3 ~@4, ~@3 eb4 ~ bb3@2 ~", // Dbm B5 E Dbm
  I: "~ [eb3,g3,eb4] ~ [eb3,g3], [g1,g2,bb3] [bb1,bb2,db4]", // Eb Gm Bbm
  J: "~@7 eb4 ~@6 c4@2, [c2,ab2,c3,eb3,gb3] [eb2,ab2,db4], ab3 [ab3,c4] eb3 [eb3,gb3,ab3,bb3], ~ gb4@3 ~@4, ~@3 f4 ~ c4@2 ~", // Ab7 Dbsus2 Ab Ebm
  K: "[db3,b3]@2 ~@5 b3, [db2,ab2,eb4]@7 eb4@6 db4@3, ~ [db3,ab3,b3,gb4] db2@2, ~@3 f4 ~ d4@3, ~@3 [db3,f3]", // Db7 Dbsus2 Dbsus4 Db
  L: "[bb3 [gb3,bb3] ~@3 [gb3,bb3] ~@3 [gb3,a3] ~@3 [gb3,a3] ~ [gb4,db5,gb5], [gb1,gb2]@2 [gb3,bb3] [f5,f6]@3 [gb3,bb3,db4] db6@6 [db3,ab4,db5,ab5] [gb3,a3,db4]@2, ~ [gb5,gb6]@6 db5@2 [b4,b5]@7, ~ db3@3 [gb1,gb2]@4 [gb1,gb2] db5 db4 db5 [gb1,gb2]@4, ~@2 db4@3 [db3,eb5,eb6]@3 ~ db3 [gb3,a3] [a4,a5]@5]/2", // Gb Gbm Gb5 Gb F Gb Db5 Gbm …
  M: "~ [ab1,ab2,ab4,f5,ab5], db5@3 ~, [ab1,ab2]@2 f5 [db2,db3]@4 ~, [f4,f5] [db4,f4]@2 ~, ~ ab3@4 ~@3", // Db Ab Db F Db
  N: "~@4 bb3 [ab3,eb5,eb6] ~ [f5,f6], ~@2 c3 [f2,f3,c4,gb5,gb6], ~@25 eb4@7", // Ab5 F
  O: "[bb1,bb2,eb5,eb6] [f3,bb3,db4,db5,db6] ~ [bb3,db5,db6] ~ [eb3,bb4,bb5] ~ [gb3,eb4,eb5], ~ [gb2,a3,eb5,eb6] [gb2,d3,c5,c6] [ab1,ab2,c3,ab4,ab5]", // Eb5 Bbm Eb5 Ebm Ebdim D7 Ab
  P: "[db1,db2]@6 ~@2 db1@6 ~@15 eb6@2 db6, [db4,f4,ab4,db5]@16 ~@2 e4@4 db5@2 e5 bb5@2 db6 e6@4, ~@3 db1 ~@3 db1 db1@8, ~@7 db2@8 db2@17, ~@5 bb4@3", // Db
  Q: "[db1,db2,f5,db6,f6]@6 db1 db2 db1@6 db1 ~@14 eb6@2 db6, ~@15 db2@7 db5@2 e5 bb5@2 db6 e6@4, ~ db1, ~@9 e4@7, ~@5 bb4@3", // Db
  R: "[db1,db2,f5,db6,f6]@6 db1 db2 db1@6 db1 ~@14 ab6@2 gb6, ~@15 db2@7 gb5@2 a5 d6@2 gb6 a6@4, ~ db1, ~@9 a4@7, ~@5 d5@3", // Db
  S: "~@5 f5@2 ~@6 db5@2 ab4 db6 ab5 ~ gb5 f5 ab5 ~ gb5 f5 eb5 [ab4,db5] eb5 db5 ab4 gb4 f4, [db1,db2]@11 f5 eb5@4 ~@16, f5 gb5@3 ~@4, ~ db6@15 ~@16, ~@3 ab5@4 eb5 f5 ab5@7 ~@16", // Db5 Db
  T: "[eb4 db4 f4 [db2,ab2,db3,ab3,db4]@4 ~@4 [db2,ab2,db3,ab3,eb4]@4 ~@3 ab3 e4@2 eb4@2 e4@2 ~ gb4@2 e4@2 ~ eb4@2 [ab1,ab2]@3 eb4@2 e4@2 [ab1,ab2]@3 ab3@2 gb3@2 ~ [e3,ab3]@2 [gb3,a3]@2 ~ [eb3,gb3]@2 [e3,ab3]@2 ~ [db3,e3]@2 [ab2,db3]@2 ~ e4@2 db4@2 ~ ab3@2 [eb2,ab2]@3 db4@2 ab3@2 ~ ab4@2 e4@2 ~ ab3@2 [gb3,eb4]@2 ~ [a3,db4]@2 a3@2 b2@3 b3@2 e4@2 ~ [b1,b2,eb4]@2 b3@2 ~ [b2,a3]@2 ~@6 b4!2 b4@5 b4!2 ~@13 b4@2 ab4@6 ab4 ab4@6 ab4!2 ~@12 gb4@2 ~ b4@5 b4!2 b4@6 b4!2 ~@12 b4@2 ab4@6 ab4!2 ab4@5 ab4!2 ~@13 gb4@2 [b3,e4,ab4]@3 [e3,ab3] ~ b3 ~ c3 ~@2 [gb3,ab3] ~ eb4 ~ db3 ~@2 [ab3,db4] ~ ab4@2 a4@2 ab4@2 ~ eb4@2 e4@2, ~@18 [db2,ab2,db3]@4 ~@4 [gb1,gb2]@4 ~@3 db4@2 ~@5 c4@7 ~@23 gb4@2 ~@20 ab3@2 ~@13 b4@6 ~@9 b4@5 b4@3 eb5@2 db5@5 ~@17 gb4@10 ~@25 eb5@7 ~@18 gb4@10 ~@19 g4@2 e4 ~@10, ~@40 a3@2 ~@6 [db1,db2,db4]@14 ~ [db2,ab2]@4 ~@11 [e2,db3]@4 ~@3 a2@7 ~@15 [e2,ab4]@15 [e2,a4]@15 [e2,b2,e3,b4]@15 [e1,e2,a3,eb4]@15 [e2,b2,ab3,e4,ab4]@15 [e2,b2,gb3,a4]@15 ~@14 [e1,e2,a3,eb4]@15 e2 ~@20 c3 ~ gb3 ~@2 ab3 ~ db3 ~, ~@108 [b2,ab3]@14 ~ [b2,gb3]@14 ~@22 a4@7 ~@16 b4@5 b4@5 db5@5 ~@14 ab4@5 ab4@5 ab4@5 ~@30, ~@125 bb4@12 ~@15 ab4@5 ab4@5 ab4@5 ~@17 bb4@12 [e2,b2,e3,e4,b4]@15 ~@8 a4@7 ~@30]/8", // Db5 Dbsus2 Ab E Gbm Ebm E Dbm …
  U: "ab3 ~@2 db4 ~ ab2 ~ b3 ~@2 d4 ~ a2 ~ eb4@2 ~ e4@2 gb4@2 e4@2 ~ b3@2 [a1,db4]@2 e2@2 a2@2, ~@14 db4@5 b3@5 ~@8, ~@14 e3 ~@2 a3 ~ ab2 ~ d3 ~@2 e3 ~@7", // A
  V: "[~ ab1@2 [e2,bb3]@2 [ab2,b3]@2 [a1,c4]@2 ~ [e2,db4]@2 a2@2 ab1@2 [e2,bb3]@2 [ab2,b3]@2 [a1,c4]@3 ~@2 a2@2 [bb1,e4]@2 [gb2,eb4]@2 [bb2,db4]@2 [b1,gb3]@2 gb2@2 b2@2 bb1@2 [gb2,c4]@2 [bb2,db4]@2 ~ [b1,d4]@2 ~@2 b2@2 bb1@2 ~ [bb2,db4]@2 [b1,d4]@2 ~@2 b2@2 [c2,gb4]@2 [ab2,f4]@2 [c3,eb4]@2 [db3,bb3]@3 [gb3,bb3]@3 ~@9 [bb3,db4]@2 ~@9 [eb3,gb3]@3 ~@9 c5@5 [gb4,c5,gb5]@3 [f1,gb4,bb4,db5,gb5]@3 f2@3 ~@3 [eb4,gb4,bb4]@3 gb1@3 gb2@3 bb3@3 [b3,b4]@2 b4@3 g2@3 ~@13 [g2,a3,db4]@7 ~@28, ~@23 e2@2 ~@23 gb2@2 ~@4 [gb2,c4]@2 ~@3 gb2@2 ~@8 gb4@9 gb5@3 [db2,db3]@11 [eb1,eb2]@9 gb5@11 ~@12 eb5@5 ~ db5@5 ~@57, ~@24 db4@3 ~@22 eb4@3 ~@8 eb4@3 ~@6 bb4@15 [gb3,eb5,eb6]@9 ~@2 gb5@3 [eb3,gb3,eb4]@6 [eb3,gb3,c4]@12 ~@5 f1@5 ~@7 gb1@5 g1@6 g1@5 ~ g1@14 ~@28, ~@69 db2@3 [db3,gb5]@3 [gb3,bb3,db4]@3 [f5,f6]@6 gb5@2 [bb3,db4,gb4]@3 [db5,db6]@12 [bb4,bb5]@14 ~@26 bb4@5 ~ a4@6 e4@7 ~@32, ~@72 gb6@17 gb5@6 [b4,b5]@9 ~@3 [ab4,ab5]@9 ~@2 [f4,bb4,db5,f5]@5 ~@4 e4@5 ~@6 [db4,e4]@11 ~ g2@7 ~@35]/6", // Edim Abm Am Dbm Edim Abm Am Bbdim …
  W: "~@8 [db3,f3,ab3]@4 ~ [gb3,bb3,eb4]@4 ~@3 [db1,db2,eb3,gb3,a3]@4 ~@4 [gb3,c4,eb4]@4, ~@3 db3 ~@4", // Db Ebm Ebm7b5 Cdim
  X: "[~@4 [db1,db2,f3,ab3]@4 ~@4 [f3,ab3,ab4]@4 ~@4 [gb1,gb2,eb3,a3]@4 [db3,gb3,bb3]@4 b1@3 ~@27 b4@2 ~@8 b1@4 ~@20 [c3,eb3,gb3,eb4]@8 gb4@4 gb4@8 ~@16 db4@4 [db2,db3,gb3,ab3,c4]@15 ~ [db2,db3,gb3,bb3]@8 [db2,a2,db3,e3,g3,a3]@8 db4@6 db4!2 db4@6 db4!2 [f3,db4]@3 [eb3,c4]@2 [f3,db4]@2 ~ [ab3,f4]@2 ~@4 db4 [db3,f3,db4]@2 ~ [eb4,ab4,c5]@2 [f4,ab4,db5]@2 ~ [ab4,c5,f5]@2 [ab3,gb4,c5,eb5]@3 db5 ~ [db4,f4,db5]@2 [eb5,ab5,c6]@2 [f5,ab5,db6]@2 [ab5,f6]@2 [ab4,gb5,eb6]@4 db6 [db4,ab4,db5,f5,ab5,db6]@33, ~@28 [bb3,d4]@11 b3@3 gb4@2 b3@3 gb4@3 b4@2 gb4@2 b4@2 gb5@4 ~ [eb4,gb4]@12 ~@39 f4@8 eb4@8 ~@60 c4@10 ~@18 c6@6 ~@34, ~@28 gb3@6 b2@26 b2@5 b2@2 gb2@6 ~@91 [db2,ab2,db3]@19 ~@8 [ab2,gb3,eb4]@7 ~@58, ~@31 gb2@29 ~@2 b3@10 ~@108 ab3@8 ~@68, ~@36 gb3@24 gb3@3 ~ gb3@9 ~@27 [db3,gb3,bb3]@15 ~ [db3,gb3,bb3]@8 [db3,gb3,bb3]@8 ~@32 f3@16 ~@76]/8", // Db Fm Ebdim Gb Cdim Dbsus4 Gb A7 …
  Y: "[~@6 [ab2,db3,ab3,db4,f4]@8 ~ [db3,db4,f4]@7 ~@2 f4@7 ~ [db3,db4,f4]@74 ~@22, ~@5 [db2,f3]@9 [db2,ab2,f3,ab3]@8 [db2,f3]@9 [db2,ab2,f3,ab3]@75 ~@22, ~@23 [ab2,db3,ab3,db4]@9 ~@96]/4", // Db Db5
})).s("gm_piano").gain(0.2)

// chords · piano · "Grand Piano" · soft notes
const piano_soft = note("<~@7 A B C D ~@6 E F G ~@19 H@4 I@3 ~@9 J@3>".pickRestart({
  A: "~@6 ab3 [d3,f3,ab3,b3], ~@3 c4", // Ddim
  B: "[bb2,eb3,gb3,bb3] [bb2,eb3,gb3,bb3,eb4] [eb2,bb2,eb3,gb3,bb3] [bb2,eb3,gb3,bb3,eb4], eb2 ~", // Ebm
  C: "[bb2,f3,ab3] [bb2,f3,ab3,d4,f4] [bb2,d3,ab3] [bb2,d3,ab3,bb3], [f2,d3] [f1,f2]", // Bb7 Dm F
  D: "[gb1,gb2,gb3] ~, [eb3,bb3] ~@3", E: "~@7 [db2,db3], ~@5 ab3@3, ~@3 [db4,f4,db5,db6]",
  F: "~ [gb3,bb3] ~ [db2,db3] ~ db3 ~ db3, [gb1,gb2,eb5,eb6]@2 [bb1,bb2,gb5,gb6] [ab1,ab2,ab5,ab6], ~ db3@2 ~@5, ~ [gb3,bb3,db4,f5,f6] ~@2", // Gb Db Ebm Ab Gbmaj7
  G: "g2 ~@2 [eb5,eb6]@2 ~@3, [g1,bb6] ~, bb5 [bb4,bb5] ~@2, ~ [g2,db3]@3 ~@4", // Eb Gm Bb Gdim
  H: "[~ a4@3 ab2@4 f3@4 ~@12 f3@4 ~@12 gb3@4 ~@8 bb2@4 [bb2,db3]@4 ~@4 [bb2,db3]@4 ~@8 db3@4 db3@4 ~@4 db3@4 ~@4 db3@4 db1@4 db2@4 [f1,f4,f5]@4 [e4,e5]@4 [db1,eb4,eb5]@4 [db2,c4,c5]@4 [f1,a3,a4]@4, ~ [ab1,f4,ab4]@4 [ab1,ab2]@3 [a4,a5]@4 [ab4,ab5]@3 ~ [f4,f5]@5 ~ [ab4,ab5]@3 ~@7, ~ ab3@2 [f3,ab3]@2 ~ [db3,bb4,bb5]@3 [gb1,gb2]@4 bb1@2 [ab1,ab2]@2 [gb1,gb2]@4 [f1,f2]@2 [eb1,eb2]@2 ~@7, ~@2 [ab2,db5,db6]@3 ~@2 [f3,db4]@2 ~ [db3,bb4,bb5]@3 ~@7 [bb4,bb5]@3 ~@9, ~@4 [c5,c6]@5 ~@2 [gb3,db4]@2 ~ [gb4,gb5]@3 ~ [eb4,eb5]@3 ~@3 [gb4,gb5]@3 ~@5]/4", // Bbm F E Dbsus2 Dbmaj7 F Db Ab …
  I: "[~ [ab3,ab4] ~@2 f3@2 [f3,ab3]@4 ~@2 f3@2 [f3,b3,db4]@4 ~@2 gb3@2 [gb3,bb3,db4]@4 ~@2 gb3@2 [gb3,bb3,db4]@4 [db1,db2]@2 ~@12, ~ [db1,db2,f4,ab4]@4 [db1,db2]@4 [db1,db2]@4 [db1,db2]@4 ~@7, ~ ab3@2 ~@21, ~@2 db3@3 ~ db3@3 ~ db3@3 ~ db3@3 ~@7]/3", // Ab Fm Db7 Gb Db
  J: "[~@8 db1@29 ~@11]/3",
})).s("gm_piano").gain(0.05)

stack(piano, piano_soft)

More by Antonín DvoÅák