Strudelify

Red is the Rose

The High Kings

KeyG majorTempo112 bpm
0:00/0:00
// Red is the Rose — The High Kings
// 112 bpm, 3/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, 3/4 at bar 1) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5962078; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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.

// other · trumpet · "Bb Trumpet"
const trumpet = note(`<
  ~@18 A B C D E F G H I J K D L M N O ~@8 P Q R@2 S T U V A B C D E F G H I J K D L M N O ~@14 W X Y@5 Z G W R W Q AA
  AB C AC@2 Q AD W AE W
>`.pickRestart({
  A: "f4@5 f4@8 g4@3", B: "a4@11 g4@2 f4@3", C: "g4@8 a4@3 g4@4 f4", D: "d4@11 ~@2 c4@3", E: "f4@5 f4@8 f4@3",
  F: "f4@5 ~@3 a4@5 c5@3", G: "a#4", H: "a4@11 ~@5", I: "d5@5 d5@8 c5@3", J: "a4@5 a4@8 c5@3", K: "a#4@8 a4@3 g4@4 a4",
  L: "f4@5 a4@8 c5@3", M: "d5@5 c5@8 a4@3", N: "d5@5 d5@5 ~ a4@5", O: "c5@11 ~@5", P: "d4", Q: "f4", R: "g4",
  S: "a4@5 c5@8 e5@3", T: "f5@5 e5@8 c5@3", U: "d5", V: "c5", W: "a4",
  X: "a#4@2 a4@2 ~ c5@2 d5@2 c5@2 a#4@2 c5@3, ~@2 a#4 ~@5", Y: "[d5@72 c5@3 a#4@2 g4@3]/5", Z: "~@5 a4@11",
  AA: "f4@5 c4@5 ~ f4@5", AB: "a4@5 f4@5 ~ a4@5", AC: "a4/2", AD: "g4@5 a4@5 ~ a#4@5", AE: "f4@5 a4@5 ~ g#4@5",
})).s("gm_trumpet").gain(0.24)

// other · trumpet · "Bb Trumpet"
const trumpet_2 = note(`<
  ~@18 A B C D A E F G H I J D K L M N O P Q R S T F U V W X R Y Z AA AB AC B C D A E F G H I J D K L M AD ~@14 AE AF
  AG@4 AH AB AA AB AA AB AF O P Q R Y Z AA AB AI AB
>`.pickRestart({
  A: "c5@5 c5@8 c5@3", B: "a4@5 c5@8 c5@3", C: "d5@8 c5@3 d5@4 c5", D: "a4@11 ~@2 g4@3", E: "c5@5 ~@3 d5@5 f5@3",
  F: "d5", G: "f5@11 ~@5", H: "f5@5 d5@8 g5@3", I: "g5@5 c5@8 g5@3", J: "f5@8 e5@3 d5@4 c5", K: "c5@5 f5@8 g5@3",
  L: "f5@5 g5@8 e5@3", M: "d5@5 a#4@5 ~ a4@5", N: "f4@11 ~@2 c4@3", O: "f4@5 f4@8 g4@3", P: "a4@11 g4@2 f4@3",
  Q: "g4@8 a4@3 g4@4 f4", R: "d4@11 ~@2 c4@3", S: "f4@5 f4@8 f4@3", T: "f4@5 ~@3 a4@5 c5@3", U: "c5@11 ~@5",
  V: "d5@5 d5@8 c5@3", W: "a4@5 a4@8 c5@3", X: "a#4@8 a4@3 g4@4 f4", Y: "f4@5 a4@8 c5@3", Z: "d5@5 c5@8 a4@3", AA: "g4",
  AB: "f4", AC: "f5@5 f5@8 d5@3", AD: "f4@11 ~@5", AE: "c5@3 a#4@2 a4@3 a#4@3 c5@2 d5@3", AF: "c5", AG: "a#4/4",
  AH: "g4@3 f4@2 d4@3 ~@8", AI: "d4@5 f4@5 ~ e4@5",
})).s("gm_trumpet").gain(0.2)

// other · french horn · "Horn"
const french_horn = note(`<
  ~@18 A B C D E F G H I J K D L@2 M N ~@16 A B C D E F G H O J K D L@2 M N ~@8 P Q R S P Q R S T U V W X@2 R Y R Y S Z
  AA S Y AB@2 AC AD AE AD
>`.pickRestart({
  A: "c4@5 c4@8 d4@3", B: "c4@11 d4@2 c4@3", C: "d4@8 e4@3 d4@4 c4", D: "a3@11 ~@2 g3@3", E: "c4@5 c4@8 c4@3",
  F: "c4@5 ~@3 d4@5 f4@3", G: "g4", H: "f4@11 ~@5", I: "f4@5 a4@8 g4@3", J: "g4@5 d4@8 g4@3", K: "f4@8 e4@3 d4@4 c4",
  L: "[c4@5 f4@8 g4@5 ~ f4@2 g4@8 e4@3]/2", M: "d4@5 c4@5 ~ a#3@5", N: "a3@11 ~@5", O: "f4@5 d4@8 g4@3", P: "~@5 c4@11",
  Q: "~@5 a#3@11", R: "a3", S: "c4", T: "f4@8 e4@3 g4@5", U: "d4@8 g4@5 e4@3", V: "g4@5 f4@11", W: "~@8 g4@3 f4@2 d4@3",
  X: "[~@11 c4@21]/2", Y: "a#3", Z: "a3 e4", AA: "d4", AB: "f4/2", AC: "e4", AD: "f4", AE: "d4@5 f4@5 ~ e4@5",
})).s("gm_french_horn").gain(0.3)

// bass · tuba · "Bb Tuba"
const bass = note(`<
  ~@18 A B C D E F G A@2 B H D A I J K ~@16 A B C D L M G N@2 B H D A I J K O P C Q R S T U V W G A V W G X Y Z AA AB@3
  A G A G A@2 I D AC@2 G ~@4
>`.pickRestart({
  A: "f2", B: "f#2@11 a2@5", C: "g2@8 a2@3 g2@4 f2", D: "d2", E: "f2@5 f2@11", F: "f2@8 f2@5 c3@3", G: "g2",
  H: "g2@8 a2@3 a#2@4 f2", I: "e2", J: "g2@5 a2@5 ~ a#2@5", K: "a2@11 ~@5", L: "f2@3 f2@2 f2@11", M: "f2@13 c3@3",
  N: "f2/2", O: "f2@5 f2@8 g2@3", P: "a2@11 g2@2 f2@3", Q: "d2@11 ~@2 c2@3", R: "f2@5 f2@8 f2@3",
  S: "f2@5 ~@3 a2@5 c3@3", T: "d3", U: "c3@11 ~@5", V: "a#2", W: "a2",
  X: "a#2@2 a2@2 ~ c3@2 d3@2 c3@2 a#2@2 c3@3, ~@2 a#2 ~@5", Y: "a#2@8 a2@5 c3@3", Z: "d3@8 c3@5 a2@3",
  AA: "c3@5 a#2@3 a2@3 g2@2 d2@3", AB: "a#1/3", AC: "a#1/2",
})).s("gm_tuba").gain(0.27)

// bass · tuba · "Bb Tuba" · soft notes
const bass_soft = note("<~@99 [e2@11 g2@5] f2 [a#1@5 c#2@5 ~ c2@5] f2>").s("gm_tuba").gain(0.18)

stack(trumpet, trumpet_2, french_horn, bass, bass_soft)