Strudelify

Liberty Bell

John Phillip SOUSA

KeyF majorTempo176 bpm
0:00/0:00
// Liberty Bell — John Phillip SOUSA
// 176 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/102606; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(176/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 · trumpet · "B Trumpet"
const trumpet = note(`<
  A B C D E F G H I J K L E M N O P Q R S E F G H I J K L E M N O P Q R S ~@15 T U V W X Y Z AA L AB AC AD AE AF V AG X
  ~@15 AH AI AJ AK AL AI AJ AM AN AO AP AQ AR AS AT AU@2 AV AW AV AW AV AX AY AZ BA BB BA BB BA BC BD BE BF BG BF BG BH
  BI BJ BK AW
>`.pickRestart({
  A: "f5@5 e5@3 d5@5 db5@3", B: "c5@5 b4@3 bb4@5 a4@3", C: "g4@3 a4@2 bb4@3 a4@5 g4@3", D: "c4@5 ~@8 c5@3",
  E: "a4@3 ~@2 a4@3 a4@3 ab4@2 a4@3", F: "f5@3 ~@2 c5@3 c5@3 ~@2 a4@3", G: "bb4@3 ~@2 bb4@3 bb4@3 ~@2 c5@3",
  H: "d5@11 ~@2 bb4@3", I: "g4@3 ~@2 g4@3 g4@3 gb4@2 g4@3", J: "e5@3 ~@2 d5@3 d5@3 ~@2 bb4@3",
  K: "a4@3 ~@2 a4@3 a4@3 ~@2 bb4@3", L: "c5@11 ~@2 c5@3", M: "a5@3 ~@2 f5@3 f5@3 ~@2 c5@3",
  N: "b4@3 ~@2 g5@3 g5@3 ~@2 g5@3", O: "g5@11 ~@2 f5@3", P: "e5@5 g5@3 g5@3 gb5@2 g5@3", Q: "d5@5 g5@3 g5@3 gb5@2 g5@3",
  R: "c5@3 ~@2 b4@3 c5@3 ~@2 b4@3", S: "c5@5 ~@3 c5@5 ~@3", T: "~@13 c4@3", U: "a4@3 ab4@2 a4@3 d5@5 c5@3", V: "a4 f4",
  W: "d4 g4", X: "f4@11 ~@2 f4@3", Y: "g4@3 a4@2 bb4@3 e5@5 d5@3", Z: "c5 f5", AA: "e5 d5",
  AB: "d5@3 ~@2 d5@3 e5 d5 ~ db5@2 d5@3", AC: "e5!2", AD: "f5@3 ~@2 f5@3 a5 g5 ~ f5@2 g5@3", AE: "a5@11 ~@2 a5@3",
  AF: "g5@3 ~@2 f5@3 d5@3 ~@2 bb4@3", AG: "g4 e4", AH: "~@13 f4@3", AI: "d4 eb4", AJ: "e4 f4",
  AK: "d5@3 ~@2 d5@3 d5@3 ~@2 db5@3", AL: "d5@11 ~@2 f4@3", AM: "eb5@3 ~@2 eb5@3 eb5@3 ~@2 d5@3", AN: "eb5@11 ~@2 d5@3",
  AO: "c5 b4", AP: "c5@5 f4@3 e4@5 f4@3", AQ: "d5 db5", AR: "d5@5 f4@3 e4@5 f4@3", AS: "g4 eb5",
  AT: "d5@5 bb4@3 c5@5 a4@3", AU: "[bb4@21 ~@11]/2", AV: "~@5 eb5@3 eb5@3 d5@2 c5@3", AW: "bb4@5 ~@11",
  AX: "bb4@5 bb4@3 c5@3 bb4@2 c5@3", AY: "d5@5 ~@3 d5@5 ~@3", AZ: "d5@5 ~@11", BA: "~@5 g4@3 g4@3 f4@2 eb4@3",
  BB: "d4@5 ~@11", BC: "d4@5 d4@3 e4@3 d4@2 e4@3", BD: "f4@5 ~@3 a4@5 ~@3", BE: "f5@5 ~@11", BF: "~@13 db5@3",
  BG: "a4@5 c5@3 f5@5 ~@3", BH: "e5", BI: "f5", BJ: "gb5", BK: "f5@5 ~@3 f4@5 ~@3",
})).s("gm_trumpet").gain(0.25)

