Strudelify

Land of Hope and Glory

Vera Lynn

KeyE♭ majorTempo90 bpm
0:00/0:00
// Land of Hope and Glory — Vera Lynn
// 90 bpm, 2/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Flute/Oboe" named as a reed, played on oboe (its synth strings 1 patch is not one); ch 6 "Trombone 1-2" named as a brass, played on trombone (its contrabass patch is not one); ch 2 "Trumpet Solo" named as a brass, played on trumpet (its synth bass 2 patch is not one); ch 5 "French Horn" named as a brass, played on french horn (its pizzicato strings patch is not one); ch 4 "Alto Saxophone" named as a reed, played on alto sax (its choir aahs patch is not one); ch 8 "Bass/Bassoon" named as a bass, played on electric bass finger (its timpani patch is not one); ch 3 "Trumpet 2-3" named as a brass, played on trumpet (its synth bass 2 patch is not one); ch 7 "Trombone 3" named as a brass, played on trombone (its contrabass patch is not one)
// note: Full arrangement: all 80 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · oboe · "Flute/Oboe"
const oboe = note(`<
  A B C D E F G@2 H I J D A K L@2 A B C D E F G@2 H I J D M N O@2 C P D A Q R S@2 A B C D E F G@2 H I J D A K L@2 A B C
  D E F G@2 H I J D M N O@2 C P D A Q R S@2
>`.pickRestart({
  A: "eb5", B: "d5 eb5 f5@2", C: "c5", D: "bb4", E: "ab4", F: "g4 ab4 bb4@2", G: "[f4@7 ~]/2", H: "g4",
  I: "a4 bb4@2 c5", J: "f5", K: "eb5 d5@2 c5", L: "bb4/2", M: "ab5", N: "ab5 g5@2 f5", O: "g5/2", P: "d5 eb5@2 f5",
  Q: "eb4", R: "ab4 g4@2 f4", S: "[eb4@7 ~]/2",
})).s("gm_oboe").gain(0.36)

// chords · trombone · "Trombone 1-2"
const trombone = note(`<
  A B C A D A E F A E F A G H I B A B C A J G K L A E F@2 J M A@2 J F N G J M A O A B C A D A E F A E F A G H I B A B C
  A J G K L A E F@2 J M A@2 J F N G J M A O
>`.pickRestart({
  A: "[g3,bb3]!2", B: "[ab3,bb3]!2", C: "[g3,c4]!2", D: "[ab3,c4]!2", E: "[f3,a3]!2", F: "[f3,bb3]!2", G: "[eb3,g3]!2",
  H: "[eb3,a3]!2", I: "[d3,bb3] [f3,bb3]", J: "[eb3,ab3]!2", K: "[eb3,f3]!2", L: "[d3,f3]!2", M: "[f3,ab3]!2",
  N: "[eb3,bb3]!2", O: "[g3,bb3] ~",
})).s("gm_trombone").gain(0.31)

// other · trumpet · "Trumpet Solo"
const trumpet = note(`<
  A B C D E F G@2 H I J D A K L@2 A B C D E F G@2 H I J D M N O@2 P Q R S T U V@2 A B C D E F G@2 H I J D A K L@2 A B C
  D E F G@2 H I J D M N O@2 P Q R S T U V@2
>`.pickRestart({
  A: "eb5", B: "d5 eb5 f5@2", C: "c5", D: "bb4", E: "ab4", F: "g4 ab4 bb4@2", G: "[f4@7 ~]/2", H: "g4",
  I: "a4 bb4@2 c5", J: "f5", K: "eb5 d5@2 c5", L: "bb4/2", M: "[ab4,ab5]", N: "[ab4,ab5] [g4,g5]@2 [f4,f5]",
  O: "[g4,g5]/2", P: "[c4,c5]", Q: "[d4,d5] [eb4,eb5]@2 [f4,f5]", R: "[bb3,bb4]", S: "[eb4,eb5]", T: "eb4",
  U: "ab4 g4@2 f4", V: "[eb4@7 ~]/2",
})).s("gm_trumpet").gain(0.36)

