Strudelify

The Hymn of Acxiom

Vienna Teng

KeyF majorTempo104 bpm
0:00/0:00
// The Hymn of Acxiom — Vienna Teng
// 104 bpm, 3/4, key F 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 10, 3/4 at bar 11, 4/4 at bar 19, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/466116; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 116 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(104/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.

// chords · trumpet · "Bb Trumpet"
const trumpet = note("<~@41 A B C D E@2 F@3 G@5 H I@2 J@8 ~@4 K@2 L M N@2 O@8 ~@32>".pickRestart({
  A: "~ [d4,a4] [gb4,a4]", B: "[g4,a4] [g4,bb4] [g4,d5]", C: "[g4,c5,eb5]", D: "[g4,bb4,d5]",
  E: "[[d4,g4,d5] [e4,a4,e5]@7 a4@2 [a4,e5]@2]/2", F: "[[g4,e5]@11 [f4,d5]@2 [f4,d5]@13 [g4,e5]@10]/3",
  G: "[~ [f4,d5]@2 [f4,d5]@11 [f4,c5]@2 [g4,d5]@12 [g4,d5]@2 [ab4,eb5]@10 [g4,bb4,eb5]@10 [bb4,c5]@5 [bb4,c5,eb5]@5]/5", // Dm F5 G5 Ab5 Eb Bbsus2 Cm7
  H: "[bb4,d5,f5]@5 ~@3", I: "[~@20 [g4,g5]@10 [f4,f5]@5 [eb4,g4,eb5]@5 [eb4,bb4,eb5]@8]/2",
  J: "[~ [c5,eb5]@24 ~ bb4@4 c5@5 eb5@19 ~ bb4@4 ~@10 [c5,ab5]@10 [bb4,g5]@9 g5@3 ~ f5@3 ~@3 ab4@10 g4@9 ~@29 eb5@19 ~ d5@5 ~@21, ~ ab5@58 c5@10 ~@19 bb4@77 ~@27, ~@64 eb5@24 g4@10 ~@19 ab4@58 ~@17, ~@95 eb5@51 ~@46]/8", // Cm Fm Eb
  K: "[~@20 [ab4,c5]@9 ~ [bb4,d5]@9 [c5,eb5]@9]/2", L: "[bb4,d5]@3 [c5,eb5]@3 [d5,f5]@2",
  M: "~@3 [c5,eb5]@9 [d5,f5]@10 [eb5,g5]@2", N: "[~@8 g5@6 [g5,bb5]@23 ~@5 bb4@6, ~@8 d5@35 ~@5, ~@37 [eb5,g5]@11]/2",
  O: "[~ [ab4,c5,eb5,ab5]@31]/8", // Ab
})).s("gm_trumpet").gain(0.3)

// chords · trumpet · "Bb Trumpet" · soft notes
const trumpet_soft = note("<~@26 A B C D E F G@2 ~@30 H@3 ~@49>".pickRestart({
  A: "~ [d4,g4]!2", B: "[d4,g4] [d4,g4,a4] [d4,g4,bb4]", C: "[eb4,ab4,c5]", D: "[eb4,ab4,bb4]",
  E: "eb4 f4 d4, [ab4,bb4]", F: "g4 ab4 g4, eb4", G: "[eb4 d4 c4 d4@3, f4]/2",
  H: "[~@27 c5@4 ab4@10 g4@10 ~@21, ~@22 bb4@29 ~@21, ~@31 eb5@19 ~@22]/3",
})).s("gm_trumpet").gain(0.2)

