Strudelify

Rule Britannia

Thomas Augustine Arne

KeyG majorTempo72 bpm
0:00/0:00
// Rule Britannia — Thomas Augustine Arne
// 72 bpm, 4/4, key G 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, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/67834; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 50 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(72/4)

// 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 · "C Trumpet"
const trumpet = note(`<
  ~@4 A B C D E F G H I J K L M J K N O P Q ~@3 A B C D E F G H I J K L M J K N O P Q R@2 S@2 ~
>`.pickRestart({
  A: "~@7 d4", B: "g4@4 g4@4 g4 a4 b4 c5 d5@2 g4@2", C: "a4@6 b4 c5 b4@4 ~@2 d4@2",
  D: "g4 a4 g4 a4 b4 c5 b4 c5 d5@2 a4@2 b4@2 a4@2", E: "g4@2 a4 b4 a4@2 g4@2 f#4@4 ~@2 d4@2",
  F: "f#4@2 d4@2 a4@2 f#4@2 d5@2 c#5 b4 a4 g4 f#4 e4", G: "d4@4 e4@3 d4 d4@4 ~@4", H: "g4@4 g4@3 d4 e4@2 c4@2 ~@2 g4@2",
  I: "c5@3 b4 a4@2 g4@2 f#4@4 ~@2 a4@2", J: "d5@4 c5@4 b4 g4 c5 a4 d5@2 c5@2", K: "b4 a4 g4@2",
  L: "b4@2 ~ b4 c5!2 ~ b4", M: "c5@3 b4 a4@2 g4@2 f#4@8",
  N: "[g3,d4,g4,b4]@2 ~ [g3,d4,g4,b4] [c3,e4,g4,c5]!2 ~ [g2,d4,f4,b4]", // G C G7
  O: "[a2,c4,e4,c5]@3 [b2,d4,g4,b4] [c3,c4,e4,a4]@2 [c#3,a#3,e4,g4]@2 [d3,a3,d4,f#4]@8", // Am G Am C#dim D
  P: "[b2,d4,g4,d5]@4 [a2,d4,f#4,c5]@4 [g4,b4] g4 c5 a4 [b2,g4]@2 [c3,e4,a4,c5]@2, ~@4 d4@3 ~, ~@8 g2@2 [a2,f#4]@2 d5 ~@3", // G D7 G Em Am D
  Q: "[d3,d4,g4,b4]@2 [d3,c4,f#4,a4]@2 [g2,b3,g4]@3 ~", // G D7 G
  R: "[[g3,d4,g4,b4]@4 ~@2 [g3,d4,g4,b4]@2 [c3,e4,g4,c5]@2 ~ [c3,e4,g4,c5]@2 ~@2 [g2,d4,f4,b4]@2 [a2,c4,e4,c5]@3 [b2,d4,g4,b4] [c3,c4,e4,a4]@2 [c#3,a#3,e4,g4]@2 [d3,a3,d4,f#4]@7]/2", // G C G7 Am G Am C#dim D
  S: "[~@2 [b2,d4,g4,d5]@4 [a2,d4,f#4,c5]@4 [g4,b4] g4 [a2,f#4]@2 a4 [b2,g4]@2 [c3,e4,a4,c5]@2 [d3,d4,g4,b4]@4 [d3,c4,f#4,a4]@4 [g2,b3,g4]@5, ~@5 d4@3 ~@8, ~@10 g2@2 c5 ~@2 d5 ~@16]/2", // G D7 G D Em Am G D7 …
})).s("gm_trumpet").gain(0.42)

// chords · trombone
const trombone = note(`<
  A B C D E F G H I J K L M N E O P N E O P N Q B C D E F G H I J K L M N E O P N E O P N R ~@5
>`.pickRestart({
  A: "~@7 d3", B: "[b2,d3,g3]@4 [b2,d3,g3]@4 g3 a3 b3 c4 [g3,d4]@2 [d3,g3]@2",
  C: "[e3,g3]@4 ~@2 b3 c4 [d3,g3,b3]@6 d3@2, a3@3 ~@5, ~ [d3,f#3] ~@2", // Em G D
  D: "g3 a3 g3 a3 b3 c4 b3 c4 d4 g4 f#4 e4 d4@2 [e3,a3,c4]@2", E: "[d3,g3,b3] [c3,f#3,a3] [b2,g3]@2",
  F: "[b2,d3,g3] ~@3 [b2,d3,g3] ~@3 [b2,d3,g3] ~@3 [b2,d3,g3] ~ [d3,g3] ~", // G G5
  G: "[e3,g3]@4 ~@2 b3 c4 [d3,g3,b3]@6 ~@2, a3@3 ~@5, ~ [d3,f#3] ~@2", // Em G D
  H: "[b2,d3,g3] ~@3 [b2,d3,g3] ~@3 [b2,d3,g3] ~ [d3,a3]@2 [d3,b3]@2 [d3,a3]@2", // G D5 G D5
  I: "[d3,e3,g3]@2 a3 g3 [d3,f#3]@3 ~, ~ [c#3,e3] ~@2", // Em7 D C#m
  J: "[a2,d3,f#3] ~@3 [d3,f#3,a3] ~@3 [f#3,a3,d4] ~@5 [g2,b2,e3] ~", K: "[f#2,a2,d3] [g2,a2,c#3] [f#2,a2,d3] ~",
  L: "[b2,d3,g3]@4 [b2,d3,g3]@3 [g2,b2,d3] [g2,c3,e3]@2 [g2,c3,e3]@2 ~@2 [d3,g3]@2", // G C G5
  M: "e3 f#3 [g3,b3]@2 [d3,a3]@2 [c#3,g3]@2 [d3,f#3]@4 ~@2 [d3,f#3,a3]@2, c4 ~@7", // G D5 C#dim D
  N: "[d3,g3,d4] ~@3 [d3,f#3,c4] ~@3 [d3,g3,b3]@2 [d3,f#3,c4]@2 [d3,g3,d4]@2 [e3,a3,c4]@2", // G5 D7 G D7 G5 Am
  O: "[d3,f3,g3,b3]@2 ~@4 [d3,f3,g3,b3] ~ [e3,g3,c4] ~ [e3,g3,c4] ~@3 [d3,f3,b3] ~", // G7 C Bdim
  P: "[c3,e3,c4]@3 [d3,g3,b3] [c3,e3,a3]@2 [a#2,e3,g3]@2 [a2,d3,f#3]@8", Q: "[d3,g3,b3]@2 [c3,f#3,a3]@2 [b2,g3]@3 d3",
  R: "[d3,g3,b3]@2 [c3,f#3,a3]@2 [b2,g3]@3 ~", // G F#dim Em
})).s("gm_trombone").gain(0.48)

