Strudelify

5 Lieder Op.49

Johanes Brahms

KeyD majorTempo80 bpm
0:00/0:00
// 5 Lieder Op.49 — Johanes Brahms
// 80 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 2 "Harp" named as a string part, played on orchestral harp (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/4642626; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 87 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/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 · orchestral harp · "Harp"
const orchestral_harp = note(`<
  A@8 B@4 C D E@2 C F G@8 H@3 I J K@2 L M N O P Q R S T U V W X Y Z AA ~@3 AB AC AB AD AE AF AG AH AI AJ AK AE AL AM AN
  AO AP AQ AR AS AT@2 AU@2 AV AW AX AY AZ BA BB@2 ~@3
>`.pickRestart({
  A: "[~@7 d4 [f#3,f#4,a4]@2 ~@3 d4 [f#3,f#4,a4]@2 ~@31 [g4,b4], ~@5 [f#4,a4]@2 ~@4 [f#4,a4]@2 ~@4 [f#4,a4]@2 d4@2 a3@2 [f#4,a4]@2 d4@2 a3@2 [f#4,a4]@2 [d5,f#5]@2 [d5,f#5]@2 [d5,f#5]@2 [c#5,g5]@2 [g4,c#5]@2 [f#4,a4]@2 [e4,g4]@2 [a3,e4]@2 ~, ~@3 d2 ~ a2 d2 ~ a2 d2 f#3 a2 d2 f#3 a2 d2 a3 a2 d2 e3 a2 d2 e3 a2]/8", // F#m G F#m D C#dim Gdim F#m Em …
  B: "[~@19 [g4,b4] g3@2 ~ [g4,b4], d2 e3 a2 d2 a3 a2 d2 a3 d3 d2 ~ g2, ~@4 [e4,g4]@8 [a3,e4]@8 [g4,b4]@8 [e4,g4]@8 [g4,c#5]@8 [g4,e5]@8 [f#4,d5]@8 [f#4,a4]@8 [f#4,c5,d5]@8 ~@4 [b4,d5]@11 ~@5]/4", // G Em A5 G Em Gdim C D …
  C: "[f#4,a4] [d4,f#4] f#3@2 ~ [d4,f#4], d2@8 [f#4,a4]@11 ~@5, ~@2 a2", // F#m D F#m
  D: "[c#4,e4] [a3,c#4] [c#4,e4] [g3,b3] [c#4,e4] [f#3,a3], d2 e3 a2", // C#m A C#m G C#m F#m
  E: "[d2@2 f#3@2 ~@3 [g4,b4] g3@2 ~ [g4,b4], [d4,f#4]@15 ~ a2@8 d2@8 ~@8 a2@8, ~@20 [d4,c5,d5]@8 ~@4 [b4,d5]@11 ~@5]/2", // G D D7 Bm
  F: "[c#4,e4] a4 [d4,f#4] b4 [e4,g4] c#5, d2 a3 a2", // C#m D Em
  G: "[~ a2 d3 ~ f#3 ~ a3 ~@3 [d3,f#4,a4] ~@36 [g4,b4], [f#4,a4,d5]@15 ~@7 [f#4,a4]@4 d4@4 a3@4 [f#4,a4]@4 d4@4 a3@4 [f#4,a4]@4 [d5,f#5]@4 [d5,f#5]@4 [d5,f#5]@4 [c#5,g5]@4 [g4,c#5]@4 [f#4,a4]@4 [e4,g4]@4 [a3,e4]@4 [g4,b4]@4 [e4,g4]@4 [a3,e4]@4 ~@2, ~@6 d2 [d3,f#3] a2 d2 [d3,f#3] a2 d2 [d3,f#3] a2 d2 [e3,a3] a2 a1 [e3,c#4] a2 a1 [e3,c#4] a2]/8", // D G D F#m D C#dim Gdim F#m …
  H: "[~@13 [g4,b4] [d3,g3]@2 ~ [g4,b4], a1 [e3,a3] a2 d2 [f#3,a3] d3 [g1,g2] ~ g2, ~@4 [e4,g4]@8 [g4,c#5]@8 [g4,e5]@8 [f#4,d5]@8 [f#4,a4]@8 [f#4,c5,d5]@8 ~@4 [b4,d5]@11 ~@5]/3", // G G5 G A5 F#m G Em Gdim …
  I: "[f#4,a4] [d4,f#4] [d3,f#3]@2 ~ [d4,f#4], d2@2 [f#4,a4]@3 ~, ~@2 a2", // F#m D F#m
  J: "[c#4,e4] g4 [c#4,e4] a4 [c#4,e4] b4, d2 [e3,g3] a2", // C#m Em
  K: "[[d4,f#4] ~@4 d4 b4 [g4,b4] [g3,b3]@2 ~ [g4,b4], d2 [f#3,a3] d3 [g1,g2] ~ d3, ~@4 [d4,f#4]@8 [f#4,a4]@8 [c5,d5]@8 ~@4 [b4,d5]@11 ~@5]/2", // D G F#m G D F#m Csus2 Bm
  L: "[f#4,a4] [d4,f#4] [d3,f#3,a3]@2 ~ [d4,f#4], d2@8 [f#4,a4]@11 ~@5, ~@2 a2", // F#m D F#m
  M: "[c#4,e4] g4 [c#4,e4] a4 [c#4,e4] b4, a1@8 a2@15 ~, ~@2 c#3", // C#m
  N: "~@5 a#2@3 ~@5 a#2@3 ~@5 a#2@3, [f3,d4,f4]@3 a#3 ~@2", O: "~@5 a#2@3 ~@5 a#2@3 ~@5 a#2@3, [f3,d4,f4]@4 ~@6 d4 ~",
  P: "[a#3,d4,a#4]@4 ~ a#2@3 ~@5 f3@3 ~@5 d3@3", Q: "~@5 c3@3 ~@5 c3@3 ~@5 c3@3, ~ f4 a3",
  R: "~@5 f3@3 ~@5 f3@3 ~@5 d3@3, [g#3,c4] [g#3,c4,g#4] ~", S: "g3@5 g3@3 ~@3 d5@2 [g3,e5]@3 ~@5 g3@3, [d4,f4] ~ f5",
  T: "~@5 g#3@3 ~@5 g#3@3 ~@5 e3@3, [f4,f5] [e4,g#4,e5] [d4,g#4,d5]", // F E Ddim
  U: "[d4,d5]@4 ~ a3@3 ~@5 a3@3 ~@5 a3@3, g4@15 ~ [d5,a#5]@8, ~ [c#4,c#5] ~", // D Gm C#
  V: "~@5 a3@3 ~@3 c#5@2 [a3,d5]@3 [c#5,e5]@5 ~ [c#5,e5]@2, [c#5,a5]@10 ~@11 a2@3", // D5 C#m F#m
  W: "~@5 a#2@3 ~@5 a#3@3 ~@5 g#4@3, a#1, [g#4,d5]@5 ~@3", X: "~@5 c#3@3 ~@5 c#4@3 ~@5 a4@3, a1, [g3,c#4,g4]@11 ~@13",
  Y: "~@5 g3@3 ~@5 e4@3 ~@5 c#5@3, a2", Z: "~@5 a#2@3 ~@5 a#3@3 ~@5 g#4@3, a#1, [d4,g#4,d5]@5 ~@3",
  AA: "[g3,c#4,g4]@5 a2@3 c#3@4 ~@12", AB: "a4@3 b4@2 a4@3 b4@3 a4@2 b4@3 a4@3 b4@2 a4@3",
  AC: "b4@3 a4@2 b4@3 a4@3 b4@2 a4@3 b4@3 a4@2 b4@3",
  AD: "a1@3 a2@2 a1@3 a2@3 a1@2 a2@3 [a1,f#4]@3 ~@2 a1@3, [g4,c#5,e5]@16 ~@3 a2@3 ~@2, ~@5 a4", // D C#dim
  AE: "[d5,f#5]@3 a4@2 f#4@3 d4@3 a3@2 f#3@3 a3@3 a2@2 a1@3, a2@3 ~", // D
  AF: "[d5,f#5,a5]@3 a4@2 f#4@3 d4@3 a3@2 f#3@3 a3@3 a2@2 a1@3, a2@3 ~", // D
  AG: "[b4,g5]@3 d5@2 b4@3 g4@3 d4@2 b3@3 [g3,d4]@3 a2@2 a1@3, a2@3 ~", // Em G5
  AH: "[c#5,g5]@3 a4@2 g4@3 e4@3 c#4@2 a3@3 [g3,c#4]@3 a2@2 a1@3, a2@3 ~", // C#dim Gdim
  AI: "[a#4,c#5]@3 g4@2 e4@3 c#4@3 a#3@2 g3@3 a#3@3 a2@2 a1@3, a2@3 ~", // A#m
  AJ: "[b4,d5]@3 g4@2 e4@3 d4@3 b3@2 g3@3 b3@3 a2@2 a1@3, a2@3 ~", // Bm
  AK: "[a4,e5]@3 g4@2 e4@3 c#4@3 a3@2 g3@3 a3@3 a2@2 a1@3, a2@3 ~", // A5
  AL: "[g5,b5]@3 d5@2 b4@3 g4@3 a1@2 a2@3 ~@3 a2@2 a1@3, a2@5 ~@3 g4@4, ~@8 a1 g5@3, ~@17 [b4,d5]@7", // G Bm
  AM: "[d5,f#5]@3 a4@2 f#4@3 d4@3 a1@2 a2@3 ~@3 a2@2 a1@3, a2@5 ~@3 d4@4, ~@8 a1 d5@3, ~@17 [f#4,a4]@7", // D F#m
  AN: "[b4,c#5]@3 e5@2 g4@3 [a4,c#5]@3 e5@2 g4@3 [c#5,e5]@3 g5@2 g4@3, a2 [a1,a2]!2", // Bsus2 A C#m A
  AO: "[d5,f#5]@3 a4@2 f#4@3 d4@3 f#4@2 a4@3 d5@3 f#5@2 a5@3, [a1,a2]@23 ~", // D A
  AP: "[a#1,a#2]@8 d4@3 g2@2 a#2@3 ~ [f#4,a4]@7, ~@2 d4, ~@4 d3 ~", // A# F#m
  AQ: "[d2,a2]@8 d4@3 a2@2 d3@3 ~ [d4,f#4]@7, ~@2 a3, ~@4 f#3 ~", // D5 D
  AR: "[d#2,d#3,g3,a#3,g4]@8 ~@3 a#2@2 d#3@3 [a#3,d#4,a#4]@8, ~@2 [a3,a4]@2 g3 ~", // D# D#5 A
  AS: "[a#1,f2,a#2]@10 ~ a#1@2 f2@3 [a#2,d3,f3,d4,f4]@8, [a#3,d4,a#4]@5 ~@3", // A#5 A#
  AT: "[[e3,d4,e4]@10 ~ e3@2 a#3@3 d4@4 ~@4 g2@8 a2@8 [a#2,e3,d4,e4]@8, [g2,a#2,d3]@15 ~ d2@30 ~@2, ~@8 [e3,d4,e4]@5 ~@3]/2", // E7 Em7b5 Gm E7
  AU: "[[e3,e4]@23 ~ [f3,f4]@23 ~, [d2,b2,d4]@23 ~]/2", AV: "d2 a2 d3 f#3 a3@2, f#4@5 ~@3",
  AW: "g2 d3 b3@2 g3@2, d6@5 ~@3", AX: "d2 [f#3,a3] a2, a5@5 ~@3", AY: "[e2,g5] [g3,b3,a5] [e3,b5]",
  AZ: "f#5 ~@7 [f#3,a3]@15 ~, d2 ~@2, ~ a5@22 ~", BA: "~@2 [g3,b3], ~ g2 ~, ~@3 b4@2 ~",
  BB: "[[e3,b4]@2 ~@3 a4@2 ~@5, ~ d2 [f#3,a3] ~@3, ~@3 a4@2 ~@7]/2", // E5 F#m
})).s("gm_orchestral_harp").gain(0.3)

