Strudelify

The Great Crush Collision March

Scott Joplin

KeyF majorTempo185 bpm
0:00/0:00
// The Great Crush Collision March — Scott Joplin
// 185 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 199 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 · "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 · "Track01"
const piano = note(`<
  A B C D E F G H I H J K L F G H I M N O P F G H I H J K L F G H I M N O Q R@2 S T U@2 V@2 W@2 X Y Z@2 AA AB R@2 S T
  U@2 V@2 W@2 X Y Z@2 AC AD AE AF AG AH AI AJ AK AL AM AF AN AO AP AQ AR AS AE AF AG AH AI AJ AK AL AM AF AN AO AP AQ AR
  AT AU AV AW AX AY AZ BA BB AU AV AW AX BC BD BE BF AU AV AW BG AY AZ BH BI AU AV AW BG BC BD BE BJ BK BL BM BN BO BP
  BQ BR BS BT BU BV BW BX BY BZ@2 CA CB CC BG AY AZ BH BI CA CB CC BG BC BD BE BJ BK BL BM BN BO BP BQ BR CD CE BU BV BW
  BX BY CF CG CA CB CC BG AY AZ BH BI CA CB CC BG BC BD BE CH
>`.pickRestart({
  A: "~@6 [f4,f5] ~", B: "[e4,e5] ~ [d4,d5] ~ [db4,db5] ~ [bb3,bb4] ~ [a3,a4]@2 ~@2 [f4,f5]@2 ~@2",
  C: "[e4,e5] ~ [d4,d5] ~ [db4,db5] ~ [bb3,bb4] ~ [a3,a4]@2 ~@2 [ab3,ab4]@2 ~@2", // E D Db Bb A Ab
  D: "[a3,a4] ~ [bb3,bb4] ~ [a3,a4] ~ [a4,db5,e5,a5] ~", // A Bb A
  E: "[d5,f5,a5,d6] ~ [db5,db6] ~ [d5,f5,a5,d6] ~ [db5,db6] ~ [d5,f5,a5,d6]@2 ~@2 f4@2 ~@2", // Dm Db Dm Db Dm
  F: "~@2 [a3,d4,f4] ~@3 [a3,db4,e4,g4] ~, a4@3 ~ a4@3 ~", G: "~@2 [a3,d4,f4] ~@3 [c4,d4,gb4] ~, a4@3 ~ a4@3 ~",
  H: "g4@4 ~@2 a4 ~ bb4@2 ~@2 d5@2 ~@2", I: "a4 ~ d5 ~ db5 ~ d5 ~ a4@5 ~@3", J: "a4 ~ d5 ~ db5 ~ d5 ~ [a4,d5,f5]@5 ~@3",
  K: "[e4,ab4,b4,e5]@5 ~@3 f5 ~ e5 ~ eb5 ~ e5 ~", L: "[a4,db5,e5,a5]@2 ~@2 [a4,db5,e5,a5]@2 ~@2 a3 ~ ab3 ~ a3@2 ~@2",
  M: "[a4,d5]@4 ~@2 [a4,e5] ~ [a4,f5]@2 ~@2 [a4,d5]@2 ~@2", // D5 A5 Dm D5
  N: "[bb4,d5,bb5] ~ [ab4,d5,ab5] ~ [a4,db5,e5,a5] ~ [e4,ab4,b4,e5] ~", O: "[a4,db5,e5,a5]@5 ~@3 bb5 ~ a5 ~ ab5 ~ a5 ~",
  P: "[d5,f5,a5,d6] ~@7", Q: "[d5,f5,a5,d6] ~ [a4,f5] ~ [a4,e5] ~ [a4,d5] ~",
  R: "[~@2 [g4,bb4] ~ [g4,bb4] ~ [g4,bb4] ~ [g4,bb4] ~ [bb4,c5] ~ [bb4,d5] ~ [bb4,e5] ~, e5@9 ~@7]/2", // Gm Bbsus2 Bb Bbdim
  S: "~@2 [a4,c5] ~ [a4,c5] ~ [f4,d5] ~, a5@7 ~", T: "[f4,c5,f5]@2 ~@2 [c5,c6]@2 ~@2 [c5,c6]@4 ~@2 [a4,a5] ~",
  U: "[~@4 [c5,e5]@2 ~@2 [c5,e5]@2 ~@2 [c5,e5]@2 ~@2 [c5,e5]@2 ~@2 [c5,c6]@2 ~@2 [c5,c6]@4 ~@2 [ab4,ab5] ~, bb5@9 ~@7, bb4@7 ~@9]/2", // C Ab
  V: "[~@2 [c5,f5] ~ [c5,f5] ~ [c5,f5] ~ [c5,f5] ~ [a4,f5] ~ [a4,e5] ~ [a4,d5] ~, a5@9 ~@7, a4@7 ~@9]/2", // F5 Dm A5 D5
  W: "[~@2 [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [e4,g4] ~ [a4,a5] ~ [e4,e5] ~ [g4,g5] ~, db5@9 ~@7]/2", // Em A E G
  X: "~@2 [a4,d5] ~ [a4,d5] ~ [a4,d5] ~, [f4,f5]@7 ~", Y: "[eb5,a5] ~ [eb5,c6] ~ [eb5,b5] ~ [eb5,a5] ~",
  Z: "[~@2 [c5,e5] ~ [c5,e5] ~ [c5,e5] ~ [b4,d5] ~ [f5,g5] ~ [f5,a5] ~ [f5,b5] ~, [g4,g5]@9 ~@7]/2", // C Bm Fsus2 F Fdim G
  AA: "[e5,g5,c6]@5 ~@7 [d5,f5,g5]@2 ~@2", AB: "[c5,e5,g5,c6] ~ [a4,f5] ~ [a4,e5] ~ [a4,d5] ~",
  AC: "[e5,g5,c6]@7 ~@5 [d5,f5,g5]@3 ~", AD: "[c5,e5,g5,c6]@3 ~ g5@3 ~ e5@3 ~ c5@3 ~", AE: "[bb4,d5]@5 ~ e5 g5",
  AF: "[bb4,d5]@2 ~@2 [bb4,db5]@2 ~@2 [bb4,c5]@2 ~@2 f5 ~ e5 ~", AG: "[a4,d5]@7 ~@5 f5 ~ a5 ~",
  AH: "[a4,d5]@2 ~@2 [a4,db5]@2 ~@2 [a4,c5]@2 ~@2 f5 ~ [c5,a5] [e5,g5]", // D5 A Am F Em
  AI: "bb5 ~ e5 ~ g5 ~ bb5 ~ [c5,e5,g5,bb5]@2 ~@2 [c5,e5,g5,bb5]@2 ~@2", // C7
  AJ: "[e5,g5,bb5,d6] ~ c6 ~ bb5 ~ g5 ~ e5 ~ d5 ~ db5 ~ c5 [f5,a5]", // Em7b5 F
  AK: "c6 ~ c5 ~ f5 ~ a5 ~ [c5,f5,a5,c6]@2 ~@2 [c5,f5,a5,c6]@2 ~@2", AL: "c6 ~ a5 ~ f5 ~ c5 ~ a5 ~ f5 ~ c5 ~ a4 ~",
  AM: "[bb4,d5]@7 ~@5 e5 ~ g5 ~", AN: "[a4,d5]@7 ~@5 f5 ~ a5@2",
  AO: "[a4,d5]@2 ~@2 [a4,d5]@2 ~@2 [a4,f5]@2 ~@2 [a4,a5] ~ d5 [gb5,a5]", // D5 Dm A Gbm
  AP: "d6 ~ d5 ~ gb5 ~ a5 [d5,g5] d6 ~ d5 ~ g5 ~ [a4,bb5] [db5,e5]", // G5 Bbmaj7 Dbm
  AQ: "a5 ~ a4 ~ db5 ~ e5 [a4,d5] a5 ~ a4 ~ d5 ~ f5 ~", AR: "d5 ~ f5 ~ e5 ~ d5 ~ d5 ~ c5 ~ f5 ~ a5 ~",
  AS: "[bb4,g5]@5 ~@3 [a4,f5]@2 ~@2 c5@2 ~@2", AT: "[bb4,g5]@5 ~@3 [a4,f5]@2 ~@2 f4@2 ~@2", AU: "d5@7 ~ c5@5 ~ d5@2",
  AV: "eb5@7 ~ [a4,eb5,a5]@7 ~", AW: "eb5@7 ~ d5@5 ~ eb5@2", AX: "f5@7 ~ [bb4,d5,f5,bb5]@7 ~",
  AY: "[d5,d6]@7 ~ [d5,d6]@5 ~ [b4,b5]@2", AZ: "[c5,eb5,c6]@7 ~ [g4,eb5,g5]@7 ~",
  BA: "[c5,eb5,c6]@7 ~ [c5,eb5,c6]@5 ~ [a4,a5]@2", BB: "[bb4,d5,f5,bb5]@7 ~ [f4,bb4,d5,f5]@7 ~",
  BC: "[bb4,bb5]@7 ~ [g4,g5]@5 ~ [bb4,bb5]@2", BD: "[d5,d6]@7 ~ [f5,f6]@5 ~ [d5,d6]@2",
  BE: "[c5,e5,c6]@7 ~ [c5,eb5,c6]@7 ~", BF: "[bb4,d5,f5,bb5]@5 ~ f4@2 g4@2 a4@2 bb4@2 c5@2",
  BG: "f5@5 ~ bb4 [d5,f5] bb5@7 ~", BH: "[c5,eb5,c6]@7 ~ [c5,eb5,c6]@5 ~ [a4,bb4,a5] [d5,f5]",
  BI: "bb5@5 ~ f4 [bb4,d5] f5@7 ~", BJ: "[bb4,d5,f5,bb5]@5 ~@3", BK: "~@2 [g5,bb5,d6,g6] ~ [gb5,c6,d6,gb6] ~ [d5,d6] ~",
  BL: "[g5,g6] ~ [bb5,d6,bb6] ~ [a5,c6,a6] ~ [d5,gb5,a5,d6] ~", BM: "[g5,bb5,d6,g6]@5 ~@3 [a5,db6,e6,a6]@5 ~@3",
  BN: "[d6,gb6,a6,d7] ~ [d6,gb6,a6,d7] ~@5", BO: "~@2 [d5,f5,a5,d6] ~ [e5,bb5,c6,e6] ~ [c5,c6] ~",
  BP: "[f5,f6] ~ [a5,c6,a6] ~ [g5,bb5,g6] ~ [e5,g5,bb5,e6] ~", BQ: "[f5,a5,c6,f6]@5 ~@3 [e5,g5,bb5,e6]@5 ~@3",
  BR: "[f5,a5,c6,f6]@2 ~@2 [f5,a5,c6,f6]@2 ~@6 [c4,gb4,a4]@3 ~", // F Gbdim
  BS: "[c4,e4,g4] ~ [b3,f4,g4] ~ [c4,e4,g4] ~ [b3,f4,g4] ~", // C G7 C G7
  BT: "[c4,e4,g4]@2 ~@2 [b3,f4,g4]@2 ~@2 [c4,e4,g4]@2 ~@5 b4", BU: "c5@7 b4 c5@7 b4",
  BV: "c5@2 ~ b4 c5@2 ~@6 [e4,bb4,c5]@2 ~@2", BW: "[f4,a4,c5] ~ [e4,bb4,c5] ~ [f4,a4,c5] ~ [e4,bb4,c5] ~",
  BX: "[f4,a4,c5]@2 ~@2 [e4,bb4,c5]@2 ~@2 [f4,a4,c5]@2 ~@5 e5", BY: "f5@2 ~ e5 f5@2 ~ e5 f5@2 ~ e5 f5@2 ~ e5",
  BZ: "[f5@3 ~@5 [a2,c3,eb3,f3]@23 ~]/2", CA: "[d4,d5]@7 ~ [c4,c5]@5 ~ [d4,d5]@2", CB: "[eb4,eb5]@7 ~ [a4,eb5,a5]@7 ~",
  CC: "[eb4,eb5]@7 ~ [d4,d5]@5 ~ [eb4,f4,eb5] [bb4,d5]", // Eb D Ebsus2 Bb
  CD: "[c4,e4,g4]@3 ~ [b3,f4,g4]@3 ~ [c4,e4,g4]@3 ~ [b3,f4,g4]@3 ~", // C G7 C G7
  CE: "[c4,e4,g4]@3 ~ [b3,f4,g4]@3 ~ [c4,e4,g4]@3 ~@4 b4", CF: "f5@3 ~@5 [a2,c3,eb3,f3]@8",
  CG: "[e1,f1,gb1,g1,ab1,a1,bb1,d2,eb2,gb2,g2,ab2,b2,c3,db3,d3]@7 ~", CH: "[bb4,d5,f5,bb5]@15 ~",
})).s("gm_piano").gain(0.25)

