Strudelify

Adagio for Strings, Opus 11

Barber Samuel

KeyB♭ minorTempo67 bpm
0:00/0:00
// Adagio for Strings, Opus 11 — Barber Samuel
// 67 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: ch 1 "1stViolin" named as a string part, played on violin (its piano patch is not one); ch 2 "2ndViolin" named as a string part, played on violin (its piano patch is not one); ch 3 "Violas" named as a string part, played on string ensemble 1 (its piano patch is not one); ch 4 "Cellos" named as a string part, played on cello (its piano patch is not one)
// note: Full arrangement: all 145 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/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 · "2ndViolin"
const violin = note(`<
  ~ A B@4 C@2 D@8 E@6 F@3 ~@3 G@4 ~@2 H@3 I@5 ~@13 J@3 K@5 L@2 M@8 N@4 O@2 P@6 Q@7 R S T U@5 V@4 W@5 X Y@2 Z@2 AA@2 ~
  AB@6 AC@8 ~ AD@5 AE@8
>`.pickRestart({
  A: "[bb3,gb4]", B: "[a3@10 ~@3 eb4@2 db4, f4@13 ~@3, ~@5 bb3@3]/4", C: "[[c4,eb4]@3 ~]/2",
  D: "[~ [db4,ab4]@2 db4@20 c4@4 c4@4 ~, ~@3 gb4@24 ~@5]/8", // Db5
  E: "[~@3 [bb3,gb4]@2 a3@10 ~@3 eb4@2 db4 eb4@3, ~@5 f4@13 ~@6, ~@5 bb3@2 ~]/6", F: "[~ c4 c5 c5@4 b4@4 ~]/3",
  G: "[~ eb4@2 ab3@8 bb3@2 ~@3]/4", H: "[~ c4@2 eb4@4 db4@4 c4]/3",
  I: "[bb3 bb3@2 eb4@2 db4@4 ~@2 [bb3,gb4]@2 f4@6 ~, ~@13 a3@4 ~@3]/5", J: "[~ ab3@4 b3@4 bb3@3]/3",
  K: "[~@3 gb4@2 f4@13 eb4@2]/5", L: "[db4 eb4@4 ab4@3]/2",
  M: "[~ ab4@2 ~@20 c4@3 bb3 [a3,f4]@4 ~, ~@4 db4@89 ~@35, ~@12 gb4@97 ~@19]/8", N: "[~ gb4@2 f4@13]/4",
  O: "[eb4@2 db4 c4@4 c4]/2", P: "[c5 c5@6 f4@8 bb3@4 c4@4 db4]/6",
  Q: "[~ eb4@2 [ab3,f4]@8 db4@6 b3@4 eb4@5 db4 eb4]/7", R: "f4 db4 eb4 f4", S: "eb4 f4 gb4 eb4", T: "f4 gb4 f4 gb4",
  U: "[ab4 ~@8 eb5@4 [f5,c6]@4 ab5@2 bb5, ~ f5@4 db5@4 ~@11, ~@3 c6@4 bb5@6 ~@4 c6@3]/5", // F5
  V: "[~ [gb5,db6]@2 eb6@2 f6@4 gb6@7, ~@12 bb5@25 ~@27]/4", W: "[~ [b5,gb6]@4 [b5,e6]@12 ~@3]/5", X: "~ [bb3,gb4]",
  Y: "[[ab3,e4]@3 [ab3,e4]]/2", Z: "[[a3,d4]@3 [d4,gb4]]/2", AA: "[g3 a3, c4]/2",
  AB: "[[db4,gb4]@2 c4@10 ~@3 eb4@2 db4 [c4,eb4]@6, ~@2 f4@13 ~@9, ~@48 bb3@25 ~@23]/6", // Gb5 Cm
  AC: "[~@3 ab4@2 ~@8 c4@14 bb3@2 [a3,f4]@3, ~@3 db4@10 ~@19, ~@5 gb4@24 ~@3]/8", AD: "[[db4,gb4]@9 [c4,f4]@66 ~@5]/5",
  AE: "[~@2 gb4@8 f4@71 ~ f4@36 ~@10]/8",
})).s("gm_violin").gain(0.14)

