Strudelify

Kung Fu Panda

Lumpenhund

KeyD majorTempo80 bpm
0:00/0:00
// Kung Fu Panda — Lumpenhund
// 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 34, 4/4 at bar 34) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/1974946; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 47 bars on a 32-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 · [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.

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@2 A B C D E F G H I J K L M ~@9 N O P Q R ~@2 S T U V W X Y Z AA AB AC AD@2 ~ AE AF
>`.pickRestart({
  A: "d4@2 f4 d5", B: "c5 a4", C: "c5@3 d5 c5@2 a#4@2", D: "d4@3 ~", E: "f4@2 a4 f5", F: "e5@2 c5 a4",
  G: "g4@2 a4@2 c5@3 a4", H: "g4 f4", I: "g3@2 a3 c4", J: "d4@4 d5@3 c5", K: "c5@2 a4 c5", L: "d5@4 a#4@3 a4",
  M: "a4 ~", N: "~@10 g4 a4 g4 d4 f4@2", O: "d4@8 ~@2 g4 a4 g4 f4 g4 a4", P: "c5@8 ~@2 c5 d5 c5 a4 g4 a4",
  Q: "g4@8 ~@2 g4 a4 g4 f4 d4 f4", R: "d4", S: "~@21 f4@5 ~@2 c4@2 d#4@2, ~@27 d#4@2 ~@3",
  T: "f4@5 d#4@2 c4@2 d#4@2 ~ g4@2 g#4@2 d#4@2 c4@2 ~ f4@3 d#4@3 c4@2 a#3@3, ~@11 f4@2 ~@7 d#4@2 ~@10",
  U: "g#4@11 f4@18 g#4 ~ c5", V: "d#5@8 f5 d#5 ~ c5@11 ~@2 a#3@3 c4@2 d#4@3", W: "f4@3 g#4@2 a#4@3 g#4@3 ~@21",
  X: "a#3@3 c4@2 a#3@5 ~ f3@10 f3@2 g#3@2 a#3@2 f4@5", Y: "d#4@5 f4@3 g4@3 g#4@2 g4@3 f4@3 d#4@2 f4@5 ~ c4@2 d#4@3",
  Z: "g#4@3 f4@2 g#4@5 ~ f4@10 a#4@3 f4@3 a#4@5",
  AA: "f4@3 d#4@2 f4@3 g4@3 g#4@2 g4@3 g#4@3 a#4@2 c5@3 g#4@3 a#4@2 c5@3",
  AB: "d#5@5 c5@5 ~ a#4@5 g#4@5 a#4@3 c5@3 a#4@2 f4@3", AC: "g#4@5 f4@5 ~@22",
  AD: "[a#4@3 c5@2 a#4@3 g#4@3 a#4@2 c5@3 d#5@19 ~@29]/2",
  AE: "~@10 c5@2 a#4@2 ~ g#4@3 ~ f4@13, ~@9 a#4@2 ~@3 f4@2 ~@16",
  AF: "~@3 a#4@2 c5@2 ~ f4@2 g#4@3 f4@13 ~@6, ~@7 a#4@2 ~@23",
})).s("gm_trumpet").gain(0.4)

// other · tuba · "Euphonium"
const tuba = note("<~@2 A B C D E F G H ~@9 I ~@5 J K L M N ~@3 O P Q R S T U V W X@4 Y>".pickRestart({
  A: "d3 f3 a3 f3 d3 f3 a3 d4", B: "f3 a3 c4 a3 f3 a3 c4 a3", C: "d3 g3 a#3 g3 d3 g3 a#3 g3", D: "a#2 d3 f3 a#3@2 ~@3",
  E: "f2", F: "a2", G: "a#2", H: "c3@4 c3 g3 c4 g3", I: "f3", J: "d3!16", K: "f3!16", L: "g3!16", M: "a#3!16",
  N: "d4@5 d4@5 ~ c4@5 c4@5 ~@11", O: "f2@11 g#2@21", P: "c3@5 c3@5 ~ f2@5 f2@5 c3@11",
  Q: "f3@11 c3@8 f3@2 f3@3 f3@4 ~@4", R: "a#2@5 a#3@3 a#3@3 f2@5 c3@5 f3@3 c3@3 f3@2 c3@3",
  S: "g#3@3 c3@2 f3@3 c3@3 a#2@5 a#2@8 a#2@3 a#2@5", T: "g#2@8 g#2@3 g#2@2 g#2 ~ g#2 g#2@3 g#2@2 f3@8 f3@3",
  U: "f3@3 f3!2 f3@3 f3@3 d#3@5 d#3@5 d#3@5 ~ d#3@5", V: "a#2@11 d#3@10 f2@8 c3 ~@2",
  W: "c3@5 ~@8 c3 ~@2 c3@8 g3@3 c3@5",
  X: "[f2@5 c3@3 g3@3 c3@5 ~@5 f3@27 g#3@2 g#3 g#3@2 g#3@2 g#3 g#3@2 g#3@2 g#3 g#3@2 g#3@2 g#3 g#3@2 g#3@2 g#3 g#3@2 g#3@2 a#3 a#3@2 a#3@2 a#3 a#3@2 a#3@2 a#3 a#3@2 a#2@13 c4 [c4,f4] [c4,f4]@2 [c4,f4] [c4,f4]@2 [c4,f4]@2 [c4,f4] [c4,f4]@2 [c4,f4]@2 [g#3,c#4] [g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4] [g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4] [g#3,c#4]@2, ~@48 g#2@13 g#2@13 ~ a#2@13 ~@13 f3@13 ~ c#3@13]/4", // F5 C#5
  Y: "c4 [c4,f4]!2 [c4,f4]@2 [c4,f4]@2 [c4,f4] [c4,f4]@2 [c4,f4]@2 ~ f3@13 ~@6, f3@6 [c4,f4] ~@9", // F5
})).s("gm_tuba").gain(0.4)

// other · tuba · "Euphonium" · soft notes
const tuba_soft = note("<[d3 f3 a3 f3 d3 f3 a3 f3]!2 ~@18 d3 ~@26>").s("gm_tuba").gain(0.2)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@14 A B C D E ~ F ~ G H ~@11 I J K L M N O P@4 Q>".pickRestart({
  A: "~@2 a3 c4", B: "d4 f4 d4 c4", C: "a3 c4 g3 f3", D: "d3 f3 d3 c3", E: "a3@2 c4@2 g3@3 f3", F: "d4 ~@3",
  G: "~@22 a4@2 ~@2 f4@2 c4@2 c4 d4, ~@5 g4 g4@2", H: "f4@2 d4 f4@2 c4 d4 f4 c4 d4 f4 g4@4 ~",
  I: "~@11 f3@8 g#3@2 g#3@3 g#3@4 ~@4", J: "a#3@5 d4@3 a#3@3 f3@5 f3@5 f3@3 c3@3 f3@2 c3@3",
  K: "g#3@3 c3@2 f3@3 c3@3 a#2@5 f3@8 f3@3 f3@5", L: "c#3@8 c#3@3 c#3@2 c#3 ~ c#3 c#3@3 c#3@2 a#3@8 a#3@3",
  M: "a#3@3 a#3!2 a#3@3 a#3@3 g#3@5 g#3@5 g#3@5 ~ g#3@5", N: "d#3@11 d#4@10 f3@8 c4 ~@2",
  O: "c4@5 ~@8 c4 ~@2 c4@8 c3@3 c4@5",
  P: "[f3@5 c4@3 c3@3 [c3,c4]@5 ~@5 f3@2 f3@2 f3 f3@2 f3@2 f3 f3@2 f3@2 f3 f3@2 f3@2 f3 f3@2 f3@2 f3 f3@2 g#3@2 g#3 g#3@2 g#3@2 g#3 g#3@2 g#3@2 g#3 g#3@2 g#3@2 g#3 g#3@2 g#3@2 g#3 g#3@2 g#3@2 a#3 a#3@2 a#3@2 a#3 a#3@2 a#3@2 a#3 a#3@2 a#2@13 c4 [c4,f4] [c4,f4]@2 [c4,f4] [c4,f4]@2 [c4,f4]@2 [c4,f4] [c4,f4]@2 [c4,f4]@2 [g#3,c#4] [g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4] [g#3,c#4]@2 [g#3,c#4]@2 [g#3,c#4] [g#3,c#4]@2, ~@48 g#2@13 g#2@13 ~ a#2@13 ~@13 f3@13 ~ c#3@13]/4", // C F5 C#5
  Q: "c4 [c4,f4]!2 [c4,f4]@2 [c4,f4]@2 [c4,f4] [c4,f4]@2 [c4,f4]@2 ~ f3@13 ~@6, f3@6 [c4,f4] ~@9", // F5
})).s("gm_tenor_sax").gain(0.4)

// other · tenor sax · "Tenor Saxophone" · soft notes
const tenor_sax_soft = note(`<
  ~@19
  [~@10 g4 a4 g4 d4 f4@2]
  [~@10 g4 a4 g4 f4 g4 a4]
  [c5@16 ~@4 c5@2 d5@2 c5@2 a4@2 g4@2 g4 a4]
  [g4@5 ~@3]
  ~@24
>`).s("gm_tenor_sax").gain(0.2)

stack(trumpet, tuba, tuba_soft, tenor_sax, tenor_sax_soft)