// chords · piano · "Track02"
const piano_2 = note(`<
  A B C D E F G H I H I J K F G H I L M N O F G H I H I J K F G H I L M N P Q R S T U V W X Y Z AA AB AC AD AE AF Q R S
  T U V W X Y Z AA AB AC AD AE AF R V AG AH R AI T@2 R V AG AH AJ AK AL AM R V AG AH R AI T@2 R V AG AH AJ AK AL AM AN
  AO@2 AP AQ AR AS AP AN AO@2 AP AT AU AV AW AN AO@2 AP AQ AR AS AP AN AO@2 AP AT AU AV AX AY AZ BA BB BC BD BE BF BG BH
  BI BJ BK BL BM BN@2 BO BP@2 AP AQ AR BQ AP BO BP@2 AP AT AU BR AX AY AZ BA BB BC BD BE BF BS BT BI BJ BU@2 BM BV ~ BO
  BP@2 AP AQ AR BQ AP BO BP@2 AP AT AU BR BW
>`.pickRestart({
  A: "~@6 [f2,f3] ~", B: "[e2,e3] ~ [d2,d3] ~ [db2,db3] ~ [bb1,bb2] ~ [a1,a2]@2 ~@2 [f2,f3]@2 ~@2",
  C: "[e2,e3] ~ [d2,d3] ~ [db2,db3] ~ [bb1,bb2] ~ [a1,a2]@2 ~@2 [ab1,ab2]@2 ~@2", // E D Db Bb A Ab
  D: "[a1,a2] ~ [bb1,bb2] ~ [a1,a2] ~ [a2,a3] ~", E: "[d2,d3] ~ [e2,e3] ~ [f2,f3] ~ [e2,e3] ~ [d2,d3]@2 ~@6",
  F: "[d2,d3] ~@3 [e2,e3] ~@3", G: "[f2,f3] ~@3 [gb2,gb3] ~ [a2,a3] ~",
  H: "[bb2,bb3] ~ [g3,bb3,d4] ~ [g2,g3] ~ [g3,bb3,d4] ~", I: "[d2,d3] ~ [a3,d4,f4] ~ [d2,d3] ~ [a3,d4,f4] ~",
  J: "[e2,e3] ~ [e3,ab3,b3,d4] ~ [e2,e3] ~ [e3,ab3,b3,d4] ~", K: "[a2,a3]@2 ~@2 [a2,a3]@2 ~@2 a2 ~ ab2 ~ a2@2 ~@2",
  L: "[f2,f3] ~ [a3,d4,f4] ~ [d2,d3] ~ [a3,d4,f4] ~", M: "[g2,g3] ~ [bb2,bb3] ~ [a2,a3] ~ [e2,e3] ~",
  N: "[a1,a2] ~ [a3,db4,e4,g4] ~ [db2,db3] ~ [a3,db4,e4,g4] ~", O: "[d2,d3] ~ [a2,a3] ~ [f2,f3] ~ [e2,e3] ~",
  P: "[d2,d3] ~@7", Q: "[c2,c3] ~ [d2,d3] ~ [e2,e3] ~ [f2,f3] ~", R: "[g2,g3] ~ [bb3,c4,e4] ~ [c2,c3] ~ [bb3,c4,e4] ~",
  S: "[f2,f3] ~ [g2,g3] ~ [a2,a3] ~ [bb2,bb3] ~", T: "[a2,a3] ~ [a3,c4,f4] ~ [f2,f3] ~ [a3,c4,f4] ~",
  U: "[g2,g3] ~ [c3,c4] ~ [bb2,bb3] ~ [g2,g3] ~", V: "[e2,e3] ~ [bb3,c4,e4] ~ [c2,c3] ~ [bb3,c4,e4] ~",
  W: "[f2,f3] ~ [c3,c4] ~ [a2,a3] ~ [g2,g3] ~", X: "[f2,f3] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~",
  Y: "[a1,a2] ~ [b1,b2] ~ [db2,db3] ~ [d2,d3] ~", Z: "[e2,e3] ~ [g3,a3,db4] ~ db3 ~ [a3,db4] ~",
  AA: "d3 ~ [a3,d4] ~ [a3,d4] ~ [a3,d4] ~", AB: "[gb2,gb3] ~ [a3,c4,eb4] ~ [a3,c4,eb4] ~ [a3,c4,eb4] ~",
  AC: "[g2,g3] ~ [c3,c4] ~ [b2,b3] ~ [a2,a3] ~", AD: "[g2,g3] ~ [g3,b3,d4,f4] ~ [g2,g3] ~ [g3,b3,d4,f4] ~",
  AE: "[c3,c4] ~ [e3,e4] ~ [d3,d4] ~ [b2,b3] ~", AF: "[c3,c4] ~@7", AG: "[f2,f3] ~ [a3,c4,f4] ~ [c2,c3] ~ [a3,c4,f4] ~",
  AH: "[f2,f3] ~ [a3,c4,f4] ~ [a2,a3] ~ [a3,c4,f4] ~", AI: "[e2,e3] ~ [bb3,c4,e4] ~ [c2,c3] ~ [bb3,c4] ~",
  AJ: "[d4,gb4,a4,c5] ~ [d4,gb4,a4,c5] ~ [g4,bb4] ~ [g4,bb4] ~", // D7 Gm
  AK: "[a3,db4,e4,g4] ~ [a3,db4,e4,g4] ~ [d4,f4] ~ [d4,f4] ~", // A7 Dm
  AL: "[bb3,d4,f4,bb4] ~ [b3,d4,f4,ab4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~", // Bb Bdim F
  AM: "[c2,c3] ~ [db2,db3] ~ [d2,d3] ~ [e2,e3] ~ [f2,f3]@2 ~@6", AN: "bb2 ~ [f3,bb3,d4] ~ bb2 ~ [f3,bb3,d4] ~",
  AO: "c3 ~ [f3,a3,eb4] ~ f2 ~ [f3,a3,eb4] ~", AP: "bb2 ~ [f3,bb3,d4] ~ d3 ~ [f3,bb3,d4] ~",
  AQ: "b2 ~ [g3,b3,d4,f4] ~ g2 ~ [g3,b3,d4,f4] ~", AR: "c3 ~ [g3,c4,eb4] ~ eb3 ~ [g3,c4,eb4] ~",
  AS: "a2 ~ [f3,a3,c4,eb4] ~ f2 ~ [f3,a3,c4,eb4] ~", AT: "eb3 ~ [g3,bb3,eb4] ~ e3 ~ [g3,bb3,db4] ~",
  AU: "f3 ~ [bb3,d4] ~ d3 ~ [f3,bb3,d4] ~", AV: "c3 ~ [bb3,c4,e4] ~ f2 ~ [f3,a3,c4,eb4] ~",
  AW: "bb2 ~ [f3,bb3,d4] ~ f2 ~ [f3,bb3,d4] ~", AX: "[bb2,bb3] ~ [f2,f3] ~ [bb1,bb2] ~ [d2,d3] ~",
  AY: "[g2,g3] ~ [bb2,bb3] ~ [a2,a3] ~@3", AZ: "~@2 [g2,g3] ~ [gb2,gb3] ~ [d2,d3] ~", BA: "[g2,g3]@5 ~@3 [a2,a3]@5 ~@3",
  BB: "[d2,d3] ~ [d2,d3] ~@3 [c2,c3] ~", BC: "[f2,f3] ~ [a2,a3] ~ [g2,g3] ~@3", BD: "~@2 [f2,f3] ~ [e2,e3] ~ [c2,c3] ~",
  BE: "[f2,f3]@5 ~@3 [c2,c3]@5 ~@3", BF: "[f2,f3] ~ [f2,f3] ~@3 eb2 ~", BG: "e2 eb2 d2 db2 c2 db2 d2 eb2",
  BH: "e2 ~ eb2 ~ d2 ~ db2 ~ c2@2 ~@5 a4", BI: "bb4@7 a4 bb4@7 a4", BJ: "bb4@2 ~ a4 bb4@2 ~@6 c2@2 ~@2",
  BK: "a1 ~ ab1 ~ g1 ~ gb1 ~ f1 ~ gb1 ~ g1 ~ ab1 ~", BL: "a1 ~ ab1 ~ g1 ~ gb1 ~ f1@2 ~@5 d5",
  BM: "eb5@2 ~ d5 eb5@2 ~ d5 eb5@2 ~ d5 eb5@2 ~ d5", BN: "[eb5@3 ~@5 [f1,f2]@23 ~]/2",
  BO: "bb2 ~ [f3,bb3] ~ bb2 ~ [f3,bb3] ~", BP: "c3 ~ [f3,a3] ~ f2 ~ [f3,a3] ~",
  BQ: "a2 ~ [f3,a3,eb4] ~ f2 ~ [f3,a3,eb4] ~", BR: "c3 ~ [bb3,c4,e4] ~ f2 ~ [f3,a3,eb4] ~",
  BS: "e2 eb2 d2 db2 c2 db2 d2 [eb1,eb2], e1 d1 c1 d1, ~ eb1@2 db1@2 db1@2 ~", // Eb
  BT: "[e1,e2]@2 [eb1,eb2]@2 [d1,d2]@2 [db1,db2]@2 [c1,c2]@3 ~@4 a4", // E Eb D Db C
  BU: "[a1@2 ab1@2 g1@2 gb1@2 f1@2 gb1@2 g1@2 ab1@2 a1@2 ab1@2 g1@2 gb1@2 [f1,f2]@4 ~@3 d5, a2 g2 f2 g2 a2 g2 ~@2, ~ ab2@2 gb2@2 gb2@2 ab2@2 ab2@2 gb2@2 ~@3]/2", // F
  BV: "eb5@3 ~@5 [f1,f2]@8", BW: "[bb1,bb2]@15 ~",
})).s("gm_piano").gain(0.25)

stack(piano, piano_2)

More by Scott Joplin