Strudelify

Broadway Rag

Scott James

KeyG majorTempo95 bpm
0:00/0:00
// Broadway Rag — Scott James
// 95 bpm, 2/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 152 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(95/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 A D E ~ A D F G A H I J A K@2 L A D E ~ A D F G A H I J A M@2 N O@2 P Q R S T U O@2 P V W X Y N O@2 P Q R S T
  U O@2 P V W X Y Z A D E ~ A D F G A H I J A M@2 AA AB AC AD AE AF AG AH AG AI AJ AK@2 AH AL AM AN AO AP AQ AR AF AG AH
  AG AI AJ AK@2 AH AL AM AN AO AP AQ AS O@2 P Q R S T U O@2 P V W X Y N O@2 P Q R S T U O@2 P V W X Y AA
>`.pickRestart({
  A: "d4 ~ e4 ~ f#4 ~ g4@3 ~ a4 ~ b4@3 ~", B: "[d4,d5] ~ [e4,e5] ~ [f#4,f#5] ~ [g4,g5]@3 ~ [a4,a5] ~ [b4,b5]@3 ~",
  C: "[d5,d6]@3 ~@5 [d4,f#4,a4,d5]@3 ~@5", D: "d5 ~ e5 ~ f#5 ~ [b4,e5]@4 d5 ~ b4@3 ~, b4 ~@3", E: "[b3,d4,g4]@3 ~@13",
  F: "[c4,d4,f#4,a4]@3 ~@13", G: "g#4 ~ a4@3 ~ d5@4 ~@6", H: "d5 ~ e5 ~ f#5 ~ [b4,e5]@4 d5 ~ b4 ~ g4 ~, b4 ~@3",
  I: "e4 ~ g4 ~ a#4 ~ c#5@3 ~ [g4,e5] ~ [a#4,g5] ~ [c#5,a#5] ~", // C D# F#
  J: "[e5,c#6] ~ [g5,e6] ~ [a#5,g6] ~ [c#6,a#6] ~ [e6,c#7]@3 ~@5", // C#m C D# F# C#m
  K: "[[c#4,e4,g4] ~ g5 ~ [g4,b4,e5]@3 ~ d5 ~ [c4,d4,f#4,a4]@3 ~ [b3,d4,g4]@5 ~ [g4,a#4,c#5] ~ [g4,b4,d5]@3 ~ [g4,a#4,d#5] ~ [g4,b4,e5]@3 ~, b4 ~@15]/2", // C#dim Em D7 G Gdim G D# Em
  L: "[e4,g4,c#5] ~ [d4,g4,e5]@3 ~ [c#4,e4,g4,b4]@4 ~@2 [c4,d4,f#4,a4]@3 ~", // C#dim Em7 C#m7b5 D7
  M: "[[c#4,e4,g4] ~ g5 ~ [g4,b4,e5]@3 ~ d5 ~ [c4,d4,f#4,a4]@3 ~ [b3,d4,g4]@5 ~ [g4,a#4,c#5] ~ [g4,b4,d5]@3 ~ e5 ~ [f#4,a4,c5,d5]@3 ~, b4 ~@15]/2", // C#dim Em D7 G Gdim G D7
  N: "[g4,b4,d5,g5]@3 ~@7 [d5,d6]@3 ~ [c#5,c#6] ~", // G D C#
  O: "[d5,f#5,d6]@3 ~ [c#5,c#6] ~ [c5,c6]@3 ~ [d5,d6]@3 ~ [c#5,c#6] ~", // D C# C D C#
  P: "[d5,g5,b5,d6]@3 ~ [a#4,a#5] ~ [b4,d5,g5,b5]@3 ~ [f#4,f#5] ~ [g4,g5]@3 ~", // G A# G F# G
  Q: "[d4,g4,b4,d5]@9 ~ [e4,e5]@3 ~ [f4,f5] ~", R: "~@2 f#4 ~ c5 ~ d5 ~ f#5 ~ [f#4,c5,e5]@3 ~ f#5 ~",
  S: "[f#4,c5,e5]@3 ~ f#5 ~ [f#4,c5,e5]@3 ~ d5 ~ c5 ~ a4 ~", T: "~@2 g4 ~ b4 ~ d5 ~ g5 ~ [g4,b4,e5]@3 ~ g5 ~",
  U: "[g4,b4,e5]@3 ~ g5 ~ [g4,b4,e5]@3 ~ [d5,d6]@3 ~ [c#5,c#6] ~", V: "[d4,g4,b4,d5]@11 ~ [f4,b4,d5,f5]@3 ~",
  W: "[d#4,f#4,c5,d#5] ~ [e4,a4,c5,e5]@3 ~ [e5,g5,c6,e6]@4 ~@2 [d#5,g5,a#5,c#6,d#6]@3 ~", // Cdim Am C D#7
  X: "[d5,g5,b5,d6] ~ [b4,b5]@3 ~ [g4,a4,c#5,e5,g5]@4 ~@2 [a4,c5,f#5,a5]@3 ~", // G B A7 F#dim
  Y: "[g4,b4,d5,g5]@3 ~ [g4,a#4,c#5] ~ [g4,b4,d5]@3 ~ e5 ~ [f#4,a#4,c5,d5]@3 ~", // G Gdim G F#aug
  Z: "[g4,b4,d5,g5]@3 ~@5 [g5,b5,d6,g6]@3 ~ e4 ~ d#4 ~", AA: "[g4,b4,d5,g5]@3 ~@5 [g5,b5,d6,g6]@3 ~@5",
  AB: "[g5,g6] ~ [g#5,g#6]@3 ~ [a5,a6]@3 ~ [g5,g6] ~ [f#5,f#6] ~ [e5,e6] ~", // G G# A G F# E
  AC: "[d5,d6] ~ [c5,c6]@3 ~ [b4,b5]@3 ~ [a#4,a#5] ~ [a4,a5] ~ [g#4,g#5] ~", AD: "[g4,b4,d5,g5]@3 ~@13",
  AE: "~@4 [g4,b4,d5,g5]@2 ~ [e4,g4,c5,e5]", AF: "~@2 g4 ~ c5 ~ e5 ~ [g4,g5] ~ [b4,d#5,f#5,b5]@3 ~ [a4,a5] ~",
  AG: "[g4,b4,d5,g5]@3 ~ [f#4,f#5] ~ [f4,b4,d5,f5]@3 ~ c#5 ~ d5 ~ d#5 ~", // G F# Bdim
  AH: "e5 ~ g4 ~ c5 ~ e5 ~ [g4,g5] ~ [b4,d#5,f#5,b5]@3 ~ [a4,a5] ~", // G B A
  AI: "e5 ~ g#4 ~ b4 ~ d5 ~ e5 ~ [e5,e6]@3 ~ [d5,d6] ~", // E D
  AJ: "[c5,e5,a5,c6]@3 ~ [b4,b5] ~ [a4,c5,e5,a5]@3 ~ g#5 ~ a5 ~ a#5 ~", // Am B Am
  AK: "[[b4,d#5,f#5,b5] ~ b5 ~ d#6 ~ f#6 ~ [b5,d#6,f#6,b6] ~ [b5,d#6,a6,b6]@3 ~ [b5,e6,g#6,b6]@6 ~@2 [g4,b4,d5,f5,g5]@3 ~ c#5 ~ d5 ~ d#5 ~]/2", // B B7 E G7
  AL: "[g4,b4,d5,g5]@3 ~ [f#4,b4,d5,f#5] ~ [f4,b4,d5,f5]@3 ~ c#5 ~ d5 ~ d#5 ~", // G Bm Bdim
  AM: "e5 ~ f5 ~ f#5 ~ g5 ~ a#5 ~ [e5,a#5,e6]@3 ~ [d5,d6] ~", // Edim D
  AN: "[c5,a5,c6]@3 ~ [g#4,g#5] ~ [a4,f5,a5]@3 ~ b4 ~ c5 ~ c#5 ~", // F G# Dm
  AO: "[a4,c5,d5]@3 ~ [a4,c5,d5]@3 ~ [a4,c5,d#5]@3 ~ [a4,c5,d#5]@3 ~", // D7 Adim
  AP: "[b4,e5,g5,b5]@4 ~@2 [a4,c#5,e5,g5,a5]@3 ~ g5 ~ e5 ~ c#5 ~", // Em A7
  AQ: "~@2 a4 ~ g#4 ~ [g4,c5,e5]@4 ~@2 [f4,b4,d5]@3 ~, [d5,f5] ~@3", // C Bdim Dm
  AR: "[e4,g4,c5] ~ [c5,c6] ~ [b4,b5] ~ [a4,a5]@3 ~ [g4,g5] ~ [f4,f5] ~ [e4,g4,c5,e5]@2", // C B A G F C
  AS: "[e4,g4,c5]@3 ~@7 [d5,d6]@3 ~ [c#5,c#6] ~", // C D C#
})).s("gm_piano").gain(0.31).pan(0.8)

// other · piano
const piano_2 = note(`<
  A B ~ C D@2 E F D G H ~ D G I ~ J K@2 L D@2 E F D G H ~ D G I ~ J M@2 N O P D Q O P D Q O P D R S T U N O P D Q O P D
  Q O P D R S T U V D@2 E F D G H ~ D G I ~ J M@2 W X Y Z AA AB AC AD AC AE AF AG AH AD AI AJ AK AL AM AN AO AB AC AD AC
  AE AF AG AH AD AI AJ AK AL AM AN AP O P D Q O P D Q O P D R S T U V O P D Q O P D Q O P D R S T U V
