Strudelify

waltzing matilda

Thomas White

KeyF majorTempo120 bpm
0:00/0:00
// waltzing matilda — Thomas White
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/606596; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 42 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 · [...]/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("<~@4 A B C D A B C E F G H I J K C E L M N ~ O P Q R O P Q S T U V W O P X Y Z@2>".pickRestart({
  A: "g4!2 f4!2", B: "g4 ab4 bb4 g4 eb4 f4 g4@2", C: "bb3@2 g4 bb4 bb4@2 ab4 g4", D: "f4@2 f4@2 f4@2 eb4 f4",
  E: "f4!2 g4@2", F: "bb4!4", G: "eb4!2 d4 c4", H: "bb3@2 bb3!2 c4@2 bb3@2", I: "bb3@2 c4!2 d4@2 eb4 f4",
  J: "eb4!2 d4!2", K: "c4 d4 eb4 c4!2 bb3 c4@2", L: "c4@2 ~@5 bb4 ~@3 ab4@5", M: "db4@2 ~@5 ab4 ~@3 gb4@5",
  N: "g4@3 g4 g4@3 g4@8 bb4", O: "eb4@4 eb4@2 ~@5 f4 ~@4", P: "~@3 f4 ~@8 ab4@4", Q: "bb4@3 bb4 ~@12",
  R: "f4@4 f4@3 f4@9", S: "f4@4 f4@3 g4@9", T: "eb4@7 eb4 eb4@8", U: "d4@11 d4@5", V: "f4@7 f4 g4@8",
  W: "f4@8 f4@4 eb4@3 f4", X: "bb4 ~@3", Y: "~@11 bb3@4 eb4", Z: "[g4@3 gb4 f4@3 e4 eb4@4 bb3@3 b3@17]/2",
})).s("gm_trumpet").gain(0.3)

// other · french horn · "F Mellophone"
const french_horn = note(`<
  A B C D E F G H E F G I E J K L M N O P Q R S ~ T U V W T U V X M Y Z AA T U AB X AC@2
>`.pickRestart({
  A: "bb3@2 g3@2 eb4@2 d4 c4", B: "bb3@3 bb3 c4 bb3 ab3 g3", C: "g3@2 c4@3 c4 g3 f3", D: "eb3 d3", E: "bb3!2",
  F: "c4!2", G: "bb3@2 f3 e3", H: "f3@4 bb3@2 bb3!2", I: "f3@2 bb3@2 eb3 ab3 g3 f3", J: "c4", K: "g3 c4", L: "c4 bb3",
  M: "bb3 d4", N: "c4@3 c4 ab3@4", O: "bb3@3 bb3 bb3@2 c4@2", P: "c4 d4 bb3@2", Q: "c4@2 ~@5 f3 ~@3 f3@5",
  R: "bb3@2 ~@5 c4 ~@3 b3@5", S: "d4@3 d4 d4@3 d4@8 bb3", T: "bb3@4 bb3@2 ~@5 bb3 ~@4", U: "~@3 eb4 ~@8 gb3@4",
  V: "g3@3 g3 ~@12", W: "f3@4 f3@3 f3@9", X: "f3@4 f3@3 g3@9", Y: "c4@11 c4@5", Z: "d4@7 d4 g3@8",
  AA: "eb4@8 d4@4 eb3@3 f3", AB: "g3 ~@3", AC: "[bb3@4 ab3@4 g3@4 db4@3 d4@17]/2",
})).s("gm_french_horn").gain(0.3)

// chords · trombone
const trombone = note(`<
  ~@4 A B C D A B C E F G H I J K L M N O P ~ Q R S T Q R S U V W X Y Q R Z AA AB@2
>`.pickRestart({
  A: "[eb3,g3] [f3,bb3]", B: "[e3,g3] [eb3,ab3]", C: "[eb3,g3]@2 [d3,bb3] [g3,bb3]",
  D: "[c3,a3]@4 [d3,f3]@2 [eb3,g3] [d3,f3]", E: "[eb3,f3]@2 [f3,ab3]@2 [g3,bb3] ab3 g3 f3", F: "[eb3,g3]!2",
  G: "[eb3,ab3]", H: "[d3,f3] [f3,bb3]", I: "[eb3,f3] [f3,bb3]", J: "[eb3,g3]@3 [eb3,g3] [f3,bb3]@4",
  K: "[eb3,g3] [eb3,ab3]", L: "[eb3,g3]@3 [eb3,g3] [d3,g3]@2 [g3,c4]@2", M: "[eb3,c4] [f3,bb3] [eb3,g3]@2",
  N: "f3@2 ~@5 f3 ~@3 f3@5", O: "[db3,bb3]@2 ~@5 [eb3,ab3] ~@3 [gb3,db4]@5",
  P: "[d3,g3]@3 [d3,g3] [d3,g3]@3 [d3,g3]@8 [d3,f3]", Q: "[eb3,g3]@4 [eb3,g3]@2 ~@5 [d3,f3] ~@4",
  R: "~@3 [g3,c4] ~@8 [eb3,b3]@4", S: "[eb3,bb3]@3 [eb3,bb3] ~@12", T: "[f3,c4]@4 [f3,c4]@3 [f3,bb3]@9",
  U: "[f3,c4]@4 [f3,c4]@3 [eb3,bb3]@9", V: "[eb3,g3]@7 [eb3,g3] [eb3,g3]@8", W: "[eb3,ab3]@11 [eb3,ab3]@5",
  X: "[g3,bb3]@7 [g3,bb3] [g3,c4]@8", Y: "[f3,ab3]@8 [f3,bb3]@4 eb3@3 f3", Z: "[eb3,bb3] ~@3", AA: "f3@4 f3@3 eb3@9",
  AB: "[[d3,f3]@4 [c3,eb3]@4 d3@4 db3@3 d3@17]/2", // Dm Cm
})).s("gm_trombone").gain(0.3)

// chords · trombone · soft notes · Eb Ab Eb C5 Bb5 C5 F5 Dm
const trombone_soft = note(`<
  [[eb3,g3] [ab3,c4]]
  [[eb3,g3]@3 [eb3,g3] [c3,g3] [f3,bb3] [g3,c4]@2]
  [[f3,c4]]
  [[d3,f3] f3]
  ~@38
>`).s("gm_trombone").gain(0.2)

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

// bass · tuba · "C Tuba" · soft notes
const bass_soft = note("<[bb2 eb3] [bb2@3 bb2 g2@2 c3@2] f2 [bb2@3 eb3 bb2@4] ~@38>").s("gm_tuba").gain(0.2)

stack(trumpet, french_horn, trombone, trombone_soft, bass, bass_soft)