Strudelify

Les Misérables

Nick Nieto

KeyG majorTempo180 bpm
0:00/0:00
// Les Misérables — Nick Nieto
// 180 bpm, 12/8, 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/8 at bar 1, 4/4 at bar 2, 3/4 at bar 16, 12/8 at bar 20, ...) are rendered on a constant 12/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/730276; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 51 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/6)

// 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 · trumpet · "Bb Trumpet"
const trumpet = note(`<
  ~ A@2 B@2 C D@4 E F@2 ~ G@2 ~@8 H I J K L M N ~@2 O P Q R S T U V W V X Y Z AA AB AC AD AE
>`.pickRestart({
  A: "[~@11 d5@5 ~@3 d5@2 d5@19 ~@8]/2", B: "[~@2 c5@5 ~@3 c5@2 c5@19 ~@10 a#4@5 ~@2]/2", C: "~ a#4@2 a#4@19 ~@2",
  D: "[~@8 a4@5 ~@3 a4@2 a4@19 ~@10 g5@5 ~@2 g5@2 ~ g5@19 ~@10 f5@5 ~@2 f5@2 ~]/4", E: "f5@19 ~@5",
  F: "[~@5 d#5@5 ~@2 d#5@2 ~ d#5@19 ~@14]/2", G: "[~ f5@5 d5@5 d5@5 c5@5 d5@5 ~@22]/2",
  H: "~@4 f#4@2 e4@2 ~@2 f#4@2 e4@2 ~@2 f#4@2 e4 ~ g4@2 a4@2", I: "b4@2 b4@2 a4 g4 a4@4 g4 a4",
  J: "b4!4 a4 g4 a4@3 a4 g4 a4", K: "b4@2 b4@2 a4 g4 a4@3 a4 g4 f#4", L: "e4 ~@3", M: "~ e4!3 g4 f#4!2 e4@2 ~@3",
  N: "~@3 f#5!2 e5 ~@6", O: "~@8 f#4 e4 ~ f#4", P: "e4@2 ~@2 f#4@2 e4 ~ g4@2 a4@2 b4@4 b4@4 a4@2 g4@2",
  Q: "a4@4 g4 a4 b4!4 a4 g4", R: "a4@3 a4 g4 a4 b4@2 b4@2 a4 g4", S: "a4@3 a4 g4 f#4 e4@3 ~@3", T: "~@7 e4!3 g4 f#4",
  U: "f#4 e4@2 ~@6 e5@3", V: "~ e4 f#4 g#4 a4 b4!2 a4 g#4!2 f#4 e4", W: "f#4 e4@2 ~@9", X: "e4@3 ~@7 e4 f#4",
  Y: "e4@2 e4@2 f#4 e4 d#4@3 ~ e4 f#4", Z: "e4!4 f#4 e4 d#4@3 d#4 f#4 g#4", AA: "f4@2 f4@2 g4 f4 e4@3 ~ f4 g4",
  AB: "f4!4 g4 f4 e4@3 e4 ~@2", AC: "b4!3 a4@2 g4 a4@6", AD: "d5@6 ~ a5!3 g5 f#5", AE: "e5 ~@11",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "F Mellophone"
const french_horn = note(`<
  ~ A@2 B@2 C D@4 E@3 F G@5 H ~ I@3 J K L M N O P I@2 Q R S T U@2 V W X W Y Z AA AB AC AD AE AF
>`.pickRestart({
  A: "[~@11 f4@5 ~@3 f4@2 f4@19 ~@8]/2", B: "[~@2 f4@5 ~@3 f4@2 f4@19 ~@10 d4@5 ~@2]/2", C: "~ d4@2 d4@19 ~@2",
  D: "[~@8 d4@5 ~@3 d4@2 d4@15 d4@4 g4@15 d4@5 g4@14 d4@5 g4@5 a4@5 a#4@5 a4@5]/4",
  E: "[g4@14 d4@5 g4@15 d4@5 g4@14 d4@5 ~@14]/3", F: "~@6 f3@4 d3@5 d3@5 ~@4",
  G: "[~ f4@5 d4@5 d4@5 c4@5 a3@5 ~@14 d4@7 e4@3 f4@3 e4@7 d4@7 d4@6 c#4@7 d4@27 d#4@13]/5", H: "e4@6 e4 ~@5",
  I: "e4@2 e4 ~ g3 b3 e4@2 e4 ~ g3 b3", J: "e4@2 d4 c#4 ~ d4 c#4 ~ d4 c#4@2 ~", K: "~@3 d4@3 d4!3 d4@3",
  L: "d4@3 d4@3 d4@2 d4!2 ~@2", M: "~@7 b3!3 c#4 d#4", N: "e4", O: "e4 ~@8 e4 g4 f#4", P: "f#4 e4 ~@4 e4@2 e4 ~ g3 b3",
  Q: "e4@2 e4 ~ g3 b3 e4@2 d4 c#4 ~ d4", R: "c#4 ~ d4 c#4@2 ~@4 d4@3", S: "d4!3 d4@3 d4@3 d4@3", T: "d4@2 d4!2 ~@8",
  U: "[~ b3!3 c#4 d#4 e4@12 e4 ~@5]/2", V: "~ f#4", W: "~ b3@2 b3", X: "~ c#4@2 c#4",
  Y: "d4@2 c#4@2 ~@2 d4 ~ c#4@2 ~@2 d4@2 c#4@2 ~@2 d4@2 c#4@2 ~@2", Z: "~@16 f#4 [g#4,a4] b4@6", AA: "b4@6 b4@3 b4 ~@2",
  AB: "~@16 f#4 [g#4,a4] c5@6", AC: "c5@6 c5@3 c5 ~@2", AD: "g4!3 d4@2 d4 f#4@6", AE: "a4@6 ~ a4!3 g4 f#4",
  AF: "e4 ~@11",
})).s("gm_french_horn").gain(0.3)

// other · tuba · "Euphonium"
const tuba = note("<A B@5 C@4 D@3 E F@5 G H I@3 J K@2 L M N O I@2 P Q R@2 S T U V W V X Y@2 Z@2 AA AB AC>".pickRestart({
  A: "~@7 a3", B: "[~@2 d4@34 a3@5 d4@5 e4@4 f4@5 e4@5 d4@15 a3@5 d4@34 a3@4 c4@2]/5",
  C: "[~@3 a3@5 a3@5 g3@5 a3@15 d3@4 g3@15 d3@5 g3@14 d3@5 g3@5 a3@5 a#3@5 a3@5]/4",
  D: "[g3@14 d3@5 g3@15 d3@5 g3@14 d3@5 ~@14]/3", E: "~@6 f3@4 d3@5 d3@5 c3@4",
  F: "[~ f3@5 d3@5 d3@5 c3@5 d3@5 ~@14 a3@13 e3@7 f3@7 d3@6 e3@7 f3@27 a3@13]/5", G: "g3@6 g3 ~@5", H: "e3",
  I: "g3@2 g3 ~@3 g3@2 g3 ~@3", J: "a3@2 a3!2 ~ a3!2 ~ a3 a3@2 ~", K: "g3 a3", L: "g3 f#3",
  M: "e3@2 e3 ~ c4 g3 c4@2 c4 ~ c4 g3", N: "c4 ~@8 g3 b3 g3", O: "g3!2 ~@4 g3@2 g3 ~@3",
  P: "g3@2 g3 ~@3 a3@2 a3!2 ~ a3", Q: "a3 ~ a3 a3@2 ~ g3@6", R: "a3 g3", S: "f#3@6 e3@2 e3 ~ c4 g3",
  T: "c4@2 c4 ~ c4 g3 c4 ~@5", U: "~ g3 g3@2", V: "~ g#3@2 g#3", W: "~ a3@2 a3", X: "a3@2 ~ a3 ~@2 a3 ~@2 a3@2 ~",
  Y: "b3!2", Z: "c4!2", AA: "b3@6 d4@2 d4 ~ d4 a3", AB: "d4@2 d4 ~ d4 a3 d#4 ~@5", AC: "g3 ~@11",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "Bb Tuba"
const bass = note("<A B@3 C@5 D@4 E F@5 G@2 H@4 I@2 J K L M H@3 N O P Q R S T@3 U V W X Y Z AA AB>".pickRestart({
  A: "~@7 a2", B: "[~@2 d2@34 a2@5 d2@31]/3", C: "[~@3 a2@5 d2@34 a2@4 d2@34 ~ d2@4 g2@34 d2]/5",
  D: "[~@4 g2@34 d2@5 g2@34 d2@5 f2@5 d2@5 d2@4]/4", E: "~ c2@5 f2@4 d2@5 d2@5 c2@4",
  F: "[~ f2@5 d2@5 d2@5 c2@5 d2@59 d2@27 b2@13]/5", G: "e3 ~ b2 ~ e2 ~@3 e3 ~ b2 ~ e3 ~ b2 ~ e2 ~@3 e3 ~ b2 ~",
  H: "e2!4", I: "g2!2 f2!2", J: "e2!2 b1!2", K: "c2!4", L: "c2 ~@5 e2@3 e2@3", M: "e2@2 e2!4 e2@3 e2@3", N: "e2!2 g2!2",
  O: "f2!2 g2!2", P: "f2!2 e2!2", Q: "b1!2 c2!2", R: "c2@3 c2@3 c2 ~@5", S: "~ e2 e2@2", T: "e2@3 e2@2 e2 e2@6",
  U: "~@2 a2 ~@2 a2 ~@2 a2 ~@2 a2", V: "e2@3 e2@2 e2 b2@3 b2@2 b2", W: "e2@3 e2@2 e2 b2@6",
  X: "f2@3 f2@2 f2 c3@3 c3@2 c3", Y: "f2@3 f2@2 f2 c3@6", Z: "g2@6 d2@2 d2 d2@2 d2", AA: "d2@2 d2 d2@2 d2 b1 ~@5",
  AB: "e2 ~@11",
})).s("gm_tuba").gain(0.3)

stack(trumpet, french_horn, tuba, bass)