Strudelify

Kansas City Rag

Scott James

KeyC majorTempo93 bpm
0:00/0:00
// Kansas City Rag — Scott James
// 93.1 bpm, 2/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 136 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(93.1/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
const piano = note(`<
  A B C D E F G H I J K L E F M N O P Q R E F G H I J K L E F M N O P Q S T U V W T X Y Z T U V W AA AB AC@2 T U V W T X
  Y Z T U V W AA AB AD@2 AE AF AG AH AI AJ AK AL AE AF AG AM AE AN AO@2 AE AF AG AH AI AJ AK AL AE AF AG AM AE AN AP@2
  AQ AR AS AT T U V W T X Y Z T U V W AA AB AC@2 T U V W T X Y Z T U V W AA AB AD@2
>`.pickRestart({
  A: "[c5,c6]@3 ~ [c4,c5]@4 ~@2 [d4,d5] ~ [e4,c5,e5] ~ [f4,d5,f5] ~", // C D C Dm
  B: "[g4,e5,g5]@3 ~ [f#4,c5,d#5,a5]@3 ~ [g4,c5,e5,g5]@3 ~@5", // C F#dim C
  C: "g4 ~ a4 ~ [g4,b4] ~ [a4,c5] ~ [b4,d5]@3 ~ [g4,a#4,e5]@3 ~", D: "[g4,b4,f5]@3 ~@13",
  E: "[c5,e5]@3 ~ d#5 ~ [c5,e5]@3 ~ e5 ~ f5 ~ f#5 ~", F: "[e5,g5] ~ f#5 ~ g5 ~ [e5,c6]@3 ~ a5 ~ g5 ~ e5 ~",
  G: "d5 ~ e5 ~ f5 ~ a5@3 ~ a4 ~ c#5 ~ e5 ~", H: "a5@9 ~ g5 ~ f5 ~ e5 ~",
  I: "[b4,d5]@3 ~ c#5 ~ [b4,d5]@3 ~ e5 ~ f5 ~ g5 ~", // Bm
  J: "[f5,a5] ~ g#5 ~ a5 ~ [g5,b5]@3 ~ [f5,a5] ~ [e5,g5] ~ [d5,f5] ~", // F G F Em Dm
  K: "[c5,e5]@3 ~ [d5,f5] ~ [e5,g5]@3 ~ c6 ~ a5 ~ f#5 ~", L: "g5@9 ~ [f5,a5] ~ [e5,g5] ~ [d5,f5] ~",
  M: "[b4,d5]@3 ~ c#5 ~ [b4,d5]@3 ~ b4 ~ c5 ~ c#5 ~", N: "d5 ~ g5 ~ b5 ~ [d5,d6]@4 ~@2 [e5,g5,e6]@3 ~",
  O: "~@4 a#4 ~ b4@3 ~ g4 ~ [a#4,c#5]@2 d#4 ~, [d5,g5,d6]@8 ~@4 e4 ~@3", P: "[g4,b4,d5] ~",
  Q: "[d4,g4,b4]@3 ~ [c#4,g4,b4]@5 ~@3 [c4,d4,a4]@3 ~", R: "[b3,d4,g4]@5 ~@7 g5 ~ f5 ~",
  S: "[b3,d4,g4]@5 ~@7 g5 ~ g#5 ~", T: "[f5,a5] ~ g#5 ~ a5 ~ [f#5,d6]@3 ~ [d#5,c6] ~ [d#5,b5] ~ [d#5,a5] ~",
  U: "[e5,g5]@3 ~ a5 ~ [c5,e5]@3 ~ d#5 ~ [c5,e5]@3 ~", V: "[d5,f5]@3 ~ [e5,g5] ~ [f5,a5]@3 ~ [e5,g5] ~ [d5,f5]@3 ~",
  W: "[c5,e5]@3 ~ [d5,f5] ~ [e5,g5]@4 ~@2 g5 ~ g#5 ~", X: "[e5,g5]@3 ~ a5 ~ [c5,e5]@4 ~@2 e5 ~ f#5 ~",
  Y: "g5 ~ f#5 ~ e5 ~ b5@3 ~ a5 ~ g5 ~ f#5 ~", Z: "e5@3 ~ d#5 e5 g5 b5 e6@3 ~ g5 ~ g#5 ~",
  AA: "[f5,a5] ~ g#5 ~ a5 ~ [d5,d6]@3 ~ [c5,c6] ~ [b4,b5] ~ [a4,a5] ~", // F D C B A
  AB: "[b4,b5]@3 ~ [c5,e5] ~ [a4,a5]@3 ~ g5 ~ e5 ~ a4 ~", // B C A
  AC: "[c5 ~ d5 ~ e5@3 ~ e5 ~ d5@3 ~ [e4,c5]@7 ~@7 g5 ~ g#5 ~, f#4@5 ~@3 f4@4 ~@20]/2", // C
  AD: "[c5 ~ d5 ~ e5@3 ~ e5 ~ d5@3 ~ [e4,c5]@7 ~@3 [c5,e5,c6]@3 ~@5, f#4@5 ~@3 f4@4 ~@20]/2", // C
  AE: "[a4,a5] ~ c5 ~ f5 ~ [c5,c6]@3 ~ [f5,a5] ~ [d5,d6]@3 ~", AF: "[a4,c5,f#5,a5]@11 ~@5",
  AG: "[g4,g5] ~ b4 ~ d5 ~ [a4,a5]@3 ~ [b4,d5] ~ [g4,g5]@3 ~", AH: "[d4,f4,b4,d5]@11 ~@5",
  AI: "[e4,e5] ~ g4 ~ a4 ~ [a#4,a#5]@3 ~ [c5,c6] ~ [d5,d6]@3 ~", AJ: "[e5,e6] ~ g5 ~ a5 ~ [a#5,a#6]@4 ~@2 [b5,b6]@3 ~",
  AK: "[c6,c7]@9 ~ d6 ~ [d#5,c6] ~ d6 ~", AL: "[e5,c6] ~ a#5 ~ g5 ~ e5 ~ c5 ~ a#4 ~ g4 ~ e4 ~",
  AM: "[d4,f4,b4,d5]@5 ~@3 [f4,f5]@3 ~ [g4,g5]@3 ~", // Bdim F G
  AN: "[a4,c5,a5]@3 ~ [g#4,b4,g#5] ~ [a4,c5,a5]@3 ~ [g#4,b4,g#5] ~ [g4,a#4,g5]@3 ~", // Am G#m Am G#m Gm
  AO: "[[f4,a4,f5]@19 ~ b4 ~ c5 ~ d5 ~ e5 ~ f5 ~ g5 ~]/2", AP: "[[f4,a4,f5]@19 ~@5 [f4,a4,f5]@3 ~@5]/2",
  AQ: "[b4,g5]@3 ~ [b4,g5]@4 ~@2 a5 ~ g5 ~ a5 ~", AR: "[a#4,g5]@3 ~ [a#4,g5]@4 ~@2 a5 ~ g5 ~ a5 ~",
  AS: "[b4,g5]@3 ~@13", AT: "~@12 g5 ~ g#5 ~",
})).s("gm_piano").gain(0.36).pan(0.7)