// chords · orchestral harp · "Harp" · soft notes
const orchestral_harp_soft = note(`<
  ~ A@2 B@2 ~@13 C D B@2 ~@13 E F G H I J K L M N O P N Q ~@6 R ~@12 S T ~@6 U V W ~@4 X@4
>`.pickRestart({
  A: "~ f#4 ~@4", B: "~ f#4@2 ~@3", C: "d2 ~@2 a2 ~ d3", D: "~ f#3 d3 a2 ~ a2",
  E: "a#1@3 f2@3 ~@2 f2@3 ~ d4@4 f2@3 a#1@3 ~@2, ~@11 a#1@3 ~@2 [a#3,d4]@8", // A#
  F: "a#1@3 f2@3 ~@2 f2@3 a#1@3 ~@2 [f2,a#3,d4]@3 ~ f4@2 ~@2, ~@19 a#1@3 ~@2", // A#
  G: "a#1@3 f2@3 ~@2 [f2,a#3,d4,a4]@3 a#2@3 ~@2 [d2,a#3,g4]@3 a#2@3 ~@2", // A#maj7 Gm
  H: "c2@3 f2@3 ~@2 f2@3 c2@3 ~@2 f2@3 c2@3 ~@2, [a3,e4]@5 ~@3, g4 ~@2", // A5
  I: "g#2@3 c3@3 ~@2 f2@3 c3@3 ~@2 d2@3 g#2@3 ~@2, ~@2 [g#3,c4,f4]", J: "g#2@3 d3@3 ~@2 d3@3 g2@3 ~@2 b2@3 g2@3 ~@2",
  K: "e2@3 b2@3 ~@2 b2@3 e2@3 ~@2 b2@3 e2@3 ~@2", L: "a2@3 e3@3 ~@2 e3@3 a2@3 ~@2 e3@3 a2@3 ~@2",
  M: "e3@3 c#3@3 ~@2 e3@3 a2@3 ~@2 e3@3 c#3@3 ~@2", N: "~@3 f2@3 ~@2 d3@3 f3@3 ~@2 d4@3 g#3@3 ~@2",
  O: "~@3 a2@3 ~@2 e3@3 a3@3 ~@2 e4@3 c#4@3 ~@2", P: "~@3 e3@3 ~@2 a#3@3 c#4@3 ~@2 g4@3 a#4@3 ~@2", Q: "a1 e2 ~@6",
  R: "~@2 d5", S: "[d5,g5]@3 a#4@2 g4@3 ~@10 d5@6", T: "[d5,f#5]@3 a4@2 f#4@3 ~@10 a4@6", U: "~@4 d5!2", V: "~@4 b5 g5",
  W: "~@4 f#5 d5",
  X: "[~@4 a4@4 [e2,b4]@10 ~@6 a4@5 ~@6 g4@5 d2@20 ~ [a2,d3,f#3]@20 ~@15, a2@8 ~@11 [a3,c#4]@10 a2@11 f#4@40 ~@16]/4", // E5 D A
})).s("gm_orchestral_harp").gain(0.15)

stack(orchestral_harp, orchestral_harp_soft)