Strudelify

New Era Rag

Scott James

KeyF majorTempo99 bpm
0:00/0:00
// New Era Rag — Scott James
// 99 bpm, 2/4, key F 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(99/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 E F G I J K L M N O P@2 E F G H E F G I J K L M N O Q@2 R S T U R V W X R S T Y Z AA AB AC R S T U R V
  W X R S T Y Z AA AB AD E F G H E F G I J K L M N O AE@2 AF AG AH@2 AI@2 AJ@2 AF AG AH@2 AK AL AM@2 AF AG AH@2 AI@2
  AJ@2 AF AG AH@2 AK AL AN@2 A B C AO R S T U R V W X R S T Y Z AA AB AP
>`.pickRestart({
  A: "[e5,e6] ~ [g5,g6] ~ [d5,d6] ~ [e5,e6] ~ [c5,c6]@3 ~@5", // E G D E C
  B: "[e4,e5] ~ [g4,g5] ~ [d4,d5] ~ [e4,e5] ~ [c4,c5]@3 ~@5", C: "e4 ~ g4 ~ d4 ~ e4 ~@9",
  D: "~@8 [c5,e5,c6]@3 ~@3 c5 [d5,eb5]", E: "e5 ~ bb5 ~ [d5,e5] ~ bb5 ~ [c5,e5]@3 ~@3 c6 [d6,eb6]",
  F: "e6 ~ bb6 ~ [d6,e6] ~ bb6 ~ [c6,e6]@3 ~@3 f5 [g5,ab5]", // Dsus2 C Abmaj7
  G: "a5 ~ d6 ~ [f5,a5] ~ d6 ~ [e5,a5] ~ d6 ~ [d5,a5] ~ d6 ~", // F A5 D5
  H: "[e5,g5,d6] ~ [d5,ab5,d6]@3 ~ [c5,a5,c6]@4 ~@4 c5 [d5,eb5]", // Em7 Ddim F Ebmaj7
  I: "[e5,g5,d6] ~ [d5,ab5,d6]@3 ~ [c5,a5,c6]@4 ~@4 f5 [g5,ab5]", // Em7 Ddim F Abmaj7
  J: "a5 ~ c6 ~ [e5,gb5,a5] ~ c6 ~ [d5,gb5,a5]@3 ~@3 f6 [g6,ab6]", K: "a6 ~ c7 ~ [e6,gb6,a6] ~ c7 ~ [d6,gb6,a6]@3 ~@5",
  L: "bb5 ~ a5 ~ bb5 ~ [e5,g5,bb5,e6]@3 ~ [eb5,eb6] ~ [e5,g5,bb5,e6]@3 ~", M: "[d5,g5,bb5,d6] ~",
  N: "d6 ~ db6 ~ d6 ~ [g5,bb5,d6,g6]@3 ~ f6 ~ e6 ~ d6 ~", // Gm
  O: "[f5,a5,c6,f6] ~ [e5,a5,c6,e6]@3 ~ [d5,a5,c6,d6]@4 ~@4 c5 [d5,eb5]", // F Am D7 Ebmaj7
  P: "[e5 ~ c6 ~ [d5,e5,bb5] ~ c6 ~ [c5,e5,a5] ~ [bb4,e5,g5]@3 ~ [a4,c5,f5]@5 ~@5 [f5,a5,c6,f6]@3 ~@3 c5 [d5,eb5]]/2", // Em7b5 Am Edim F Ebmaj7
  Q: "[e5 ~ c6 ~ [d5,e5,bb5] ~ c6 ~ [c5,e5,a5] ~ [bb4,e5,g5]@3 ~ [a4,c5,f5]@5 ~ [c5,c6] ~ [c5,c6] ~ [c5,c6]@3 ~ [c6,eb6,a6,c7]@3 ~]/2", // Em7b5 Am Edim F C Adim
  R: "c7 ~ bb6 ~ g6 ~ e6 ~ c6 ~ bb5 ~ g5 ~ e5 ~",
  S: "[d5,f5,a5,c6] ~ [d5,f5,a5,c6]@3 ~ [d5,f5,a5,c6]@3 ~ c6 ~ [c5,eb5,a5]@3 ~", // Dm7 Adim
  T: "[c5,e5,bb5,c6] ~ [c5,e5,bb5,c6]@3 ~ [c5,e5,bb5,c6]@3 ~ d6@3 ~ [d5,f5,b5,d6] ~", // C7 Bdim
  U: "[d5,f5,a5,d6] ~ [d5,f5,a5,d6]@3 ~ [d5,f5,a5,d6]@3 ~ c6 ~ f6 ~ a6 ~", // Dm
  V: "[d5,f5,a5,c6] ~ [d5,f5,a5,c6]@3 ~ [d5,f5,a5,d6]@5 ~ [f5,a5,d6,f6]@3 ~", // Dm7 Dm
  W: "[e5,a5,c6,e6] ~ [e5,a5,c6,e6]@4 ~@2 [d5,e5,ab5,e6] ~ [d5,e5,ab5,b5,e6]@4 ~@2, ~@4 b5 ~@3", // Am E7
  X: "a5 c6 e6 a6!2 c7 e7 ~ a7@3 ~ [c6,eb6,a6,c7]@3 ~", // Adim
  Y: "[d5,f5,a5,d6] ~ [d5,f5,a5,d6]@3 ~ [d5,f5,a5,d6]@3 ~ f6 ~ a6 ~ c7 ~", // Dm
  Z: "f7 ~ eb7 ~ c7 ~ a6 ~ f6 ~ eb6 ~ c6 ~ a5 ~",
  AA: "[g5,bb5,d6,f6] ~ [g5,bb5,d6,f6]@3 ~ [g5,bb5,d6,f6]@3 ~ f5 ~ g5 ~ ab5 ~", // Gm7
  AB: "a5 ~ c6 ~ e6 ~ [e5,bb5,d6]@3 ~ c6 ~ [e5,bb5,d6]@3 ~", // Em7b5
  AC: "[a4,c5,f5]@3 ~ [c5,c6] ~ [c5,c6] ~ [c5,c6]@3 ~ [c5,eb5,a5,c6]@3 ~", // F C Adim
  AD: "[a4,c5,f5]@3 ~@5 [f5,a5,c6,f6]@3 ~@3 c5 [d5,eb5]", // F Ebmaj7
  AE: "[e5 ~ c6 ~ [d5,e5,bb5] ~ c6 ~ [c5,e5,a5] ~ [bb4,e5,g5]@3 ~ [a4,c5,f5]@4 f5 ~ a5 ~ c6 ~ f6@3 ~@5]/2", // Em7b5 Am Edim F
  AF: "[f4,bb4,d5,f5]@2 ~ [bb4,db5,e5,bb5]@2 ~@3", AG: "[g4,bb4,d5,g5]@2 ~ [g4,a4,db5,e5,a5]@2 ~@3",
  AH: "[[f4,ab4,d5,f5]@4 ~@2 [bb4,db5,e5,bb5]@5 ~@3 [db5,e5,db6]@5 ~@13]/2", // Ddim Bbdim Dbm
  AI: "[~@2 db6 ~ [d6,f6] ~ db6 ~ [d6,f6] ~ [c6,eb6]@3 ~ [bb5,d6]@7 ~@3 [bb5,e6,bb6]@5 ~@3]/2", // Dm Cm Bb Bbdim
  AJ: "[~@2 ab6 ~ a6 ~ ab6 ~ a6 ~ [g5,a5,db6,e6,g6]@3 ~ [f5,a5,d6,f6]@7 ~@3 [f5,a5,c6,eb6,f6]@3 ~ [f4,a4,c5,f5]@3 ~]/2", // A7 Dm F7 F
  AK: "~@2 db6 ~ [d6,f6] ~ db6 ~ [d6,f6] ~ [c6,eb6]@3 ~ [bb5,d6]@2", // Dm Cm Bb
  AL: "~@2 bb6 ~ ab6 ~ d6 ~ f6 ~ eb6 ~ [g5,bb5] ~ c6 ~", // Gm
  AM: "[[bb5,d6] ~ db5 ~ [d5,f5] ~ f4 ~ [e4,bb4,d5] ~ [eb4,a4,db5]@3 ~ [d4,f4,bb4]@5 ~ [f4,a4,f5]@3 ~ [f4,bb4,f5]@3 ~ [f4,c5,eb5,f5]@3 ~]/2", // Bb Dm Em7b5 Ebm7b5 Bb F Bb5 F7
  AN: "[[bb5,d6] ~ db5 ~ [d5,f5] ~ f4 ~ [e4,bb4,d5] ~ [eb4,a4,db5]@3 ~ [d4,f4,bb4]@4 f5 ~ [a4,eb5,a5] ~ f5 ~ [d5,f5,d6]@3 ~@5]/2", // Bb Dm Em7b5 Ebm7b5 Bb Adim Dm
  AO: "~@4 [c5,c6] ~ [c5,c6] ~ [c5,c6]@3 ~ [c6,eb6,c7]@3 ~", AP: "[a4,c5,f5]@3 ~@5 [f5,a5,c6,f6]@3 ~@5",
})).s("gm_piano").gain(0.31).pan(0.7)

// other · piano
const piano_2 = note(`<
  ~@2 A B C D E F C D E G H@2 I J K L C M C D E F C D E G H@2 I J K L C N C O D P C Q R S C O D P T U V W C O D P C Q R
  S C O D P T U V M C D E F C D E G H@2 I J K L C M X Y Z AA AB AC AD AE X Y Z AA AB AF AG AH X Y Z AA AB AC AD AE X Y Z
  AA AB AF AG AI ~@2 A AJ C O D P C Q R S C O D P T U V M
