Strudelify

pluvius aestivus

Pain of Salvation - B3

KeyA minorTempo80 bpm
0:00/0:00
// pluvius aestivus — Pain of Salvation - B3
// 80 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: metre changes (4/4 at bar 1, 6/4 at bar 2, 5/4 at bar 3, 4/4 at bar 4) are rendered on a constant 4/4 grid of one bar per cycle
// note: ch 1 "Piano" named as a piano, played on piano (its oboe patch is not one); ch 2 "Piano" named as a piano, played on piano (its flute patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5029202; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 96 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(80/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 · piano
const piano = note(`<
  ~@10 A B C D E F G ~@3 A B C D E F H I A B C D E F H I E J C ~@11 K L M N O P Q R S T M ~ S T M ~@3 U V W X Y Z AA AB
  AC AD AE AF AC AD AG AH ~@12
>`.pickRestart({
  A: "a6@23 ~", B: "g6@11 ~ f6@11 ~", C: "e6@23 ~", D: "b6@11 ~ a6@11 ~", E: "g6@23 ~", F: "e6@11 ~ c6@11 ~",
  G: "b5@17 ~ c6@3 b5@3", H: "b5@23 ~", I: "a5@23 ~", J: "b6@11 ~ g6@11 ~", K: "~@3 a3 ~@2 c4 ~@2 e4 ~@14",
  L: "~@3 g4 ~@2 e4@3 ~@6 f4 ~@2 c4@3 ~@3", M: "~@3 e4 ~@2 b3 ~@2 a3 ~@14", N: "a3 ~@2 b4 ~@2 e4@3 ~@6 a4 ~@2 c4@3 ~@3",
  O: "~@3 g4 ~@2 b3 ~@2 a3 ~@14", P: "~@3 a3 ~@2 e4 ~@2 b4 ~@5 a4 ~@2 c4@3 ~@3", Q: "~@3 e4 ~@2 b3 ~@2 a3 ~@11 e4 ~@2",
  R: "a4@3 ~@6 e4 ~@2 a3@3 ~@9", S: "~@3 e3 ~@2 b3 ~@2 e4 ~@8 g4@3 ~@3", T: "~@3 b4 ~@2 e4@3 ~@6 g4 ~@2 b3@3 ~@3",
  U: "~@3 a2 ~@2 c3 ~@2 e3 ~@14", V: "~@3 g3 ~@2 e3@3 ~@6 f3 ~@2 c3@3 ~@3", W: "~@3 e3 ~@2 b2 ~@2 a2 ~@14",
  X: "~@3 b3 ~@2 e3@3 ~@6 a3 ~@2 c3@3 ~@3", Y: "~@3 g3 ~@2 b2 ~@2 a2 ~@14",
  Z: "~@3 a2 ~@2 e3 ~@2 b3 ~@5 a3 ~@2 c3@3 ~@3", AA: "~@3 e3 ~@2 b2 ~@2 a2 ~@11 e3 ~@2", AB: "a3@3 ~@6 e3 ~@2 a2@3 ~@9",
  AC: "e5@6 c5 f5", AD: "e5@4 c5 a4!2 g4", AE: "a4@3 e5", AF: "[b4,b5] [c5,a5]", AG: "a4@6 c5 e5", AH: "c6@3 b5 e5@4",
})).s("gm_piano").gain(0.08)

