Strudelify

Stabat Mater Gloriosa

Pergolesi

KeyB♭ majorTempo120 bpm
0:00/0:00
// Stabat Mater Gloriosa — Pergolesi
// 120 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5962239; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 47 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · flute
const flute = note(`<
  A@5 B C D E F G H@4 I J K@2 L@2 M N O P Q R S@4 T U V W X Y Z AA AB AC AD AE@2 AF E AG
>`.pickRestart({
  A: "[~@8 a5@11 ~ g5@4 c6@11 ~ bb5@4 eb6@11 ~ d6@2 c6@2 b5@4 d6@8 c6@4 a4@2 c6 ~ a5 ~ gb5 ~]/5",
  B: "d4 ~ c5@2 bb4@2 a4@2 bb4@2 d6 ~ bb5 ~ g5 ~", C: "d4 ~ d5 ~ c5@2 bb4 ~ a4@2 a5@2 bb5@2 bb4@2",
  D: "bb4@4 a4@4 ~@2 bb5 ~@3 bb5 ~", E: "~@2 eb5@2 d5@2 gb4@2 g4@2 bb5 ~@3 bb5 ~",
  F: "~@2 eb5@2 d5@2 gb4@2 g4 g5 gb5 a5 g5 d5 eb5 c5", G: "c5@2 bb4@2 a4 [a4,bb4]!3 g4@2 ~@6, ~@8 bb4 ~@7",
  H: "[~@8 a4@11 ~ g4@4 c5@11 ~ bb4@4 eb5@11 ~ d5@2 c5@2 b4@8]/4", I: "c5@2 eb5@4 d5 c5", J: "[bb4,c5]!8 a4@4 ~@4",
  K: "[g5@4 f5@4 eb5@2 d5@2 c5@6 ab4@2 g4@2 f5@2 [f5,g5] [d5,eb5] d5@4 eb5@2]/2", // Fsus2 Ebmaj7
  L: "[f4@4 eb5@4 d5@2 c5@2 bb4@6 g4@2 f4@2 eb5@4 d5 c5 d5@2 d5@2]/2", M: "d5@3 eb5 d5@2 c5 d5",
  N: "[bb4,c5] c5 [bb4,c5]!2 c5 [bb4,c5] bb4@2 a4@4 ~@4", O: "d5@11 ~ d5@4", P: "d5@2 db5 d5",
  Q: "d5@4 db5@3 d5 d5@4 ~@2 f5 ~", R: "~@2 bb4@2 a4@2 db4@2 d4@2 f5 ~@3 f5 ~",
  S: "[~@2 bb4@2 a4@2 db4@2 d5@11 ~ db5@4 f5@11 ~ e5@4 a5@11 ~ g5@4 db5@8]/4", T: "d5@2 db5 ~", U: "d4@2 g5 f5",
  V: "eb5 e5 f5 eb5", W: "d5@2 eb5 d5", X: "c5@2 d5 c5", Y: "bb4@2 a4 ~", Z: "~@2 c5@2 bb4@2 a4@2 bb4 [bb4,c5]!7",
  AA: "c5 ~ d5@2 c5@2 bb4@2 a4@2 gb5@2 g5@2 c5@2", AB: "c5@2 bb4@2 [a4,bb4] a4 [a4,bb4] g4 g4@2 bb5 ~@3 bb5 ~",
  AC: "~@2 eb5@2 d5@2 gb4@2 g4 gb4 g4@2 ~@2 bb5 ~", AD: "~ c5 bb4 a4 g4@2 ~@2", AE: "[~@8 a4@11 ~ a4@4 a4@4 bb4@4]/2",
  AF: "a4@6 a4@2 g4@2 bb5 ~@3 bb5 ~", AG: "~ eb5 d5 gb4 g4@2 ~@2",
})).s("gm_flute").gain(0.2)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V W X@2 Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR I AS
>`.pickRestart({
  A: "g5@3 gb5", B: "bb5@3 a5", C: "d6@3 c6", D: "gb5@4 f5@2 eb5 d5", E: "eb5 g5 gb5 ~", F: "~ a4 g4 gb4 g4@2 ~@2",
  G: "~ bb4 a4 g4 gb4 gb5 g5 g4", H: "g4@2 g4@2 gb4@2 gb4@2 ~@2 g5 ~@3 g5 ~", I: "~@2 c5@2 bb4@2 a4@2 g4@2 g5 ~@3 g5 ~",
  J: "~ c5 bb4 a4 d5 c5 bb4 a4", K: "g4@2 gb4@2 g4 d4 bb3@2", L: "g4@3 gb4", M: "bb4@3 a4", N: "d5@3 c5",
  O: "gb4@4 f4@2 eb4 d4", P: "eb4@3 g4 gb4@4", Q: "[g4,a4]!8 gb4@4 ~@4", R: "~@2 d5@3 b4 c5 g4", S: "ab4 c5@2 b4 g4@4",
  T: "~@2 c5@3 a4 bb4 f4", U: "g4 bb4@2 a4 f4@2 ~@2", V: "bb4@3 c5 bb4@2 a4 bb4",
  W: "[g4,a4] a4 [g4,a4]!2 a4 [g4,a4] g4@2 gb4@4 ~@4", X: "[~@2 e4@3 e4!2 f4]/2", Y: "e4@6 e4@2 d4@4 ~@2 d5 ~",
  Z: "~@2 g4@2 f4@2 e4@2 f4@2 d5 ~@3 d5 ~", AA: "~ g4 f4 e4 c4@2 ~@2", AB: "e4@3 d4", AC: "g4@3 f4", AD: "bb4@6 a4 g4",
  AE: "f4@2 e4 ~", AF: "d5 c5 bb4 b4", AG: "c5 bb4 ab4 a4", AH: "bb4 a4 g4@2", AI: "a4 g4 gb4@2", AJ: "g4@2 gb4 ~",
  AK: "~@2 a4@2 g4@2 gb4@2 g4 [g4,a4]!7", AL: "a4 ~ bb4@2 a4@2 g4@2 gb4@2 a4@2 bb4@2 g4@2",
  AM: "g4@4 gb4@3 g4 g4@4 ~@2 g5 ~", AN: "~@2 c5@2 bb4@2 a4@2 f4 g4 g5 ~@3 g5 ~",
  AO: "~@2 eb5@2 d5@2 gb4@2 g4 gb4 g4@2 ~@4", AP: "g4@3 g4", AQ: "g4@2 gb4 g4", AR: "g4@4 gb4@2 gb4@2 g4@4 ~@2 g5 ~",
  AS: "~ c5 bb4 a4 g4@2 ~@2",
})).s("gm_clarinet").gain(0.2)

stack(flute, clarinet)