Strudelify

Praise to the Lord the Almighty

Joachim Neander

KeyF majorTempo120 bpm
0:00/0:00
// Praise to the Lord the Almighty — Joachim Neander
// 120 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 5/8 at bar 2, 3/4 at bar 3, 5/8 at bar 8, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/587236; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 21 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/3)

// 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 · piano
const piano = note("<A B C@6 D E F G H I J K L M N O G>".pickRestart({
  A: "~@5 [c4,f4]@5 ~ [d4,f4]@5", B: "[c4,c5]@5 ~@6 [e4,g4]@3 ~@2, ~@5 [f4,a4]@8 ~@3",
  C: "[~@3 [c4,e4]@5 [bb3,d4]@5 [a3,c4]@5 ~ [bb3,d4]@5 [bb3,e4]@5 [a3,f4]@5 ~ d4@5 c4@5 bb3@5 ~ [a3,f4]@16 [c4,f4]@5 [d4,f4]@5 [c4,c5]@5 ~@6 [e4,g4]@3 ~@5, ~@35 g4@16 ~@32 [f4,a4]@8 ~@5]/6", // C Bb Am Bb Bbdim Dm F5 Dm …
  D: "[c4,e4]@5 [bb3,d4]@5 ~ [a3,c4]@5", E: "[bb3,d4]@5 [bb3,e4]@5 ~ [a3,f4]@5", F: "d4@5 c4@5 ~ bb3@5, g4",
  G: "[a3,f4]", H: "[f4,c5]@5 [g4,c5]@5 ~ [f4,c5]@5", I: "[f4,d5]", J: "[f4,a4]@5 [f4,bb4]@5 ~ [g4,c5]@5",
  K: "[f4,c5]@5 d4@3 e4@3 [f4,a4]@5, ~@5 bb4@5 ~@6", L: "[e4,g4]", M: "c4@5 [bb3,d4]@5 ~ [bb3,e4]@5",
  N: "[a3,f4]@5 [d4,g4]@5 ~ [db4,a4]@5", O: "d4@11 c4@2 bb3@3, g4",
})).s("gm_piano").gain(0.3)

// chords · piano
const piano_2 = note("<A B C@6 D E F G H I J K L M N O G>".pickRestart({
  A: "~@5 [f3,a3]@5 ~ [d3,a3]@5", B: "[e3,g3]@5 c4@5 ~ [c3,c4]@3 ~@2, ~@5 f3@8 ~@3",
  C: "[~@3 [a2,a3]@5 [bb2,f3]@5 [f2,f3]@5 ~ [bb2,f3]@5 [g2,g3]@5 [d3,f3]@5 ~ [bb2,f3]@5 [c3,e3]@11 [f2,f3]@16 [f3,a3]@5 [d3,a3]@5 [e3,g3]@5 ~ c4@5 [c3,c4]@3 ~@5, ~@83 f3@8 ~@5]/6", // A Bb5 F Bb5 G Dm Bb5 C …
  D: "[a2,a3]@5 [bb2,f3]@5 ~ [f2,f3]@5", E: "[bb2,f3]@5 [g2,g3]@5 ~ [d3,f3]@5", F: "[bb2,f3]@5 [c3,e3]@11",
  G: "[f2,f3]", H: "[f3,a3]@5 [e3,g3]@5 ~ [f3,a3]@5", I: "[bb2,bb3]", J: "[f3,c4]@5 [d3,bb3]@5 ~ [e3,g3]@5",
  K: "[f3,a3]@5 [g3,c4]@5 ~ a3@2 f3@3, ~@11 c4@5", L: "[c3,c4]", M: "[a2,c4]@5 [bb2,f3]@5 ~ [g2,g3]@5",
  N: "[d3,f3]@5 [bb2,d3]@5 ~ [a2,e3]@5", O: "d3@5 g3@3 f3@3 [c3,e3]@5, bb2@11 ~@5",
})).s("gm_piano").gain(0.3)

stack(piano, piano_2)