Strudelify

Abide with me

W.H. Monk

KeyE♭ majorTempo84 bpm
0:00/0:00
// Abide with me — W.H. Monk
// 84 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 6 "E♭ Bass" named as a bass, played on electric bass finger (its tuba patch is not one)
// note: duplicate parts dropped: ch 16 "1st Baritone" french horn (copy of ch 15 "2nd Horn" french horn)
// note: Transcription provider: pdmx. https://musescore.com/score/5915633; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 53 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(84/4)

// 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 · french horn · "Soprano Cornet"
const french_horn = note("<A B C D E F G H I J K L E M N O A B C D ~@17 E F G H I J K L P Q R S A B C D>".pickRestart({
  A: "[bb3,f5]@2 [bb3,g5] [bb3,ab5]", B: "[bb3,g5] [ab3,f5] [g3,eb5] [c4,ab5]", C: "g5@2 ~ ab3, bb3@3 ~, ~ f5",
  D: "[g3,eb5]", E: "bb3@2 bb3 ab3", F: "g3 eb3", G: "eb3 bb3!3", H: "bb3", I: "bb3@2 ab3 g3", J: "ab3 g3",
  K: "c4 bb3!2 f3", L: "f3 bb3", M: "g3@2 eb4 d4", N: "c4!3 bb3", O: "ab3", P: "[bb3,g5]@2 [bb3,g5] [ab3,f5]",
  Q: "[g3,eb5]@2 eb4 d4, ~ bb5", R: "[c4,bb5] [c4,ab5]!2 [bb3,g5]", S: "[ab3,f5]",
})).s("gm_french_horn").gain(0.3)

// chords · trombone · "Solo Cornet"
const trombone = note("<A B C D E F G H I J K L M N O P A B Q R ~@17 E F G H S T U V W N O P A B Q R>".pickRestart({
  A: "[d3,f4]@2 [eb3,g4] [d3,ab4]", B: "[eb3,g4] [d3,f4] [eb3,eb4] [ab3,ab4]", C: "[bb3,g4] f4", D: "eb4",
  E: "g4@2 g4 f4", F: "eb4 bb4", G: "c5 bb4!2 ab4", H: "g4", I: "g4@2 ab4 bb4", J: "c5 bb4", K: "bb4 f4 g4 a4",
  L: "bb4", M: "g4@2 [d3,g4] [d3,f4]", N: "[eb3,eb4] [eb3,bb4]", O: "[eb3,bb4] [eb3,ab4] [e3,ab4] [e3,g4]",
  P: "[f3,f4]", Q: "[bb3,g4] [bb3,f4]", R: "[bb3,eb4]", S: "~@2 [eb3,ab4] [eb3,bb4]", T: "[eb3,c5] [g3,bb4]",
  U: "[eb3,bb4] [f3,f4] [eb3,g4] [eb3,a4]", V: "d3@2 eb3 ~", W: "~@2 [d3,g4] [d3,f4]",
})).s("gm_trombone").gain(0.3)

// chords · trombone · "Solo Cornet" · soft notes
const trombone_soft = note("<~@2 A B ~@4 C D E F G ~@28 H ~@2 I H ~@7>".pickRestart({
  A: "~ bb3", B: "bb3", C: "eb3@2 eb3!2", D: "eb3 g3", E: "eb3 f3 eb3!2", F: "d3@2 eb3 f3", G: "eb3 ~", H: "[eb3,g4] ~",
  I: "~@3 f3, bb4",
})).s("gm_trombone").gain(0.2)

// chords · tuba · "1st Cornet"
const tuba = note("<A B C D E F G H I J K L M N O P A B C D ~@17 E F G H Q R S ~ T N O P A B C D>".pickRestart({
  A: "bb2 ab3 [g3,g4] [f3,ab4], f4 ~", B: "[eb3,g4] [bb3,f4] [c4,eb4] [ab3,ab4]", C: "g4@2 ~ ab3, bb3@3 ~, ~ f4",
  D: "[g3,bb3,eb4]", E: "eb3 f3 g3 ab3 [bb3,g4]@2 [bb2,f4]@2, g4 ~", F: "[c3,eb4] [g2,bb4]",
  G: "[ab2,c5] [bb2,bb4] [c3,bb4] [d3,ab4]", H: "eb3 eb4 bb3 g3, g4", I: "eb3 d3 [c3,ab4] [bb2,bb4], g4 ~",
  J: "ab2 bb2 c3 d3 eb3@2 g3@2, c5 bb4", K: "[f3,bb4] [d3,f4] [eb3,g4] [f3,a4]", L: "bb2@2 c3 d3, bb4",
  M: "eb3 f3 g3 ab3 [bb3,g4]@2 [b3,f4]@2, g4 ~", N: "c4 c3 g3 g2, eb4 bb4", O: "bb4 ab4!2 g4, ab2 c3",
  P: "f3 eb3 d3 c3, f4", Q: "~@2 ab4 bb4", R: "c5 bb4", S: "bb4 f4 g4 a4", T: "~@2 [bb3,g4] [b3,f4]",
})).s("gm_tuba").gain(0.3)

