Strudelify

Lord Of The Rings for Brass Quintet

W.Henderson

KeyD majorTempo80 bpm
0:00/0:00
// Lord Of The Rings for Brass Quintet — W.Henderson
// 80 bpm, 4/4, key D 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 (4/4 at bar 1, 2/4 at bar 7, 4/4 at bar 7, 2/4 at bar 19, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5900538; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 97 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80/4)

// 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♭ Cornet"
const trumpet = note(`<
  A B C@2 D@3 ~ E@4 F@3 G H ~@17 I J K ~ I J K ~ L ~@16 M N O P Q R S T U V W X@2 Y Z AA@2 AB@2 AC@2 AD@2 AE@2 AF AG
  AH@5 AI@6
>`.pickRestart({
  A: "~@19 c5@5", B: "~ c5!2 a#4@6 a#4!2 c5@12 ~", C: "[~@3 g#4@8 a#4@8 f4@8 g#4@4 f4@4 c5@8 a#4@5]/2",
  D: "[~ a#4!2 c5@12 ~@4 g#4@8 a#4@8 c5@16 ~@21]/3",
  E: "[~@14 b4@17 ~ c5@23 b4@6 c5@6 b4@5 a4@6 c5@6 b4@17 ~ e4@52 b4@17 c5@21]/4",
  F: "[~@3 b4@5 c5@6 b4@6 a4@6 c5@6 b4@70 d4@14 ~@13 a4@5 ~@4 d4@6]/3", G: "~@13 d5@9 ~@26", H: "~@13 d5@3",
  I: "~@24 d4@3 a4 ~@2 a#4 ~@2 a4 ~@2 d4@3 a4 ~@2 a#4 ~@2 a4 ~@2",
  J: "d4@3 a4 ~@2 a#4 ~@2 a4 ~@2 d4@3 a4 ~@2 a#4 ~@2 a4 ~@2 d4@3 a4 ~@2 a#4 ~@2 a4 ~@2 d4@3 a4 ~@2 a#4 ~@2 a4 ~@2",
  K: "d4@3 a4 ~@2 a#4 ~@2 a4 ~@2 d4@3 a4 ~@2 a#4 ~@2 a4 ~@26", L: "~ d4", M: "~ c4 a#3 g3", N: "a3 c4@3",
  O: "d5@2 a#4@2 a4@3 a#4", P: "a#4 g4@3", Q: "~@2 c5!2 c5@2 d#5@2 d5@4 g5@4", R: "a5 f5@3",
  S: "~@2 c4!2 c4@2 d#4@2 d4@4 g4@4", T: "a4 c5!2 d4", U: "d5@4 a#4@9 a#4 d5 d#5", V: "f5@8 c5@5 c5 f5 g5",
  W: "g5@8 d#5@7 g5", X: "[g4 e4 d4]/2", Y: "c#4@2 f#3", Z: "b3 g#3@2", AA: "[a3@5 a3 b3 a3 f#3@8 b3@4 f#4@4]/2",
  AB: "[e4@6 e4 f#4 a4@6 f#4 a4 b4@2 ~@2 a#4@2 ~@2]/2", AC: "[b3@4 f#4@4 e4@8 d4@5 d4 e4 d4]/2",
  AD: "[c#4@32 c4@21 a#3@16 a#3@3 a#3@3 c4@21]/2",
  AE: "[~@16 f4@3 g4@2 g#4@16 g4@3 f4@3 d#4@16 f4@2 g4@3 f4@21 d#4@5 ~@6]/2", AF: "d4@5 ~@6 c4@21 a#3@16",
  AG: "a#3@3 a#3@2 c4@32 ~@6 f4@2 g4@3", AH: "[g#4@21 a#4@21 ~ a3@48 d4@48 b3@24 c#4@24 d4@24 e4@12 d4@6 e4@6 f#4@5]/5",
  AI: "[~@7 a4@12 f#4@12 e4@12 d4@36 f#4@6 a4@6 b4@24 ~@6 b4@6 a4@6 f#4@6 e4@60 f#4@12 e4@12 d4@12 d4@48 ~@5]/6",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Cornet" · soft notes
const trumpet_soft = note("<~@15 A B C@4 D@5 E@5 F@3 G ~@8 H I J K H I L K M@2 N O P Q R ~ S ~@37>".pickRestart({
  A: "~@31 d4@5 ~@5 a4@5 ~@2", B: "~@2 d5@5 ~@4 a4@5 ~@4 d4@5 ~@5 a4@5 ~@13",
  C: "[~@9 d4@9 a4@9 ~ d5@9 a4@9 c#4@9 a4@9 ~ c#5@9 a4@9 b4@9 d5@9 ~ d5@18 d5@18 g4@18 ~ a4@18 b4@17]/4",
  D: "[~@2 f#5@18 g4@18 ~ d5@18 a4@18 ~ e5@18 b4@18 ~ f#5@18 a4@18 ~ e5@18 d4@18 d5@18 ~ e4@18 e5@17]/5",
  E: "[~@2 f#4@18 f#5@18 ~ f#4@37 b4@18 f#5@18 ~ b4@18 f#5@18 ~ g4@18 g5@18 a4@18 ~ a5@18 b4@17]/5",
  F: "[~@2 f#5@18 b4@18 ~ f#5@18 g4@18 ~ g5@18 a4@18 ~ a5@18 d5@5 ~@4 d5@4]/3", G: "~@6 d5@5 ~@4 d5@5 ~@28", H: "a5",
  I: "e5", J: "c5", K: "a4", L: "f4", M: "d5/2", N: "e5 b4", O: "g4", P: "~ g4 f4 a#3", Q: "a3@2 c4 a3 c4 a#3@2 c4",
  R: "c4 g4 f4 a#3", S: "g3 ~@3",
})).s("gm_trumpet").gain(0.2)

// other · french horn · "Horn in F"
const french_horn = note(`<
  A B ~@13 C D E@2 F@7 G@2 H I J K L@2 M@3 N O P Q R@2 ~@16 S T U V W ~ X Y U Z V AA@2 AB AC AD@2 AE@2 AF@2 AG@2 AH@2 AI
  AJ AK@5 AL@6
>`.pickRestart({
  A: "~@19 g4@5", B: "~ g4!2 g4@6 g4!2 g4@12 ~", C: "~@31 d4@2 ~ e4@2 f#4@2 ~@10",
  D: "~@6 f#4@2 ~@8 f#4@2 ~@2 a4@5 e4@5 d4@4 e4@5 ~@9",
  E: "[~@9 a3@2 ~ b3@2 c#4@2 ~@7 c#4@9 d4@2 ~@8 b3@2 ~@2 f#3@9 ~@5 a3@5 e3@9 ~@18 a3@4]/2",
  F: "[~ c#4@5 d4@2 e4@2 f#4@5 ~@4 f#4@5 ~@14 a4@4 f#4@5 e4@5 ~@4 d4@5 e4@5 c#4@5 ~@4 d4@2 c#4@2 b3@37 d4@14 c#4@18 ~ b3@4 f#3@14 g3@2 f#3@2 ~ e3@14 d3@2 e3@2 f#3@28 ~@4 f#3@2 ~ g3@2 a3@18 ~ e3@18 d4@2 e4@2 ~ f#4@2 ~@16 f#4@2 ~@7 f#4@2 ~@3 e4@2 f#4@2 ~ g#4@2 ~@7 g#4@2 ~@7 g#4@2 ~@7 g#4@2 ~]/7",
  G: "[~@2 f#4@2 g#4@2 a#4@14 a#4@2 ~@3 a#4@9 a#4@2 ~@3 a#4@37 d3@2 ~@7 f#3@2 ~@7 d3@2]/2",
  H: "~@3 f#3@2 ~@12 b3@2 ~@21 f#3@2 ~@2 b3@2 ~@2", I: "~ c#4@2 ~@3 d4@2 ~@7 a3@2 ~@7 d4@2 ~@7 a3@2 ~@7 e4@2 ~@4",
  J: "~@13 e4@2 f#4@2 ~ g4@13 d4@2 ~ e4@2 f#4@12", K: "~@2 a4@14 f#4@2 a4@2 b4@18 ~@5 f#4@5",
  L: "[b4@5 c#5@4 d5@14 c#5@18 ~ a4@4 f#4@14 g4@2 f#4@2 ~ e4@13 f#4@2 ~ e4@2 d4@5 ~@4 d4@4]/2",
  M: "[~@4 a#3@8 d4@8 d4@2 d4 ~]/3", N: "~@3 d4 d4@2 d4 ~", O: "~@4 f4@2 f4 ~", P: "~@3 f4 g4@2 f4 ~",
  Q: "~@4 a4@2 a4 ~", R: "[~@3 a4 a#4@8 d5@2 ~@2]/2", S: "~@2 g3!2 c4!2 c4@2 d4@4 d#4@2 d#4!2", T: "f4 c4@3", U: "g4",
  V: "d#4", W: "~ g4 f4 d#4", X: "g4!2 f4 a#4", Y: "c5 f4!2 ~", Z: "a4", AA: "[b3@4 f#4@4 e4@6 e4 f#4 a4@8]/2",
  AB: "f#4@2 b3", AC: "f#4 e4@2", AD: "[d4@5 d4 e4 d4 c#4@8 f#3@4 b3@4]/2",
  AE: "[g#3@6 g#3 a3 d4@8 c#4@2 ~@2 c#4@2 ~@2]/2", AF: "[f#3@4 b3@4 g#3@8 a3@5 a3!3]/2",
  AG: "[a#3@32 g3@21 g3@16 g3@3 g3@3 g3@21]/2", AH: "[~@21 d#4@16 d4@3 c4@3 a#3@16 c4@2 d4@3 c4@21 a#3@5 ~@6]/2",
  AI: "a#3@5 ~@6 g3@21 g3@16", AJ: "g3@3 g3@2 g3@43",
  AK: "[d#4@21 f4@21 ~ d4@12 f#4@12 c#4@12 a3@12 b3@24 d4@24 g4@12 b4@12 a4@12 e4@12 d4@24 c#4@24 d4@5]/5",
  AL: "[~@7 f#4@12 c#4@12 a3@12 b3@24 d4@24 g4@24 f#4@24 c#4@60 a3@12 b3@12 a3@12 d5@48 ~@5]/6",
})).s("gm_french_horn").gain(0.3)

// other · french horn · "Horn in F" · soft notes
const french_horn_soft = note("<~@2 A@2 B@2 C@8 ~@29 D E F@2 G H I J K G L M N O N P ~@38>".pickRestart({
  A: "[~@3 c4@8 g3@8 a3@8 g#3@4 a#3@4 g3@8 g3@5]/2", B: "[~ g3!2 g3@12 ~@4 c4@8 d4@8 e4@13]/2",
  C: "[~@40 g4@70 d#4@70 e4@70 c4@35 d#4@35 e4@35 ~@29]/8", D: "c#4", E: "a3@4 ~ a3 c#4 e4", F: "f4/2", G: "a3",
  H: "c#4@4 ~ a3 c#4 e4", I: "e4", J: "c4", K: "f#3", L: "d3 g3", M: "e3", N: "c4 d#4 d4 d#4", O: "f4 ~@3",
  P: "a3 a3@3",
})).s("gm_french_horn").gain(0.2)

// bass · tuba · "Euphonium"
const bass = note(`<
  A B ~@12 C D E F G H@7 I@3 J@2 K@3 L@3 M N O P Q R S T U@2 S T U V W@2 X Y Z AA AB AC AD AE AF AG AH AI AH AJ AK AL AM
  AN@2 AO AP AQ AR AS AT AU AV AW@4 AX AY AZ@3 BA@8
>`.pickRestart({
  A: "~@19 e4@5", B: "~ e4!2 d#4@6 d#4!2 e4@12 ~", C: "~@6 d3@14 ~@13 a3@5 ~@4 d3@6",
  D: "~@13 d4@9 ~@9 d3@2 ~@3 f#3@2 ~@3 a3@2 ~@5", E: "~@2 d3@5 ~@13 c#3@2 ~@3 e3@2 ~@3 a3@2 ~@7 c#3@5 ~@4",
  F: "~@9 b2@2 ~@3 d3@2 ~@2 f#3@2 ~@8 b2@5 ~@13 g2@2",
  G: "~@3 d3@2 ~@2 g3@2 ~@8 a2@2 ~@2 e3@2 ~@3 a3@2 ~@7 a2@5 ~@4 e3@4",
  H: "[~@6 d3@2 ~@2 f#3@5 a3@5 ~@4 a3@5 ~@13 b2@2 ~@3 d3@2 ~@3 f#3@2 ~@7 c#3@2 ~@3 e3@2 ~@2 a3@2 ~@7 b2@37 g2@37 a2@37 b2@37 a2@37 f#3@37 g#3@35]/7",
  I: "[~@2 a#3@18 a#3@5 a#3@9 a#3@5 c#4@37 b2@4 d3@5 f#3@5 d3@4 b2@5 f#3@4 d3@5 f#3@5 b2@4 d3@5 f#3@4 d3@5 b2@5 f#3@4 d3@4]/3",
  J: "[~ f#3@5 g2@4 b2@5 d3@4 b2@5 g2@5 d3@4 b2@5 d3@4 a2@5 e3@5 c#3@4 e3@5 a2@5 c#3@4 e3@5 c#3@4 b2@17]/2",
  K: "[~@2 f#3@18 d3@18 ~ f#3@18 g3@37 e3@18 ~ c#3@18 a2@5 ~@4 a2@4]/3", L: "[~@4 e3@8 f3@8 f3@2 a3 ~]/3",
  M: "~@3 a3 f3@2 a3 ~", N: "~@4 a3@2 d4 ~", O: "~@3 f3 a3@2 d4 ~", P: "~@4 d4@2 f4 ~", Q: "~@3 f4 e4@4",
  R: "g4@2 a3 ~", S: "~ a2 c#3 e3 f3 e3 c#3 a2", T: "~ a2 c#3 e3 f3 e3 f3 e3", U: "~ f2 a2 c3 c#3 c3 a2 f2",
  V: "~ f2 a2 c3 c#3 c3 c#3 c3", W: "~ d3 f#3 a3 a#3 a3 f#3 d3", X: "~ d3 g3 b3 c4 b3 g3 d3",
  Y: "~ c3 e3 g3!2 e3 c3 d3", Z: "~@2 c3!2 c3@2 d#3@2 d3@4 d#3@4", AA: "f3 c3@3", AB: "~@2 c3!2 c3@2 d#3@2 d3@4 g3@4",
  AC: "a3 c4@3", AD: "c3 ~ d3 d#3", AE: "f3 f3@3", AF: "d3@2 g3@2 a#3@3 d3", AG: "d#3@2 d#3!3 d#3@2 d#3",
  AH: "c3 d#3 d3 d#3", AI: "f3@3 a3 c4 a#3@2 c4", AJ: "f3 a3 c4 a3", AK: "g3@4 g3@3 a#3 d4@8", AL: "f3@4 f3@3 a3 c4@8",
  AM: "d#3@2 g3 c4", AN: "[d3@4 g#3@4 d3 f#3 a3 f#3]/2", AO: "c#3 f#3 a3 f#3 d3 f#3", AP: "b3 f#3 e3 g#3 b3 g#3",
  AQ: "d3 f#3 a3 f#3 c#3 f#3", AR: "a#3 f#3 d3 f#3 b3 f#3", AS: "e3 g#3 b3 g#3 d3 f#3", AT: "a3 f#3!2 ~ f#3 ~",
  AU: "d3 f#3 b3 f#3 e3 g#3", AV: "b3 g#3 d3 f#3 a3 f#3",
  AW: "[f#3@32 e4@21 d#4@21 ~ e4@42 c4@21 ~ g3@21 c4@21 d4@5 ~@6]/4", AX: "a#3@5 ~@6 e4@21 d#4@16",
  AY: "d#4@3 d#4@2 c4@43", AZ: "[c4@21 ~@11 d3@5 e3@5 ~ f#3@12 a3@12 f#3@12 e3@12 d3@36 f#3@6 a3@6 b3@5]/3",
  BA: "[~@7 d4@12 c#4@12 a3@12 f#3@24 e3@24 a2@48 g2@24 a2@24 b2@24 a2@24 a2@60 ~@36 a2@48 ~@5]/8",
})).s("gm_tuba").gain(0.4)

// bass · tuba · "Euphonium" · soft notes
const bass_soft = note("<~@2 A@2 B@5 C@5 ~@45 D ~@37>".pickRestart({
  A: "[~@3 d#4@8 a#3@8 c4@8 c4@4 d4@4 e4@8 d#4@5]/2", B: "[~ d#4!2 e4@12 ~@4 g#3@8 a#3@8 c4@16 ~@17 c4@35 g3@17]/5",
  C: "[~ c4@35 g3@70 d#3@35 g3@35 g3@35 ~@29]/5", D: "~ d#3 ~@2",
})).s("gm_tuba").gain(0.15)

// other · trombone
const trombone = note(`<
  A@2 B@4 C@7 D@2 E F G@3 H I J@3 K L@4 M N O@2 P Q@7 R S T U V S T U V W@2 X V Y Z Y AA ~@2 AB AC AD AE Y AF AB AG AC
  AH@2 AI@2 AJ@2 AK@2 AL@2 AM@2 AN@2 AO@2 AP@7 AQ@4
>`.pickRestart({
  A: "[~@19 c3@8 a#2@8 c3@12 ~]/2", B: "[~@3 g#2@8 d#3@8 f2@8 g#2@4 a#2@4 c3@8 a#2@8 c3@12 ~@4 g#2@8 a#2@8 c3@13]/4",
  C: "[~@40 c3@70 c3@70 g3@35 f#3@17 g3@17 ~ g2@70 g2@16]/7",
  D: "[~ g2@17 ~ f#2@17 e2@17 ~ d3@5 ~@4 a3@5 ~@4 d4@5 ~@4 a3@5 ~@4 d3@5 ~]/2", E: "~@4 a3@5 ~@4 d4@9 ~@9 d3@9 ~ a2@7",
  F: "~@2 d3@9 a2@9 c#3@9 ~ a2@9 c#3@9",
  G: "[a2@9 b2@9 d3@9 ~ f#3@9 d3@9 g2@9 d3@9 ~ a2@9 e3@9 a2@9 e2@9 ~ d3@9 a2@9 d3@9 a2@9 g2@6]/3",
  H: "~@4 d3@9 a2@9 e3@9 b2@9 ~ d3@7", I: "~@2 f#3@9 d3@9 g2@9 ~ b2@9 d3@9",
  J: "[b2@9 a2@9 c#3@9 ~ e3@9 c#3@9 b2@9 d3@9 ~ f#3@9 d3@9 a2@9 c#3@9 ~ e3@9 c#3@9 d3@9 a2@9 d3@6]/3",
  K: "~@4 a2@9 e2@9 b2@9 e3@9 ~ b2@7",
  L: "[~@2 f#2@9 c#3@9 f#3@9 ~ c#3@9 f#2@37 b2@9 d3@9 f#3@9 d3@9 ~ b2@9 d3@9 f#3@9 d3@9 ~ g2@9 d3@9 g3@9 d3@9 a2@6]/4",
  M: "~@4 e3@9 a3@9 e3@9 b2@9 ~ d3@7", N: "~@2 f#3@9 d3@9 b2@9 ~ d3@9 f#3@9",
  O: "[d3@9 g2@9 d3@9 ~ g3@9 d3@9 a2@9 e3@9 ~ a3@9 e3@9 d3@5 ~@4 d3@4]/2",
  P: "~@6 d3@5 ~@4 d3@5 ~@4 d3@6 d3@6 e3@6 c3@6", Q: "d3 a#2 c3 a2 d3!2 e3 c3", R: "d3 a#2 c3 a2 d3@2 d3@2", S: "a2",
  T: "e3", U: "f2", V: "c3", W: "d3", X: "g2", Y: "c3 d#3 d3 d#3", Z: "f3 ~@3", AA: "a2 a2@3", AB: "g3", AC: "d#3",
  AD: "~ c3 a#2 g2", AE: "c3 a2@3", AF: "f3 a3 c4 a3", AG: "a3", AH: "[b3@15 e3 d3@8]/2",
  AI: "[f#3@4 f#3!4 b3@8 e3@8]/2", AJ: "[d3 f#3 b3]/2", AK: "[e3@4 d3@4 f#3 ~ f#3 ~]/2", AL: "[b3 e3 d3]/2",
  AM: "[f#3@32 c3@21 d#3@21 ~ c3@16 c3@2 c3@3]/2", AN: "[c3@8 c3@8 c3@5 g#2@21 ~ d#3@21 g#2@21 a#2@5 ~@6]/2",
  AO: "[d3@5 ~@6 c3@21 d#3@21 c3@16 c3@3 c3@3 c3@21]/2",
  AP: "[g#2@21 d3@21 ~ d3@24 f#3@24 g3@24 d3@24 g3@24 a3@24 d3@24 a3@24 d3@24 f#3@24 g3@24 d3@24 g3@5]/7",
  AQ: "[~@19 d3@24 a3@60 ~@36 f#3@48 ~@5]/4",
})).s("gm_trombone").gain(0.2)

stack(trumpet, trumpet_soft, french_horn, french_horn_soft, bass, bass_soft, trombone)