Strudelify

Adagio for Strings

Barber

KeyE♭ majorTempo50 bpm
0:00/0:00
// Adagio for Strings — Barber
// 50 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 3, 4/4 at bar 5, 6/4 at bar 15, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4324576; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(50/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.

// other · cello · "Cello 2"
const cello = note(`<
  A B C@2 D E F G H@2 I@2 J K L@2 M@2 N O@2 ~@4 P Q R S ~@3 T@4 U@3 V@2 W X Y Z AA@3 AB AC AD@2 AE@2 ~@3 S AF@2 AG AH@4
  AI@2 ~@4
>`.pickRestart({
  A: "~@2 f4@5 e4", B: "f4 g4 e4 f4 g4 f4 g4 ab4", C: "[f4 g4 ab4 f4 g4 ab4 g4@6 g4@4]/2", D: "f4@5 f4 g4 ab4",
  E: "f4 eb4 db4 c4 bb3 ab3 g3 ab3", F: "bb3 c4 db4 eb4 f4 eb4 c4 db4", G: "c4@2 ~ ab3", H: "[g3@10 c4@3 ~@3]/2",
  I: "[~@4 g3 g4 g4@4 gb4@4 ~@2]/2", J: "~@5 f4 ab4 g4", K: "eb4@3 eb4 f4@2 g4@2", L: "[ab4@3 g4 f4 g4 f4@3 ~@7]/2",
  M: "[~@4 g3@2 bb3@4 ab3@4 g3 f3]/2", N: "f3 bb3 ab3@2", O: "[~ db4 c4@3 ~@3]/2", P: "~@4 db4@3 c4",
  Q: "bb3 c4 bb3@3 ~@3", R: "eb3 gb3", S: "~@3 db4", T: "[ab3@22 g3@3 f3 e3@4 ~@2]/4",
  U: "[db4@2 c4@13 bb3@2 ab3 bb3@4 g3 g4]/3", V: "[g4@6 gb4@4 f4@5 f4]/2", W: "ab4 g4 eb4@3 eb4 f4@2",
  X: "g4@2 ab4@5 g4", Y: "f4 g4 f4@3 f4 eb4 f4", Z: "gb4 f4 eb4 db4 f4 bb4@2 bb4",
  AA: "[g4@4 c5@8 f4@5 e4 f4 g4 e4 f4 g4 f4]/3", AB: "g4 ab4 f4 g4 ab4 g4 ab4 bb4", AC: "g4@2 bb4 c5",
  AD: "[c5 db5@2 db5]/2", AE: "[b4@3 ~]/2", AF: "[c4@13 bb3@2 ab3]/2", AG: "bb3@3 ~", AH: "[eb4 db4@4 db4@8 c4@2 ~]/4",
  AI: "[db4 c4@6 ~]/2",
})).s("gm_cello").gain(0.25)

// other · cello · "Cello 2" · soft notes
const cello_soft = note("<~@29 A@2 B ~@21 C D E F ~@10 G@4>".pickRestart({
  A: "[c4@13 bb3@2 ab3]/2", B: "bb3 ~", C: "~@3 db4", D: "b3@3 b3", E: "a3@3 a3", F: "g3", G: "[ab3 g3@8 g3@4 ~@3]/4",
})).s("gm_cello").gain(0.15)