// bass · trombone
const bass = note(`<
  A B C D E@2 F G H@2 I J E@2 K L M@2 N O E@2 F G H@2 I J E@2 K L M@2 N O P Q R P S T M U V W X W Y O S Z P Q R P S T M
  U V W X W Y O S Z AA AB AC@2 AA AB AD@2 AE@2 AF@2 AG@2 AE@2 AA AB AC@2 AA AB AD@2 AE@2 AF@2 AH AI AJ AK AL AM AL AM AL
  AN AO AP AQ AR AS AR AS AT AU AV AW AX AW AX AY AZ BA AU BB
>`.pickRestart({
  A: "f3@5 e3@3 d3@5 db3@3", B: "c3@5 b2@3 bb2@5 a2@3", C: "g2@3 a2@2 bb2@3 a2@5 g2@3", D: "c3@5 ~@11",
  E: "f2@3 ~@5 c2@3 ~@5", F: "e2@5 f2@3 g2@5 f2@3", G: "e2@5 d2@3 c2@5 d2@3", H: "e2@3 ~@5 c2@3 ~@5",
  I: "f2@5 g2@3 a2@5 g2@3", J: "f2@5 e2@3 d2@5 c2@3", K: "d2@5 e2@3 f2@5 e2@3", L: "d3@5 c3@3 b2@5 a2@3",
  M: "g2@5 ~@3 g2@5 ~@3", N: "c2@3 ~@2 g2@3 c2@3 ~@2 g2@3", O: "c2@5 ~@3 c2@5 ~@3", P: "f2@5 ~@3 c2@5 ~@3",
  Q: "f2@5 ~@3 a2@5 ~@3", R: "bb2@5 ~@3 c3@5 ~@3", S: "e2@5 ~@3 c2@5 ~@3", T: "f2@5 ~@3 d2@5 ~@3",
  U: "c2@5 ~@3 c3@5 ~@3", V: "bb2@5 ~@3 bb2@5 ~@3", W: "a2@5 ~@3 a2@5 ~@3", X: "d2@5 ~@3 bb2@5 ~@3",
  Y: "bb2@5 ~@3 bb1@5 ~@3", Z: "f2@5 c3@3 f2@5 ~@3", AA: "bb1@3 ~@5 c2@3 ~@5", AB: "db2@3 ~@5 d2@3 ~@5",
  AC: "bb1@3 ~@5 f2@3 ~@5", AD: "c2@3 ~@5 f2@3 ~@5", AE: "f2@3 ~@5 f2@3 ~@5", AF: "bb2@3 ~@5 bb2@3 ~@5",
  AG: "c3@3 ~@5 c3@3 ~@5", AH: "eb2 c2", AI: "f2!2", AJ: "bb2@5 f2@3 bb2@5 f2@3", AK: "bb2@5 bb2@3 bb2@3 a2@2 g2@3",
  AL: "gb2", AM: "g2@5 bb2@3 bb2@3 a2@2 g2@3", AN: "g2@5 g2@3 eb2@5 eb2@3", AO: "d2@5 ~@3 d2@5 ~@3",
  AP: "~@5 d3@3 d3@3 c3@2 bb2@3", AQ: "a2@11 ~@5", AR: "bb2@5 d3@3 d3@3 c3@2 bb2@3", AS: "a2",
  AT: "bb2@5 ~@3 gb2@5 ~@3", AU: "f2@5 ~@3 f2@5 ~@3", AV: "~@5 f2@3 f2@3 f2@2 f2@3", AW: "gb2@5 db3@3 bb2@5 gb2@3",
  AX: "f2@5 c2@3 f2@5 f2@3", AY: "bb2@5 a2@3 bb2@5 gb2@3", AZ: "f2@5 e2@3 f2@5 d2@3", BA: "c2@5 d2@3 eb2@5 c2@3",
  BB: "bb2@5 ~@11",
})).s("gm_trombone").gain(0.4)

stack(trumpet, bass)