// chords · french horn · "F Mellophone"
const french_horn = note(`<
  ~@5 A@2 B@3 C@3 D@4 E@2 ~@4 F@4 ~@6 G H I@2 J H K L@2 ~@5 M@5 ~ N@2 O@3 P@7 Q ~ R@2 S@3 T@4 U@8 ~@9 V W X Y@2 Z@8 ~
  AA@8 ~
>`.pickRestart({
  A: "[~@2 [eb4,g4]@8 [eb4,f4]@4 ~ eb4@4 eb4@9 [eb4,ab4]@8 c4@9 ~@3]/2", // Eb Ebsus2 Ab5
  B: "[~@6 bb3@4 [ab3,c4]@4 [c4,eb4]@17 ~ [ab3,c4]@4 bb3@4 bb3@17 ~@9 [ab3,c4]@6]/3", // Ab Cm Ab
  C: "[~@3 [bb3,d4]@8 [c4,eb4]@8 [bb3,d4]@8 ~ [c4,eb4]@8 [d4,f4]@8 [c4,eb4]@8 ~ [d4,f4]@8 [eb4,g4]@8 [eb4,g4]@3]/3", // Bb Cm Bb Cm Dm Cm Dm Eb
  D: "[~ [eb4,ab4]@12 ~ [eb4,g4]@8 [ab3,c4]@8 [bb3,d4]@8 [c4,eb4]@8 [bb3,d4]@8 [c4,eb4]@8 [d4,f4]@8 [c4,eb4,g4]@9 [d4,f4]@8 [eb4,g4]@9]/4", // Ab5 Eb Ab Bb Cm Bb Cm Dm …
  E: "[[eb4,g4]@2 eb4@13 eb4@2 ~@7, ~@2 bb4@15 ~@7]/2", F: "[~@3 [c4,f4,ab4]@20 [bb3,eb4,g4]@19 [a3,d4,g4]@46 ~@8]/4",
  G: "~ [d4,f4] [d4,g4]", H: "[f4,ab4]", I: "[g4@3 ~ d4 c4, eb4@2 ~, ~ f4]/2", J: "~ f4 [d4,g4], d4@2 ~",
  K: "[eb4,g4]@2 ~", L: "[g4 ~ d4@2 e4@2 gb4@6, d4 ~@5, ~ a4@11]/2",
  M: "[g4@4 a4@11 g4@2 f4@4 ~ a4@30 f4@4 [d4,bb4]@48 ~@16]/5", N: "[~@4 [g4,eb5]@10 [g4,c5]@5 [g4,bb4,eb5]@5]/2",
  O: "[[bb3,bb4]@44 [eb4,g4,bb4]@10 [f4,g4,bb4]@5 [eb4,g4]@5 [eb4,g4]@8, [g4,f5]@5 ~@19]/3", // Bb Eb Gm7 Eb G7
  P: "[~ c5@24 ~ bb4@4 c5@5 eb5@19 ~ bb4@4 c5@5 ~@5 ab4@10 g4@9 eb4@4 f4@3 eb4@3 f4@10 eb4@9 [eb4,ab4]@10 [c4,eb4]@14 ~ bb3@4 c4@5 [c4,eb4]@17, ~ [eb4,ab4]@58 ~@5 eb5@24 g4@10 ~@70]/7", // Ab5 Cm Ab5
  Q: "~@3 [ab3,c4]@5 ~@16", R: "[~@14 [bb3,d4]@9 [c4,eb4]@9 [d4,f4]@8 [c4,eb4]@8]/2",
  S: "[~ [d4,f4]@9 [eb4,g4]@8 g4@4 ~@5 d4@9 eb4@4 d4@4 [ab3,c4]@9 ~ [bb3,d4]@9 [c4,eb4]@9, ~@23 ab4@13 g4@9 ~@27]/3", // Dm Eb Ab Bb Cm
  T: "[[bb3,d4]@9 [c4,eb4]@9 [d4,f4]@9 [eb4,g4]@9 [d4,f4]@10 [eb4,g4]@10 [g4,bb4]@6 [g4,bb4]@17 [ab3,eb4]@6 [bb3,f4]@5 [c4,g4]@6]/4", // Bb Cm Dm Eb Dm Eb Gm Ab5 …
  U: "[[eb4,bb4]@3 ~@46 eb5@47, ~ [eb4,ab4,c5]@31]/8", V: "~ [d4,f4]@6 [d4,g4]@5", W: "~ [c4,f4,ab4]@11",
  X: "~ [eb4,g4]@17 f4@6, ~ bb3@23", Y: "[c4@17 d4@7, f4]/2",
  Z: "[~@51 bb3@30 a3@29 gb3@30 ab3@52, ~@7 eb4@57, ~@55 bb3@41]/8", AA: "[~@23 [bb3,eb4,g4]@169]/8",
})).s("gm_french_horn").gain(0.3)