// other · cello · "Cello 3"
const cello_2 = note(`<
  ~@2 A@2 ~@4 B@2 C D@2 E F@2 ~@3 G H I@4 J@2 K L ~@3 M ~@5 N@4 O@2 P@2 E Q@2 R S@2 T@2 ~@3 U@2 V W@2 X Y Z@4 AA@3
>`.pickRestart({
  A: "[~@5 ab3 bb3@6 ~@2 g3@2]/2", B: "[c4@13 bb3@2 ab3]/2", C: "bb3 ~", D: "[bb3@9 a3 bb3 c4 a3 bb3 c4 bb3]/2",
  E: "c4 db4 bb3 c4 db4 c4 db4 eb4", F: "[c4@3 db3]/2", G: "bb3@5 ab3 bb3 c4", H: "ab3 bb3 c4 bb3 c4 db4 bb3 c4",
  I: "[db4 c4 db4 eb4 c4 gb4 gb4@6 f4@6 c4@2 bb3@5 bb3 db4 c4 ab3@3 ab3]/4", J: "[bb3@2 c4 bb3 f3@6 ~@3 bb3 ab3 bb3]/2",
  K: "b3 bb3 ab3 gb3 bb3@4", L: "a3@3 g3 f3 g3 ab3@2", M: "c3 ~@3", N: "[~@3 db4 db4@6 ~@4 c4@8 f3@4 g3@4 ab3@2]/4",
  O: "[bb3 c4@4 ab3@3]/2", P: "[db4@4 bb3@5 ab3 bb3 c4 ab3 bb3 c4 bb3]/2", Q: "[c4 ~ g4 f4@3 g4@2]/2", R: "~ c4 db4 f4",
  S: "[bb4 bb4@2 gb4]/2", T: "[gb4@3 ~]/2", U: "[~@4 f3@5 e3 f3 g3 e3 f3 g3 f3]/2", V: "g3 ab3 f3 g3 ab3 g3 ab3 bb3",
  W: "[g3@6 g3@4 f3@5 ab3]/2", X: "g3 f3 g3 ab3 bb3 c4 db4 c4", Y: "bb3 ab3 g3 f3 eb3 db3 f3 eb3",
  Z: "[c3 db3 c3@4 f3@5 e3 f3 g3 e3@8 f3@6 e3@2 f3@2]/4", AA: "[g3 e3@8 ~@3]/3",
})).s("gm_cello").gain(0.25)

// other · cello · "Cello 3" · soft notes
const cello_soft_2 = note("<A@2 B ~ C@3 D ~@21 E F ~ G@4 ~@2 H ~@14 I@3 J ~@14>".pickRestart({
  A: "[~ ab3@2 g3@5]/2", B: "[f3,c4]@2 c4 bb3@2 ~@3", C: "[ab3@5 g3]/3", D: "g3@2 ~ db4", E: "g3@5 g3 bb3 ab3", F: "f3",
  G: "[~ db3@4 bb2@8 ~@3]/4", H: "~@2 g3 ~@5", I: "[~@3 gb3@4 e3@4 gb3]/3", J: "d3 e3",
})).s("gm_cello").gain(0.15)

// other · cello · "Cello 4"
const cello_3 = note(`<
  ~@2 A@2 ~@4 B@2 C D@2 E F G@2 H I J ~@2 K L@4 M N@2 O P@2 Q R S T@3 U V@4 W X Y Z@2 AA AB@2 AC@2 ~@3 AD AE@2 AF AG@3
  AH AI@2 ~@4
>`.pickRestart({
  A: "[~@3 eb3@3 ~ ab2]/2", B: "[e3@5 f3@3]/2", C: "g3", D: "[c3@5 ~@3]/2", E: "~@2 bb3 eb3", F: "eb3@3 f3",
  G: "[c4@4 bb3@5 bb3 c4 db4 bb3 ab3 g3 f3]/2", H: "eb3 db3 c3 db3 eb3 f3 g3 ab3", I: "bb3 ab3 f3 g3 f3@4",
  J: "~ f3 e3@2", K: "~ bb3 a3 bb3 a3@4", L: "[~@2 c3@8 db3@3 db3@3]/4", M: "gb3@7 ~",
  N: "[~@4 f3@5 e3 f3 g3 e3 f3 g3 f3]/2", O: "g3 ab3 f3 g3 ab3 g3 ab3 bb3", P: "[g3@6 g3@4 f3@5 f3]/2",
  Q: "g3 ab3 f3 eb3 db3 c3 bb2 ab2", R: "g2 ab2 bb2 c3 db3 eb3 f3 eb3", S: "c3 db3 c3@4 ~@2",
  T: "[ab3 g3@5 ab3 f3@2 g3@2 ~]/3", U: "~ c4@2 ~", V: "[~ eb3@2 db3@2 c3@2 bb2@2 ab2@4 db3@3]/4", W: "gb3@4 db3 f3@3",
  X: "e3 f3", Y: "g3 ab3", Z: "[c3 db3@2 eb3]/2", AA: "f3@3 g3", AB: "[~ db4@2 bb3]/2", AC: "[b3@3 ~]/2", AD: "~@3 ab3",
  AE: "[g3@5 f3@3]/2", AF: "bb2@3 ~", AG: "[ab3@5 g3@7]/3", AH: "f3 e3@2 ~", AI: "[ab3 g3@6 ~]/2",
})).s("gm_cello").gain(0.25)

