Strudelify

The Entertainer Rag Time Dance

Scott Joplin

KeyC majorTempo90 bpm
0:00/0:00
// The Entertainer   Rag Time Dance — Scott Joplin
// 90 bpm, 2/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 153 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(90/2)

// 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 · "HONKY TONK"
const piano = note(`<
  A B C D E F G H I J K L M N G H O B C D E F G H I J K L M N G H O B C D P Q R S T U V W X Y R S Z AA C D P Q R S T U V
  W X Y R S Z AA C D E F G H I J K L M N G H O B C D AB AC AD AE AF AG@2 AH AI AG AJ AK AL AM AN AO AP AQ AR AS AT AG@2
  AH AI AG AJ AK AL AM AN AO AP AQ AR AS AU AV AW AX AY AZ BA BB BC BD BE AX BF BG BH BI BJ AV AW AX AY AZ BA BB BC BD
  BE AX BF BG BH BI BK
>`.pickRestart({
  A: "~@3 [d4,g4,b4]", B: "[c4,g4,c5] [f#4,a4,e5]@2 [f4,g4,d5]", C: "[g4,c5,g5] [c5,f5,c6]@2 [f4,c5,d5,f5]",
  D: "[g4,c5,e5] g5 a5 [c5,e5,g5]@2 e5 [f4,b4,d5]@2", E: "[e4,g4,c5] [g4,c5,e5,g5] [a4,c5,d#5,a5] [b4,d5,g5,b5]",
  F: "[c5,e5,c6] [c5,e5,c6]@2 [a4,c5,a5]", G: "[g4,c5,g5] [a4,c5,a5]@2 [g4,c5,g5]@2 e5 d5 c5",
  H: "[a4,d5] f4 g4 [a4,c5]@2 c4 d4 d#4", I: "[e4,a4] c4 d4 [e4,g4]@2 ~ [d4,g4,b4]@2",
  J: "[e4,g4,c5] [c5,e5,c6]@2 [a4,c5,a5]", K: "[g4,c5,g5] [a4,c5,a5]@2 [g4,c5,g5]@2 a5 g5 e5",
  L: "[d5,f#5] g5 g#5 [d5,f#5,a5]@2 b5 [d5,f#5,c6]@2", M: "[d5,d6] [e5,e6] [f5,f6] [g5,g6]@2 [a5,a6] [b5,b6]@2",
  N: "[c6,e6,c7] [c6,e6,c7]@2 [a4,c5,a5]", O: "[e4,a4] c4 d4 [e4,g4]@3 [d4,g4,b4]@2",
  P: "[e4,g4,c5]@2 [g4,g5]!2 [g4,g5]@2 [g4,g5]@2", Q: "[g4,b4,d5,f5] e5 f5 [g4,b4,d5]@2 g5 b5 d6",
  R: "[g5,b5,f6] e6 f6 [g5,b5,d6]@2 g4 c5 e5", S: "[c5,e5,a5] g#5 a5 [c5,e5,g5]@2 g5 c6 e6",
  T: "[c6,e6,a6] g#6 a6 [c6,e6,g6]@2 g6 a6 a#6", U: "[d6,f6,b6] a#6 b6 [d6,f6,a6]@2 g6 a6 a#6",
  V: "[d6,f6,b6] [c6,e6,a6] [b5,d6,g6] [a5,c6,f6]@2 [g5,b5,e6] [f5,g5,d6]@2", // Bdim Am G F Em G7
  W: "[e5,e6] [f5,f6] [f#5,f#6] [g5,g6]@3 ~@2", X: "[c5,d#5,f#5,c6] c5 d5 d#5 [g4,c5,g5]@2 ~@2",
  Y: "[g4,b4,d5,g5] e5 f5 [g4,b4,d5]@2 g5 b5 d6", Z: "[c6,e6,a6] g#6 a6 [c6,e6,g6]@3 [d6,g6,b6]@2",
  AA: "[c6,g6,c7] [f#4,a4,e5]@2 [f4,g4,d5]", AB: "[e4,g4,c5] ~ [c5,e5,c6] ~",
  AC: "[g5,a#5,c6]@3 [g5,a#5,d6]@2 [g5,a#5,d#6] [g5,a#5,e6]@2", // C7 Gm D# Edim
  AD: "[g4,a#4,c5]@3 [g4,a#4,d5]@2 [g4,a#4,d#5] [g4,a#4,e5]@2", // C7 Gm D# Edim
  AE: "[g3,a#3,c4]@3 [g3,a#3,c#4]@2 [g3,a#3,d4] [g3,a#3,d#4]@2", AF: "[g3,a#3,e4] ~ [c4,e4,g4,a#4,c5] ~",
  AG: "[c5,e5,g5,a#5,c6]@3 [d5,g5,a#5,d6]@2 [e5,e6] [g5,g6]@2", AH: "[d5,f5,a5,d6]@3 [c5,f5,a5,c6]@2 c6 a#5 a5",
  AI: "f4 g4 g#4 [a4,c5]@2 f4 e4 d4, d5@3 ~@5", AJ: "[c6,e6,g6,a#6,c7]@3 [d6,g6,a#6,d7]@2 [e6,e7] [g6,g7]@2",
  AK: "[d6,f6,a6,d7]@3 [c6,f6,a6,c7]@2 a6 g6 f6", AL: "f5 g5 g#5 [a5,c6]@2 f#5 e5 d#5, d6@3 ~@5",
  AM: "[d5,f#5,a5,d6]@3 [e5,e6]@2 [f#5,f#6] [a5,a6]@2", AN: "[d6,f#6,a6,d7]",
  AO: "[d5,g5,a#5,d6]@3 [g5,g6]@2 [a5,a6] [a#5,a#6]@2", // Gm G A A#
  AP: "[d6,g6,a#6,d7] [e6,e7]@2 [f6,g#6,f7]@2 [e6,g#6,e7] [d6,d7]@2, ~@6 g#6 ~", // Gm E Fm E D
  AQ: "[c6,f6,a6,c7]@3 [d6,f6,a6,d7]@2 [c6,c7] [a5,c6,d#6,a6]@2", // F Dm C Adim
  AR: "[a#5,d6,a#6]@3 [c6,e6,c7]@2 [a5,c6,a6] [g5,a#5,g6]@2", AS: "[f5,a5,f6] [a4,c5] [g#4,b4] [g4,a#4]",
  AT: "[f4,a4]@2 [c4,c5] [d4,d5] [e4,e5] [f4,f5] [g4,g5] [a4,a5]", AU: "[f4,a4]@2 [c5,c6]!2 [c5,c6]@2 [c5,c6]@2",
  AV: "[e5,g5,a#5] a5 a#5 [e5,g5]@2 c5 e5 g5", AW: "[e5,g5,a#5] a5 a#5 [e5,g5]@2 c5 f5 a5",
  AX: "[f5,a5,d6] c#6 d6 [f5,a5,c6]@2 c6 f6 a6", AY: "[f6,a6,d7] c#7 d7 [f6,a6,c7]@2 c#7 d7 d#7",
  AZ: "[g6,a#6,e7] d#7 e7 [g6,a#6,d7]@2 c#7 d7 d#7", // Edim Gm
  BA: "[g6,a#6,e7] [f6,a6,d7] [e6,g6,c7] [d6,f6,a#6]@2 [c6,a6] [a#5,g6]@2", // Edim Dm C A# F D#
  BB: "[a5,f6] [a#5,g6] [b5,g#6] [c6,a6]@3 ~@2", BC: "[f5,g#5,f6] f5 g5 g#5 [c5,f5,c6] ~@3",
  BD: "[e5,g5,a#5] a5 a#5 [e5,g5]@2 c6 e6 g6", BE: "[e6,g6,a#6] a6 a#6 [e6,g6]@2 c5 f5 a5",
  BF: "[f6,a6,d7] c#7 d7 [f6,a6,c7]@3 [g4,c5,e5]@2", BG: "[f4,c5,f5] [b4,d5,a5]@2 [a#4,c5,g5]",
  BH: "[c5,f5,c6] [f5,a#5,f6]@2 [a#4,f5,g5,a#5]", BI: "[c5,f5,a5] c6 d6 [f5,a5,c6]@2 a5 [a#4,e5,g5]@2",
  BJ: "[a4,c5,f5]@2 [c5,c6]!2 [c5,c6]@2 [c5,c6]@2", BK: "[a4,c5,f5] ~ [f5,a5,c6,f6] ~",
})).s("gm_piano").gain(0.35)

