Strudelify

Wallace and Gromit Theme

Jonathan Demmond

KeyF majorTempo120 bpm
0:00/0:00
// Wallace and Gromit Theme — Jonathan Demmond
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 16, 4/4 at bar 16) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/546011; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 29 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// 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 B C D E B F G H I J K ~ L M N O P Q R S P Q T U V W X Y>".pickRestart({
  A: "~@2 eb4 ~@7 eb4 ~@5", B: "~@2 d4 ~@3 d4 ~@3 d4 ~@3 d4 ~", C: "~@2 ab4 ~@3 ab4 ~@3 ab4 ~@3 f4 ~",
  D: "~@2 bb3 eb4 g4 ~ eb4 ~ g4 ~ eb4 ~ g4 ~ bb4 ~", E: "eb5 ~ eb4 ~@7 eb4 ~@5", F: "~@2 ab4 ~@3 ab4 ~@3 ab4 ~@3 ab4 ~",
  G: "eb5@2 bb4@2 ~ eb5 d5 c5", H: "eb5@2 d5 c5@2 eb5 d5 c5", I: "eb5@2 c5 bb4@2 bb4 a4 bb4",
  J: "c5@2 bb4@2 c5@2 bb4@2 g4 gb4@2 g4@2 gb4 g4@2", K: "g4 ~", L: "~@2 bb3 ~@3 bb3@6 ~@4", M: "~@2 a3 ~@3 a3@6 ~@4",
  N: "c4 c4@2 c4 ~@4 a4 bb4 ~@2 e4 f4 ~@2", O: "db4 d4 b3 ~ bb3 ~ ab3 ~@3 eb4 ~@5", P: "~@2 eb4 ~@7 d4 ~@3 d4 ~",
  Q: "~@2 d4 ~@3 d4 ~@3 ab4 ~@3 ab4 ~", R: "~@2 ab4 ~@3 f4 ~@3 bb3 eb4 g4 ~ eb4 ~",
  S: "g4 ~ eb4 ~ g4 ~ bb4 ~ eb5 ~ eb4 ~@5", T: "~@2 ab4 ~@3 ab4 ~ eb5@4 bb4@4", U: "~@10 gb4 ~@5",
  V: "~@2 gb4 ~@7 f4 ~@3 f4 ~", W: "~@2 f4 ~@3 f4 ~@3 e4 ~@3 e4 ~", X: "~@8 ab4!2 ~@2 d4@4", Y: "bb3 ~@3",
})).s("gm_trumpet").gain(0.25)

// other · tuba · "Euphonium"
const tuba = note("<A@2 B A@3 C D E F G H I J K L M A N O A@2 N P Q R S T U>".pickRestart({
  A: "~@2 bb3 ~@3 bb3 ~@3 bb3 ~@3 bb3 ~", B: "~@2 eb3 ~@3 f3 ~@3 f3 ~@3 bb2 ~", C: "~@2 eb3 ~@3 f3 ~@3 f3 ~@3 f3 ~",
  D: "g3 f3 g3 ~", E: "~@2 c3 ~@3 c3@4 ~@6", F: "~@2 eb3 ~@3 bb2@4 ~@6", G: "~@2 d3 ~@3 d3 ~ bb2@3 bb2@3 bb2@2",
  H: "bb3@4 ~ g3 gb3 g3", I: "g3@2 f3 d3@2 d3 db3 d3", J: "f3@2 eb3 c3@2 c3 b2 c3", K: "eb3 c3 eb3 g3@2 eb3@2 g3",
  L: "bb3 bb3@2 bb3 ~@12", M: "~@10 bb3 ~@3 bb3 ~", N: "~@2 bb3 ~@3 bb3 ~@3 eb3 ~@3 f3 ~",
  O: "~@2 f3 ~@3 bb2 ~@3 bb3 ~@3 bb3 ~", P: "~@2 f3 ~@3 f3 ~ g3@4 f3@4", Q: "g3@4 ~@6 db4 ~@3 db4 ~",
  R: "~@2 db4 ~@3 db4 ~@3 db4 ~@3 db4 ~", S: "~@2 ab3 ~@3 ab3 ~@3 c4 ~@3 c4 ~", T: "~@2 c4 ~@3 c4 ~ d4!2 ~@2 ab3@4",
  U: "g3 ~@3",
})).s("gm_tuba").gain(0.3)

