Strudelify

amazing grace

N.B. Vergara

KeyA majorTempo75 bpm
0:00/0:00
// amazing grace — N.B. Vergara
// 75 bpm, 3/4, key A 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 (3/4 at bar 1, 4/4 at bar 35) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/2474626; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 63 bars on a 32-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 · [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.

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  A B C D E F G H@2 I J K E F C L@2 B C D E F G H@2 I J K E F C M N O P Q@6 R@7 S@6 T@8 ~
>`.pickRestart({
  A: "~@21 d4@5 ~ e4@5", B: "g4@21 b4@5 ~ g4@5", C: "b4@21 a4@11", D: "g4@21 e4@11", E: "d4@21 d4@11",
  F: "g4@21 b4@3 a4@3 g4@5", G: "b4@21 c#5@11", H: "[d5@53 [b3,b4]@11]/2", I: "d5@21 b4@3 a4@3 g4@5", J: "b4@21 d4@11",
  K: "e4@16 g4@5 g4@5 ~ e4@5", L: "[g4@43 ~@10 d4@5 ~ e4@5]/2", M: "g4", N: "g4@21 g4@11", O: "g4@21 f4@5 ~ g4@5",
  P: "a#4",
  Q: "[~@2 d5@4 c5@4 a#4@4 d5@34 c5@4 d5@4 c5@3 a#4@34 ~ g4@4 a#4@3 g4@4 f4@34 f4@4 g4@4 a#4@4 a#4@34 d5@4 c5@3]/6",
  R: "[~ a#4@4 d5@34 c5@6 d5@5 f5@80 d5@4 d#5@4 f5@4 f5@34 d5@4 c5@4 a#4@3 d5@34 ~@3]/7",
  S: "[~@3 c5@6 a#4@34 g4@4 a#4@4 g4@4 f4@34 f4@11 ~ a#4@34 d5@6 a#4@5 d5@17 d#5@3 d5@3 c5@17 a#4@6]/6", T: "a#4/8",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "Horn in B♭"
const french_horn = note(`<
  A B C D E F G H I J K L M B N O P B C D E F G H I J K L M B N O Q R S T@6 U@3 V W@6 X@3 Y Z@8
>`.pickRestart({
  A: "~@21 d4@5 ~ c4@5", B: "b3@21 d4@11", C: "d4@21 d4@11", D: "c4@21 c4@11", E: "b3@21 a3@11", F: "e4@21 d4@11",
  G: "e4@21 e4@11", H: "g4", I: "f#4@21 f#4@11", J: "g4@21 d4@11", K: "f4@21 f4@11", L: "e4@16 c4@5 c4@5 ~ a3@5",
  M: "b3@21 b3@11", N: "e4@21 c4@11", O: "b3@11 d4@10 c4@11", P: "b3@11 ~@10 d4@5 ~ c4@5", Q: "b3@11 b3@10 c4@11",
  R: "c#4@21 ~@11", S: "d4", T: "[~@2 f4@8 f4@4 f4@34 f4@8 f4@3 d#4@34 ~ d#4@7 d#4@4 d4@34 d4@8 d4@4 g4@34 f4@7]/6",
  U: "[~ f4@4 g4@34 g4@4 g4@3 g4@4 a#4@34 ~ a#4@3 a#4@4 a#4@4]/3", V: "a4@11 a4@4 a#4@4 a4@4 a4@4 ~@5",
  W: "[~@14 a#4@34 f4@4 f4@4 f4@3 g#4@34 ~ g#4@4 g#4@3 g#4@4 g4@34 d#4@4 d#4@4 c4@4 d4@34 d4@4 d4@3]/6",
  X: "[~ d4@4 d4@34 f4@4 f4@3 f4@4 g4@17 g4@3 a#4@3 a4@8 g4@7 f4@8]/3", Y: "d4@17 d4@3 d#4@3 d4@9",
  Z: "[~@2 f4@11 ~ g4@17 g4@3 g4@3 g4@7 a4@8 g4@7 f#4@17 ~ f#4@2 f#4@3 f#4@11 g#4@11 d#4@10 d4@4 c4@4 d4@120 ~@14]/8",
})).s("gm_french_horn").gain(0.3)

// other · trombone
const trombone = note(`<
  A B C D E F G H@2 I J B K L M N@2 B C D E F G H@2 I J B K L M O@2 P Q R S@3 T U V@3 W X Y@3 Q Z AA@3 AB@2 AC@7
>`.pickRestart({
  A: "~@21 d3@5 ~ d3@5", B: "g2@21 g2@11", C: "b2@21 b2@11", D: "c3@21 c3@11", E: "g2@21 a2@11", F: "e3@21 b2@11",
  G: "a2@21 a2@11", H: "[d3@53 d3@11]/2", I: "g3@21 g3@11", J: "g3@21 g2@11", K: "g2@21 f#2@11", L: "e2@21 b2@11",
  M: "a2@21 d3@11", N: "[g2@43 ~@21]/2", O: "[~@32 g3@21 f3@11, g2@43 ~@21]/2", P: "d#3@21 ~@11",
  Q: "a#2@11 a#2@4 a#2@4 a#2@4 a#2@9", R: "~@2 a#2@8 a#2@4 a#2@11 a#2@4 a#2@3",
  S: "[~ a#2@4 a#2@11 a#2@8 a#2@3 d#3@11 ~ d#3@4 d#3@3 d#3@4 d#3@11 ~ d#3@4 d#3@3 d#3@4 a#2@11 ~ a#2@3 a#2@4 a#2@4]/3",
  T: "a#2@11 c3@8 c3@4 g3@9", U: "~@2 g3@4 g3@4 g3@4 g3@11 d3@7",
  V: "[~ d3@4 c3@11 c3@4 c3@4 c3@3 c3@11 ~ c3@4 c3@3 c3@4 f3@17 f3@6 f3@8 g3@7 f3@8]/3",
  W: "f3@11 f3@4 g3@4 f3@4 f3@4 ~@5", X: "~@14 a#3@11 a#3@4 a#3@3",
  Y: "[~ a#3@4 a#3@11 a#3@4 a#3@4 a#3@3 a#3@11 ~ a#3@4 a#3@3 a#3@4 a#3@11 ~ a#2@7 a#2@4 a#2@11 ~ a#2@3 a#2@4 a#2@4]/3",
  Z: "~@2 a#2@4 a#2@4 a#2@4 a#2@11 a2@4 a2@3",
  AA: "[~ a2@4 g2@11 g2@4 g2@4 g2@3 g2@11 ~ d3@4 d3@3 d3@4 c3@17 c3@4 ~@2 f3@8 g3@7 f3@8]/3",
  AB: "[a#2@17 a#2@3 c3@3 d3@6 c3@2 a#2@14 ~ d#3@17 d#3]/2",
  AC: "[~@5 d#3@22 d#3@17 ~ d#3@4 ~ d#3@11 f3@11 d#3@10 a#2@128 ~@14]/7",
})).s("gm_trombone").gain(0.3)

stack(trumpet, french_horn, trombone)