// chords · tuba · "1st Cornet" · soft notes
const tuba_soft = note(`<
  ~@41
  [eb3 d3 c3 bb2, g4 ~]
  [ab2 bb2 c3 d3 eb3@2 g3@2]
  [f3 d3 eb3 f3]
  [bb2@2 c3 d3, bb4]
  [eb3 f3 g3 ab3 ~@4, g4 ~]
  ~@7
>`).s("gm_tuba").gain(0.2)

// chords · tuba · "2nd Cornet"
const tuba_2 = note("<A B C D E F G D H I J K L F M N O P Q R ~@15 S@2 T F G D U V W X Y F M N O P Q R>".pickRestart({
  A: "bb1 ab2 [g2,eb4] [f2,d4], d4 ~", B: "[eb2,eb4] [bb1,d4] [c2,eb4] [ab1,eb4]", C: "[bb1,eb4] [bb1,d4]",
  D: "[eb2,eb4]", E: "[eb2,eb4]@2 [bb1,d4]!2", F: "[c2,eb4] [g1,eb4]", G: "[ab1,eb4] [bb1,d4] [c2,eb4] [d2,f4]",
  H: "eb2 d2 [c2,eb4] [bb1,eb4], eb4 ~", I: "ab1 bb1 c2 d2 eb2@2 g2@2, eb4!2", J: "[f2,eb4] [d2,f4] [eb2,eb4] [f2,eb4]",
  K: "[bb1,d4]@2 [c2,eb4] [d2,f4]", L: "[eb2,eb4]@2 [bb1,d4] [b1,d4]",
  M: "eb4@2 ~ bb1 [c2,e4]@2 [c2,e4]@2, ab1@3 ~@5, ~ eb4 ~@2", N: "f2 eb2 d2 c2, f4",
  O: "bb1 [ab1,ab2] [g1,g2,eb4] [f1,f2,d4], d4 ~", P: "[eb1,eb2,eb4] [bb1,d4] [c2,eb4] [ab1,eb4]",
  Q: "[bb1,eb4] [bb0,bb1,d4]", R: "[eb1,eb2,eb4]", S: "[eb1,eb2]/2", T: "[eb1,eb2,eb4]@2 [bb1,d4]!2", U: "~@2 eb4!2",
  V: "eb4!2", W: "eb4 f4 eb4!2", X: "d4@2 eb4 ~", Y: "~@2 [bb1,d4] [b1,d4]",
})).s("gm_tuba").gain(0.3)

// chords · tuba · "2nd Cornet" · soft notes · Dm Eb
const tuba_soft_2 = note(`<
  ~@41
  [eb2 d2 c2 bb1, eb4 ~]
  [ab1 bb1 c2 d2 eb2@2 g2@2]
  [f2 d2 eb2 f2]
  [bb1@2 c2 [d2,f4]]
  [[eb2,eb4] ~]
  ~@7
>`).s("gm_tuba").gain(0.2)

