Strudelify

Pennsylvania Polka

Lester Lee & Zeke Manners

KeyF majorTempo240 bpm
0:00/0:00
// Pennsylvania Polka — Lester Lee & Zeke Manners
// 240 bpm, 2/2, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "Alto Saxophone" alto sax (copy of ch 2 "B♭ Clarinet" clarinet); ch 5 "B♭ Trumpet" trumpet (copy of ch 2 "B♭ Clarinet" clarinet)
// note: Transcription provider: pdmx. https://musescore.com/score/5595443; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(240/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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 · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  A@2 B@2 C D E@2 F G H@2 I J K@2 L M N@2 C D E@2 F O P@2 Q R S@2 T U V@2 W@2 X@2 Y Z AA Z AB AC AD AE Y Z AA Z AB AF AG
  AH Y Z AA Z AB AC AI AJ AK AL AM AN AO AP AQ AR A@2 B@2 C D E@2 F G H@2 I J K@2 L M N@2 C D E@2 F O P@2 Q R S@2 T U
  V@2
>`.pickRestart({
  A: "[f5 ~ c5 d5@2 a4 c5@2]/2", B: "[f4 ~ c4 d4@2 a3 c4@2]/2", C: "c5!2 ~ c5", D: "a4!2 ~ a4", E: "[f4 a4 f4 c4@5]/2",
  F: "~ c4 f4 a4", G: "c5 d5", H: "[d5 e4@5 ~@2]/2", I: "d5!2 ~ d5", J: "bb4!2 ~ bb4", K: "[g4 bb4 g4 e4@5]/2",
  L: "~ c4 e4 g4", M: "bb4 d5", N: "[d5 a4@6 a4]/2", O: "c5 eb5", P: "[eb5 d5@7]/2", Q: "d5 db5 d5 eb5", R: "e5@3 d5",
  S: "[d5 c5@4 a4 f4 d4]/2", T: "c4 e4 ~ g4", U: "d5 e4", V: "[g4 f4@4 ~@3]/2", W: "[bb5 ~ f5 g5@2 d5 f5@2]/2",
  X: "[bb4 ~ f4 g4@2 d4 f4@2]/2", Y: "f4", Z: "g4", AA: "a4", AB: "f4 g4", AC: "a4 bb4", AD: "a4@3 eb5 eb5@2 eb5@2",
  AE: "eb5", AF: "a4 g4", AG: "f4@3 d5 d5@2 d5@2", AH: "d5", AI: "c5@3 g4 g4@2 g4@2", AJ: "g4@3 c5",
  AK: "c5@3 g4 gb4@2 g4@2", AL: "c5@2 d5 c5", AM: "bb4@3 f4 e4@2 f4@2", AN: "bb4@3 bb4", AO: "a4@3 f4", AP: "f4@3 gb4",
  AQ: "g4 bb4 a4 c5", AR: "bb4 ~@3",
})).s("gm_clarinet").gain(0.3)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A@2 B@2 C D E@2 F G H@2 I J K@2 L M N@2 C D E@2 F O P@2 Q R S@2 T U V@2 W@2 X@2 Y Z AA Z AB AC AD AE Y Z AA Z AB AF AG
  AH Y Z AA Z AB AC AI AJ AK AL AM AN AO AP AQ AR A@2 B@2 C D E@2 F G H@2 I J K@2 L M N@2 C D E@2 F O P@2 Q R S@2 T U
  V@2
>`.pickRestart({
  A: "[f4 ~ c4 d4@2 a3 c4@2]/2", B: "[f3 ~ c3 d3@2 a2 c3@2]/2", C: "c4!2 ~ c4", D: "a3!2 ~ a3", E: "[f3 a3 f3 c3@5]/2",
  F: "~ c3 f3 a3", G: "c4 d4", H: "[d4 e3@5 ~@2]/2", I: "d4!2 ~ d4", J: "bb3!2 ~ bb3", K: "[g3 bb3 g3 e3@5]/2",
  L: "~ c3 e3 g3", M: "bb3 d4", N: "[d4 a3@6 a3]/2", O: "c4 eb4", P: "[eb4 d4@7]/2", Q: "d4 db4 d4 eb4", R: "e4@3 d4",
  S: "[d4 c4@4 a3 f3 d3]/2", T: "c3 e3 ~ g3", U: "d4 e3", V: "[g3 f3@4 ~@3]/2", W: "[bb4 ~ f4 g4@2 d4 f4@2]/2",
  X: "[bb3 ~ f3 g3@2 d3 f3@2]/2", Y: "f3", Z: "g3", AA: "a3", AB: "f3 g3", AC: "a3 bb3", AD: "a3@3 eb4 eb4@2 eb4@2",
  AE: "eb4", AF: "a3 g3", AG: "f3@3 d4 d4@2 d4@2", AH: "d4", AI: "c4@3 g3 g3@2 g3@2", AJ: "g3@3 c4",
  AK: "c4@3 g3 gb3@2 g3@2", AL: "c4@2 d4 c4", AM: "bb3@3 f3 e3@2 f3@2", AN: "bb3@3 bb3", AO: "a3@3 f3", AP: "f3@3 gb3",
  AQ: "g3 bb3 a3 c4", AR: "bb3 ~@3",
})).s("gm_tenor_sax").gain(0.3)

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

