Strudelify

The Hot Dog Song

Mike Himelestein

KeyG majorTempo185 bpm
0:00/0:00
// The Hot Dog Song — Mike Himelestein
// 185 bpm, 4/4, key G 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 4, 4/4 at bar 5, 2/4 at bar 20, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/6364498; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 42 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(185/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 · flute
const flute = note("<A B@2 C D E ~ F G@2 ~@2 H I J K J L J M@3 N L N L K L O P@2 ~@2 Q@8 ~>".pickRestart({
  A: "~@4 g5 ~ g5 ~", B: "[b5@2 ~@2 b5@2 ~@2 c6@3 b5 ~@3 d6@9 f#5@8]/2", C: "a5 c6", D: "d6 ~ d6 ~ d6 ~ c6 ~",
  E: "b5@3 g5 ~@3 g5@9", F: "~@3 c6", G: "[b5@4 d5@2 ~ c5 d5@4 f#5@3 g5@7 ~ d5@3 ~@6]/2",
  H: "[f#5,d6] ~ [f#5,d6] ~ [f#5,d6] ~ [e5,c6] ~", I: "[d5,b5]@3 g5 ~@3 [d5,g5]@5 ~@4", J: "~ g5 ~ b5", K: "~ b5 ~ g5",
  L: "~ g5 ~ g5", M: "[c6@3 b5@5 d6@27 ~@9 g5@4]/3", N: "~ b5 ~ b5", O: "~@4 b5@4 c6@3 b5@5", P: "[d6@27 ~@5]/2",
  Q: "[a#5@42 ~@2 [g5,g6]@42 ~@2 [g5,g6]@31 ~@9]/8", // G
})).s("gm_flute").gain(0.3)

// other · clarinet · "B♭ Clarinet"
const clarinet = note("<A B@2 C D E ~ F G@2 ~@2 H I J K J L J M@3 N L N L K L O P@2 ~@2 Q@8 ~>".pickRestart({
  A: "~@4 g4 ~ g4 ~", B: "[b4@2 ~@2 b4@2 ~@2 c5@3 b4 ~@3 d5@9 f#4@8]/2", C: "a4 c5", D: "d5 ~ d5 ~ d5 ~ c5 ~",
  E: "b4@3 g4 ~@3 g4@9", F: "~@3 c5", G: "[b4@4 d4@3 c4 d4@4 f#4@3 g4@8 d4@3 ~@6]/2",
  H: "[f#4,d5] ~ [f#4,d5] ~ [f#4,d5] ~ [e4,c5] ~", I: "[d4,b4]@3 g4 ~@3 [d4,g4]@5 ~@4", J: "~ g4 ~ b4", K: "~ b4 ~ g4",
  L: "~ g4 ~ g4", M: "[c5@3 b4@5 d5@28 ~@8 g4@4]/3", N: "~ b4 ~ b4", O: "~@4 b4@4 c5@3 b4@5", P: "[d5@7 ~]/2",
  Q: "[a#5@44 [g4,g5]@44 [e5,e6]@33 ~@7]/8", // G E
})).s("gm_clarinet").gain(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<A B@2 C D E ~ F G@2 ~@2 H I J K J L J M@3 N O N O P O Q R@2 ~@2 S@8 ~>".pickRestart({
  A: "~@4 g4 ~ g4 ~", B: "[b4@2 ~@2 b4@2 ~@2 c5@3 b4 ~@3 d5@9 f#4@8]/2", C: "a4 c5", D: "d5 ~ d5 ~ d5 ~ c5 ~",
  E: "b4@3 g4 ~@3 g4@9", F: "~@3 g4", G: "[b4@4 d4@3 c4 d4@4 f#4@3 g4@8 d4@3 ~@6]/2",
  H: "[f#4,d5] ~ [f#4,d5] ~ [f#4,d5] ~ [e4,c5] ~", I: "[d4,b4]@3 g4 ~@3 [d4,g4]@5 ~@4", J: "~ d4 ~ g4", K: "~ g4 ~ e4",
  L: "~ d4 ~ e4", M: "[e4@3 d4@5 a4@28 ~@8 d4@4]/3", N: "~ g4 ~ g4", O: "~ e4 ~ d4", P: "~ g4 ~ d4",
  Q: "~@4 g4@4 e4@3 d4@5", R: "[a4@7 ~]/2", S: "[e4@44 [e4,e5]@44 [b3,b4]@33 ~@7]/8",
})).s("gm_alto_sax").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<~@5 A B ~@2 A B ~ C D E F G H E I@3 J@2 K@3 L M N@2 ~ O P@8 ~>".pickRestart({
  A: "~@3 [g4,g5]", B: "[g4,g5] ~@3", C: "[f#4,d5] ~ [f#4,d5] ~ [f#4,d5] ~ [e4,c5] ~",
  D: "[d4,b4]@3 g4 ~@3 [d4,g4]@5 g4@2 ~@2", E: "g4 ~ g4 ~ b4 ~ b4 ~", F: "c5@3 b4 c5@3 d5@5 g4@2 ~@2",
  G: "g4@3 g4 ~@3 b4@5 c5@2 ~@2", H: "b4@2 ~@2 g4@3 g4 ~@4 g4@2 ~@2",
  I: "[c5@3 b4@5 d5@28 d5@2 ~@2 d5@2 ~@2 d5@2 ~@2]/3",
  J: "[d5@2 ~@2 c5@2 ~@2 b4@3 g4 ~@3 g4@3 ~@2 g4@2 ~@2 g4@2 ~@2 g4@2 ~@2]/2",
  K: "[b4@2 ~@2 b4@2 ~@2 c5@3 b4 c5@3 d5@5 g4@2 ~@2 g4@3 g4 ~@3 b4@5 c5@2 ~@2 b4@2 ~@2 g4@3 g4]/3",
  L: "~@2 g4 ~ g4 ~ g4 ~", M: "b4@2 ~@2 b4@2 ~@2 c5@3 b4@5", N: "[d5@7 ~]/2", O: "~@5 b4@7 c5@4",
  P: "[d5@7 d5@4 d5@33 [e4,e5]@44 [g4,g5]@33 ~@7]/8", // E G
})).s("gm_trumpet").gain(0.4)

