Strudelify

Great is thy faithfulness

William M. Runyan

KeyA majorTempo71 bpm
0:00/0:00
// Great is thy faithfulness — William M. Runyan
// 71 bpm, 3/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5897414; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 80 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(71/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · violin · "Violin I"
const violin = note(`<
  A@2 B C D E F G H I J K L M N O P Q R S T Q U V W X Y S V Z AA V P Q R S AB Q AC V H I J K L M N O P Q R S T Q U V AD
  AE AF AG AH AI AJ S AK Q B AL AM V AN AO A@2 B C AP AQ AR G
>`.pickRestart({
  A: "a4@4 g#4 f#4", B: "e4 d4 c#4", C: "c#4 b3@2", D: "f#5 g#5 a5", E: "a5@3 e5 e5@2", F: "c#5 d5 b4", G: "a4",
  H: "e4!2 f4", I: "c#4@2 b3", J: "b3", K: "d4 c#4@2", L: "d4@2 d4", M: "b3@3 d4 e4@2", N: "b3 f#4!2", O: "e4@2 e4",
  P: "d4 c#4 b3", Q: "c#4", R: "b3@2 a#3", S: "d4", T: "d#4!3", U: "d4 b3 d4", V: "e4", W: "d4@2 b3",
  X: "d4@3 c#4 c#4@8", Y: "c#4@2 c#4", Z: "e4@2 d#4", AA: "g#4 f#4!2", AB: "c4!3", AC: "d4!3", AD: "e4 f#4 g#4",
  AE: "a4@2 g4", AF: "f#4 g#4 a#4", AG: "b4@2 a4", AH: "g#4 a4 b4", AI: "c#5@2 c5", AJ: "b4 c#5 a4", AK: "e4 d#4 d4",
  AL: "d4 d4@2", AM: "a4 g#4 f#4", AN: "f4", AO: "a4 d5 b4", AP: "f#4 g#4 a4", AQ: "a4@3 e4 e4@2", AR: "c#4 d4 b4",
})).s("gm_violin").gain(0.25)

// other · violin · "Violin II"
const violin_2 = note(`<
  A B C D E F G A H I J K L M N O N P Q D R P S P T U V D W I X W T P Q W R P Y P H I J K L M N O N Z Q D R P S P AA AB
  AC AD AE AF AG W AH P AI AJ AK P W AL A B C D AM AC AN A
>`.pickRestart({
  A: "e4", B: "d#4", C: "d4!2 a#3", D: "b3@2 a3", E: "c5!3", F: "c#5", G: "d4 b3 d4", H: "c#4 b3 a3", I: "a3@2 a3",
  J: "g#3", K: "a3 a3@2", L: "a3@2 b3", M: "g#3@3 b3 c#4@2", N: "b3 a3!2", O: "b3@2 b3", P: "a3", Q: "g3@2 g3",
  R: "a3!3", S: "b3 g#3 b3", T: "b3 a3 g#3", U: "a3@3 a3 a3@8", V: "a#3@2 a#3", W: "b3", X: "b3 c#4 a3", Y: "b3!3",
  Z: "a3 g#3 a3", AA: "e4 f#4 g#4", AB: "d4@3 c#4 c#4@8", AC: "c#4", AD: "f#4@3 f#4 f#4@8", AE: "d4", AF: "e4@2 a4",
  AG: "e4 f#4 d#4", AH: "e4 d#4 b3", AI: "d4!2 g3", AJ: "b3 b3@2", AK: "d#4!2 c4", AL: "f#4 b4 g#4", AM: "d#4!3",
  AN: "d4 b3 g#4",
})).s("gm_violin").gain(0.25)

// other · viola
const viola = note(`<
  A B C D E F G A H I J K L M N O P A Q D R J S A P T L D U V W X P A Y D R J Z A H I J K L M N O P AA Q D R J S A P AB
  AC AD AE AF AG AH AI AJ AK AL AM D AN AO A B C D E F G A
>`.pickRestart({
  A: "c#4", B: "f#4", C: "b3!2 e3", D: "f#3", E: "a3!3", F: "a3", G: "b3 g#3 b3", H: "c#3!3", I: "f#3@2 f3", J: "e3",
  K: "c#3 e3@2", L: "f#3@2 f#3", M: "e3@3 g3 a#3@2", N: "f#3 e3 d#3", O: "g#3@2 g#3", P: "g#3 f#3 f3", Q: "d4@2 d4",
  R: "a3 g#3 f#3", S: "f#3 f3 g#3", T: "f#3@3 f#3 e3@8", U: "g#3 a3 b3", V: "c#4@2 c4", W: "e4 f#4 d#4", X: "e4",
  Y: "d3@2 c#3", Z: "f#3 g#3 f3", AA: "c#4@2 f4", AB: "f#3@3 e3 e3@8", AC: "a#3", AD: "d4@3 d4 d4@8", AE: "b3@2 g#3",
  AF: "c#4@2 d#4", AG: "g#4 f#4!2", AH: "g#4", AI: "e4 f#4 g#4", AJ: "a4", AK: "b4!2 a#4", AL: "f#4 f#4@2", AM: "d#4!3",
  AN: "g#3", AO: "d4 g#4 f4",
})).s("gm_viola").gain(0.25)

// other · cello · "Violoncello"
const cello = note(`<
  A B C D E F G H I J K L J M N O P Q R D S A T H U V W X F Y Z F P AA AB AC AD A AE H I J K L J M N O P Q R D S A T H
  AF AG AD AH AI AJ N F AK AL AM AN S AO@2 AP A B C D E F G H
>`.pickRestart({
  A: "a2", B: "c3", C: "g3!3", D: "b2", E: "a3 g#3 f#3", F: "e3", G: "f#3 f3 g#3", H: "a3", I: "a2!3", J: "d3@2 d3",
  K: "d3 e3 b2", L: "a2 a2@2", M: "c#3@3 e3 f#3@2", N: "b2!3", O: "e3@2 d3", P: "e4 d4!2", Q: "f#3", R: "g3@2 g3",
  S: "c3!3", T: "b2 d3 e3", U: "e3 f#3 g#3", V: "a3@3 a3 a3@4 g3@4", W: "f#3 g#3 a#3", X: "b3", Y: "a3@2 a3", Z: "b3!3",
  AA: "f#3 f3 e3", AB: "g2@2 g2", AC: "b2@2 a2", AD: "f#2!3", AE: "b2 e3 g#3", AF: "e3 d3 b2", AG: "a2@3 b2 a2 g2",
  AH: "b2@3 a2 g#2 f#2", AI: "e2", AJ: "a2@2 a2", AK: "e3 a2 g#2", AL: "a2 c#3 f3", AM: "g3 b3 e3", AN: "c#3 b2 a2",
  AO: "d3", AP: "b3 e3 d3",
})).s("gm_cello").gain(0.29)

stack(violin, violin_2, viola, cello)