Strudelify
KeyA minorTempo72 bpm
0:00/0:00
// Matthäuspassion BWV 244b — melody Hans Leo Hassler 1601 harm. J.S. Bach
// 72 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/24962; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 17 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · church organ · "Mezzosoprano"
const church_organ = note("<A B C D E B C D F G H I J K L M N>".pickRestart({
  A: "~@3 [c4,e4]", B: "[c4,a4]@2 [c4,g4]@2 c4 d4!2 c4, ~@2 f4 e4", C: "c4 b3 [c4,e4] [d4,b4], d4 ~",
  D: "c4 d4 [e4,c5]@2 b4 a4 e4 d4, c5 ~ e4 b4", E: "[c4,a4]@3 [c4,e4]", F: "[c4,a4]@6 a4 g4, ~@3 c5",
  G: "b4 a4 e4 d4 [c4,a4]@2 [f4,b4]@2, f4 g4 ~@2", H: "f4@2 g4 f4 [e4,c5]@2 [e4,g4]@2, c5 ~",
  I: "[f4,a4] [e4,g4] [e4,f4] [d4,f4]", J: "[c#4,e4]@3 [d4,c5]", K: "b4 c5 [d4,d5]@2 [e4,c5]@2 [d4,b4]@2, d4 ~@3",
  L: "e4 d4 [d4,b4] [c4,e4], a4 ~", M: "c4 b3 [c4,e4]@2 [c4,d4]@2 [b3,g4]@2, f4 ~@3", N: "[c4,e4]@3 ~",
})).s("gm_church_organ").gain(0.3)

// chords · drawbar organ · "Baritone"
const drawbar_organ = note("<A B C D E F C G H I J K L M N O P>".pickRestart({
  A: "~@3 [c3,g3]", B: "f3@2 [e3,g3]@2 [c3,a3] [d3,g3] [e3,f3]@2", C: "[f2,a3] [g2,g3] [c3,g3] [b2,g#3]",
  D: "a2 b2 c3 d3 [e3,a3]@2 [e3,g#3]@2, a3!2 ~@2", E: "[a2,a3]@3 [c3,g3]",
  F: "[d3,f3]@2 [e3,g3]@2 [a2,a3] [b2,g3] [c3,g3]@2", G: "a2 b2 c3 d3 [e3,b3]@2 [e3,g#3]@2, a3!2 ~@2",
  H: "[a2,a3]@3 [a3,e4]", I: "d4 c4 [e3,b3]@2 [f3,a3] [e3,g3] f3 g3, d3 ~@2 d3",
  J: "a3@2 g3 f3 [c3,g3]@2 [c3,c4]@2, c3 ~", K: "[f3,c4]@2 c4 b3 d3 e3 f3 g3, ~ c3 a3!2", L: "a3@3 [f#3,a3]",
  M: "g3@2 g3 f#3 [e3,g3] [f#3,a3] [g3,b3] g3, ~ b2 ~@2", N: "e3 a3 [d3,f#3]@2 [g2,g3]@2 c3 b2, c3 ~@2 g3",
  O: "[a2,f3]@2 [g2,g3]@2 [f2,a3]@2 d3 g3, ~@3 g2", P: "[c3,g3]@3 ~",
})).s("gm_drawbar_organ").gain(0.3)

stack(church_organ, drawbar_organ)