Strudelify

Ball-Traumerein Op.4

R. Schumann

KeyF majorTempo60 bpm
0:00/0:00
// Ball-Traumerein Op.4 — R. Schumann
// 60 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5916073; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 33 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(60/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 · violin · "Violin II"
const violin = note("<~ A B@3 A C D E A B@3 A C D E A F G H I J K L A B@3 A M N O>".pickRestart({
  A: "~ [a3,c4]@3", B: "[~@2 f4@8 e4@4 f4 e4 f4@2 [c4,e4]@4 ~@2, ~@7 c4@2 ~@3]/3", C: "~ [g4,a4]@3",
  D: "a4@3 ab4 g4 c5 e4 gb4", E: "f4 e4", F: "~@4 d4 gb4 a4@2", G: "g4@3 eb4 d4 g4 bb3 c4", H: "bb3 d4 g3 c4 bb3@2 ~@2",
  I: "~ [bb3,f4]@3", J: "~ d4 db4 e4 a4 db5 e5@2, f5 e5@2 ~", K: "d5@3 bb4 a4 d5 f4 g4", L: "f4 a4 d4 g4 f4@2 e4@2",
  M: "~ [g4,d5]@3", N: "f4@2 e4@4 ~ gb4, ~@3 d4", O: "[d4,g4] d4!2 ~ a3@4, ~ bb3 ~@2, ~@3 c4@5",
})).s("gm_violin").gain(0.15)

// other · viola
const viola = note("<~ A@2 B C D E F G A@2 B C D E F G D H@2 I J K@2 L A@2 B C D M@2 N>".pickRestart({
  A: "[~@2 c3@8 d4@4 c4 bb3, ~ f3@3 ~ f3@3]/2", B: "[f3,a3]@2 bb3 a3 g3@2 f3 g3", C: "a3 g3@2 ~", D: "~ [c3,f3]@3",
  E: "~ [a3,e4]@3", F: "[a3,f4]@3 c4@4 c4", G: "b3 g4 a3 b3 c4 ~@3", H: "[~ g3 gb3 a3 d4@7 gb3 g3@3 c4]/2",
  I: "bb3 d4 g3 a3@2 g3 ~@2", J: "~ [f3,d4]@3", K: "[~@4 a4@7 db5 d5@3 ~]/2", L: "~ a4 d4 [db4,e4] d4@2 c4@2",
  M: "[~@2 f4@8 bb3 a3 g3@2 g3 a3]/2", N: "bb3 g3 c3@2",
})).s("gm_viola").gain(0.15)

// other · cello · "Violoncello"
const cello = note("<~ A@2 B C D@2 E F A@2 B C D@2 E F G H I J K L M N A@2 B C O@2 P Q>".pickRestart({
  A: "[f2@5 bb2@3]/2", B: "c3@2 c3@4 a2 c3", C: "f3@2 c3 d3 c3 bb2 g2 a2", D: "[f2@5 db3@3]/2", E: "d3@3 f3 g3@3 a3",
  F: "g3@4 c3 d3 bb2 g2", G: "f2", H: "~ c3 d3@4 d3 f3", I: "g3@3 c3 d3@3 eb3", J: "d3@3 d3@2 g3 g2 a2", K: "bb2",
  L: "~ g3 a3@4 a3 db4", M: "d4@3 g3 a3@3 bb3", N: "a3@5 bb3@2 c3", O: "[f2@5 [b2,b3]@3]/2",
  P: "[c3,a3]@2 [c3,b3]@4 bb2 d3", Q: "g3@2 c3 c2 f2@4",
})).s("gm_cello").gain(0.15)

// bass · contrabass
const bass = note("<~ A@2 B C D@2 E F A@2 B C D@2 E F G H I J K ~@3 A@2 B C L@2 M N>".pickRestart({
  A: "[f1@5 bb1@3]/2", B: "c2@2 c2@4 a1 c2", C: "f2@2 c2 d2 c2 bb1 g1 a1", D: "[f1@5 db2@3]/2", E: "d2@3 f2 g2@3 a2",
  F: "g2@4 c2 d2 bb1 g1", G: "f1", H: "~ c2 d2@4 d2 f2", I: "g2@3 c2 d2@3 eb2", J: "d2@3 d2@2 g2 g1 a1", K: "bb1",
  L: "[f1@5 g2@3]/2", M: "c2@2 c2@4 bb1 d2", N: "g2@2 c3 c2 f1@4",
})).s("gm_contrabass").gain(0.15)

stack(violin, viola, cello, bass)