// chords · banjo
const banjo = note(`<
  ~@4 A@6 B@2 C B@5 A@8 D@3 B A@2 B@2 A E ~@4 D@6 F@8 G@8 H I@2 J G@2 F@2 K L ~@4 A@6 B@2 C B@5 A@8 D@3 B A@2 B@2 A E
>`.pickRestart({
  A: "~ [f3,a3,c4] ~ [f3,a3,c4]", B: "~ [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4]", C: "~ [e3,g3,bb3,c4] ~ [e3,g3,bb3]",
  D: "~ [f3,bb3,d4] ~ [f3,bb3,d4]", E: "[f3,a3,c4] ~@3", F: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4]",
  G: "~ [d3,f3,bb3,d4] ~ [d3,f3,bb3,d4]", H: "~ [eb3,g3,bb3,eb4] ~ [f3,g3,b3,d4]",
  I: "~ [c3,eb3,g3,c4] ~ [c3,eb3,g3,c4]", J: "~ [eb3,g3,bb3,eb4] ~ [eb3,f3,a3,c4]",
  K: "~ [e3,g3,bb3,c4] ~ [eb3,f3,a3,c4]", L: "[d3,f3,bb3,d4] ~@3",
})).s("gm_banjo").gain(0.3)

// chords · accordion
const accordion = note(`<
  A@2 B@2 C D E@2 F G H@2 I J K@2 L M N@2 C D E@2 F O P@2 Q R S@2 T U V@2 W@2 X@2 Y Z AA Z AB AC AD AE AF AG AH AG AI AJ
  AK AL AM AN AO AN AP AQ AR AS AT AU AV AW AX AY AZ BA A@2 B@2 C D E@2 F G H@2 I J K@2 L M N@2 C D E@2 F O P@2 Q R S@2
  T U V@2
>`.pickRestart({
  A: "[f5 ~ c5 d5@2 a4 c5@2]/2", B: "[f4 ~ c4 d4@2 a3 c4@2]/2", C: "c5 [f3,a3,c4,c5] ~ [f3,a3,c4,c5]",
  D: "a4 [f3,a3,c4,a4] ~ [f3,a3,c4,a4]", E: "[f4 [f3,a3,c4,a4] f4 [f3,a3] ~ [f3,a3] ~ [f3,a3,c4], ~@3 c4@2 c4@2 ~]/2",
  F: "~ [f3,a3,c4] f4 [f3,a3,c4,a4]", G: "~ [f3,a3,c4] ~ [f3,a3,c4], c5 d5",
  H: "[d5 [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4], ~ e4@5 ~@2]/2", // C7
  I: "d5 [e3,g3,bb3,c4,d5] ~ [e3,g3,bb3,d5]", J: "bb4 [e3,g3,bb3,c4,bb4] ~ [e3,g3,bb3,c4,bb4]",
  K: "[g4 [e3,g3,bb3,c4,bb4] g4 [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4], ~@3 e4@5]/2", // C7
  L: "~ [e3,g3,bb3,c4] e4 [e3,g3,bb3,c4,g4]", M: "~ [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4], bb4 d5",
  N: "[d5 [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4,a4], ~ a4@6 ~]/2", O: "~ [f3,a3,c4] ~ [f3,a3,c4], c5 eb5",
  P: "[eb5 [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4] ~ [f3,bb3,d4], ~ d5@7]/2", // Bb
  Q: "d5 [f3,bb3,d4,db5] d5 [f3,bb3,d4,eb5]", R: "~ [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4,d5], e5@3 ~",
  S: "[d5 [f3,a3,c4] ~ [f3,a3,c4] ~ [f3,a3,c4,a4] f4 [f3,a3,c4,d4], ~ c5@4 ~@3]/2", // F Dm7
  T: "c4 [e3,g3,bb3,c4,e4] ~ [e3,g3,bb3,c4,g4]", U: "~ [e3,g3,bb3,c4] ~ [e3,g3,bb3,c4], d5 e4",
  V: "[g4 [f3,a3,c4] ~ [f3,a3,c4] [f3,a3,c4] ~@3, ~ f4@4 ~@3]/2", W: "[bb5 ~ f5 g5@2 d5 f5@2]/2",
  X: "[bb4 ~ f4 g4@2 d4 f4@2]/2", Y: "~ [f3,bb3,d4] ~ [f3,bb3,d4], f4", Z: "~ [f3,bb3,d4] ~ [f3,bb3,d4], g4",
  AA: "~ [f3,bb3,d4] ~ [f3,bb3,d4], a4", AB: "~ [f3,bb3,d4] ~ [f3,bb3,d4], f4 g4",
  AC: "~ [f3,bb3,d4] ~ [f3,bb3,d4], a4 bb4", AD: "~@3 eb5 eb5@2 [eb3,f3,a3,c4,eb5]@2, a4@3 ~@5, ~ [eb3,f3,a3,c4] ~@2",
  AE: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4], eb5", AF: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4], f4",
  AG: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4], g4", AH: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4], a4",
  AI: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4], f4 g4", AJ: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4], a4 g4",
  AK: "~@3 d5 d5@2 [d3,f3,bb3,d4,d5]@2, f4@3 ~@5, ~ [d3,f3,bb3,d4] ~@2", AL: "~ [d3,f3,bb3,d4] ~ [d3,f3,bb3,d4], d5",
  AM: "~ [d3,f3,bb3,d4] ~ [d3,f3,bb3,d4], f4", AN: "~ [d3,f3,bb3,d4] ~ [d3,f3,bb3,d4], g4",
  AO: "~ [d3,f3,bb3,d4] ~ [d3,f3,bb3,d4], a4", AP: "~ [d3,f3,bb3,d4] ~ [d3,f3,bb3,d4], f4 g4",
  AQ: "~ [d3,f3,bb3,d4] ~ [d3,f3,bb3,d4], a4 bb4", // Bb
  AR: "~@3 g4 g4@2 [f3,g3,b3,d4,g4]@2, c5@3 ~@5, ~ [eb3,g3,bb3,eb4] ~@2", // G7 Eb
  AS: "~ [c3,eb3,g3,c4] ~ [c3,eb3,g3,c4,c5], g4@3 ~", // Cm
  AT: "~@3 g4 gb4@2 [c3,eb3,g3,c4,g4]@2, c5@3 ~@5, ~ [c3,eb3,g3,c4] ~@2", // Cm
  AU: "~ [eb3,g3,bb3,eb4] d5 [eb3,f3,a3,c4,c5], c5 ~", // Eb F7
  AV: "~@3 f4 e4@2 [d3,f3,bb3,d4,f4]@2, bb4@3 ~@5, ~ [d3,f3,bb3,d4] ~@2", // Bb
  AW: "~ [d3,f3,bb3,d4] ~ [d3,f3,bb3,d4,bb4], bb4@3 ~", AX: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4,f4], a4@3 ~",
  AY: "~ [eb3,f3,a3,c4] ~ [eb3,f3,a3,c4,gb4], f4@3 ~", AZ: "g4 [e3,g3,bb3,c4,bb4] a4 [eb3,f3,a3,c4,c5]",
  BA: "[d3,f3,bb3,d4,bb4] ~@3", // Bb
})).s("gm_accordion").gain(0.3)

// drums · kick
const kick = s("bd").struct("<~@4 A@31 B ~@4 A@31 B ~@4 A@31 B>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@4 A@31 B ~@4 A@31 B ~@4 A@31 B>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.3)

stack(clarinet, tenor_sax, bass, banjo, accordion, kick, snare)