// bass · tuba · "Bb Tuba"
const bass = note(`<
  ~ A B C D E B F G H I J K L M N O L P N O L Q A B C D E B F G H I J K L M N O L P N O L Q R S T@3
>`.pickRestart({
  A: "[g2,d3,g3]@2 [g2,d3,g3]@2 [g3,b3]@3 b2", B: "c3 a2 d3 d2 g2 d2 g1 ~",
  C: "[g2,b2,d3,g3] ~@3 [g2,b2,d3,g3] ~@3 [g2,b2,d3,g3] ~@3 [g2,b2,d3,g3] ~ [c2,c3] ~", D: "[d2,d3]!2 [g1,g2] ~",
  E: "[g2,d3,g3] ~@3 [g2,d3,g3] ~@3 [g2,d3,g3] ~@3 [g2,d3,g3] ~ b2 ~", // G5
  F: "[g2,d3,g3] ~@3 [g2,d3,g3] ~@3 [g2,d3,g3] ~ [f#2,f#3]@2 [g2,g3]@2 [f#2,f#3]@2", // G5 F# G F#
  G: "[e2,e3]@4 [a1,a2]@4 [d2,d3]@2 a2@2 d2 ~@3", H: "[d2,d3] ~@3 [d2,d3] ~@3 [d2,d3] ~@5 [g1,g2] ~",
  I: "[a1,a2]@2 [a1,a2]@2 [d2,d3] [e2,e3] [f#2,f#3] [d2,d3]", J: "[g2,g3] [a2,a3] [b2,b3] [g2,g3] [c2,c3]!2 ~ [b2,b3]",
  K: "[a2,a3] [g2,g3] [f#2,f#3] [e2,e3] [d2,d3] [e2,e3] [d2,d3] [c2,c3]", // A G F# E D E D C
  L: "[b1,b2] ~@3 [a1,a2] ~@3 [g1,g2]@2 [a1,a2]@2 [b1,b2]@2 [c2,c3]@2", // B A G A B C
  M: "[d2,d3]@4 [d2,d3]@4 [g1,g2]@2 [b1,b2] ~ [d2,d3] ~ [g2,g3] ~", // D G B D G
  N: "[g2,g3]@2 ~@4 [g2,g3] ~ [c2,c3] ~ [c2,c3] ~@3 [g1,g2] ~", // G C G
  O: "[a1,a2]@3 [b1,b2] [c2,c3]@2 [c#2,c#3]@2 [d2,d3] [c#2,c#3] [d2,d3] [e2,e3] [d2,d3] [c2,c3] [b1,b2] [a1,a2]", // A B C C# D C# D E …
  P: "[d2,d3]!2 [g1,g2]@2", Q: "[d2,d3]@2 [d2,d3]@2 [g1,g2]@3 ~",
  R: "[g2,g3]@2 ~@4 [g2,g3] ~ [c2,c3] ~@2 [c2,c3] ~@3 [g1,g2]", // G C G
  S: "~ [a1,a2]@3 [b1,b2] [c2,c3]@2 [c#2,c#3]@2 [d2,d3] c#3 ~ d3 e3 d3 c3", // A B C C# D
  T: "[b2 a2 [b1,b2] ~@3 [a1,a2] ~@3 [g1,g2]@2 [a1,a2]@2 ~ [b1,b2]@2 [c2,c3]@2 [d2,d3]@4 [d2,d3]@4 [g1,g2]@8 ~@13]/3", // B A G A B C D G
})).s("gm_tuba").gain(0.48)

stack(trumpet, trombone, bass)