// bass · tuba · "C Tuba"
const bass = note("<A B C D A B E F G H I J K L M N O P Q R S P T U V W X Y Z>".pickRestart({
  A: "eb2 ~ bb1 ~ eb2 ~ bb1 ~", B: "bb1@2 ~@2 d2 ~ f2 ~ bb2@2 ~@2 f2@2 ~@2", C: "c3 ~ f2 ~ bb2 ~ eb2 ~",
  D: "eb3 ~ d3 ~ c3 ~ bb2 ~", E: "ab2 ~ f2 ~ bb2 ~ bb2 ~", F: "eb2 bb1 eb2 ~", G: "ab2 ~ eb2 ~ ab2 ~@3",
  H: "eb2 ~ bb2 ~ eb2 ~@3", I: "bb1@2 ~@2 f2@2 ~@2 bb1@3 bb1@3 bb1@2", J: "eb2 ~", K: "g2 ~ d2 ~ g2 ~ d2 ~",
  L: "c2 ~ g2 ~ c3 ~@3", M: "f2 ~ c3 ~ f2 ~@3", N: "bb2 bb2@2 bb2 ~@12", O: "~@4 eb2 ~ bb1 ~",
  P: "eb2@2 ~@2 bb1@2 ~@2 bb1@2 ~@2 d2 ~ f2 ~", Q: "bb2 ~ f2 ~ c3 ~ f2 ~", R: "bb2 ~ eb2 ~ eb3 ~ d3 ~",
  S: "c3 ~ bb2 ~ eb2 ~ bb1 ~", T: "bb2 ~ f2 ~ ab2 ~ f2 ~", U: "bb2 ~ bb2 ~ eb2@2 bb1@2", V: "eb2@2 ~@2 gb2 ~ db3 ~",
  W: "gb2@2 ~@2 db3@2 ~@2 db2@2 ~@2 f2 ~ ab2 ~", X: "db3 ~ ab2 ~ c3 ~ g2 ~", Y: "f2 g2 ab2 ~ bb1@4", Z: "eb2 ~@3",
})).s("gm_tuba").gain(0.3)

// other · trombone
const trombone = note("<A B C D A B C E F G H I J G K L M N O P Q N O R S T U V W>".pickRestart({
  A: "~@2 g3 ~@3 eb3 ~@3 g3 ~@3 eb3 ~", B: "~@2 f3 ~@3 bb2 ~@3 f3 ~@3 f3 ~", C: "~@2 ab3 ~@3 f3 ~@3 bb3 ~@3 bb3 ~",
  D: "~@2 g3 ~@3 g3 ~@3 g3 ~@3 g3 ~", E: "g3 d3 g3 ~", F: "~@2 ab3 ~@3 ab3 ~@9", G: "~@2 eb3 ~@3 eb3 ~@9",
  H: "~@2 bb3 ~@3 bb3 ~ ab3@3 ab3@3 ab3@2", I: "g3 ~", J: "~@2 f3 ~@3 f3 ~ g3@2 ~@2 d3@2 ~@2", K: "~@2 f3 ~@3 f3 ~@9",
  L: "ab3 ab3@2 ab3 ~@12", M: "~@10 g3 ~@3 eb3 ~", N: "~@2 g3 ~@3 eb3 ~@3 f3 ~@3 bb2 ~",
  O: "~@2 f3 ~@3 f3 ~@3 ab3 ~@3 f3 ~", P: "~@2 bb3 ~@3 bb3 ~@3 g3 ~@3 g3 ~", Q: "~@2 g3 ~@3 g3 ~@3 g3 ~@3 eb3 ~",
  R: "~@2 bb3 ~@3 bb3 ~ g3@4 d3@4", S: "g3@4 ~@6 bb3 ~@3 gb3 ~", T: "~@2 bb3 ~@3 gb3 ~@3 ab3 ~@3 ab3 ~",
  U: "~@2 d3 ~@3 bb2 ~@3 g3 ~@3 g3 ~", V: "f3 g3 ab3 ~ bb2@4", W: "eb3 ~@3",
})).s("gm_trombone").gain(0.3)

stack(trumpet, tuba, bass, trombone)