Strudelify

Faith of our fathers

Henri F. Hemy

KeyG majorTempo120 bpm
0:00/0:00
// Faith of our fathers — Henri F. Hemy
// 120 bpm, 3/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "B♭ Trumpet" named as a brass, played on trumpet (its cello patch is not one); ch 3 "B♭ Trumpet" named as a brass, played on trumpet (its tremolo strings patch is not one)
// note: duplicate parts dropped: ch 9 "B♭ Clarinet" clarinet (copy of ch 3 "B♭ Trumpet" trumpet); ch 11 "Violin" violin (copy of ch 8 "Flute" flute)
// note: Transcription provider: pdmx. https://musescore.com/score/5818801; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 24 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.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · trumpet · "B♭ Trumpet"
const trumpet = note("<A B C D E F G H A I J K E L M D N O P Q R S P D>".pickRestart({
  A: "[g3,b4]@5 [g3,a4]@5 ~ [g3,g4]@5", B: "[g3,g4]@5 [a3,f#4]@5 ~ [g3,g4]@5", C: "a4@5 e4@5 ~ [d3,f#4]@5, c3@11 ~@5",
  D: "[g2,g4]", E: "[c3,g4]@5 [c3,f#4]@5 ~ [e3,e4]@5", F: "[g3,d4]@11 [g3,g4]@5",
  G: "g4@5 f#4@5 ~ [e3,g4]@5, e3@11 ~@5", H: "[d3,a4]", I: "[d3,g4]@5 [c3,f#4]@5 ~ [b2,g4]@5",
  J: "a4@5 e4@5 ~ [d3,f#4]@5, a2@11 ~@5", K: "[e3,g4]", L: "[g2,d4]@11 [b2,b4]@5",
  M: "a4@5 b4@5 ~ [d3,a4]@5, c3@11 ~@5", N: "[e3,c5]@5 [c3,c5]@5 ~ [e3,c5]@5", O: "[g3,b4]@11 [g3,b4]@5",
  P: "[d3,a4]@11 [d3,a4]@5", Q: "[g3,b4]", R: "[g2,b4]@5 [a2,a4]@5 ~ [b2,g4]@5", S: "[c3,e4]@11 [e3,g4]@5",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note("<A B C D E F G D A B C H E F I H J K L M N O B H>".pickRestart({
  A: "d4@5 d4@5 ~ d4@5", B: "d4@11 d4@5", C: "e4@11 d4@5", D: "d4", E: "e4@5 d4@5 ~ c4@5", F: "b3@11 d4@5",
  G: "c#4@11 c#4@5", H: "b3", I: "e4@11 c4@5", J: "g4@5 g4@5 ~ g4@5", K: "g4@11 g4@5", L: "g4@11 f#4@5", M: "g4",
  N: "b3@5 c4@5 ~ d4@5", O: "c4@11 b3@5",
})).s("gm_trumpet").gain(0.3)

// other · tuba · "Trombone"
const tuba = note("<A B C D E F G H I J C K E G L K M N@2 O E G L K>".pickRestart({
  A: "d4@5 c4@5 ~ b3@5", B: "b3@5 c4@5 ~ b3@5", C: "c4@11 a3@5", D: "b3", E: "g3@5 g3@5 ~ g3@5", F: "b3@11 b3@5",
  G: "g3@11 g3@5", H: "f#3", I: "g3@5 c4@5 ~ b3@5", J: "b3@5 a3@5 ~ g3@5", K: "g3", L: "g3@11 f#3@5",
  M: "c4@5 e4@5 ~ c4@5", N: "d4@11 d4@5", O: "d4",
})).s("gm_tuba").gain(0.39)

// bass · tuba
const bass = note("<A B C D E F G H A I J K E L C D M F N O P Q N D>".pickRestart({
  A: "g3@5 g3@5 ~ g3@5", B: "g3@5 a3@5 ~ g3@5", C: "c3@11 d3@5", D: "g2", E: "c3@5 c3@5 ~ e3@5", F: "g3@11 g3@5",
  G: "e3@11 e3@5", H: "d3", I: "d3@5 c3@5 ~ b2@5", J: "a2@11 d3@5", K: "e3", L: "g2@11 b2@5", M: "e3@5 c3@5 ~ e3@5",
  N: "d3@11 d3@5", O: "g3", P: "g2@5 a2@5 ~ b2@5", Q: "c3@11 e3@5",
})).s("gm_tuba").gain(0.38)

// chords · church organ · "Organ"
const church_organ = note("<A B C D E F G H A I J K E L M N O P Q R S T U N>".pickRestart({
  A: "[g3,d4,b4]@5 [g3,c4,d4,a4]@5 ~ [g3,b3,d4,g4]@5", B: "[g3,b3,g4]@5 [a3,c4,f#4]@5 ~ [g3,b3,d4,g4]@5, d4@11 ~@5",
  C: "[e4,a4]@5 e4@5 ~ [d3,a3,d4,f#4]@5, [c3,c4]@11 ~@5", D: "[g2,b3,d4,g4]",
  E: "[c3,g3,e4,g4]@5 [c3,g3,d4,f#4]@5 ~ [e3,g3,c4,e4]@5", F: "[g3,b3,d4]@11 [g3,b3,d4,g4]@5",
  G: "g4@5 f#4@5 ~ [e3,g3,c#4,g4]@5, [e3,g3,c#4]@11 ~@5", H: "[d3,f#3,d4,a4]",
  I: "[d3,b3,g4]@5 [c3,a3,f#4]@5 ~ [b2,g3,d4,g4]@5, d4@11 ~@5", J: "[e4,a4]@5 e4@5 ~ [d3,a3,d4,f#4]@5, [a2,c4]@11 ~@5",
  K: "[e3,g3,b3,g4]", L: "[g2,g3,b3,d4]@11 [b2,g3,d4,b4]@5", M: "a4@5 b4@5 ~ [d3,f#3,c4,a4]@5, [c3,g3,e4]@11 ~@5",
  N: "[g2,g3,b3,g4]", O: "[e3,c4,g4,c5]@5 [c3,e4,g4,c5]@5 ~ [e3,c4,g4,c5]@5", P: "[g3,d4,g4,b4]@11 [g3,d4,g4,b4]@5",
  Q: "[d3,d4,g4,a4]@11 [d3,d4,f#4,a4]@5", R: "[g3,d4,g4,b4]", S: "[g2,g3,b3,b4]@5 [a2,g3,c4,a4]@5 ~ [b2,g3,d4,g4]@5",
  T: "[c3,g3,c4,e4]@11 [e3,g3,b3,g4]@5", U: "[d3,g3,d4,a4]@11 [d3,f#3,d4,a4]@5",
})).s("gm_church_organ").gain(0.3)

// chords · viola
const viola = note("<A B C D E F G H I J C K E L M K N O P Q R S T K>".pickRestart({
  A: "d4@5 [c4,d4]@5 ~ [b3,d4]@5", B: "b3@5 c4@5 ~ [b3,d4]@5, d4@11 ~@5", C: "[c4,e4]@11 [a3,d4]@5", D: "[b3,d4]",
  E: "[g3,e4]@5 [g3,d4]@5 ~ [g3,c4]@5", F: "b3@11 [b3,d4]@5", G: "[g3,c#4]@11 [g3,c#4]@5", H: "[f#3,d4]",
  I: "[g3,d4]@5 [c4,d4]@5 ~ [b3,d4]@5", J: "b3@5 a3@5 ~ [g3,d4]@5, d4@11 ~@5", K: "[g3,b3]", L: "[g3,b3]@11 [g3,d4]@5",
  M: "[g3,e4]@11 [f#3,c4]@5", N: "[c4,g4]@5 [e4,g4]@5 ~ [c4,g4]@5", O: "[d4,g4]@11 [d4,g4]@5",
  P: "[d4,g4]@11 [d4,f#4]@5", Q: "[d4,g4]", R: "[g3,b3]@5 [g3,c4]@5 ~ [g3,d4]@5", S: "[g3,c4]@11 [g3,b3]@5",
  T: "[g3,d4]@11 [f#3,d4]@5", // G5 D
})).s("gm_viola").gain(0.3)

stack(trumpet, trumpet_2, tuba, bass, church_organ, viola)