Strudelify

Wallace and Gromit Theme

Julian Nott

KeyG majorTempo120 bpm
0:00/0:00
// Wallace and Gromit Theme — Julian Nott
// 120 bpm, 4/4, key G 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/589606; 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 · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · clarinet · "Bb Clarinet"
const clarinet = note(`<
  ~@15
  [~@7 b5 c6@2 ~ f#5 g5@2 ~ d5]
  [d#5@2 b4@2 c5@2 g#4@2 ~@2 c5 e5 c6 a5 g5 e5]
  [c5@4 ~@10 c6 g5]
  [c6 a5 g5 e5 c5@4 ~@8]
  ~@10
>`).s("gm_clarinet").gain(0.45)

// other · trombone
const trombone = note("<A B C D A B E F G H I J K L M N ~@13>".pickRestart({
  A: "f2 f3 c3 f3 f2 f3 c3 f3", B: "c3 e3 g2 e3 a2 g3 c3 e3", C: "a#2 a#3 g2 a#3 c3 a#3 e3 g3",
  D: "~ f3 ~ e3 ~ d3 ~ c3", E: "a#2 a#3 g2 g3 c3 a#3 c3 g3", F: "f3 a3 c3 f3 a3 ~@3", G: "a#2 a#3 f3 a#3!2 ~@3",
  H: "e2 a3 c3 a3!2 ~@3", I: "c3@2 g3@2 e3@2 a#3@2 a3 g3@2 a3@2 g3 a3@2", J: "a2 f3 c3 f3!2 ~@3",
  K: "a2 c#4 e3 c#4!2 ~@3", L: "d3 d4 a2 d4 d4@2 ~@2", M: "~ b3 ~ d4 ~ d4@2 ~", N: "c4!2 ~ c4 ~@12",
})).s("gm_trombone").gain(0.4)

// other · trombone · soft notes
const trombone_soft = note("<~@16 A B C D E B C F G H I J K>".pickRestart({
  A: "~@4 f2 f3 c3 f3", B: "f2 f3 c3 f3 c3 e3 g2 e3", C: "c3 g3 c3 e3 a#2 a#3 g2 a#3", D: "c3 a#3 e3 g3 ~ f3 ~ e3",
  E: "~ d3 ~ c3 f2 f3 c3 f3", F: "c3 a#3 e3 g3 ~ a3 ~ c3", G: "f3 ~@3 g#2 g3 d#3 g#3",
  H: "g#2 g3 d#3 g#3 d#3 f#3 a#2 f#3", I: "d#3 f#3 ~ g3 ~ a3 ~ d4", J: "a#3@2 a3@2 g3@2 ~@2 d4!2 ~@2 a3@4",
  K: "c3 ~ c4 ~@5",
})).s("gm_trombone").gain(0.15)

// chords · piano
const piano = note("<A B C D A B E F G H I J K L M N O ~@12>".pickRestart({
  A: "f2 [a3,c4,f4] c3 [f3,c4] f2 [a3,c4,f4] c3 [f3,c4]", B: "c3 [g3,c4,e4] g2 [c3,c4,e4] e3 [g3,c4,e4] c3 [g3,c4,e4]",
  C: "a#2 [a#3,f4,a#4] g2 [g3,g4,a#4] c3 [c4,g4,a#4] e3 [c4,g4]", // A#5 Gm C7 C5
  D: "f3 [a3,c4,f4] e3 [a3,c4,f4] d3 [a3,c4,f4] c3 [a3,c4,f4]", // F
  E: "a#2 [a#3,f4,a#4] g2 [g3,g4,a#4] c3 [c4,g4,a#4] c3 [c4,g4,a#4]", F: "f3 [c4,f4,a4] c3 [c4,f4,a4] [f3,f4,a4] ~@3",
  G: "a#2 [a#3,d4,a#4] f3 [a#3,a#4] [a#2,a#4] ~@3, ~@3 d4@2 ~@3", // A#
  H: "f2 [f3,f4,a4] c3 [f3,a4] [f2,a4] ~@3, ~@3 c4@2 ~@3", // F
  I: "c3@2 [c4,e4,g4]@2 g3@2 [c4,e4,a#4]@2 [c3,a#3,c4,e4]@3 [c3,a#3,e4] [c3,a#3,e4]@2 [c3,a#3,c4,e4]@2, ~@11 c4@3 ~@2", // C C7
  J: "f2 [f3,a3,c4,f4] c3 [f3,c4,f4] [f2,c4,f4] ~@3, ~@3 a3@2 ~@3", // F F5
  K: "[a2,a3] [g3,c#4] e3 g3 [a2,a3]@2 [e2,e3]@2, ~@3 c#4@2 ~@3", // A Gdim A E
  L: "[d2,d3] [f3,a3,d4] a2 [f3,d4] d3@2 ~@2, ~@3 a3@2 ~@3, ~@4 d4 ~@3", // D Dm
  M: "g2 [g3,b3,d4] d3 [g3,d4] d4@4, ~@3 b3@5, ~@4 g2 ~@3", // G G5
  N: "[c3,a#3,d4,f4,a4]!2 ~ [c3,a#3,d4,f4,a4] ~@3 [b3,b4,d#5] [c4,a5,c6]@2 ~ [f#3,d5,f#5] [g3,e5,g5]@2 ~ [d3,a#4,d5]", // Dm7 B F D C Gm
  O: "[d#3,c5,d#5] [b2,g4,b4] [c3,a4,c5] [g#2,e4,g#4] ~@4", // Cm Em F C#m
})).s("gm_piano").gain(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@16 A B C D E B C F G H I J K>".pickRestart({
  A: "~@4 f2 [a3,c4,f4] c3 [f3,c4]", B: "f2 [a3,c4,f4] c3 [f3,c4] c3 [g3,c4,e4] g2 [c3,c4,e4]",
  C: "e3 [g3,c4,e4] c3 [g3,c4,e4] a#2 [a#3,f4,a#4] g2 [g3,g4,a#4]", // C A#5 Gm
  D: "c3 [c4,g4,a#4] e3 [c4,g4] f3 [a3,c4,f4] e3 [a3,c4,f4]", E: "d3 [a3,c4,f4] c3 [a3,c4,f4] f2 [a3,c4,f4] c3 [f3,c4]",
  F: "c3 [c4,g4,a#4] c3 [c4,g4] f3 [c4,e4,c5] c3 [c4,g4,e5]", G: "[f2,a4,f5] ~@3 g#2 [c4,d#4,g#4] d#3 [g#3,d#4]",
  H: "g#2 [c4,d#4,g#4] d#3 [g#3,d#4] d#3 [a#3,d#4,g4] a#2 [a#3,d#4,g4]", // G# G#5 D#
  I: "d#2 [d#3,d#4,g4] a#2 [c3,d#4,g4] d3 [a3,d4,f#4] a2 [a3,d4,f#4]", // D# Cm D
  J: "[f2,g3]@2 [a2,a3,d4,a4]@2 [a#2,a#3,d4,g4]@2 ~@2 [e4,a#4,d5]!2 ~@2 [a#3,e4,a4]@4, ~ [c2,c3]", // Fsus2 D5 Gm Em7b5 A C
  K: "[f2,f3,a3,c4,f4] ~ [f1,f2,a4,c5,d5,g5] ~@5", // F Dm7
})).s("gm_piano").gain(0.15)

stack(clarinet, trombone, trombone_soft, piano, piano_soft)