// other · string ensemble 1 · "Violas"
const string_ensemble_1 = note(`<
  ~ A B@4 C@2 D@8 E@7 F@3 G H I J@5 K L M N O@3 P H I Q@6 R S@2 T@2 U V@2 W@7 X@8 Y@4 Z@8 AA@6 AB@5 AC AD AE AF@5 AG@5
  AH AI@2 AJ@2 AK AL AM@2 AN AO AP AQ@2 AR@3 AS AT AU AV AW@7 AX@8
>`.pickRestart({
  A: "db4", B: "[c4@5 bb3@3]/4", C: "[c4@3 ~]/2", D: "[~ c4@2 bb3@24 a3@4 ~]/8", E: "[~@3 db4@2 c4@10 bb3@6 c4@7]/7",
  F: "[~ eb4@9 d4 eb4]/3", G: "f4 d4 eb4 f4", H: "eb4 f4 gb4 eb4", I: "f4 gb4 f4 gb4",
  J: "[ab4 f4@8 f4@4 eb4@5 eb4 f4]/5", K: "gb4 eb4 db4 c4", L: "bb3 ab3 gb3 f3", M: "gb3 ab3 bb3 c4",
  N: "db4 eb4 db4 bb3", O: "[c4 bb3@4 eb4@5 db4 eb4]/3", P: "f4 db4 eb4 f4",
  Q: "[ab4 f4 c5 c5@6 bb4@6 f4@2 eb4@5 eb4 gb4]/6", R: "f4 db4@3", S: "[db4 eb4@2 f4@2 gb4@3]/2",
  T: "[f4 eb4 f4 eb4@3 eb4 db4]/2", U: "eb4 e4 eb4 db4", V: "[b3 eb4@4 d4@3]/2",
  W: "[c4 bb3 c4 [eb3,db4]@2 c4@5 c4 eb4 db4 [gb3,bb3]@8 ab3@4 ~@3, ~@5 f3@8 ~@15]/7", // Eb7 Gb
  X: "[~ f3@2 gb3@8 eb3@16 f3@4 ~]/8", Y: "[~ [eb3,db4]@2 f3@8 ~@2 db4@2 bb3, ~@3 c4@10 ~@3, ~@11 gb3@5]/4",
  Z: "[~@3 ab3@20 gb3@4 f3@4 eb3, ~@3 eb4@8 ~@21]/8", AA: "[~@3 db3@8 gb3@6 gb4@5 eb5@2]/6",
  AB: "[eb5 c5@4 f5@8 bb4@5 a4 bb4]/5", AC: "c5 a4 bb4 c5", AD: "bb4 c5 db5 bb4", AE: "c5 db5 c5 db5",
  AF: "[eb5 c5@2 f5@2 db5@2 eb5@2 f5@4 db6@7]/5", AG: "[~ [gb5,bb5]@4 ab5@12 ~@3]/5", AH: "~ [gb3,b3]",
  AI: "[[e3,b3]@3 [e3,a3]]/2", AJ: "[[gb3,a3]@3 [gb3,b3]]/2", AK: "e3", AL: "[c3,f3]", AM: "[~@2 bb3@5 a3]/2",
  AN: "bb3 c4 a3 bb3", AO: "c4 bb3 c4 db4", AP: "bb3 c4 db4 c4", AQ: "[db4 eb4 c4@6]/2", AR: "[~ c4@4 bb3@5 db4 c4]/3",
  AS: "bb3 c4 db4 eb4", AT: "f4 gb4 f4 eb4", AU: "db4 c4 bb3 ab3", AV: "gb3 bb3 ab3 f3",
  AW: "[gb3@4 f3@16 ~@4 bb3@21 a3@7 bb3@7 c4@6 a3@41 ~@6]/7", AX: "[~@2 db4@8 c4@71 ~ c4@36 ~@10]/8",
})).s("gm_string_ensemble_1").gain(0.2)

