Strudelify

thomas the tank engine theme

Kyle Stadler

KeyA♭ majorTempo120 bpm
0:00/0:00
// thomas the tank engine theme — Kyle Stadler
// 120 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/558886; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 32 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · trumpet · "Bb Trumpet"
const trumpet = note("<~@3 A ~ B ~ C ~@16 D E D E D E D E>".pickRestart({
  A: "[ab4,eb5]!2 ~@2", B: "~ [g4,b4]!2 ~", C: "~ [g4,b4] ~@2", D: "~@2 [d4,eb4]!2 ~@2 [d4,eb4]@2", E: "~ [d4,eb4] ~@2",
})).s("gm_trumpet").gain(0.18)

// chords · tuba · "Euphonium"
const tuba = note("<A@2 B@2 C@4 D@2 E@2 D@2 E F G H I J K L M N ~@8>".pickRestart({
  A: "~ [c3,e3] ~ [c3,e3]", B: "~ [c3,eb3] ~ [c3,eb3]", C: "~ [d3,g3] ~ [d3,g3]", D: "~ [eb3,g3] ~ [eb3,g3]",
  E: "~ [eb3,ab3] ~ [eb3,ab3]", F: "~ [eb3,ab3] [d3,g3] [db3,gb3]", G: "~@2 [a3,c4]@2 [a3,c4]!2 ~@2",
  H: "[a3,c4]@2 ~ [a3,c4]@2 ~@3", I: "~@2 [g3,bb3]@2 [g3,bb3]!2 ~@2", J: "[g3,bb3]@2 ~ [g3,bb3]@2 ~@3",
  K: "~@2 [f3,ab3]@2 [f3,ab3]!2 ~@2", L: "[f3,ab3]@2 ~ [f3,ab3]@2 [f3,ab3]@2 [f3,ab3]",
  M: "[ab3,c4]@3 [ab3,c4]@3 [f3,bb3]@2", N: "[eb3,ab3] ~ [eb3,ab3] ~",
})).s("gm_tuba").gain(0.4).pan(0.6)

// bass · tuba · "Bb Tuba"
const bass = note("<A@2 B@2 C D C D E@2 F G H I B J K@2 L@2 M@2 N O ~@8>".pickRestart({
  A: "[c2,c3] ~ [g1,g2] ~", B: "[ab1,ab2] ~ [eb1,eb2] ~", C: "[a1,a2] ~ d2 ~", D: "[g1,g2] ~ d2 ~",
  E: "[bb1,bb2] ~ eb2 ~", F: "[ab1,ab2] ~ eb2 ~", G: "[ab1,ab2] eb2 f2 gb2", H: "[g1,g2] ~ eb2 ~",
  I: "[bb1,bb2] ~ [eb1,eb2] ~", J: "[ab1,ab2]!2 [g1,g2] [gb1,gb2]", K: "[f1,f2]!2 c2!2", L: "[eb1,eb2]!2 bb1!2",
  M: "db2!2 [ab1,ab2]!2", N: "[ab1,ab2]@3 [ab1,ab2]@3 [eb1,eb2]@2", O: "[ab1,ab2] ~ [ab1,ab2] ~",
})).s("gm_tuba").gain(0.64).pan(0.3)

stack(trumpet, tuba, bass)

More by Kyle Stadler