// chords · piano
const piano_2 = note(`<
  ~@2 A B C D E F G H I J C D K L M N O P C D E F G H I J C D K L M N O P Q R S T Q R U V Q R S T Q W X Y Q R S T Q R U
  V Q R S T Q W X Z AA AB AC AD AE AF AG AH AA AB AC AI AJ AK AL AM AA AB AC AD AE AF AG AH AA AB AC AI AJ AK AL AN AO
  AP AQ AR Q R S T Q R U V Q R S T Q W X Y Q R S T Q R U V Q R S T Q W X Z
>`.pickRestart({
  A: "b3 ~ c4 ~ d4 ~ e4 ~ f4@3 ~ c#4@3 ~", B: "d4@3 ~@5 [g2,g3]@3 ~@5",
  C: "c3@3 ~ [e3,g3,c4]@3 ~ a2@3 ~ [f3,a3,c4]@3 ~", D: "g2@3 ~ [e3,g3,c4]@3 ~ e2@3 ~ [e3,g3,c4]@3 ~",
  E: "f3@3 ~ [a3,d4]@3 ~ e3@3 ~ [g3,a3,c#4]@3 ~", F: "d3@3 ~ [f3,a3,d4]@3 ~ c3@3 ~ [f3,a3,d4]@3 ~",
  G: "b2@3 ~ [f3,g3,b3]@3 ~ g2@3 ~ [f3,g3,b3]@3 ~", H: "f2@3 ~ [f3,g3,b3]@3 ~ d2@3 ~ b1@3 ~",
  I: "c2@3 ~ [e3,g3,c4]@3 ~ c2@3 ~ [d#3,f#3,c4]@3 ~", J: "[d3,f3,b3]@3 ~ g3@3 ~ g2@3 ~@5",
  K: "d2@3 ~ [d3,g3,b3]@3 ~ b2@3 ~ [d3,g3,b3]@3 ~", L: "g2@3 ~ [d3,g3,b3]@3 ~ d2@3 ~ [c3,a3]@3 ~", M: "[d3,b3]@5 ~@11",
  N: "d4@3 ~ a#3 ~ b3@3 ~ g3 ~ e3 ~ d#3 ~", O: "d3@3 ~ [e2,e3]@5 ~@3 [f#2,f#3]@3 ~", P: "[g2,g3]@3 ~ d3@3 ~ g2@3 ~@5",
  Q: "[f2,f3]@3 ~ [f3,a3,d4]@3 ~ [f#2,f#3]@3 ~ [f#3,a3,c4,d#4]@3 ~", // F Dm F# F#dim
  R: "[g2,g3]@3 ~ [g3,c4,e4]@3 ~ e3@3 ~ [g3,c4,e4]@3 ~", S: "d3@3 ~ [g3,b3,f4]@3 ~ g2@3 ~ [g3,b3,f4]@3 ~",
  T: "c3@3 ~ [g3,c4,e4]@3 ~ e3@3 ~ [g3,c4,e4]@3 ~", U: "b2@3 ~ [g3,b3,e4]@3 ~ b2@3 ~ [a3,b3,d#4]@3 ~",
  V: "[e3,g3,b3,e4]@3 ~ [b2,b3]@3 ~ [e2,e3]@3 ~@5", W: "[g2,g3]@3 ~ [g3,c4,e4]@3 ~ [a2,a3]@3 ~ [g3,a3,c#4]@3 ~",
  X: "[d3,a3,c4]@3 ~ [d3,a3,c4]@3 ~ [g3,b3]@3 ~ [g3,b3]@3 ~", Y: "[c3,g3,c4]@3 ~ [b2,b3]@3 ~ [a2,a3]@3 ~ [g2,g3]@3 ~",
  Z: "[c3,g3,c4]@3 ~ [g2,g3]@3 ~ [c2,c3]@3 ~@5", AA: "[f2,f3]@3 ~ [a3,c4,f4]@3 ~ [f2,f3]@3 ~ [d#2,d#3]@3 ~",
  AB: "[d2,d3]@3 ~ [d#2,d#3] ~ [d2,d3]@3 ~ [c#2,c#3] ~ [c2,c3]@3 ~", // D D# D C# C
  AC: "[b1,b2]@3 ~ [g3,b3,f4]@3 ~ d3@3 ~ [g3,b3,f4]@3 ~", // B G7
  AD: "[g2,g3]@3 ~ [g#2,g#3] ~ [g2,g3]@3 ~ [f#2,f#3] ~ [e2,f3]@3 ~", // G G# G F# Fmaj7
  AE: "[e2,e3]@3 ~ [g3,a#3,c4,e4]@3 ~ c3@3 ~ [g3,a#3,c4,e4]@3 ~", // E C7
  AF: "[a#2,a#3]@3 ~ [g3,a#3,c4,e4]@3 ~ [g2,g3]@3 ~ [g#2,g#3]@3 ~", // A# C7 G G#
  AG: "[a2,a3]@3 ~ [a3,c4,f4]@3 ~ [f#2,f#3]@3 ~ [f#3,a3,d#4]@3 ~", AH: "[g3,a#3,c4,e4]@5 ~@11",
  AI: "[g2,g3]@3 ~ [g#2,g#3] ~ [g2,g3]@3 ~ [f2,f3] ~ [d2,d3]@3 ~", // G G# G F D
  AJ: "[c2,c3]@3 ~ [a3,c4,f4]@3 ~ [a1,a2]@3 ~ [a#1,a#2]@3 ~", AK: "[c2,c3]@3 ~ [d2,d3]@3 ~ [d#2,d#3]@3 ~ [e2,e3]@3 ~",
  AL: "[f2,f3]@3 ~ c3 ~ d3@3 ~ c3 ~ a2 ~ g2 ~", AM: "f2@3 ~@13", AN: "f2@3 ~@5 [f1,f2]@3 ~@5",
  AO: "[g3,d4,f4]@3 ~ [g3,d4,f4]@5 ~@3 [g3,d4,f4]@3 ~", AP: "[g3,c#4,e4]@3 ~ [g3,c#4,e4]@5 ~@3 [g3,c#4,e4]@3 ~",
  AQ: "[g3,d4,f4]@3 ~@4 f#3 g3@3 ~ g3@3 ~", AR: "g2@5 ~@11",
})).s("gm_piano").gain(0.36).pan(0.3)

stack(piano, piano_2)

More by Scott James