// other · cello · "Cello 4" · soft notes
const cello_soft_3 = note("<A@2 B ~ C@3 D ~@45 E F G H ~@10 I@4>".pickRestart({
  A: "[~ f3@2 e3@5]/2", B: "f3@3 ~", C: "f3/3", D: "e3@2 ~ f3", E: "~@3 f3", F: "eb3@3 eb3", G: "db3@3 db3", H: "b2 g2",
  I: "[f2 g2@8 g2@4 ~@3]/4",
})).s("gm_cello").gain(0.15)

// other · cello · "Cello 5"
const cello_4 = note(`<
  A@2 B@2 C D@2 E F@2 G@3 H I@2 J K@2 L M N O P@2 Q@2 R S T U V@2 W X Y Z@5 ~ AA@2 AB AC AD AE@2 AF AG@2 AH@2 AI AJ AK
  AL AM@2 AN AO@4 AP@2 AQ@4
>`.pickRestart({
  A: "[~ bb2@2 c3@5]/2", B: "[db3@3 eb3@3 ~ c3]/2", C: "db3", D: "bb2/2", E: "c3@2 ~ bb2", F: "[c2@5 db2@3]/2",
  G: "[eb2@5 db2]/3", H: "[c2,c3] bb2", I: "[ab2@3 db2@3 gb2@2]/2", J: "bb2 eb3", K: "[ab2 bb2@2 f2]/2",
  L: "~ bb2 c2@2", M: "db2 eb2", N: "f2@4 gb2@2 c2 eb3", O: "eb3", P: "eb2 f2", Q: "[eb2@2 bb2@3 gb2@3]/2",
  R: "b2@7 eb2", S: "f2@2 ~ bb2", T: "c2", U: "db2", V: "[eb2@6 g3@4 f3@5 f3]/2", W: "g3 ab3 f3 eb3 db3 c3 bb2 ab2",
  X: "g2 ab2 bb2 c3 db3 eb3 f3 eb3", Y: "c3 db3 c3@4 ~@2", Z: "[bb2 c3@4 db3@4 eb3@8 ~@3]/5", AA: "[~ ab2@4 db2@3]/2",
  AB: "gb2 ~", AC: "e2 f2", AD: "g2 ab2", AE: "[c2 db2@2 eb2]/2", AF: "f2@3 g2", AG: "[~ db3@2 bb2]/2",
  AH: "[b2@6 ~ bb2]/2", AI: "b2@3 ab2", AJ: "a2@3 gb2", AK: "g2 c2", AL: "~@3 bb2", AM: "[[c2,c3]@5 db2@3]/2",
  AN: "eb2@3 ~", AO: "[c2 db2@4 bb2@8 c3@2 ~]/4", AP: "[bb2 c3@6 ~]/2", AQ: "[bb2 c2@8 c2@4 ~@3, ~ c3 ~@14]/4",
})).s("gm_cello").gain(0.2)

stack(cello, cello_soft, cello_2, cello_soft_2, cello_3, cello_soft_3, cello_4)