>`.pickRestart({
  A: "[d2,d3] ~ [e2,e3] ~ [f#2,f#3] ~ [g2,g3]@3 ~ [a2,a3] ~ [b2,b3]@3 ~", B: "d3 ~ e3 ~ f#3 ~ g3@3 ~ a3 ~ b3@3 ~",
  C: "~@8 [d1,d2]@3 ~@5", D: "[g2,g3]@3 ~ [d3,g3,b3]@3 ~ [d2,d3]@3 ~ [d3,g3,b3]@3 ~",
  E: "g2@3 ~ f#3 ~ g3@3 ~ a#3 ~ b3@3 ~", F: "c#4 ~ d4@3 ~ g4@4 ~@6",
  G: "[g2,g3]@3 ~ [d3,g3,b3]@3 ~ b2@3 ~ [d3,g3,b3]@3 ~", H: "[d2,d3]@3 ~ g#3 ~ a3@3 ~ c#4 ~ d4@3 ~",
  I: "g3 ~ a#3 ~ c#4 ~ e4@3 ~@7", J: "[g2,g3]@3 ~ [d3,g3,b3]@3 ~ [e2,e3]@3 ~ [d2,d3]@3 ~",
  K: "[[c#2,c#3]@5 ~@3 d2@3 ~@5 g2@3 ~ c#4 ~ d4@3 ~ d#4 ~ e4@3 ~, ~@12 d3@7 ~@13]/2", // C#
  L: "a#3 ~ b3@3 ~ e3@4 ~@2 f#3@3 ~",
  M: "[[c#2,c#3]@5 ~@3 d2@3 ~@5 g2@3 ~ c#4 ~ d4@3 ~ e4 ~ [c4,d4]@3 ~, ~@12 d3@7 ~@13]/2", // C# Csus2
  N: "[b3,d4]@3 ~ d3@3 ~ g2@3 ~@5", O: "[a2,a3]@3 ~ [d3,f#3,c4]@3 ~ [d2,d3]@3 ~ [d3,f#3,c4]@3 ~",
  P: "[a2,a3]@3 ~ [d3,f#3,c4]@3 ~ [d2,d3]@3 ~ [f#2,f#3]@3 ~", Q: "[g2,g3]@3 ~ [d3,g3,b3]@3 ~ [b2,b3]@3 ~ [g#2,g#3]@3 ~",
  R: "[g2,g3]@3 ~ [d3,g3,b3]@3 ~ [a2,a3]@3 ~ [b2,b3]@3 ~", S: "[c3,c4]@3 ~ [g3,c4,e4]@3 ~ [a2,a3]@3 ~ [a2,a3]@3 ~",
  T: "[b2,b3]@3 ~ [d3,g3,b3]@3 ~ [e2,e3]@3 ~ [d2,d3]@3 ~", U: "[g2,d3,g3]@3 ~ c#4 ~ d4@3 ~ e4 ~ [c4,d4]@3 ~",
  V: "[b3,d4]@3 ~ d3@3 ~ [g1,g2]@3 ~@5", W: "[b3,d4]@3 ~ [d2,d3]@3 ~ [g1,g2]@3 ~@5",
  X: "[g3,g4] ~ [g#3,g#4]@3 ~ [a3,a4]@3 ~ [g3,g4] ~ [f#3,f#4] ~ [e3,e4] ~", // G G# A G F# E
  Y: "[d3,d4] ~ [c3,c4]@3 ~ [b2,b3]@3 ~ [a#2,a#3] ~ [a2,a3] ~ [g#2,g#3] ~", // D C B A# A G#
  Z: "[g2,g3] ~ [g#2,g#3]@3 ~ [a2,a3]@3 ~ [g2,g3] ~ [f#2,f#3] ~ [e2,e3] ~", AA: "[d2,d3]@3 ~@5 [g1,g2]@3 ~@5",
  AB: "[c3,c4]@3 ~ [g3,c4,e4]@3 ~ [e2,e3]@3 ~ [d#2,d#3]@3 ~", AC: "[d2,d3]@3 ~ [g3,b3,f4]@3 ~ [g2,g3]@3 ~ [f2,f3]@3 ~",
  AD: "[e2,e3]@3 ~ [g3,c4,e4]@3 ~ [e2,e3]@3 ~ [d#2,d#3]@3 ~", // E C E D#
  AE: "[e2,e3]@3 ~ [g#3,b3,e4]@3 ~ [f#2,f#3]@3 ~ [g#2,g#3]@3 ~", // E F# G#
  AF: "[a2,a3]@3 ~ [a3,c4,e4]@3 ~ [a2,a3]@3 ~ [g2,g3]@3 ~", // A Am A G
  AG: "[f#2,f#3]@3 ~ [f#3,a3,b3,d#4]@3 ~ [f#2,f#3]@3 ~ [f2,f3]@3 ~", // F# B7 F# F
  AH: "[e2,e3]@3 ~ [e2,e3]@3 ~ [d2,d3]@3 ~ [g1,g2]@3 ~", AI: "[d2,d3]@3 ~ [g3,b3,f4]@3 ~ [a2,a3]@3 ~ [b2,b3]@3 ~",
  AJ: "[c3,c4]@3 ~ [a#2,a#3]@3 ~ [a2,a3]@3 ~ [g2,g3]@3 ~", AK: "[f2,f3]@3 ~ [a3,c4,f4]@3 ~ [c2,c3]@3 ~ [a3,c4,f4]@3 ~",
  AL: "f2@3 ~ f3@3 ~ f#2@3 ~ f#3@3 ~", AM: "[g2,g3]@3 ~ [g3,c4,e4]@3 ~ [a1,a2]@3 ~ [a3,c#4,e4]@3 ~",
  AN: "[f2,f3]@3 ~ [a3,d4,f4]@3 ~ [g2,g3]@3 ~ [d3,g3,b3]@3 ~", AO: "[c3,g3,c4]@3 ~ [g2,g3]@3 ~ [a2,a3]@3 ~ [b2,b3]@3 ~",
  AP: "[c3,g3,c4]@3 ~ [g2,g3]@3 ~ [c2,c3]@3 ~@5", // C5 G C
})).s("gm_piano").gain(0.31).pan(0.2)

stack(piano, piano_2)

More by Scott James