Strudelify

Song of Durin for Tuba Quartet

Clamavi de Profundis

KeyD♭ majorTempo90 bpm
0:00/0:00
// Song of Durin for Tuba Quartet — Clamavi de Profundis
// 90 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, 6/8 at bar 42, 6/4 at bar 71, 4/4 at bar 73) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5634108; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 110 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · tuba · "Euphonium"
const tuba = note(`<
  ~@13 A B C@2 D E F G@2 H E ~@4 I J K L I J K J E M N O P Q@2 R S@2 T@3 U V@7 W@3 X@2 Y@8 I Z@4 AA@5 AB AC AD@8 AE@8
  AF@5 AG AH@6
>`.pickRestart({
  A: "f3", B: "db4", C: "[bb3 c4 c4@4 db4@2]/2", D: "db4!2", E: "c4", F: "ab4 gb4 f4 db4", G: "[gb4 f4 eb4@4 eb4@2]/2",
  H: "f4@2 db4 eb4", I: "bb3", J: "ab3", K: "gb3", L: "ab3 c4", M: "bb3!2", N: "ab3!2", O: "bb3@2 bb3 db4",
  P: "c4 db4 bb3@2", Q: "[~@23 bb3@5 f4@9 db4@5 db4@9 bb3@4 db4@9]/2", R: "~ f4@4 eb4@9 db4@5 db4@9 db4@4",
  S: "[~ c4@9 ab3@5 bb3@9 db4@5 c4@9 ab3@4 bb3@9 ~ c4@4 db4@8]/2",
  T: "[~@2 bb3@4 db4@9 eb4@5 f4@9 db4@5 gb4@9 gb4@5 f4@9 ab4@5 bb4@9 f4@4 ab4@9 ~ bb3@4 db4@7]/3",
  U: "~@2 bb3@5 bb3@9 db4@5 f4@9 eb4@2",
  V: "[db4@2 ~ db4@4 c4@5 db4@5 eb4@9 f4@4 bb3@9 ~ ab3@4 db4@9 ~ c4@4 ab3@9 f4@5 f4@5 eb4@4 db4@5 eb4@9 db4@5 f4@9 db4@5 bb3@9 gb3@4 gb3@9 ~ bb3@4 c4@7 f3@7 f3@9 ab3@5 bb3@14 bb3@27 bb3@9 ~ ab3@4]/7",
  W: "[bb3@14 ab3@9 bb3@5 c4@14 db4@9 bb3@5 bb3@14 f4@4 eb4@5 db4@4 c4@13]/3",
  X: "[~ db4@14 bb3@14 db4@9 eb4@5 f4@9 db4@5 gb4@7]/2",
  Y: "[~@2 gb4@4 f4@9 ~ eb4@4 db4@9 ~ bb3@4 ab3@14 bb3@14 bb3@14 db4@14 c4@13 bb3@14 db4@14 bb3@9 db4@5 eb4@14 f4@4 eb4@5 db4@5 eb4@9 db4@4 f4@9 ~ db4@4 bb3@9 ~ gb3@4 gb3@9 bb3@5 c4@9 f3@5 db4@14]/8",
  Z: "[bb3@37 c4@37 gb3@18 f3@18 gb3@9 f3@9]/4",
  AA: "[f3@9 gb3@9 ab3@9 f3@9 eb3@9 f3@9 f3@9 ab3@9 bb3@9 f3@9 ab3@36 f3@4 bb3@4 ~ f3@4 db3@4 ~ eb3@9 ab3@7]/5",
  AB: "~ f3@9 db3@6", AC: "~@3 db3@9 eb3@4",
  AD: "[~@10 f3@9 eb3@9 f3@18 db4@32 c4@32 db4@32 eb4@32 db4@32 c4@32 db4@18]/8",
  AE: "[~@7 c4@16 db4@16 db4@16 bb3@4 c4@4 c4@16 db4@8 db4@8 db4@8 c4@16 ab4@4 gb4@4 f4]/8",
  AF: "[~@6 db4@8 gb4@8 f4@8 eb4@32 eb4@16 f4@16 db4@8 eb4@8 c4@33 db4@17]/5", AG: "~ db4@9 c4@9 c4@9 db4@4",
  AH: "[c4@4 ~ bb3@36 db4@18 f4@9 eb4@9 db4@9 c4@9 bb3@72 ~@25]/6",
})).s("gm_tuba").gain(0.25)