// other · french horn · "Solo Horn"
const french_horn_2 = note(`<
  A B C D E F G D H F I J E F K L A B M ~@9 N F K L A B C D ~ E F G D O F I P N F K L A B C D
>`.pickRestart({
  A: "d4@2 eb4 d4", B: "eb4 d4 eb4!2", C: "eb4 d4", D: "eb4", E: "eb4@2 d4!2", F: "eb4!2", G: "eb4 d4 eb4 f4",
  H: "eb4@2 eb4!2", I: "eb4 f4 eb4!2", J: "d4@2 eb4 f4", K: "eb4!2 e4!2", L: "f4", M: "eb4 ~", N: "~@2 d4!2",
  O: "~@2 eb4!2", P: "d4@2 eb4 ~",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Solo Horn" · soft notes
const french_horn_soft = note("<~@18 A B C D E B F D G H I ~@12 I ~@2 J I ~@7>".pickRestart({
  A: "~ d4", B: "eb4", C: "eb4@2 d4!2", D: "eb4!2", E: "eb4 d4 eb4 f4", F: "eb4@2 eb4!2", G: "eb4 f4 eb4!2",
  H: "d4@2 eb4 f4", I: "eb4 ~", J: "~@3 f4",
})).s("gm_french_horn").gain(0.2)

// other · french horn · "1st Horn"
const french_horn_3 = note(`<
  A B C D E F G D H F I J E F K L A B C D ~@17 E F G D H F I J E F K L A B C D
>`.pickRestart({
  A: "d4@2 eb4 d4", B: "eb4 d4 eb4!2", C: "eb4 d4", D: "eb4", E: "eb4@2 d4!2", F: "eb4!2", G: "eb4 d4 eb4 f4",
  H: "eb4@2 eb4!2", I: "eb4 f4 eb4!2", J: "d4@2 eb4 f4", K: "eb4!2 e4!2", L: "f4",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "2nd Horn"
const french_horn_4 = note(`<
  A B C D E F G H I J K L E M N O A B P ~@9 Q M N O A B C D ~ E F G H R J K S Q M N O A B C D
>`.pickRestart({
  A: "bb3@2 bb3!2", B: "bb3 ab3 g3 c4", C: "bb3@3 ab3", D: "g3", E: "bb3@2 bb3 ab3", F: "g3 eb3", G: "eb3 bb3!3",
  H: "bb3", I: "bb3@2 ab3 g3", J: "ab3 g3", K: "c4 bb3!2 f3", L: "f3 bb3", M: "g3@2 eb4 d4", N: "c4!3 bb3", O: "ab3",
  P: "bb3@3 ~", Q: "~@2 bb3 ab3", R: "~@2 ab3 g3", S: "f3 ~",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "2nd Horn" · soft notes
const french_horn_soft_2 = note("<~@18 A B C D E F G H I J K ~@12 K ~@2 L K ~@7>".pickRestart({
  A: "~@3 ab3", B: "g3", C: "bb3@2 bb3 ab3", D: "g3 eb3", E: "eb3 bb3!3", F: "bb3", G: "bb3@2 ab3 g3", H: "ab3 g3",
  I: "c4 bb3!2 f3", J: "f3 bb3", K: "bb3 ~", L: "~ bb3",
})).s("gm_french_horn").gain(0.2)

// other · trombone · "1st Trombone"
const trombone_2 = note("<A B C D ~@4 E F G H I J K L A B C D ~@21 E F G H I J K L A B C D>".pickRestart({
  A: "f3@2 g3 ab3", B: "g3 f3 eb3 ab3", C: "g3 f3", D: "eb3", E: "g3@2 ab3 bb3", F: "c4 bb3", G: "g3 f3 g3 a3",
  H: "bb3", I: "g3@2 g3 f3", J: "eb3 bb3", K: "bb3 ab3!2 g3", L: "f3",
})).s("gm_trombone").gain(0.3)

// bass · trombone · "Bass Trombone"
const bass = note("<A B C D ~@4 E F G H I J K E A B C D ~@21 E F G H I J K E A B C D>".pickRestart({
  A: "bb2 ab3 g3 f3", B: "eb3 bb2 c3 ab2", C: "bb2!2", D: "eb3", E: "eb3 d3 c3 bb2", F: "ab2 bb2 c3 d3 eb3@2 g3@2",
  G: "f3 d3 eb3 f3", H: "bb2@2 c3 d3", I: "eb3@2 bb2 b2", J: "c3 g2", K: "ab2@3 bb2 c3@2 c3@2",
})).s("gm_trombone").gain(0.25)

// bass · electric bass finger · "E♭ Bass"
const bass_2 = note(`<
  A B C D E F@2 D G H I J K L M N O P Q ~@9 R S T U A B V W@3 F@2 D ~@4 R L M N O P C D
>`.pickRestart({
  A: "bb2 ab2 g2 f2", B: "eb2 bb2 c3 ab2", C: "bb2 [bb1,bb2]", D: "[eb2,eb3]", E: "eb2@2 [bb1,bb2]!2", F: "c3 g2",
  G: "eb3 d3 c3 bb2", H: "[ab1,ab2] [bb1,bb2] [c2,c3] [d2,d3] [eb2,eb3]@2 g2@2", I: "f2 d2 eb2 f2", J: "bb2@2 c3 d3",
  K: "[eb2,eb3]@2 bb2 b2", L: "[c2,c3] g2", M: "ab2@3 bb2 c3@2 c3@2", N: "[f2,f3] [eb2,eb3] [d2,d3] [c2,c3]",
  O: "bb2 [ab2,ab3] [g2,g3] [f2,f3]", P: "[eb2,eb3] bb2 c3 ab2", Q: "bb2 ~", R: "~@2 bb2 b2", S: "c3!2 g3 g2",
  T: "ab2 c3", U: "f3 eb3 d3 c3", V: "bb2@3 ab2", W: "[eb2@10 [bb1,bb2]!2]/3",
})).s("gm_electric_bass_finger").gain(0.3)

// bass · electric bass finger · "E♭ Bass" · soft notes
const bass_soft = note("<~@18 A B C D E F G H I J K ~@12 G L M J N ~@7>".pickRestart({
  A: "~ [bb1,bb2]", B: "[eb2,eb3]", C: "eb2 f2 g2 ab2 bb2@2 bb2@2", D: "c3 g2", E: "ab2 bb2 c3 d3", F: "eb3!2 bb2 g2",
  G: "eb3 d3 c3 bb2", H: "ab2 bb2 c3 d3 eb3@2 g3@2", I: "f3 d3 eb3 f3", J: "bb2@2 c3 d3", K: "eb2 f2 g2 ab2 ~@4",
  L: "[ab1,ab2] [bb1,bb2] [c2,c3] [d2,d3] [eb2,eb3]@2 g2@2", M: "f2 d2 eb2 f2", N: "[eb2,eb3] ~",
})).s("gm_electric_bass_finger").gain(0.2)

stack(
  french_horn, trombone, trombone_soft, tuba, tuba_soft, tuba_2, tuba_soft_2, french_horn_2, french_horn_soft,
  french_horn_3, french_horn_4, french_horn_soft_2, trombone_2, bass, bass_2, bass_soft
)