Strudelify

Giovanni Pergolesi Stabat Mater AMEN

Giovanni Pergolesi

KeyA♭ majorTempo214 bpm
0:00/0:00
// Giovanni Pergolesi Stabat Mater AMEN — Giovanni Pergolesi
// 214 bpm, 2/2, key Ab major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5983956; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 67 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(214/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 · church organ · "Organo a canne"
const church_organ = note(`<
  A B C D E F G H I J K L M@6 N@2 O P Q@2 R@2 S T U@2 V@2 W X Y@2 Z@2 AA AB AC@2 AD@2 AE AF AG AH AI@2 AJ AK AL AM AN AO
  AP AQ AR AS AT AU AV AW AX AY AZ
>`.pickRestart({
  A: "~@2 ab4 f4, c5", B: "bb4@2 g4 eb4, db5", C: "ab4@2 f4 db4, c5", D: "g4@2 e4 c4, bb4",
  E: "f4 eb4 [db4,bb4] [c4,ab4], ab4 ~", F: "[bb3,f4] [c4,e4], g4", G: "[f4,f5]@2 [ab3,c5] [g3,bb4]",
  H: "f3@2 f4 d4, [ab4,f5,ab5]", I: "eb4@2 c4 ab3, f5", J: "db4@2 b3 g3, eb5", K: "c4 bb3 ab3 g3, d5",
  L: "[f3,c5] [g3,b4]", // F5 G
  M: "[c5@2 ~@14 [ab2,ab3]@2 [bb2,bb3] [ab2,ab3] ~@2 e5@2, [c3,c4] [db3,db4] [c3,c4] [bb2,bb3] ~ [g2,g3], ~ c6@2 bb5@2 ab5@2 g5@2 f5@2 ~]/6", // Ab Bb Ab C Db C Bb G
  N: "[[f2,f3,ab4,f5]@2 [f2,f3]@2 [bb1,bb2]@2 [bb4,g5] [ab4,f5], ~ [c5,ab5]@2 [bb1,bb2]]/2", // Fm F Bb Eb Db Fm Bb
  O: "[c2,c3,g4,e5] [ab4,ab5] [f4,f5] [ab4,ab5]", P: "[db4,db5] [f4,f5] [b3,b4] [d4,d5]",
  Q: "[c4!2 bb3 [ab3,f4] [g3,e4] [f3,d4] [e3,c4] [d3,b3], c3]/2", // Db C Dm C G
  R: "[c4 ~ bb3 [ab3,f4] [g3,e4] [f3,d4] [e3,c4] [d3,b3], c3, ~ c4@2 ~@5]/2", S: "c5 db5 c5 [db4,bb4], [c3,c4]@3 ~",
  T: "[c4,ab4] [bb3,g4] [ab3,f4] [g3,eb4]", U: "[f3!2 eb3 [db3,bb4] [c3,a4] [bb2,g4] [a2,f4] [g2,e4], f2, f4@3 ~@5]/2",
  V: "[~ f3 eb3 [db3,bb4] [c3,a4] [bb2,g4] [a2,f4] [g2,e4], f2, f4@3 ~@5]/2", W: "f5 gb5 f5 [gb4,eb5], [f2,f3]@3 ~",
  X: "[f4,db5] [eb4,c5] [db4,bb4] [c4,a4]", // Db Cm Gb F
  Y: "[bb3!2 ab3 [gb3,eb5] [f3,db5] [eb3,c5] [db3,bb4] [c3,a4], bb2, bb4@3 ~@5]/2", // Ebm Db Cm Gb F
  Z: "[~ bb3 ab3 [gb3,eb5] [f3,db5] [eb3,c5] [db3,bb4] [c3,a4], bb2, bb4@3 ~@5]/2", // Ebm Db Cm Gb F
  AA: "bb5 c6 db6 [eb4,c6], [bb1,bb2] ~", AB: "[db4,bb5] [c4,ab5] [bb3,g5] [ab3,f5]",
  AC: "[g3 c4 bb3 [ab3,c6] [g3,bb5] [f3,ab5] [e3,g5] [d3,f5], c3, e5@3 ~@5]/2", // Ab Gm Fm Em Dm
  AD: "[~ c4 bb3 [ab3,c6] [g3,bb5] [f3,ab5] [e3,g5] [d3,f5], c3, e5@3 ~@5]/2", AE: "[c5,e5] [e3,c5], c3",
  AF: "[f3,db5]@2 bb5 db5, db3, ~ g3", AG: "[e3,c5]@2 ab5 c5, c3, ~ f3", AH: "[db3,bb4]@2 g5 bb4, bb2, ~ e3",
  AI: "[[c3,f3,ab4]@2 [bb2,f5] [ab2,ab4] ~@2 bb3@2, ~ c4@2 ~, ~ [g2,g4]]/2", // Fm Bb5 Ab G
  AJ: "[ab3,f4]@2 ab5 ~ g5 ~ ab5 ~, [f2,f3] ~", AK: "f5 ~ ab5 ~ c5 ~ eb5 ~, ~ [a3,c4,f4]",
  AL: "db5 ~ bb5 ~ ab5 ~ bb5 ~, [bb3,db4,f4] ~", AM: "g5 ~ bb5 ~ d5 ~ f5 ~, ~ [b3,d4,g4]",
  AN: "e5 ~ c5 ~ f5 ~ ab4 ~, [c4,e4,g4] [ab3,c4,f4]", AO: "g4 ~ f5 ~ g4 ~ e5 ~, [bb3,db4] [c3,c4]",
  AP: "[f4,ab4,f5]@2 ab4 ~ g4 ~ ab4 ~, [f2,f3] ~", AQ: "f4 ~ ab4 ~ c4 ~ eb4 ~, ~ [a2,c3,f3]",
  AR: "db4 ~ bb4 ~ ab4 ~ bb4 ~, [bb2,db3,f3] ~", AS: "g4 ~ bb4 ~ d4 ~ f4 ~, ~ [b2,d3,g3]",
  AT: "e4 ~ c4 ~ f4 ~ ab3 ~, [c3,e3,g3] [ab2,c3,f3]", AU: "g3 ~ f4 ~ g3 ~ e4 ~, [bb2,db3,f3] [c2,c3]",
  AV: "[ab3,f4] [ab4,c5,f5,ab5], [f2,c3,f3]", AW: "[c2,c3] [g4,c5,e5,g5]", AX: "[f2,f3] [ab4,c5,f5,ab5]",
  AY: "[c2,c3] [e4,g4,c5,e5]", AZ: "[f1,f2,f4,ab4,c5,f5] ~",
})).s("gm_church_organ").gain(0.3)

stack(church_organ)