// bass · tuba · "F Tuba"
const bass = note(`<
  ~@13 A B C D E F G H@2 I J K L M N O P Q R S T U V W X Y Z AA AB ~@29 AC@2 AD@2 AE@5 AF AG AH@8 AI@8 AJ@5 AK@7
>`.pickRestart({
  A: "bb2@3 bb2", B: "db3@3 bb2 db3@2 f3@2", C: "bb3 c4 ab3@2", D: "~@2 f3@2 bb3@3 ab3", E: "f3 db3 gb3 ab3",
  F: "eb3@3 eb3", G: "db3@3 db3 db3@2 ab3@2", H: "[gb3@2 f3 db3 eb3@8 gb3@4]/2", I: "f3 ab3 bb3@2", J: "ab3@3 f3",
  K: "f3 eb3@2 db3 eb3@3 db3", L: "f3 db3 bb2@2", M: "gb2 f2", N: "ab2 bb2", O: "~@2 bb2@2 f3 eb3 db3@2",
  P: "eb3@3 db3 f3@2 db3@2", Q: "bb2@3 gb2 gb2@2 bb2@2", R: "c3@3 f2 f2@2 ab2@2", S: "bb2@2 bb2@2 f3 eb3 db3@2",
  T: "eb3 c3 eb3 ab3", U: "gb3!2 f3 eb3", V: "f3@3 eb3 db3@2 bb2@2", W: "ab2@3 bb2", X: "db3!2 bb2 db3",
  Y: "eb3@2 db3@2 f3@3 f3", Z: "gb3 f3 eb3 db3", AA: "c3 ab2 bb2@2", AB: "f3@7 ~", AC: "[db3@37 eb3@27]/2",
  AD: "[~ bb2@9 db3@9 bb2@9 db3@9 f3@9 bb3@9 c4@9]/2",
  AE: "[ab3@18 ~@9 f3@9 bb3@13 ab3@4 ~ f3@9 db3@9 gb3@9 ab3@9 eb3@27 f3@9 f3@9 db3@9 eb3@13 db3@3]/5",
  AF: "~@2 f3@9 db3@9 bb2@12", AG: "~ gb2@4 ~ gb2@9 bb2@9 c3@8",
  AH: "[~ f2@9 f2@9 ab2@9 bb2@18 bb2@32 c3@32 db3@32 eb3@16 f3@16 bb2@32 c3@32 db3@18]/8",
  AI: "[~@3 gb3@2 f3@2 eb3@16 bb2@12 bb2@4 db3@6 bb2@2 db3@4 f3@4 bb3@4 c4@4 ab3@8 ~@4 f3@4 bb3@6 ab3@2 f3@4 db3@4 gb3@4 ab3@4 eb3@12 eb3@4 db3@6 db3@2 db3]/8",
  AJ: "[~@6 ab3@8 gb3@8 f3@4 db3@4 eb3@32 gb3@16 f3@8 ab3@8 bb3@16 ab3@24 f3@9 f3@4 eb3@9 db3@4]/5",
  AK: "[~ eb3@13 db3@4 ~ f3@9 db3@9 gb3@36 gb2@18 ab2@18 ab2@18 bb2@72 ~@25]/7",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "F Tuba" · soft notes
const bass_soft = note("<A@2 B C D@2 E F G D H I J ~@28 K@3 L@3 M@3 N@7 O@3 P@3 Q@7 D ~@39>".pickRestart({
  A: "f3/2", B: "eb3 f3@6 db3", C: "eb3@6 db3 c3", D: "bb2", E: "ab2", F: "gb2", G: "f2", H: "c3", I: "db3", J: "eb3",
  K: "[~@28 f3@14 gb3@13 f3@14 eb3@14 f3@13]/3", L: "[~ eb3@14 db3@14 eb3@13 f3@14 db3@14 f3@14 ab3@12]/3",
  M: "[~@2 bb3@14 ab3@14 f3@13 eb3@14 f3@14 gb3@14 ab3@11]/3",
  N: "[~@3 ab3@14 bb3@13 db3@14 f3@14 eb3@14 f3@14 eb3@14 db3@14 db3@13 eb3@14 f3@14 f3@14 f3@14 f3@27 f3@14]/7",
  O: "[gb3@14 db3@14 eb3@14 f3@14 gb3@14 f3@13 eb3@13]/3", P: "[~ f3@14 db3@14 f3@14 ab3@14 bb3@13 ab3@14 f3@12]/3",
  Q: "[~@2 eb3@14 f3@14 gb3@14 ab3@14 ab3@13 bb3@14 db3@14 f3@14 eb3@14 f3@14 eb3@13 db3@14 db3@14 eb3@14 f3@14 f2@7 ab2@7]/7",
})).s("gm_tuba").gain(0.15)

// bass · tuba · "C Tuba"
const bass_2 = note(`<
  A@2 B C D E F G H I J K L D@2 M@2 N O P Q@2 R C S T U V W X Y Z W X AA AB AA AC AD AE AF AG ~@29 AH@2 ~@10 AI@5 AJ@8
  AK@7 AL@2 AM@5
>`.pickRestart({
  A: "bb2/2", B: "db3", C: "ab2", D: "bb2", E: "~@2 bb2@2 f3 eb3 db3@2", F: "eb3@3 db3 f3@2 db3@2",
  G: "bb2@3 gb2 gb2@2 bb2@2", H: "c3@3 f2 f2@2 ab2@2", I: "bb2@3 bb2 f3 eb3 db3@2", J: "eb3@3 c3 eb3@2 ab3@2",
  K: "f3!2 gb3 f3", L: "eb3@3 db3 c3@2 ab2@2", M: "[gb2 ab2@2 bb2]/2", N: "db3@2 gb2 db3", O: "ab2@3 f2",
  P: "gb2@3 ab2 bb2@2 db3@2", Q: "[eb3 db3 ab2@4 eb2@2]/2", R: "f2 gb2", S: "bb2 ab2", T: "ab2@4 gb2@2 ~ gb2",
  U: "gb2 bb2 c3 f2", V: "f2 ab2 bb2@2", W: "bb1", X: "ab1", Y: "gb1", Z: "ab1@4 f2 eb2 db2 c2", AA: "eb2", AB: "db2",
  AC: "bb2 gb2", AD: "ab2 db2", AE: "eb2 gb2", AF: "ab2 bb2", AG: "bb2@7 ~", AH: "[gb2@37 ab2@27]/2",
  AI: "[~@11 bb1@4 f2@2 eb2@2 db2@4 eb2@6 db2@2 f2@4 db2@4 bb1@6 gb1@2 gb1@4 bb1@4 c2@6 f1@2 f1@4 ab1@4 bb1@6 bb1@2 f2]/5",
  AJ: "[~ eb2@2 db2@4 eb2@6 c2@2 eb2@4 ab2@4 f2@6 f2@2 gb2@4 f2@4 eb2@4 db2@4 c2@4 ab1@4 bb1@16 bb2@8 db2@4 f2@4 gb2@8 ab2@16 bb2@4 c3@4 db3@4 f2@4 gb2]/8",
  AK: "[~@6 db3@8 ab2@24 f2@8 gb2@12 ab2@4 bb2@8 db3@8 eb3@8 db3@8 ab2@32 eb2@16 f2@16 gb2@16 ab2@33 bb2@17]/7",
  AL: "[~ ab2@18 ab2@18 bb2@27]/2", AM: "[~@4 gb2@4 ~ gb2@9 bb2@9 c3@9 f2@9 f2@9 ab2@9 bb1@72 ~@25]/5",
})).s("gm_tuba").gain(0.25)

// bass · tuba · "C Tuba" · soft notes
const bass_soft_2 = note("<~@41 A@3 B@3 C@3 D@7 E@3 F@3 G@7 H ~@39>".pickRestart({
  A: "[~@28 bb2@14 gb2@13 db2@14 ab2@14 bb2@13]/3", B: "[~ ab2@14 gb2@14 ab2@13 bb2@14 gb2@14 bb2@14 db3@12]/3",
  C: "[~@2 db3@28 bb2@13 c3@14 bb2@14 gb2@14 db2@11]/3",
  D: "[~@3 ab2@14 eb2@13 gb2@14 bb2@14 ab2@14 bb2@14 ab2@14 ab2@14 gb2@13 eb2@14 f2@14 f2@14 bb2@14 bb2@27 bb2@14]/7",
  E: "[gb2@14 f2@14 ab2@14 bb2@14 gb2@14 db2@13 ab2@13]/3", F: "[~ bb2@14 gb2@14 bb2@14 db3@14 db3@13 db3@14 bb2@12]/3",
  G: "[~@2 c3@14 bb2@14 gb2@14 db2@14 ab2@13 eb2@14 gb2@14 bb2@14 ab2@14 bb2@14 ab2@13 ab2@14 gb2@14 eb2@14 f2@14 f2@7 db2@7]/7",
  H: "bb1",
})).s("gm_tuba").gain(0.15)

stack(tuba, bass, bass_soft, bass_2, bass_soft_2)

More by Clamavi de Profundis