Strudelify

Amazing Grace (My Chains Are Gone)

Andrew Murphy

KeyC majorTempo75 bpm
0:00/0:00
// Amazing Grace (My Chains Are Gone) — Andrew Murphy
// 75 bpm, 3/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (1/4 at bar 1, 3/4 at bar 2) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4581516; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 65 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(75/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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.

// other · french horn · "Horn in F"
const french_horn = note(`<
  ~ A@5 B@7 C@7 ~@2 D@2 E F G H I@2 J K L M F H F N O P Q R@2 S T@2 U@5 F V W S ~ F X Y N Z F@2 AA@2
>`.pickRestart({
  A: "[~ c4@4 g4@6 g4@2 f4@4 c4@2 a3@2 c4@4 c4@2 ~@3]/5",
  B: "[~ g3@2 c4@4 c4@4 c4@2 d4@4 d4@2 g4@4 g4@6 e4@4 g3@2 a3@4 c4!2 a3]/7",
  C: "[g3@5 g3@4 g3@2 e3@6 g3@6 g3@6 c4@6 e4@6 ~]/7", D: "[g4@2 g4@3 a4]/2", E: "a4@2 f4", F: "e4", G: "~ e4@2",
  H: "c4", I: "[e4 g3 b3@3 ~]/2", J: "c4@2 e4", K: "g4", L: "~ f4 a4", M: "f4 c4 ~", N: "e4@2 ~", O: "c4 e4 g4",
  P: "c5", Q: "c5!2 f4", R: "[a4@4 g4 e4@5 ~@2]/2", S: "e4 c4@2", T: "[a4 f4 c4]/2",
  U: "[c4@2 e4@2 g3@3 ~ e4@2 g4 f4@3 a4]/5", V: "g4@2 ~", W: "g3 c4@2", X: "c4@2 f4", Y: "f4@2 c4", Z: "~ g3@2",
  AA: "[c5!2 g4@4]/2",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn in F"
const french_horn_2 = note(`<
  ~ A B@5 C@6 D@7 ~@2 E@2 F G H I J@2 K L M N O I G P Q R S T U V W@7 O X Y@2 ~ G Z AA AB AC O AD@2 G
>`.pickRestart({
  A: "~ e4@4 e4", B: "[c4 g3@4 e4@2 a3@4 a3@2 e4@8 ~@2 g3@2 c4@4 e4]/5",
  C: "[c4 e4@4 e4@2 g4@6 e4@2 g4@4 e4 g4 e4 c4@5 g3@2 f3@2 c4@4 e4]/6",
  D: "[c4 c4@4 d4@2 c4@4 a3@2 g3@4 c4@6 e4@4 a4@2 a4@2 g4@4 c5@6 ~]/7", E: "[e4@2 c4@3 c4]/2", F: "f4@2 c4", G: "g4",
  H: "~ g4@2", I: "e4", J: "[g3 c4 d4@3 ~]/2", K: "e4@2 g4", L: "e4 c4@2", M: "~ c4@2", N: "a3", O: "c4", P: "g4@2 ~",
  Q: "g3 c4@2", R: "c4 a3 c4@4", S: "c4 a3@2", T: "g3 e3@2", U: "g3@2 ~", V: "c4 e4 g4",
  W: "[c5@4 a4@4 f4@2 a4@4 g4 e4 e4@4 d4 c4 c4@4 ~@2 c4@4 e4@2 c4@6 a3@2]/7", X: "e4@2 ~", Y: "g3", Z: "g3@2 c4",
  AA: "a3@2 f4", AB: "c4@2 ~", AC: "~ e4@2", AD: "[c4 e4@2]/2",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn in F"
const french_horn_3 = note(`<
  ~ A@8 B@4 C@7 ~@2 D@2 E F G F H@2 I F J K L F@2 M F N L O@2 P Q L R@5 S T L@2 U V W E M X Y Z@2 L
>`.pickRestart({
  A: "[~ g2@4 c3@6 g2@6 f3@2 c3@2 a2@2 g2@4 ~@2 g2@6 g2@6 g2@2 g2@4 g2]/8", B: "[~ e2@2 g2@4 g2@4 g2@6 c3@2 a2@4 a2]/4",
  C: "[g2 g2@4 g2@4 g2@2 c3@4 e3 c3 e3@4 d3@2 c3@8 c3@6 c3@4 ~]/7", D: "[g2@2 g2@3 d3]/2", E: "c3@2 a2", F: "g2",
  G: "~ c3@2", H: "[c3 e2 g2@3 ~]/2", I: "c3@2 g2", J: "g2 a2@2", K: "c3!2 a2 g2@3", L: "c3", M: "g2@2 ~", N: "a2@2 c3",
  O: "[a2@2 c3@3 ~]/2", P: "c3 e3 g3", Q: "f3@2 a2", R: "[a2 g2 c3@2 g2@3 ~ c3@2 e3 a2@3 c3]/5", S: "e3@4 e3 c3",
  T: "c3@2 ~", U: "~@2 g2", V: "c3@4 e3 c3", W: "e3@2 d3", X: "g2 c3@2", Y: "e3 c3 e3@4", Z: "[e3 c3@5]/2",
})).s("gm_french_horn").gain(0.25)

stack(french_horn, french_horn_2, french_horn_3)

More by Andrew Murphy