// other · french horn · "Horn in F"
const french_horn = note("<~@5 A B ~@2 A B ~ C D E F G H E I@3 J@2 K@3 L M N@2 ~ O P@8 ~>".pickRestart({
  A: "~@3 [g3,g4]", B: "[g3,g4] ~@3", C: "[f#4,d5] ~ [f#4,d5] ~ [f#4,d5] ~ [e4,c5] ~",
  D: "[d4,b4]@3 g4 ~@3 [d4,g4]@5 g3@2 ~@2", E: "g3 ~ g3 ~ b3 ~ b3 ~", F: "c4@3 b3 c4@3 d4@5 g3@2 ~@2",
  G: "g3@3 g3 ~@3 b3@5 c4@2 ~@2", H: "b3@2 ~@2 g3@3 g3 ~@4 g3@2 ~@2",
  I: "[c4@3 b3@5 d4@28 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2]/3",
  J: "[d4@2 ~@2 c4@2 ~@2 b3@3 g3 ~@3 g3@3 ~@2 g3@2 ~@2 g3@2 ~@2 g3@2 ~@2]/2",
  K: "[b3@2 ~@2 b3@2 ~@2 c4@3 b3 c4@3 d4@5 g3@2 ~@2 g3@3 g3 ~@3 b3@5 c4@2 ~@2 b3@2 ~@2 g3@3 g3]/3",
  L: "~@2 g3 ~ g3 ~ g3 ~", M: "b3@2 ~@2 b3@2 ~@2 c4@3 b3@5", N: "[d4@7 ~]/2", O: "~@5 b3@7 c4@4",
  P: "[d4@7 d4@4 d4@33 [g3,g4]@44 [b3,b4]@33 ~@7]/8", // G B
})).s("gm_french_horn").gain(0.4)