// chords · piano
const piano_2 = note(`<
  A@3 B@2 C D@3 ~@9 E@2 ~@20 F@6 G@2 F@6 G@2 F@2 H@2 F@2 G@2 I@2 J K F@4 G@2 F@6 G@2 F@2 L@2 F@2 H@2 M@2 J N@3
>`.pickRestart({
  A: "[~@4 a2@23 ~ [a1,e2,a2]@36 ~@2 a2 b2 c3 f3 c3 b2]/3", // A5
  B: "[a2 b2 c3 f3 c3 b2 a2@28 ~@2 a2 b2 c3 f3 c3 b2 a2 b2 c3 f3 c3 b2]/2", C: "a2 e3@3 b2@3 c3@3 g3@13 ~",
  D: "[a2 e3@3 b2@3 c3@3 g3 ~ a3 e4@3 b3@3 c4@3 g4@13 ~@2 e4@2 ~@7 g4@24 ~@2, ~@18 a3@17 ~, ~@20 b3@15 ~, ~@43 c4@27 ~@2]/3",
  E: "[a3@23 ~]/2", F: "~ e4@3 e4@2 ~ e4@3 e4@2, a3@2 ~ a3@2 ~, c4 ~ c4 ~",
  G: "~ c4@3 c4@2 ~ c4@3 c4@2, f3@2 ~ f3@2 ~, a3 ~ a3 ~", H: "e3 g3 b3@5 b3@4 ~ e3 g3 b3@5 b3@4 ~",
  I: "~ a3@3 a3@2 ~ a3@3 a3@2, d3@2 ~ d3@2 ~, f3 ~ f3 ~", J: "~ g3@3 g3@2 ~ g3@3 g3@2, c3@2 ~ c3@2 ~, e3 ~ e3 ~",
  K: "~ g3@3 g3@2 ~ g3@2 ~ b3@2, c3@8 ~@4 c3@6 ~ g3@5, e3@6 ~@7 e3@5 e3@6",
  L: "~ b3@3 b3@2 ~ b3@3 b3@2, e3@2 ~ e3@2 ~, g3 ~ g3 ~", M: "d3 f3 a3@5 a3@4 ~ d3 f3 a3@5 a3@4 ~",
  N: "[~@2 g3@6 g3@4 ~@2 g3@4 ~@2 b3@49 ~@3, c3@8 ~@4 c3@6 ~ g3@50 ~@3, e3@6 ~@7 e3@5 e3@51 ~@3]/3",
})).s("gm_piano").gain(0.27)

// other · contrabass
const contrabass = note(`<
  A@3 ~@39 B C D E F G H I J@2 K L M L N@2 O P Q R O S T ~@3 U V W X U V Y Z AA AB AC AD AE@2 AA AC AF@2 AA AC ~@8
>`.pickRestart({
  A: "[~@5 a2@28 ~@3]/3", B: "~@3 a2 ~@2 c3 ~@2 e3 ~@14", C: "~@3 g3 ~@2 e3@3 ~@6 f3 ~@2 c3@3 ~@3",
  D: "~@3 e3 ~@2 b2 ~@2 a2 ~@14", E: "~@3 b3 ~@2 e3@3 ~@6 a3 ~@2 c3@3 ~@3", F: "~@3 g3 ~@2 b2 ~@2 a2 ~@14",
  G: "~@3 a2 ~@2 e3 ~@2 b3 ~@5 a3 ~@2 c3@3 ~@3", H: "~@3 e3 ~@2 b2 ~@2 a2 ~@11 e3 ~@2", I: "a3@3 ~@6 e3 ~@2 a2@3 ~@9",
  J: "[a3@3 c4]/2", K: "a3", L: "e4 c4", M: "a3 c4", N: "[~ e4 a4 e4, a3]/2", O: "g3", P: "e3 g3", Q: "e3", R: "b3 c4",
  S: "b3 g3", T: "f3", U: "e4@6 c4 f4", V: "e4@4 c4 a3!2 g3", W: "a3@3 e4", X: "[b3,b4] [c4,a4]", Y: "a3@6 c4 e4",
  Z: "c5@3 b4 e4@4", AA: "a2@7 g2", AB: "a2@12 c3@3 a2@3 a2 ~@2 g2@3", AC: "a2", AD: "a2@2 a3 e3 a2@4", AE: "f2",
  AF: "e2/2",
})).s("gm_contrabass").gain(0.08)

// other · pizzicato strings · "Violoncello"
const pizzicato_strings = note(`<
  ~@20 A B C D E F G H A B C D E F G I J K L ~@3 M N O P Q R S T M N O U Q R S T V W O ~ V W O ~@3 M N O P Q R S T M N O
  P Q R S T ~@12
>`.pickRestart({
  A: "~@3 a3 ~@2 c4 ~@2 e4 ~@14", B: "~@3 g4 ~@2 e4@3 ~@6 f4 ~@2 c4@3 ~@3", C: "~@3 e4 ~@2 b3 ~@2 a3 ~@14",
  D: "~@3 b4 ~@2 e4@3 ~@6 a4 ~@2 c4@3 ~@3", E: "~@3 g4 ~@2 b3 ~@2 a3 ~@14",
  F: "~@3 a3 ~@2 e4 ~@2 b4 ~@5 a4 ~@2 c4@3 ~@3", G: "~@3 e4 ~@2 b3 ~@2 a3 ~@11 e4 ~@2", H: "c5@3 ~@6 b4 ~@2 e4@3 ~@9",
  I: "c5@3 ~@6 e4 ~@2 a3@3 ~@9", J: "~@3 e3 ~@2 b3 ~@2 e4 ~@8 g4@3 ~@3", K: "~@3 b4 ~@2 e4@3 ~@6 g4 ~@2 b3@3 ~@3",
  L: "~@3 e4 ~@2 b3 ~@2 a3 ~@8 a4@3 ~@3", M: "~@3 a2 ~@2 c3 ~@2 e3 ~@14", N: "~@3 g3 ~@2 e3@3 ~@6 f3 ~@2 c3@3 ~@3",
  O: "~@3 e3 ~@2 b2 ~@2 a2 ~@14", P: "~@3 b3 ~@2 e3@3 ~@6 a3 ~@2 c3@3 ~@3", Q: "~@3 g3 ~@2 b2 ~@2 a2 ~@14",
  R: "~@3 a2 ~@2 e3 ~@2 b3 ~@5 a3 ~@2 c3@3 ~@3", S: "~@3 e3 ~@2 b2 ~@2 a2 ~@11 e3 ~@2", T: "a3@3 ~@6 e3 ~@2 a2@3 ~@9",
  U: "a2 ~@2 b3 ~@2 e3@3 ~@6 a3 ~@2 c3@3 ~@3", V: "~@3 e2 ~@2 b2 ~@2 e3 ~@8 g3@3 ~@3",
  W: "~@3 b3 ~@2 e3@3 ~@6 g3 ~@2 b2@3 ~@3",
})).s("gm_pizzicato_strings").gain(0.18)

