Strudelify

Comedy Tonight - A Funny Thing Happened on the Way to the Forum

Joshua Sommer

KeyG majorTempo220 bpm
0:00/0:00
// Comedy Tonight - A Funny Thing Happened on the Way to the Forum — Joshua Sommer
// 220 bpm, 2/2, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/2 at bar 1, 2/4 at bar 116, 4/4 at bar 121) are rendered on a constant 2/2 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5866970; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 138 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(220/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.

// chords · piano
const piano = note(`<
  A B A B C D C E C F G H I J K L M N O P C D C E C Q R S T U V A W X Y Z AA Z AB Z AC AD AE Z AA Z AB Z AC AF AE AG AH
  AI AJ AK AL AM AN AO AP AO AQ Z AR AS AT AU AV AW AX AY X AZ BA BB BC BD BE BF BG BH BE BF BG BI BE BJ BK BL BG BM BG
  BN BG BJ BK BO BP BQ BR BS BT BU BV BW BX BY BZ CA BG CB CC@2 CD CE CF CG CH CI CJ@2 CK@2 CL@2 CM@2 CN@2 CK@2 CL@2
  CO@2 CP@2
>`.pickRestart({
  A: "g2@2 [g3,b3,d4]!2 [d2,g3,b3,d4]@2 [g3,b3,d4]@2", B: "g2 [a3,c4,e4] d2 [a3,d4,f#4]",
  C: "[g2,d4] ~ d2 [b3,d4], ~ [b3,d4,g4]@2 ~", D: "g2 [c4,e4] d2 [d4,f#4], g4 a4",
  E: "g2 [e4,g4] d2 [d4,f#4,a4], c4 a3", F: "g2@2 ~ b4 [d2,a4]@2 [c4,e4,g4]@2, c5@3 ~@5, ~ [c4,e4,a4] ~@2",
  G: "[c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4]@2 ~@10, f2!2 ~@2", H: "~@2 [d2,d3,c4,f#4,a4] ~",
  I: "g2@2 [g3,b3,d4]!2 [g3,b3,d4]@2 d2@2", J: "g2@2 [a3,c4,d4] d4 [d2,a4]@2 [d4,f#4]@2",
  K: "b2@2 [g3,b3,d4]!2 [g3,b3,d4]@2 f#2@2", L: "b2@2 [b3,e4,f#4] f#4 d5@2 [f#2,d#4,f#4]@2",
  M: "[c4,f4,a4] ~ [c4,f4,a4] ~ [c4,f4,a4]@2 ~@6 c2@4, f2 ~@3", N: "f2 [c4,f4,a4] ~ [c2,c4,f4,a4]",
  O: "a2 ~ b2 [d#4,f#4,b4], c5 ~ [e4,a4,c5]@4 ~@2", P: "c3 [c4,e4] d3 [g3,c4], g4 e4",
  Q: "[g2,g4] [c4,e4,a4] [d2,b4] [d4,g4,b4,d5]", // G Am G
  R: "d#2@2 [g#3,c#4,f4]@2 d#2@2 ~ g4, d#5@15 ~, ~@4 f4@3 ~, ~@3 [g#3,c#4]", // C# C#5
  S: "[d#2,g#4] [c#4,f4,a#4] [d#2,c5] [c#4,f4,g#4,d#5]", T: "[a2,g3,c4,e4]@11 ~ [a2,g3,c4,e4]@4",
  U: "[b2,a3,d4,f#4]@15 ~", V: "[g3,c4,e4,a4,d5] ~@2 [d3,f#3,c4,e4,b4]", W: "g2 [a3,c4,e4] d2 [a3,c4,e4]",
  X: "g#2@2 [g#3,c4,d#4]!2 [d#2,g#3,c4,d#4]@2 [g#3,c4,d#4]@2", Y: "g#2 [a#3,c#4,f4] d#2 [a#3,c#4,f4]",
  Z: "[g#2,d#4] ~ d#2 [c4,d#4], ~ [c4,d#4,g#4]@2 ~", AA: "g#2 [c#4,f4] d#2 [d#4,g4], g#4 a#4",
  AB: "g#2 [f4,g#4] d#2 [d#4,g4,a#4], c#4 a#3", // Fm D#
  AC: "g#2@2 ~ c5 [d#2,a#4]@2 [c#4,f4,g#4]@2, c#5@3 ~@5, ~ [c#4,f4,a#4] ~@2", // D#5 C# A#m
  AD: "[f#2,c#4,f#4,a#4]@11 ~ [f#2,c#4,f#4,g#4]@4", AE: "[d#3,c#4,g4,a#4] ~ [d#2,d#3,a#4,c#5,g5,a#5] ~",
  AF: "[c#4,f#4,a#4]!2 [c#4,f#4,a#4]@2 ~@2 [f#2,c#4,f#4,g#4]@2, f#2@11 ~@5", // F# F#sus2
  AG: "[g#2,g#3,c4,d#4] ~ d#2 [f#3,a#3,c#4], ~ [g#3,c4,d#4]@2 ~", AH: "[g#2,d#4] c4 d#2 [c4,d#4], ~ d#4@2 ~",
  AI: "[c3,c4,e4,g4] ~ g2 [a#3,d4,f4], ~ [c4,e4,g4]@2 ~", AJ: "c3 [e4,g4] g2 [e4,g4], c4@15 ~",
  AK: "[f#2,c#4,c#5] ~ c#2 [c4,f4,a4,c5], ~ [c#4,f#4,a#4,c#5]@2 ~", AL: "f#2 [f#4,a#4] c#2 [g#4,c5], c#4 [d#4,d#5]",
  AM: "[a#2,c#4,c#5] ~ a#1 [c4,e4,g4,c5], ~ [c#4,f4,a#4,c#5]@2 ~", AN: "[a#2,g#4] [g#3,c#4,f4] [d#2,g#3,c#4,f4] ~",
  AO: "[g#2,d#4,g#4,c5,d#5] ~ d#2 [d#4,g#4,c5,d#5], ~ [g#4,c5,g#5]@2 ~", // G#
  AP: "g#2 [c#5,f5] [d#2,a#4,a#5] [a#3,d#4,g4], [g#4,g#5] ~", AQ: "g#2 [f4,a#4] [d#2,a#3,a#4] [d#4,g4], [c#4,c#5] ~",
  AR: "[g#2,g#4] [c#4,f4,a#4] [d#2,c5] [d#4,g#4,c5,d#5]", AS: "e2 [e4,g#4,b4] e3 [a3,d4,f#4], d#5@15 ~",
  AT: "e2 [b3,e4,g#4] e3 [d4,f#4,a4], b4 d5", AU: "[f3,a#3,c#4]@11 ~ [f3,a#3,c#4]@4, a#2 ~@3", AV: "[g3,c4,d#4]@15 ~",
  AW: "[f4,a#4,d#5] d#5 d#5@2 ~@2 [d#3,d#4,f4,g4,c5]@2, [g#3,c#4] ~@3", // D#sus2 Cm C#5
  AX: "[g#2,c4,d#4,g#4]@2 [g#3,c4,d#4]!2 [d#2,g#3,c4,d#4]@2 [g#3,c4,d#4]@2", AY: "g#2 [a#3,c#4,f4] d#2 [a#3,d#4,g4]",
  AZ: "[a#2,g#3,c#4,f4]@2 [g2,a#3,d#4,g4] ~", BA: "c3@2 [c4,e4,g4]!2 [g2,c4,e4,g4]@2 [c4,e4,g4]@2",
  BB: "c3 [d4,f4,a4] g2 [d4,g4,b4]", BC: "a2@2 [a3,c#4,e4]!2 [e2,a3,c#4,e4]@2 [a3,c#4,e4]@2",
  BD: "a2 [b3,d4,f#4] e2 [b3,e4,g#4]", BE: "[a2,e4]@2 [c#4,e4]!2 [e2,c#4,e4]@2 [c#4,e4]@2, ~ a4@2 ~",
  BF: "[a2,d4,f#4,a4] [e4,g#4,b4] [e2,e5] [b3,e4,g#4]", BG: "[a2,e4] ~ e2 [c#4,e4], ~ [c#4,e4,a4]@2 ~",
  BH: "[a2,b3,d4] [g#3,b3] [e2,e3] [b3,e4,g#4]", BI: "[a2,b3,d4] [g#3,b3] e2 [b3,e4,g#4]",
  BJ: "a2@2 ~ c#5 [e2,b4]@2 [d4,f#4,a4]@2, d5@3 ~@5, ~ [d4,f#4,b4] ~@2", BK: "[g2,d4,g4,b4]!2 [g2,d4,g4,b4]@2 ~@4",
  BL: "[b5,c6] [f5,f#5,g5,g#5,a5,a#5] [b4,c5,c#5,d5,d#5,e5] [f4,f#4,g4,g#4,a4,a#4] [c4,c#4,d4,d#4,e4] [f#3,g3,g#3,a3,a#3,b3] [c3,c#3,d3,d#3,e3,f3] [g2,g#2,a2,a#2,b2] [e2,d4,g#4,b4]@4 ~@4, c#6@8 [f2,f#2] ~@7", // Cmaj7 E7 F#maj7
  BM: "a2 [d4,f#4] e2 [e4,g#4], a4 b4", BN: "a2 [f#4,a4] e2 [e4,g#4,b4], d4 b3", BO: "~@8 [d#2,d#3] [e2,e3]@3 ~@4",
  BP: "[a2,e5]@2 [e4,a4,c#5]!2 [e2,e4,a4,c#5]@2 [a4,b4,d5]@2, ~ e5@2 ~", BQ: "a2 [d4,f#4,b4] e2 [e4,g#4,b4], e5@15 ~",
  BR: "[c#3,c#5]@2 [c#4,f4,g#4]!2 [g#2,c#4,f4,g#4]@2 [f4,g#4,b4]@2, ~ c#5@2 ~", // C# Fdim
  BS: "c#3 [c#4,f#4,g#4] g#2 [c#4,f4,g#4], c#5@15 ~", // C#sus4 C#
  BT: "[g2,d5]@2 [d4,g4,b4]!2 [d2,d4,g4,b4]@2 [g4,b4,c#5]@2, ~ d5@2 ~", BU: "g2 [d4,g4,b4] d2 [d4,g4,b4], d5 e5",
  BV: "[b2,d5] [d4,f#4,b4] c#3 [f4,g#4,c#5], ~ d5@2 ~", BW: "d3 [d4,f#4] [e2,a3,d4,f#4] [a3,c#4,d#4], a4 ~",
  BX: "[a2,a3,c#4,e4] a4 e2 [a3,c#4,e4]", BY: "[a2,b3,d4,f#4,a4] ~ [e2,b4] [b3,e4,g#4]",
  BZ: "[a2,a3,c#4,e4] [c#4,e4,a4] e2 [c#4,e4]", CA: "[a2,d4] [f#4,a4,b4] [e2,b3] [e4,g#4,b4]",
  CB: "[a2,a4] b4 e2 e5, [d4,f#4] [e4,a4,c#5]", // A D A
  CC: "[~ f4 [a#3,d#4,g#4]@2 [c4,f4,a4]@3 [d#4,g#4,a#4] [f2,f4,a4,c5]@2 ~@3 [g4,a#4,d#5] [a4,d5,f5]@2, f5@23 ~ c2@4 ~@4, f2@2 ~@2 c2@2 ~@4 [f4,a#4,d5]@3 ~@3]/2", // D#sus4 F D#sus4 F D# Dm A#
  CD: "~@3 e5 ~@12, [b1,b2,d4] ~@3, ~ a4@3 ~@12, ~ c#5 ~@6", CE: "~@2 [b1,b2,f#4,a4,d5,f#5] ~",
  CF: "[e2,e3,b4] [e2,e3,a4] [e2,e3,g4] [e2,e3,a4] [e2,e3,b4] [e2,e3,c5] [e2,e3,d5] [e2,e3,e5] [e2,e3,f5] [e2,e3,e5] [e2,e3,d5] [e2,e3,e5] [e2,e3,f5] [e2,e3,g5] [e2,e3,a5] [e2,e3,b5]", // E5 A5 Em A5 E5 C E7 E …
  CG: "d6 c6 b5 a5 b5 a5 g5 b5 a5 g5 f5 e5 d5 c5 b4 a4, [e2,e3] ~@7", // E
  CH: "[e2,e3,a3,d4,e4,g4] [e2,e3,a3,d4,e4,a4] [e2,e3,b4] [e2,e3,c5] [e2,e3,b4] [e2,e3,c5] [e2,e3,d5] [e2,e3,e5] [e2,e3,d5] [e2,e3,c5] [e2,e3,b4] [e2,e3,a4] [e2,e3,b4] [e2,e3,c5] [e2,e3,d5] [e2,e3,e5], ~ [a3,d4,e4]@2 [a3,d4,f4] [b3,e4,g4]@2 [c4,f4,a4]@2", // Em7 Dsus2 E5 C E5 C E7 E …
  CI: "[e2,e3,e4,g4,a4,b4,f5] [e2,e3,e4,g4,a4,b4,e5] [e2,e3,d5] [e2,e3,c5] [e2,e3,d5] [e2,e3,e5] [e2,e3,f5] [e2,e3,g5] [e2,e3,a5] [e2,e3,g5] [e2,e3,f5]!2 [e2,e3,b5] [e2,e3,c6] [e2,e3,d6] [e2,e3,e6], ~ [e4,g4,a4,b4]@2 [d4,f4,a4,c5] [d4,f4,a4,d5]@2 [e4,g4,a4,b4]@2", // Em E7 C E7 E Fmaj7 Em A5 …
  CJ: "[[e2,b2,f3,d4,a4,c5,e5] ~@3 [g#2,d#4]@2 ~@2 d#2@2 [c4,d#4]@2 g#2@2 [c#4,f4]@2, ~@3 [c4,d#4,g#4]@2 ~ g#4@2]/2", // Dm7 G#5 Cm C# G#
  CK: "[d#2 [d#4,g4] [g#2,d#4] ~ d#2 [c4,d#4] g#2 [f4,g#4], a#4@2 ~ [c4,d#4,g#4]@2 ~ c#4@2]/2", // D# G#5 Cm Fm G#
  CL: "[d#2@2 [d#4,g4,a#4]@2 [g#2,d#4]@2 ~@2 d#2@2 [c4,d#4]@2 g#2@2 ~ c5, a#3@4 ~@2 [c4,d#4,g#4]@4 ~@2 c#5@3 ~, ~@7 [c#4,f4,a#4]]/2", // D# G#5 Cm G# A#m
  CM: "[[d#2,a#4]@4 [c#4,f4,g#4]@4 [f#2,c#4,f#4,a#4]@11 ~ [f#2,c#4,f#4,g#4]@4 [d#3,c#4,g4,a#4]@4 ~@4]/2", // D#5 C# F# F#sus2 D#7
  CN: "[[d#2,d#3,a#4,c#5,g5,a#5] ~ [g#2,d#4] ~ d#2 [c4,d#4] g#2 [c#4,f4], ~@3 [c4,d#4,g#4]@2 ~ g#4@2]/2", // D#7 G#5 Cm C# G#
  CO: "[[d#2,a#4]@2 [c#4,f4,g#4]@2 [c#4,f#4,a#4]!2 [c#4,f#4,a#4]@2 ~@2 [f#2,c#4,f#4,g#4]@2 [d#3,c#4,g4,a#4]@2 ~@2, ~@8 f#2@11 ~@13]/2", // D#5 C# F# F#sus2 D#7
  CP: "[[d#2,d#3,a#4,c#5,g5,a#5]@8 [g#1,g#3]@15 ~@9]/2", // D#7 G#
})).s("gm_piano").gain(0.3)

stack(piano)