// other · cello · "Cellos"
const cello = note(`<
  ~ A B@4 C@2 D@8 E@7 F@6 G@7 H@8 I J@3 K@7 L@2 M@3 N O P Q@4 O R S T U@3 V W X Y Z@5 AA@4 AB@2 AC AD@8 AE@6 AF@5 AG
  AH@2 AI@2 AJ AK ~ AL@3 AM@3 AN@7 AO@2 AP@5 AQ@5 AR@3
>`.pickRestart({
  A: "eb2", B: "[f2@5 gb2@3]/4", C: "[ab2@3 ~]/2", D: "[~ [f2,db3]@2 [gb2,db3]@8 [eb2,bb2]@16 [f2,c3]@4 ~]/8",
  E: "[~@3 eb2@2 f2@10 gb2@6 ab2@7]/7", F: "[~ ab2@12 gb2@4 f2@4 eb2@3, ~ f3@10 ~@13]/6",
  G: "[~ db2@6 gb2@6 b2@4 eb2@4 [ab2,eb3]@4 db2@3, ~@13 gb3@8 ~@7]/7", // Ab5
  H: "[~ eb2@8 bb2@4 ~@2 eb2@2 f2@4 gb2@4 ab2@4 bb2@3]/8", I: "~ b2@2 f2", J: "[ab3 ab3@8 ab2@3]/3",
  K: "[~ g2@4 ab2@4 bb2@4 gb3@2 ab3@2 [eb2,bb2,gb3]@6 [b2,gb3]@5, ~ f3@12 ab2@4 ~@11]/7", L: "[~ b2@7, ~ e2@4 ~@3]/2",
  M: "[ab2 bb2@4 bb3@5 a3 bb3]/3", N: "c4 a3 bb3 c4", O: "bb3 c4 db4 bb3", P: "c4 db4 c4 db4",
  Q: "[eb4@4 c4@23 ~ c4@16 bb3@19 ~]/4", R: "ab3 gb3 f3 eb3", S: "db3 c3 db3 eb3", T: "f3 gb3 ab3 bb3",
  U: "[ab3@4 f3@4 gb3@4 f3@11 ~@5 bb3@20]/3", V: "a3 bb3 c4 a3", W: "bb3 c4 bb3 c4", X: "db4 bb3 c4 db4",
  Y: "c4 db4 eb4 c4", Z: "[gb4@4 gb4@24 f4@16 b4@16 bb4@19 ~]/5", AA: "[bb4 db5 c5 ab4@3 ab4 bb4@2 c5@2 db5@5]/4",
  AB: "[c5 bb4 c5 bb4@3 bb4 ab4]/2", AC: "bb4 b4 bb4 ab4", AD: "[gb4 bb4@4 a4@4 bb4@4 c5@4 db5@4 f4@4 gb4@7]/8",
  AE: "[~ ab4@4 bb4@6 c5@2 db5@4 gb5@7]/6", AF: "[~@4 eb5@16 e5@47 ~@13]/5", AG: "~ [eb2,b2]",
  AH: "[[e2,b2]@3 [db2,a2]]/2", AI: "[[d2,a2]@3 [b2,d3]]/2", AJ: "[c2,g2]", AK: "f2",
  AL: "[[eb2,bb2]@8 [f2,c3]@39 ~]/3", AM: "[[gb2,db3] [ab2,eb3]]/3",
  AN: "[~@12 [f2,db3]@8 [gb2,db3]@31 ~ [eb2,bb2]@60]/7", AO: "[~ [f2,c3]@4 ~@3]/2",
  AP: "[[eb2,bb2]@9 [f2,c3]@65 eb2@6]/5", AQ: "[~ f2@7]/5", AR: "[~@2 f2@35 ~@11]/3",
})).s("gm_cello").gain(0.2)

// bass · piano · "Contrbass"
const bass = note("<~ A B@4 C@2 D@8 E@5 F@8 G@7 H@4 ~@69 I J@2 K@2 L M ~ N@3 O@3 P@8 ~ Q@5 R@8>".pickRestart({
  A: "eb1", B: "[f1@5 gb1@3]/4", C: "[ab1@3 ~]/2", D: "[~ f1@2 gb1@8 eb1@16 f1@4 ~]/8", E: "[~@3 eb1@2 f1@10 gb1@5]/5",
  F: "[~ ab1@20 gb1@4 f2@4 eb2@3]/8", G: "[~ db2@6 gb1@6 b1@4 eb2@4 ab1@4 db1@3]/7", H: "[~ eb1@8 bb1@4 ~@3]/4",
  I: "~ eb2", J: "[e2@3 db2]/2", K: "[d2@3 b1]/2", L: "c2", M: "f1", N: "[eb1 f1@5]/3", O: "[gb1 ab1]/3",
  P: "[~@3 f1@2 gb1@8 eb2@16 f2@3]/8", Q: "[eb2@9 f2@66 ~@5]/5", R: "[~ eb1@9 f1@71 ~ f1@36 ~@10]/8",
})).s("gm_piano").gain(0.1)

stack(violin, string_ensemble_1, cello, bass)