Strudelify

Amazing Grace

Deirdre Johnson

KeyB♭ majorTempo100 bpm
0:00/0:00
// Amazing Grace — Deirdre Johnson
// 100 bpm, 3/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/6228181; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 55 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 B C D E F G H I J K ~@4 L M N K O M P Q@2 R N K S T N U@2 V W X Y Z AA AB@2 AC AD AE B AF AG AH@2 AI AJ@5
>`.pickRestart({
  A: "bb3", B: "g3", C: "ab3@2 f3", D: "eb3@4 eb3 f3", E: "g3 eb3 g3", F: "eb4@2 d4", G: "c4 d4 eb4", H: "f4@2 bb3",
  I: "c4@2 c4 bb3 g3@2", J: "g3 f3@2", K: "eb4@2 c4", L: "~@2 bb3", M: "eb4@4 g4 eb4", N: "g4@2 f4",
  O: "bb3@8 ab3 bb3 c4 d4", P: "g4@8 f4@3 g4", Q: "[bb4@20 g4@3 bb4]/2", R: "bb4@4 g4 eb4", S: "bb3@4 bb3 c4",
  T: "eb4@8 g4@3 eb4", U: "[eb4@5 ~]/2", V: "g3@2 g3", W: "eb3@2 eb3", X: "g3@3 ab3@2 bb3@3 c4@16", Y: "bb3 g3 eb3@4",
  Z: "ab3@2 bb3", AA: "ab3@8 g3@8 ab3@3 bb3@2 c4@3", AB: "[d4@10 bb3 eb4]/2", AC: "eb4@2 bb3", AD: "g3 bb3 g3",
  AE: "eb3@4 f3 ab3", AF: "g3@2 ab3", AG: "bb3@2 ab3", AH: "[g3@41 ~@7]/2", AI: "~@11 g4",
  AJ: "[~ f4@3 eb4@3 ~ g4@19 f4@10 eb4@62 ~@21]/5",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<~@12 [eb4@2 eb4] [g4 f4@2] [eb4 c4@2] [eb4@2 d4] [eb4 ~@2] ~@38>")
  .s("gm_french_horn").gain(0.2)

// other · french horn · "Horn in F"
const french_horn_2 = note(`<
  ~ A B C D A E F G H I J A K L J M N O P D Q R S T U V W X Y N Z@2 AA AB AC AD AA AE AF@2 AG AB AC AH AI AB AJ@2 AK@6
>`.pickRestart({
  A: "g3@2 g3", B: "eb3@2 eb3", C: "f3@2 f3", D: "g3", E: "bb3@2 bb3", F: "c4 bb3 g3", G: "bb3@2 g3",
  H: "ab3@2 ab3 g3 eb3@2", I: "eb3 d3@2", J: "g3@2 f3", K: "bb3 ab3@2", L: "g3 f3@2", M: "g3@2 ~", N: "bb3",
  O: "c4 bb3@2", P: "c4@2 ab3", Q: "bb3 g3 bb3", R: "c4 bb3@3 bb3@2", S: "c4 d4 eb4", T: "f4", U: "g4 f4@2",
  V: "eb4 d4@2", W: "ab4 f4 eb4", X: "d4", Y: "c4", Z: "[bb3@4 ~ bb3]/2", AA: "eb4@4 g4 eb4", AB: "g4@2 f4",
  AC: "eb4@2 c4", AD: "bb3@16 bb3@3 c4@2 d4@3", AE: "g4@16 f4@3 g4@2 ab4@3", AF: "[bb4@10 g4 bb4]/2",
  AG: "bb4@16 g4@3 f4@2 eb4@3", AH: "bb3@4 bb3 c4", AI: "eb4@16 g4@3 f4@2 eb4@3", AJ: "[eb4@41 ~@7]/2",
  AK: "[~@3 bb3@29 d4@19 f4@10 eb4@20 ~ c4@21 bb3@21 ~@20]/6",
})).s("gm_french_horn").gain(0.3)

stack(french_horn, french_horn_soft, french_horn_2)