Strudelify

Hogan's Heroes

Jerry Fielding

KeyB♭ majorTempo115 bpm
0:00/0:00
// Hogan's Heroes — Jerry Fielding
// 115 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 "Trombone" trombone (copy of ch 3 "Tenor Saxophone" tenor sax)
// note: Transcription provider: pdmx. https://musescore.com/score/5595431; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 46 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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.

// other · alto sax · "Alto Saxophone"
const alto_sax = note("<~@6 A B C D E F G H A I C D E F J K L H ~@7 M N O P A B C Q R S J T U V W>".pickRestart({
  A: "d4 f4 bb4 d5", B: "eb5@3 f5 eb5 ~ d5 ~ c5@8", C: "eb5@3 f5 eb5 ~ d5 ~ c5@4 f4@4", D: "bb4@3 a4 bb4 ~ g4 ~ f4@8",
  E: "d4 f4 bb4 d4", F: "eb4 ~ g4@4 eb4 ~ c5@4 eb5@4", G: "d5 ~ f5@4 d5 ~ bb4@4 c5@4", H: "bb4",
  I: "eb5@3 f5 eb5 ~ d5 ~ c5@2 f5 e5 f5 e5 f5 ~", J: "d5 ~ f5@4 d5 ~ bb4@4 g4@4", K: "c5 ~ eb5@4 c5 ~ a4@4 f4@4",
  L: "d4 ~ f4@4 bb4 ~ d5@4 c5@4", M: "d4@3 f4 bb4@3 f4", N: "g4@4 g4@3 a4 g4@2 f4@2 f4@4", O: "f5@3 f5 f5@3 f5",
  P: "f5@3 f5 f5@2 f5@2 f5@2 ~@6", Q: "bb4@3 a4 bb4 ~ g5 ~ f5@8", R: "d5 f5 bb4 d5", S: "eb5 ~ g4@4 bb4 ~ c5@4 eb5@4",
  T: "c5 ~ eb5@4 c5 ~ a4@4 f5@4", U: "d5 ~ f4@4 bb4 ~ d5@4 c5@4", V: "bb4@4 bb4@2 eb5 g5", W: "g5@8 f5 eb5 d5 c5 bb4@4",
})).s("gm_alto_sax").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note("<~@14 A B C D E F G H I J ~@7 K L M N A B C D E F G H I O P>".pickRestart({
  A: "f3@5 d3 f3 bb3", B: "a3@6 ~ eb4", C: "c4@2 bb3@2 a3@2 bb3@2 c4 ~ eb4@4 c4 ~", D: "d4 ~ f3@4 eb4 ~ d4@8",
  E: "bb3 ~ f3@4 eb4 ~ d4@2 c4@2 bb3@2 a3@2", F: "g3@4 ~ eb4 g4 gb4", G: "f4@2 f3@2 ~ d4 f4 d4",
  H: "eb4@2 g4@2 ~ f3 g3 a3", I: "bb3@2 f3@2 ~ bb3 a3 eb4", J: "d4", K: "bb2@2 ~@4 bb2 ~ d3@2 ~@4 d3 ~",
  L: "eb3@2 ~@2 eb3 ~@2 f3 eb3 ~ d3 ~ d3@2 ~@2", M: "f3@4 ~@2 e3 ~ eb3@4 ~@2 d4 ~", N: "c4 ~ bb3 ~ a3 ~ g3 ~ f3@2 ~@6",
  O: "d4@2 bb3!2", P: "eb4@2 f3 bb2",
})).s("gm_tenor_sax").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<~@7 A ~@6 B C D E F G H I J K ~@7 L M N O P Q R S T U V W X Y Z>".pickRestart({
  A: "~@10 f4 e4 f4 e4 f4 ~", B: "d4 f4 bb4 d5", C: "eb5@3 f5 eb5 ~ d5 ~ c5@8", D: "eb5@3 f5 eb5 ~ d5 ~ c5@4 f4@4",
  E: "bb4@3 a4 bb4 ~ g4 ~ f4@8", F: "d4 f4 bb4 d4", G: "eb4 ~ g4@4 eb4 ~ c5@4 eb5@4", H: "d5 ~ f5@4 d5 ~ bb4@4 g4@4",
  I: "c5 ~ eb5@4 c5 ~ a4@4 f4@4", J: "d4 ~ f4@4 bb4 ~ d5@4 c5@4", K: "bb4", L: "d4@3 f4 bb4@3 f4",
  M: "g4@4 g4@3 a4 g4@2 f4@2 f4@4", N: "f5@3 f5 f5@3 f5", O: "f5@3 f5 f5@2 f5@2 f5@2 ~@6", P: "d4 f4 bb4 [bb4,d5]",
  Q: "[c5,eb5]@3 [d5,f5] [c5,eb5] ~ [bb4,d5] ~ [a4,c5]@8", R: "[c5,eb5]@3 [d5,f5] [c5,eb5] ~ [bb4,d5] ~ [a4,c5]@4 f4@4",
  S: "[d4,bb4]@3 [d4,a4] [d4,bb4] ~ [eb5,g5] ~ [d5,f5]@8", T: "[bb4,d5] [d5,f5] [f4,bb4] [bb4,d5]",
  U: "eb5 ~ g4@4 bb4 ~ c5@4 [c5,eb5]@4", V: "[bb4,d5] ~ f5@4 d5 ~ bb4@4 [f4,g4]@4", W: "c5 ~ eb5@4 c5 ~ a4@4 f5@4",
  X: "[bb4,d5] ~ f4@4 bb4 ~ [bb4,d5]@4 [a4,c5]@4", Y: "[f4,bb4]@4 [f4,bb4]@2 [bb4,eb5] [bb4,g5]",
  Z: "[bb4,bb5]@8 f5 eb5 d5 c5 bb4@4", // Bb
})).s("gm_trumpet").gain(0.3)

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

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

// drums · snare
const snare = s("sd").struct(`<
  A@6 B C D E C F G H I C D J K L@2 D B M N M O P N M Q I R I S F E C@2 T@2 U V@2 W X
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x!4", B: "x ~ x!3 ~ x ~ x!7 ~", C: "~@2 x ~@3 x ~ x ~ x!3 ~ x ~",
  D: "x ~ x!3 ~ x ~ x!5 ~ x ~", E: "~@2 x ~@3 x ~ x ~ x!5 ~", F: "~@2 x ~@3 x ~ x!5 ~ x ~",
  G: "~@2 x ~@3 x ~@3 x ~ x!3 ~", H: "x ~ x!7 ~ x!3 ~ x ~", I: "x!5 ~ x ~ x!5 ~ x ~", J: "~@2 x ~@3 x ~ x!7 ~",
  K: "x!3 ~ x!3 ~ x!5 ~ x ~", L: "x ~ x ~@3 x ~ x!5 ~ x ~", M: "x!5 ~ x ~ x ~ x!6", N: "x!7 ~ x ~ x!6",
  O: "x!5 ~@7 x!4", P: "x!5 ~ x ~ x!8", Q: "x!5 ~@11", R: "x!9 ~ x ~ x!4", S: "x!5 ~ x ~ x ~ x!3 ~ x ~",
  T: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~", U: "x ~ x ~@3 x ~ x ~ x!5 ~", V: "x ~ x ~@3 x ~ x ~ x!3 ~ x ~", W: "x ~@5 x!2",
  X: "x ~@7 x!5 ~@3",
})).gain(0.3)

stack(alto_sax, tenor_sax, trumpet, bass, kick, snare)