// other · trombone
const trombone = note("<~@6 A B ~@4 C D E F G H E I@3 J@2 K@3 L M N@2 ~ O P@8 ~>".pickRestart({
  A: "~@2 d4 ~ d4 ~ d4 ~", B: "f4@3 d4 f4@3 d4@5 ~@4", C: "[f#3,d4] ~ [f#3,d4] ~ [f#3,d4] ~ [e3,c4] ~",
  D: "[d3,b3]@3 g3 ~@3 [d3,g3]@5 g3@2 ~@2", E: "g3 ~ g3 ~ b3 ~ b3 ~", F: "c4@3 b3 c4@3 d4@5 g3@2 ~@2",
  G: "g3@3 g3 ~@3 b3@5 c4@2 ~@2", H: "b3@2 ~@2 g3@3 g3 ~@4 g3@2 ~@2",
  I: "[c4@3 b3@5 d4@28 d4@2 ~@2 d4@2 ~@2 d4@2 ~@2]/3",
  J: "[d4@2 ~@2 c4@2 ~@2 b3@3 g3 ~@3 g3@3 ~@2 g3@2 ~@2 g3@2 ~@2 g3@2 ~@2]/2",
  K: "[b3@2 ~@2 b3@2 ~@2 c4@3 b3 c4@3 d4@5 g3@2 ~@2 g3@3 g3 ~@3 b3@5 c4@2 ~@2 b3@2 ~@2 g3@3 g3]/3",
  L: "~@2 g3 ~ g3 ~ g3 ~", M: "b3@2 ~@2 b3@2 ~@2 c4@3 b3@5", N: "[d4@7 ~]/2", O: "~@5 b3@7 c4@4",
  P: "[d4@7 d4@4 d4@33 [g3,g4]@44 [g3,g4]@33 ~@7]/8", // G
})).s("gm_trombone").gain(0.4)

// bass · tuba
const bass = note("<A B C D ~@2 E@4 F G D H E@5 I@3 B@6 J ~@4 K@8 ~>".pickRestart({
  A: "~@2 g2 ~", B: "c3 ~ g2 ~", C: "d3 ~ d3@2", D: "d3!2", E: "g2 ~ c3 ~", F: "g2@4 ~@4 g2 ~@2 f#2 e2 ~@2 d2",
  G: "c#2@4 d2 ~@3", H: "g2!2", I: "[g2@2 g2@7 ~ g2 ~]/3", J: "c3 ~ g2@2", K: "[a#2@44 e2@44 g2@33 ~@7]/8",
})).s("gm_tuba").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A@3 B ~@3 C ~@3 C ~@3 C ~@3 D ~@2 A E A E ~@2 A ~@4 F@2 G ~@2 H I ~@2>".pickRestart({
  A: "~@3 x", B: "~@2 x!2", C: "~ x ~ x", D: "~ x!2 ~", E: "~ x ~@2", F: "x!16", G: "x!10 ~@6", H: "~ x",
  I: "~@11 x ~@2 x ~",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@38 [~ x] [~@11 x ~@2 x ~] ~@2>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<A B@2 C ~@2 B@13 D ~ A B@7 ~@4 E@2 F E@2 G E H ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@4 x ~@2 x!2 ~@2 x!2 ~@2 x", D: "~ x!2 ~", E: "x!16", F: "x!10 ~@2 x!4",
  G: "x!7 ~ x!8", H: "x!8 ~@8",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<[~@15 x]!3 ~@35 [~@11 x ~@4] [~@9 x ~@6] [~ x ~@14] ~>").gain(0.4)

// drums · bongos
const bongos = s("bongo:4").struct("<~ A@3 ~@4 B ~@3 B ~@3 B ~@8 C A ~@11 D E A ~>".pickRestart({
  A: "~ x ~@2", B: "~ x ~ x", C: "~@3 x", D: "~@7 x", E: "~@3 x ~@4",
})).gain(1.04)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@38 [~@7 x] [~@3 x ~@4] [~ x ~@2] ~>").gain(1.04)

// drums · whistle
const whistle = s("ballwhistle:0").struct(`<
  A B@2 C D ~ E ~@3 E ~@3 E ~@3 E A ~ F B F B ~@2 F B ~@4 D ~ G H@2 I J K ~
>`.pickRestart({
  A: "~ x", B: "~ x ~@2", C: "~ x!3", D: "x", E: "~ x ~ x", F: "~@3 x", G: "~@12 x!4", H: "x!16", I: "x!7 ~ x ~@7",
  J: "x ~@2 x ~@12", K: "~@6 x ~@2 x ~@6",
})).gain(0.52)

// drums · guiro
const guiro = s("guiro:0").struct("<~@39 [x ~@2 x ~@12] [~@3 x ~@4] ~>").gain(8.38)

stack(
  flute, clarinet, alto_sax, trumpet, french_horn, trombone, bass, kick, rim, high_tom, crash, bongos, bongos_2,
  whistle, guiro
)