// chords · french horn
const french_horn = note(`<
  A B A C D A E@2 A F E G A H B@2 I J K I L M N O P Q R@2 L S T U V W P X Y Z A AA A B A C D A E@2 A F E G A H B@2 I J K
  I L M N O P Q R@2 L S T U V W P X Y Z A AA
>`.pickRestart({
  A: "[g3,eb4]!2", B: "[f3,d4]!2", C: "[g3,eb4] [eb3,eb4]", D: "[ab3,eb4]!2", E: "[f3,f4]!2", F: "[a3,f4]!2",
  G: "[g3,d4]!2", H: "[f3,eb4]!2", I: "[g3,bb3]!2", J: "[ab3,bb3]!2", K: "[g3,c4]!2", L: "[eb3,eb4]!2",
  M: "[eb3,eb4] [eb3,g3]", N: "[eb3,c4]!2", O: "[d3,bb3]!2", P: "[eb3,bb3]!2", Q: "a3!2", R: "[f3,bb3]!2",
  S: "[f3,d4] [ab3,d4]", T: "[g3,eb4] ~ eb4@2", U: "d4 db4", V: "c4 [eb3,ab3]", W: "[f3,bb3] [d3,bb3]", X: "[eb3,g3]!2",
  Y: "[c4,eb4]!2", Z: "[d3,d4] [ab3,d4]", AA: "[g3,eb4] ~",
})).s("gm_french_horn").gain(0.31)

// bass · electric bass finger · "Bass/Bassoon"
const bass = note(`<
  A B C D E F G F A@2 H I J B F@2 A B I@2 J F K F A@2 H@2 J L A@2 E@2 I G B F A M A B C D E F G F A@2 H I J B F@2 A B
  I@2 J F K F A@2 H@2 J L A@2 E@2 I G B F A M
>`.pickRestart({
  A: "eb2!2", B: "f2!2", C: "g2 bb2", D: "eb2 g2", E: "ab2!2", F: "bb2!2", G: "c3!2", H: "d2!2", I: "g2!2", J: "c2!2",
  K: "a2!2", L: "bb1!2", M: "eb2 ~",
})).s("gm_electric_bass_finger").gain(0.31)

// chords · trumpet · "Trumpet 2-3"
const trumpet_2 = note(`<
  A B C@2 D E F G H I J A@2 F G B K B L M@2 N O G H P Q J M R S T D G H O U V C W A B C@2 D E F G H I J A@2 F G B K B L
  M@2 N O G H P Q J M R S T D G H O U V C W
>`.pickRestart({
  A: "[g4,bb4]!2", B: "[ab4,bb4]!2", C: "[eb4,g4]!2", D: "[ab4,c5]!2", E: "[eb4,bb4] [eb4,g4]", F: "[eb4,a4]!2",
  G: "[d4,bb4]!2", H: "[eb4,bb4]!2", I: "[a4,c5] [f4,a4]", J: "[f4,bb4]!2", K: "[g4,eb5]!2", L: "[g4,eb5] [eb4,eb5]",
  M: "[eb4,eb5]!2", N: "[eb4,eb5] [eb4,g4]", O: "[eb4,c5]!2", P: "[f4,a4] [a4,f5]", Q: "[bb4,f5]!2",
  R: "[f4,d5] [ab4,bb4]", S: "[eb4,bb4] [g4,eb5]", T: "[g4,d5] [g4,db5]", U: "[c4,ab4]!2", V: "[d4,ab4]!2",
  W: "[eb4,g4] ~", // Eb
})).s("gm_trumpet").gain(0.31)

// other · trombone · "Trombone 3"
const trombone_2 = note(`<
  A B A@5 C A D C@2 D@2 B E A C A@2 D F D F@2 D C@2 D C G A H C F D@2 C A I A B A@5 C A D C@2 D@2 B E A C A@2 D F D F@2
  D C@2 D C G A H C F D@2 C A I
>`.pickRestart({
  A: "eb3!2", B: "f3 d3", C: "d3!2", D: "c3!2", E: "d3 f3", F: "bb2!2", G: "bb2 eb3", H: "ab2!2", I: "eb3 ~",
})).s("gm_trombone").gain(0.31)

// drums · clap
const clap = s("cp").struct("<A@14 B ~ A@14 B ~ A@7 B A@14 B ~ A@14 B ~ A@7 B>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.2)

stack(oboe, trombone, trumpet, french_horn, bass, trumpet_2, trombone_2, clap)