// other · piano · "A.PIANO 1"
const piano_2 = note(`<
  A B C D E F G H I F G J K L G H I B C D E F G H I F G J K L G H I B C D M N O P Q R S T U N O P V B C D M N O P Q R S
  T U N O P V B C D E F G H I F G J K L G H I B C D W X Y Z AA AB AC AD AE AB AC AD AF AG AH AI AJ AK AL AM@2 AB AC AD
  AE AB AC AD AF AG AH AI AJ AK AL AM@2 AN AO AP AQ AR AS AT AU AV AO AP AW AX AY AZ BA AN AO AP AQ AR AS AT AU AV AO AP
  AW AX AY AZ BB
>`.pickRestart({
  A: "~@3 [f2,f3]", B: "[e2,e3] [c3,c4]@2 [b2,b3]", C: "[a#2,a#3] [a2,a3]@2 [g#2,g#3]",
  D: "[g2,g3] [g3,c4,e4] [g2,g3] [f3,g3,b3]", E: "[c3,g3,c4] [g2,g3] [f#2,f#3] [f2,f3]",
  F: "[e2,e3] [g3,c4,e4] [d3,d4] [d#3,d#4]", G: "[e3,e4] [g3,c4,e4] [c3,c4] [a#2,a#3]",
  H: "[a2,a3] [f3,a3,c4] [f2,f3] [f#2,f#3]", I: "[g2,g3] [e3,g3,c4] [g2,g3] [f2,f3]",
  J: "[a2,a3] [g2,g3] [f#2,f#3] [d3,f#3,c4]", K: "[g2,g3] [f2,f3] [e2,e3] [d2,d3]",
  L: "[c2,c3] [g3,c4,e4] [d3,d4] [d#3,d#4]", M: "[c3,g3,c4] ~@3", N: "[d3,b3] [g3,b3,d4,f4] [g2,g3] [a2,a3]",
  O: "[b2,b3] [c3,c4] [d3,d4] [d#3,d#4]", P: "[e3,e4] [g3,c4,e4] [g2,g3] [g3,c4,e4]",
  Q: "[c3,c4] [g3,c4,e4] [e3,e4] [d#3,d#4]", R: "[d3,d4] [g3,b3,d4,f4] [g2,g3] [g3,b3,d4,f4]",
  S: "[d3,d4] [g3,b3,d4,f4] [a2,a3] [b2,b3]", T: "[c3,c4]@2 [g3,c4,e4]@3 c5 b4 a#4", U: "a4@2 ~@2 [g3,e4] g#3 a3 a#3",
  V: "[c3,c4] [g3,c4,e4] [g2,g3] [f2,f3]", W: "[c3,g3,c4] [g2,g3] [c2,c3] ~", X: "e5@3 d5!2 c#5 c5@2",
  Y: "e4@3 d4!2 c#4 c4@2", Z: "e3@3 d#3!2 d3 c#3@2", AA: "c3 ~ [c2,c3] ~",
  AB: "[c3,c4] [g3,a#3,c4,e4] [a#2,a#3] [g3,a#3,c4,e4]", AC: "[g2,g3] [g3,a#3,c4,e4] [e2,e3] [c2,c3]",
  AD: "[f2,f3] [a3,c4,f4] [c2,c3] [a3,c4,f4]", AE: "[f2,f3] [a3,c4,f4] [a2,a3] [a3,c4,f4]",
  AF: "[f2,f3] [a3,c4,f4] [a2,a3] [g2,g3]", AG: "[f#2,f#3] [d3,f#3,c4] [d2,d3] [d3,f#3,c4]",
  AH: "[d3,d4] [c3,c4]@2 [a2,a3]@2 [f#2,f#3] [d2,d3]@2", AI: "[g2,g3] [g3,a#3,d4] [d2,d3] [g3,a#3,d4]",
  AJ: "[d3,d4] [c3,c4]@2 [b2,b3]@3 [g#2,g#3]@2", AK: "[a2,a3] [a3,c4,f4] [f2,f3] [f#2,f#3]",
  AL: "[g2,g3] [g3,d4,f4] [c2,c3] [g3,a#3,c4,e4]", AM: "[~ d#4 d4 c#4 c4 ~@3, f3@5 ~@3]/2",
  AN: "[g2,g3] [g3,a#3,c4,e4] [c2,c3] [d2,d3]", AO: "[e2,e3] [f2,f3] [g2,g3] [g#2,g#3]",
  AP: "[a2,a3] [a3,c4,f4] [c2,c3] [a3,c4,f4]", AQ: "[f2,f3] [a3,c4,f4] [a2,a3] [g#2,g#3]",
  AR: "[g2,g3] [g3,a#3,c4,e4] [c2,c3] [g3,a#3,c4,e4]", AS: "[g2,g3] [g3,a#3,c4,e4] [c2,c3] [e2,e3]",
  AT: "[f2,f3]@2 [a3,c4,f4]@3 f5 e5 d#5", AU: "d5@2 ~@2 [a3,a4] c#3 d3 d#3",
  AV: "[g2,e3] [g3,a#3,c4,e4] [c2,c3] [d2,d3]", AW: "[f2,f3] [a3,c4,f4] [c3,c4] [a#2,a#3]",
  AX: "[a2,a3] [f3,f4]@2 [e3,e4]", AY: "[d#3,d#4] [d3,d4]@2 [c#3,c#4]", AZ: "[c3,c4] [a3,c4,f4] [c2,c3] [g3,a#3,c4,e4]",
  BA: "[f3,c4,f4] ~@3", BB: "[f3,c4,f4] ~ [f1,f2] ~",
})).s("gm_piano").gain(0.35)

stack(piano, piano_2)

More by Scott Joplin