// chords · french horn · "F Mellophone" · soft notes
const french_horn_soft = note("<A@4 B ~@13 C@2 ~@45 D E@2 ~@48>".pickRestart({
  A: "[~@18 [eb4,g4]@8 [eb4,f4]@9 eb4@9 [eb4,ab4]@8 c4@9 ~@9 bb3@4 [ab3,c4]@4 [c4,eb4]@9 ~@9]/4", // Eb Ebsus2 Ab5 Ab Cm
  B: "bb3@4 c4@4 [bb3,eb4]@9 c4@7, ab3@3 ~@5", C: "[~@11 [ab3,c4,eb4]@4 [ab3,c4,eb4]@28 ~@5]/2", D: "~@7 [bb3,eb4]@17",
  E: "[~@4 [ab3,c4]@3 [bb3,d4]@3 [c4,eb4]@3 ~@3]/2", // Ab Bb Cm
})).s("gm_french_horn").gain(0.2)

// other · tuba · "Euphonium"
const tuba = note(`<
  ~@13 A@4 B@2 ~@14 C D E@2 C D F G@2 ~@4 H I J@7 K L@2 M@4 N@2 O@8 P Q@3 R@8 ~@10 S T U@3 ~ V W X Y@4 Z@8 ~
>`.pickRestart({
  A: "[~@11 ab2@12 bb2@12 c3@13]/4", B: "[~@9 bb2@26 ~@13]/2", C: "~ bb3!2", D: "c4", E: "bb3/2", F: "bb3@2 ~",
  G: "a3/2", H: "a2 a3!2", I: "a3",
  J: "[~@2 a3@9 a3@8 a3@9 bb3@26 bb3@9 bb3@8 bb3@9 ~@8 ab3@16 ~@8 ab3@16 bb3@20 bb3@10 bb3@10]/7", K: "bb3@5 ~@3",
  L: "[~@10 g3@5 g3@5 g3@4]/2", M: "[~@11 ab3@19 ab3@10 ab3@19 ab3@10 ab3@19 g3@8]/4", N: "[~@2 ab3@10 g3@9 ab3@27]/2",
  O: "[~@2 ab3@29 ab3@10 g3@10 ~@9 ab3@26 bb3@26 c4@26 bb3@26 ab3@27 ~]/8", P: "bb3", Q: "[~@3 c4@29 bb3@34 bb3@6]/3",
  R: "[~ eb3@31]/8", S: "~ f3@11", T: "~ eb3@23", U: "[f3@29 ~@7]/3", V: "~ bb3@7", W: "~@3 a3@5", X: "~@7 gb3@5",
  Y: "[~@5 ab3@19]/4", Z: "[~@23 g3@169]/8",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "C Tuba"
const bass = note(`<
  ~@9 A@8 B@3 ~@9 C D E D ~@3 D F ~@3 G H C D I J K L@7 M N@2 O@2 P@2 Q@4 R@6 S@4 T@8 ~@12 U@3 ~@8 V@8 ~
>`.pickRestart({
  A: "[~@18 ab2@25 bb2@25 c3@25 g2@25 ab2@24 bb2@24 c3@26]/8", B: "[~@9 eb2@26 eb2@4 eb2@28 ~@5]/3", C: "c3", D: "bb2",
  E: "eb2", F: "~ bb2!2", G: "~ d3!2", H: "g2!3", I: "a2", J: "a1", K: "d2",
  L: "[~@2 d2@9 d3@8 a2@9 d2@26 d2@9 d3@8 a2@9 ab2@24 ab2@24 bb2@20 g2@10 bb1@10]/7", M: "bb1@5 ~@3",
  N: "[~@10 g2@5 eb2@5 eb2@4]/2", O: "[~@11 ab1@19 ab1@18]/2", P: "[~@2 ab1@9 ab1@29 g2@8]/2",
  Q: "[~@2 g2@10 g2@9 ab1@19 ~ eb2@9 ab2@29 eb2@17]/4", R: "[~@12 ab2@26 bb2@26 c3@26 g2@26 ab2@27 ~]/6",
  S: "[bb2@27 c3@29 ~@11 eb3@17 ~ d3@5 c3@6]/4", T: "[bb2@3 ~@46 [ab1,eb3]@47, ~ ab2@31]/8", U: "[bb2@29 ~@7]/3",
  V: "[~@23 eb2@169]/8",
})).s("gm_tuba").gain(0.35)

stack(trumpet, trumpet_soft, french_horn, french_horn_soft, tuba, bass)