// other · string ensemble 1 · "Violas"
const string_ensemble_1 = note(`<
  ~@20 A B C D E F G H A B C D E F G I J K L ~ M@2 N O P Q R S T U N V N S W S X@2 R Y Z AA AB AC AD ~@3 AE AF AG AH AE
  AF AI AJ AE AF AG AH AE AF AI AJ ~@12
>`.pickRestart({
  A: "~@3 a3 ~@2 c4 ~@2 e4 ~@14", B: "~@3 g4 ~@2 e4@3 ~@6 f4 ~@2 c4@3 ~@3", C: "~@3 e4 ~@2 b3 ~@2 a3 ~@14",
  D: "~@3 b4 ~@2 e4@3 ~@6 a4 ~@2 c4@3 ~@3", E: "~@3 g4 ~@2 b3 ~@2 a3 ~@14",
  F: "~@3 a3 ~@2 e4 ~@2 b4 ~@5 a4 ~@2 c4@3 ~@3", G: "~@3 e4 ~@2 b3 ~@2 a3 ~@11 e4 ~@2", H: "c5@3 ~@6 b4 ~@2 e4@3 ~@9",
  I: "c5@3 ~@6 e4 ~@2 a3@3 ~@9", J: "~@3 e3 ~@2 b3 ~@2 e4 ~@8 g4@3 ~@3", K: "~@3 b4 ~@2 e4@3 ~@6 g4 ~@2 b3@3 ~@3",
  L: "~@3 e4 ~@2 b3 ~@2 a3 ~@8 a4@3 ~@3", M: "e5!2", N: "a4", O: "g4 f4", P: "e4", Q: "b4 a4", R: "g4", S: "e4 c4",
  T: "b3", U: "a3", V: "a4 c5", W: "a3 c4", X: "[a3 a3@3, ~ e3 ~@2]/2", Y: "e4 g4", Z: "[a3,e4]", AA: "[e3,b3] [c3,a3]",
  AB: "g3", AC: "b3 g3", AD: "f3", AE: "e4@6 c4 f4", AF: "e4@4 c4 a3!2 g3", AG: "a3@3 e4", AH: "[b3,b4] [c4,a4]",
  AI: "a3@6 c4 e4", AJ: "c5@3 b4 e4@4",
})).s("gm_string_ensemble_1").gain(0.08)

// other · string ensemble 1 · "Violins"
const string_ensemble_1_2 = note(`<
  ~@41 A B C D E F G H I B C D E F G J@2 F K D E F K L ~@3 B C D E F G H I M C N@2 F G O P ~@12
>`.pickRestart({
  A: "a5!2", B: "a5", C: "g5 f5", D: "e5", E: "b5 a5", F: "g5", G: "e5 c5", H: "b4", I: "a4",
  J: "[b4 ~ a5 e5, e5 ~, ~ a4@3]/2", K: "b5 g5", L: "f5", M: "c6@6 c6 b5, a5", N: "[[e5,b5]@3 a5]/2", O: "[b4,e5]",
  P: "[a4,e5]", // A5
})).s("gm_string_ensemble_1").gain(0.05)

stack(piano, piano_2, contrabass, pizzicato_strings, string_ensemble_1, string_ensemble_1_2)