Strudelify

From Bach s Matheus Passion Wir setzen uns mit Traenen nieder

J. S. Bach

KeyB♭ majorTempo70 bpm
0:00/0:00
// From Bach s Matheus Passion Wir setzen uns mit Traenen nieder — J.S. Bach
// 70 bpm, 3/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3957706; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 128 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(70/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · trumpet · "C trp2"
const trumpet = note(`<
  A B C D@3 E F ~ G H I A B C D@3 E J ~ G H K L M N O P@3 F ~ Q R I L M N O P@3 F ~ Q R S T U@2 V ~ W X@2 Y ~ Z M AA M
  AB@2 AC AD AE AF AG AH AI B AJ B AK@2 AL ~@3 A B C D@3 E F ~ G H I A B C D@3 E J ~ G H K L M N O P@3 F ~ Q R I L M N O
  P@3 F ~ Q R S
>`.pickRestart({
  A: "c5 bb4 ab4 g4 f4 eb4", B: "d4", C: "g4@2 ab4 bb4 bb4@2 ab4@2 ab4@2 g4@2",
  D: "[g4 f4 e4@2 f4@10 g4@2 ab4@2 f4@2 g4@6 b4@2 c5@2 g4@2 f4@2 eb4@2]/3", E: "f4@2 eb4 ab4 g4 f4", F: "d4 ~",
  G: "~@3 f5 bb4 ab4", H: "ab4 g4!2 f4 eb4 d4", I: "eb4", J: "d4@2 d4 ~@3", K: "bb3", L: "eb4 d4 eb4@2 ab4@2", M: "g4",
  N: "bb4@2 c5 db5 db5@2 c5@2 c5@2 bb4@2", O: "bb4 ab4 g4@2 ab4@8",
  P: "[g4@5 ~@3 bb4@20 e4@4 f4@4 e4@4 f4@12 g4@4 f4@4 eb4@4 d4@4 eb4@4]/3", Q: "~@3 d5 g4 f4", R: "f4 eb4!2 d4 c4 d4",
  S: "eb4@2 ~", T: "eb4@2 g4", U: "[c4@3 e4 g4@3 ab4 bb4 ab4!2 g4]/2", V: "g4 f4!2 ~@3", W: "~ ab4 gb4",
  X: "[f4@3 a4 c5@3 db5 eb5 db5!2 c5]/2", Y: "c5 bb4!2 ~@3", Z: "~@2 f4@2 e4 f4", AA: "f4 g4 ab4@2 ab4@2",
  AB: "c5 ~ b4 ~ d5@2 c5@2 c5@2 b4@2", AC: "c5 ~ bb4 ~ bb4@2 a4@2 a4@2 bb4 c5", AD: "bb4 ~ a4 ~ a4@2 g4@2 g4@2 a4 bb4",
  AE: "a4 ~ g4 ~ gb4@2 g4@2 c4@4", AF: "d4@6 a4@2 bb4@2 g4 ~", AG: "e4@2 gb4@2 g4 ~ a4@2 bb4@2 g4 ~",
  AH: "e4@2 gb4 g4 gb4@2", AI: "g4 bb4 a4 g4 gb4 g4", AJ: "g4@4 ab4 f4", AK: "b4/2", AL: "c5 bb4!2 ab4 ~@2",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "C trp2" · soft notes
const trumpet_soft = note(`<
  ~@7 A B C ~@9 A D C ~@9 E F C ~@9 E F C ~@5 G@2 H ~@2 I J K ~@17 L@3 M ~@7 A B C ~@9 A D C ~@9 E F C ~@9 E F C ~@2
>`.pickRestart({
  A: "~@3 f4 g4 eb4", B: "c4@2 d4@2 d4 ~ f4@2 g4@2 eb4@2", C: "c4@2 d4 ~@3", D: "c4 d4!2 f4 g4 eb4", E: "~@3 d4 eb4 c4",
  F: "c4 d4!3 eb4 c4", G: "[~@3 f4@2 g4@2 f4 e4 f4@2 g4]/2", H: "e4 ~@2", I: "~@3 bb4@2 gb4", J: "eb4 f4 a4 bb4@2 gb4",
  K: "eb4 ~@2", L: "[~@4 ab4@3 g4!2 f4 f4@3 eb4!2 d4 eb4@2]/3", M: "d4",
})).s("gm_trumpet").gain(0.2)

// other · french horn · "F Hn."
const french_horn = note(`<
  A B C D E F G H I J K L M N O P Q F G R ~ S T L U V W X Y@2 Z AA AB AC AD AE AF V AG AH Y@2 AI AJ ~ AK AD AL AM AN AO
  AP AQ AR AS AT AU ~ AV AW AX N AY@2 AZ BA BB BC BD BE BF BG BH B BI@2 BJ ~@3 A B C D E F G H I J K L M N O P Q F G R ~
  S T L U V W X Y@2 Z AA AB AC AD AE AF V AG AH Y@2 AI AJ ~ AK AD AL
>`.pickRestart({
  A: "g4 ~ c4 ~ g3 ~", B: "f4", C: "e4@2 e4 ~ e4 ~", D: "c4@3 d4 b3 c4", E: "d4!3", F: "c4 f4 g4 eb4 d4 c4",
  G: "bb3!2 c4", H: "bb3@3 ab4 bb4 g4", I: "eb4@2 f4@2 f4 ~ ab4@2 bb4@2 g4@2", J: "eb4@2 f4 bb3 eb4 c4",
  K: "bb3@3 c4 bb3 ab3", L: "g3", M: "g4 c4 g3", N: "d4", O: "c4 e4 c4", P: "c4@2 c4 d4 b3 c4", Q: "d4@2 d4",
  R: "bb3@2 bb3 ~@3", S: "~@3 f4 eb4 c4", T: "bb3@2 bb3 c4 bb3 ab3", U: "bb3 ~ c4 ~ d4 ~", V: "eb4",
  W: "eb4 ~ bb3 ~ eb4 ~", X: "eb4 ~ eb4@4", Y: "[c4@5 ~@3 c4@24 c4@8 c4@8]/2", Z: "b3 g4 ab4", AA: "b3@3 f4 g4 eb4",
  AB: "c4 d4!2 ~@3", AC: "~@3 g3 c4 ab3", AD: "g3@3 ab3 g3 f3", AE: "d3 eb3@2", AF: "bb3 c4 d4", AG: "eb4 bb3 eb4",
  AH: "eb4 eb4@2", AI: "b3@2 g4@2 ab4 c4", AJ: "b3 ~", AK: "~@3 d4 c4 ab3", AL: "eb3@2 ~", AM: "c4@2 g3",
  AN: "g3@3 bb3 db4 bb3", AO: "g3 e4!2", AP: "c4@2 c4!2 db4 bb3", AQ: "g3 ab3 bb3 c4 db4 bb3", AR: "g3@2 ab3 f4 bb3@2",
  AS: "c4@3 eb4 gb4 eb4", AT: "c4 a3 f4", AU: "f4@2 f4 ~@3", AV: "~ db4 bb3", AW: "bb3 g3 c4", AX: "c4@2 b3 c4 d4@2",
  AY: "g3 ~ g4 ~ ab4@4 g4@4", AZ: "g4 ~ f4 ~ bb3@4 f4@4", BA: "f4 ~ eb4 ~ gb3@4 g3@4",
  BB: "gb3 ~ g3 ~ a3@2 bb3@2 c4@2 g3@2", BC: "d4@2 ~ d4@2 g4", BD: "e4@2 gb4@2 g4 ~ d4@4 g4 ~",
  BE: "e4@2 gb3 eb4 c4 a3", BF: "bb3@2 gb3 d4 c4 b3", BG: "b3", BH: "b3 ~ c4 ~ b3 ~",
  BI: "[d4@2 eb4@2 f4@4 eb4 d4!2 c4]/2", BJ: "c4 e4 ~",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "F Hn." · soft notes
const french_horn_soft = note(`<
  ~@19 A B ~@11 A C ~@9 D E ~@11 F G H ~@17 I J K L ~@19 A B ~@11 A C ~@9 D E ~@3
>`.pickRestart({
  A: "~@3 f4 g4 eb4", B: "c4 d4!2 ~@3", C: "c4@2 d4 ~@3", D: "~@3 d4 eb4 c4", E: "a3 b3!2 ~@3", F: "~@3 f4 gb4 eb4",
  G: "c4 db4 eb4 f4 gb4 eb4", H: "c4 ~@2", I: "~@2 f4", J: "c4@2 c4", K: "d4@2 g3 a3!2 b3", L: "b3",
})).s("gm_french_horn").gain(0.2)

// other · trombone · "Tbn."
const trombone = note(`<
  ~@12 A B C D E F G H ~ I J K ~@12 L M N O P Q R S ~ T U V W X Y Z ~ AA AB AC AD ~ AE AF AG AH AI@2 AJ AK AL AM@2 AN AO
  AP AQ AP N AR AS ~@15 A B C D E F G H ~ I J K ~@12 L M N O P Q R S ~ T U V
>`.pickRestart({
  A: "c4 c3!2", B: "~ ab3 f3 d3 b2 g2", C: "e3 c3 e3", D: "~ c4 ab3 f3 d3 c3", E: "b2@3 ~ g2@4 b2@4 d3@4 g3@4 b3@4",
  F: "c4@2 c3", G: "d3 eb3 ab3", H: "bb3 ~ bb2 ~@3", I: "~@3 d3 eb3 f3", J: "g3@3 ab3 bb3 bb2", K: "eb3", L: "eb3!3",
  M: "db3@3 ~ db4@4 bb3@4 g3@4 eb3@4 bb2@4", N: "g2 g3!2", O: "ab3@3 ~ eb4@4 c4@4 ab3@4 eb3@4 c3@4",
  P: "e3@3 ~ g3@4 c4@4 g3@4 c4@4 bb3@4", Q: "ab3 g3 f3 c4 ab3 f3", R: "d3 eb3 f3", S: "g3 ~ g2 ~@3", T: "~@3 b2 c3 d3",
  U: "eb3@3 f3 g3 g2", V: "b2 c3 ~", W: "c3@2 bb2", X: "bb2 bb3 ab3 g3 f3 d3", Y: "e3 g3 c3", Z: "f3 ~@2",
  AA: "~ f3 eb3", AB: "eb3 eb4 db4 c4 bb3 g3", AC: "a3 c4 f3", AD: "bb3 ~@2", AE: "~@2 bb3 ab3 g3 f3", AF: "e3@2 e3",
  AG: "f4 eb4 d4 c4 b3 c4", AH: "b2", AI: "c3 ~ g3 ~ f3@4 g3@4", AJ: "c3 ~ d3 ~ eb3@4 f3@4",
  AK: "bb2 ~ c3 ~ d3@4 eb3@4", AL: "a2 ~ bb2 ~ c3@2 d3@2 eb3@4", AM: "[d3 d4@5]/2", AN: "d4 ~ c3 bb2 a2 c3",
  AO: "bb2 g2 d3@2 d3@2", AP: "g2@3 ~ d4@4 b3@4 g3@4 d3@4 b2@4", AQ: "g2 ~ g3 ~ g3 ~",
  AR: "g2@3 ~ b3@4 g3@4 d3@4 b2@4 g2@4", AS: "g3!2 ~",
})).s("gm_trombone").gain(0.3)

// other · trombone · "Tbn." · soft notes
const trombone_soft = note(`<
  ~@19 A B@2 ~@21 C D E ~@5 F@3 ~@2 G H I ~@17 J K L D ~@19 A B@2 ~@21 C D E ~@2
>`.pickRestart({
  A: "~@4 bb2 ~", B: "[bb2@8 bb2 ~@3]/2", C: "~@4 g2 ~", D: "g2", E: "g2 ~", F: "[~ f3@6 ~@2]/3", G: "~ bb3@2",
  H: "~ bb3 bb3@4", I: "~ c4 ~@4", J: "~@2 ab3", K: "e3@2 f3", L: "b2 c3@2",
})).s("gm_trombone").gain(0.2)

// bass · tuba · "Tba."
const bass = note(`<
  A B A C D E F G ~ H I J A K A L M E F N ~ O P Q R S T U V W X Y ~ Z AA AB AC AD AE AF AG AH X AI ~ AJ AA AK AL@2 AM AN
  ~ AO@2 AP AQ ~ AR AS AT AU AV AW AX AY AZ BA@2 BB BC BD T BD T BE BF ~@3 A B A C D E F G ~ H I J A K A L M E F N ~ O P
  Q R S T U V W X Y ~ Z AA AB AC AD AE AF AG AH X AI ~ AJ AA AK
>`.pickRestart({
  A: "c2 ~ c2 ~ c2 ~", B: "[c2,c3] ab3 f3 d3 b2 g2", C: "[c2,c3]@3 ~ c4@4 ab3@4 f3@4 d3@4 c3@4",
  D: "b2@3 ~ g2@4 b2@4 d3@4 g3@4 b3@4", E: "c2!2 c3", F: "d3 eb3 ab2", G: "bb2@2 ~@2 bb2 ~@7", H: "~@3 d3 eb3 f3",
  I: "g2@6 ab2@2 bb2@2 bb2 ~", J: "eb2 g2 bb2 eb3 g3 b3", K: "c2 ab2 f2 d2 b1 g1", L: "c2 c3 ab2 f2 d2 c2", M: "b2!3",
  N: "bb2 ~ bb1 ~@3", O: "~@3 d2 eb2 f2", P: "g2@3 ab2 bb2!2", Q: "[eb2,eb3]@3 ~ bb3@4 g3@4 eb3@4 bb2@4 g2@4",
  R: "eb2 ~ eb2 ~ eb2 ~", S: "[db2,db3]@3 ~ db4@4 bb3@4 g3@4 eb3@4 bb2@4", T: "g2 ~ g2 ~ g2 ~",
  U: "[ab2,ab3]@3 ~ eb4@4 c4@4 ab3@4 eb3@4 c3@4", V: "e2@3 ~ g2@4 c3@4 e3@4 g3@4 bb3@4",
  W: "ab3@3 ~ g3@4 f3@4 c3@4 ab2@4 f2@4", X: "d2 eb2 f2", Y: "g2@2 g2 ~@3", Z: "~@3 b2 c3 d3", AA: "eb2@3 f2 g2!2",
  AB: "c2@3 ~ eb2@4 g2@4 c3@4 eb3@4 d3@4", AC: "eb3 eb2!2", AD: "db2@3 ~ db3@4 bb2@4 g2@4 eb2@4 bb1@4", AE: "g2!3",
  AF: "ab2@3 ~ eb3@4 c3@4 ab2@4 eb2@4 c2@4", AG: "e2@3 ~ g2@4 c3@4 e3@4 g3@4 bb2@4", AH: "ab2 g2 f2 c3 ab2 f2",
  AI: "g2 ~ g2 ~@3", AJ: "~@3 b1 c2 d2", AK: "c2@2 ~", AL: "[c2@2 c2@2 bb1@3 bb2 ab2 g2 f2 d2]/2", AM: "e2 g2 c3",
  AN: "f2@2 f2 ~@3", AO: "[~@2 f2@2 eb2@3 eb3 db3 c3 bb2 g2]/2", AP: "a2 c3 f2", AQ: "bb2 ~@2", AR: "~@2 bb2 ab2 g2 f2",
  AS: "e2!3", AT: "f3 eb3 d3 c3 b2 c3", AU: "b2 g2 b2 d3 g3 b3", AV: "c3 ~ g2 ~ f2@4 g2@4", AW: "c2 ~ g2 ~ f2@4 g2@4",
  AX: "c2 ~ d2 ~ eb2@4 f2@4", AY: "bb1 ~ c2 ~ d2@4 eb2@4", AZ: "a1 ~ bb1 ~ c2@2 d2@2 eb2@2 eb2@2", BA: "d2 ~ d2 ~ d2 ~",
  BB: "d2!2 c2 bb1 a1 c2", BC: "bb1 g1 d2@2 d2@2", BD: "g2@3 ~ d3@4 b2@4 g2@4 d2@4 b1@4",
  BE: "g2@3 ~ b2@4 g2@4 d2@4 b1@4 g1@4", BF: "c2 ~ c2 ~@3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Tba." · soft notes
const bass_soft = note(`<
  ~@7 A B C ~@9 D E F ~@9 G H I ~@9 G J I ~@5 K L M ~@2 N O P ~@17 Q R@2 S ~@7 A B C ~@9 D E F ~@9 G H I ~@9 G J I ~@2
>`.pickRestart({
  A: "~@2 bb2", B: "bb2@2 ~@2 bb2 ~@3 bb2@4", C: "bb2@2 ~@2 bb2 ~@7", D: "~@4 bb1 ~", E: "bb1 ~ bb1 ~ bb1 ~",
  F: "bb1 ~", G: "~@4 g2 ~", H: "g2@3 ~ g2@2", I: "g2 ~", J: "g2 ~ g2 ~ g2 ~", K: "~@4 f2 ~", L: "f2 ~ f2 ~ f2 ~",
  M: "f2 ~@2", N: "~ bb2!2", O: "bb2!3", P: "bb2 c3 ~@4", Q: "~@4 c2 ~", R: "c2 ~ c2 ~ c2 ~", S: "g2 ab2 g2 f2 eb2 d2",
})).s("gm_tuba").gain(0.2)

stack(trumpet, trumpet_soft, french_horn, french_horn_soft, trombone, trombone_soft, bass, bass_soft)

More by J. S. Bach