>`.pickRestart({
  A: "e3 ~ g3 ~ d3 ~ e3 ~ [c3,c4] ~ [g2,g3] ~ [d2,d3] ~ [e2,e3] ~", B: "[c2,c3]@3 ~@5 [c1,c2]@3 ~@5",
  C: "[g2,g3]@3 ~ [g3,bb3,c4,e4]@3 ~ [c2,c3]@3 ~ [g3,bb3,c4,e4]@3 ~", // G C7 C C7
  D: "[g2,g3]@3 ~ [g3,bb3,c4,e4]@3 ~ [g2,g3]@3 ~ [ab2,ab3]@3 ~", // G C7 G Ab
  E: "[a2,a3]@3 ~ [a3,c4,f4]@3 ~ [c2,c3]@3 ~ [a3,c4,f4]@3 ~", F: "[c3,c4] ~ [bb2,bb3]@3 ~ [a2,a3]@4 ~@2 [ab2,ab3]@3 ~",
  G: "[c3,c4] ~ [bb2,bb3]@3 ~ [a2,a3]@4 ~@2 [g2,g3]@3 ~", // C Bb A G
  H: "[gb2,gb3]@3 ~ [d3,gb3,a3,c4]@3 ~ [d2,d3]@3 ~ [d3,gb3,a3,c4]@3 ~", // Gb D7 D D7
  I: "[bb2,bb3]@3 ~ [g3,bb3,d4]@3 ~ [g2,g3]@3 ~ [g3,bb3,d4]@3 ~", J: "g3 ~ a3 ~ bb3 ~ d4@4 ~@6",
  K: "[bb2,bb3]@3 ~ [g3,bb3,d4]@3 ~ [g2,g3]@3 ~ [ab2,ab3]@3 ~", L: "[a2,a3]@3 ~ [g2,g3]@3 ~ [gb2,gb3]@3 ~@5",
  M: "[f2,f3]@3 ~ [c2,c3]@3 ~ [f1,f2]@3 ~@5", N: "[f2,f3]@9 ~@3 [gb2,gb3]@3 ~",
  O: "[f2,f3]@3 ~ [a3,c4,f4]@3 ~ [f2,f3]@3 ~ [gb2,gb3]@3 ~", P: "[a2,a3]@3 ~ [a3,c4,f4]@3 ~ [c3,c4]@3 ~ [a2,a3]@3 ~",
  Q: "[f2,f3]@3 ~ [a3,c4,f4]@3 ~ [d2,d3]@3 ~ [b1,b2]@3 ~", R: "[e2,e3]@5 ~@3 [e1,e2]@5 ~@3",
  S: "[a1,a2]@8 ~@4 [gb2,gb3]@3 ~", T: "[f2,f3]@3 ~ [f3,a3,eb4]@3 ~ [g2,g3]@3 ~ [a2,a3]@3 ~",
  U: "[bb2,bb3]@3 ~ [f3,bb3,d4]@3 ~ [bb1,bb2]@3 ~ [b1,b2]@3 ~", // Bb B
  V: "[c2,c3]@3 ~ [a3,c4,f4]@3 ~ [c2,c3]@3 ~ [g3,bb3,c4,e4]@3 ~", W: "[f2,f3]@8 ~@4 [gb2,gb3]@3 ~",
  X: "bb3 ~ a3 ~ ab3 ~ g3@3 ~ gb3 ~ f3@3 ~", Y: "e3 ~ eb3 ~ d3 ~ db3@3 ~ c3 ~ b2@3 ~",
  Z: "bb2 ~ a2 ~ ab2 ~ g2@3 ~ gb2 ~ f2@3 ~", AA: "e2@3 ~ bb2 ~ db3 ~ e3 ~ g3 ~ bb3 ~ db4 ~",
  AB: "d4@3 ~ [f3,bb3,d4]@3 ~ [f2,f3]@3 ~ [gb2,gb3]@3 ~", AC: "[g2,g3]@3 ~ [g3,bb3,d4]@3 ~ [e2,e3]@3 ~ [bb3,d4,g4]@3 ~",
  AD: "[a1,a2]@3 ~ [a3,db4,e4,g4]@3 ~ [e2,e3]@3 ~ [a3,db4,e4,g4]@3 ~", // A A7 E A7
  AE: "[d2,d3]@3 ~ [db2,db3]@3 ~ [c2,c3]@3 ~ [f2,f3]@3 ~", AF: "[g2,g3]@3 ~ [d2,d3]@3 ~ [eb2,eb3]@3 ~ [e2,e3]@3 ~",
  AG: "[f2,f3]@3 ~ [f3,bb3,d4]@3 ~ [g2,g3]@3 ~ [a2,a3]@3 ~", AH: "[bb2,bb3]@3 ~ [f2,f3]@3 ~ [g2,g3]@3 ~ [a2,a3]@3 ~",
  AI: "[bb2,bb3]@3 ~ [f2,f3]@3 ~ [bb1,bb2]@3 ~@5", AJ: "[c2,c3]@3 ~@9 [gb2,gb3]@3 ~",
})).s("gm_piano").gain(0.31).pan(0.3)

stack(piano, piano_2)

More by Scott James