Strudelify

Alexander's Ragtime Band (Victor Military Band)

Scott Joplin

KeyF majorTempo228 bpm
0:00/0:00
// Alexander's Ragtime Band (Victor Military Band) — Scott Joplin
// 228 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(228/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note("<~@33 A B C A D E D E A F A F G H C@2 A F C A D E D E A@2 D I J K C A ~@32 L M>".pickRestart({
  A: "f2@5 ~@3 c2@4 ~@4", B: "f2@5 ~@3 c2@3 ~@5", C: "c2@5 ~@3 g2@4 ~@4", D: "bb1@5 ~@3 f2@4 ~@4",
  E: "bb1@4 ~@4 f2@3 ~@5", F: "f2@4 ~@4 c2@3 ~@5", G: "e2@5 ~@3 eb2@5 ~@3", H: "d2@5 ~@3 g2@5 ~@3",
  I: "b1@5 ~@3 f2@4 ~@4", J: "c2@5 ~@3 c2@4 ~@4", K: "c2@5 ~@3 f2@5 ~@3", L: "f2@5 ~@3 c2@6 ~@2",
  M: "f2 ~@3 c2@4 f2@6 ~@2",
})).s("gm_acoustic_bass").gain(0.2)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B C D E F G F H I J@2 K L M N H O P Q R S T U J V W X Y Z C AA J@2 C Q AB AC T U J@2 H O AD AE AF AG H AH AI Q AJ
  AK E F J AL W AM Y AN AI Q H AH P AO AP T AQ AR H AS AT B AU AE M AG A B AI AV G AW T U H AX AY AZ BA BB BC AO BD BE
>`.pickRestart({
  A: "~@2 [c4,d4,f4,a4] ~ c3@2 [c4,d4,f4,a4]@2, [f2,a3] ~", B: "f2@4 [c4,d4,f4,a4]@3 ~ c2@4 [c4,d4,f4,a4]@2 ~@2",
  C: "~@4 [bb3,c4,e4,g4]@3 ~@5 [bb3,c4,e4,g4]@3 ~, [c2,c3]@3 ~ g2@3 ~", D: "f3 c3 f2 ~",
  E: "bb1@3 ~ [d4,f4,g4,bb4]@2 ~@2 f2@4 [d4,f4,g4,bb4]@2 ~@2", F: "bb1@4 [d4,f4,g4,bb4]@3 ~ f2@4 [d4,f4,g4,bb4]@3 ~",
  G: "~@4 [d4,f4,g4,bb4]@3 ~@5 [d4,f4,g4,bb4]@3 ~, [bb1,bb2]@3 ~ f2@3 ~", // Gm7 Bb
  H: "f2@2 [c4,d4,f4,a4] ~ c2@2 [c4,d4,f4,a4] ~", I: "f2@4 [c4,d4,f4,a4]@3 ~@7 f4@2, ~@8 c2@7 ~, ~@5 a3@3, ~@3 d4",
  J: "~@4 [c4,d4,f4,a4]@2 ~@2 c3@4 [c4,d4,f4,a4]@3 ~, f2@3 ~@5", // Dm7
  K: "~@4 [a3,c4,e4,g4]@3 ~@5 [c4,eb4,gb4,a4]@3 ~, e2@3 ~ eb2@3 ~", // Am7 Cdim
  L: "~@4 [b3,d4,f4,g4]@2 ~@6 [b3,d4,f4,a4]@3 ~, d2@3 ~ g2@3 ~", // G7 Bm7b5
  M: "~@4 [g3,c4,e4]@2 ~@2 g2@4 [g3,c4,e4]@3 ~, c2@3 ~@5", N: "~@4 [bb3,c4,e4,g4]@2 ~@2 g2@7 ~, c2@3 ~@5",
  O: "f2@2 [c4,d4,f4,a4] ~@4 f4, ~@8 c2@7 ~, ~@5 a3@3, ~@3 d4", // Dm7
  P: "~@4 [bb3,c4,e4,g4]@2 ~@2 g2@4 [bb3,c4,e4,g4]@3 ~, c2@3 ~@5", Q: "~@2 [c4,d4,f4,a4] ~ c3@4, f2@3 ~@5",
  R: "~@2 [d4,f4,g4,bb4] ~ f2@2 [d4,f4,g4,bb4]@2, [bb1,d3]@7 ~@9", // Gm7 Bb
  S: "~@4 [d4,f4,g4,bb4]@3 ~ f2@4 [d4,f4,g4,bb4]@3 ~, bb1@3 ~@5", T: "bb1@4 [d4,f4,g4,bb4]@4 f2@4 [d4,f4,g4,bb4]@3 ~",
  U: "[bb1,d3]@2 [c2,eb3]@2 [d2,f3]@2 [bb1,d3] ~", V: "~@4 [c4,eb4,f4,a4]@3 ~@5 [c4,eb4,f4,a4]@3 ~, [f2,f3]@3 ~ c3@3 ~",
  W: "bb1@2 [bb3,d4,f4] ~ f2@2 [bb3,d4,f4] ~", X: "b1@3 ~ d2@4 f2@4 b2@3 ~", Y: "c2@2 [a3,c4,f4] ~ c2@2 [a3,c4,f4] ~",
  Z: "~@4 [a3,c4,f4]@3 ~@5 [c4,d4,f4,ab4]@3 ~, [c2,c3]@3 ~ [f2,f3]@3 ~", AA: "~@4 [c4,d4,f4,a4]@2 ~@2 c3@7 ~, f2@3 ~@5",
  AB: "~@4 [g3,bb3,d4,f4]@3 ~@5 [g3,bb3,d4,f4]@3 ~, [bb1,bb2]@3 ~ f2@3 ~", // Gm7 Bb
  AC: "bb1@4 [g3,bb3,d4,f4]@3 ~@5 [g3,bb3,d4,f4]@3 ~, ~@4 f2@3 ~", // Gm7
  AD: "~@4 [a3,c4,e4,g4]@3 ~@5 [a3,c4,eb4,gb4]@2 ~@2, e2@3 ~ [eb2,eb3]@3 ~", // Am7 Adim Eb
  AE: "~@4 [b3,d4,f4,g4]@3 ~@5 [b3,d4,f4,a4]@3 ~, d2@3 ~ g2@3 ~", AF: "~@2 [g3,c4,e4] ~@3 [g3,c4,e4] ~, c2@7 ~ g2@7 ~",
  AG: "c2@3 ~ e2@4 g2@4 c3@3 ~", AH: "f2@2 [c4,d4,f4,a4] ~@3 d4 f4, ~@8 c2@7 ~, ~@5 a3@3",
  AI: "c2@2 [bb3,c4,e4,g4] ~ g2@2 [bb3,c4,e4,g4] ~", AJ: "bb1@2 [d4,f4,g4,bb4] ~ f2@2 [d4,f4,g4,bb4] ~",
  AK: "bb1@2 [d4,f4,g4,bb4] ~@4 f4, ~@8 f2@7 ~, ~@5 g3@3, ~@3 d4", // Gm7
  AL: "f2@3 ~ [c4,eb4,f4,a4]@3 ~ c2@4 [c4,eb4,f4,a4]@3 ~", AM: "b2@2 f2@2 b1@3 ~",
  AN: "~@4 [a3,c4,f4]@3 ~@5 [c4,d4,f4,ab4]@3 ~, c2@3 ~ f2@3 ~", AO: "f2@3 ~ a2@4 c3@4 f3@3 ~",
  AP: "bb1@3 ~ [d4,f4,g4,bb4]@3 ~ f2@4 [d4,f4,g4,bb4]@3 ~", // Gm7
  AQ: "bb1@3 ~ [g3,bb3,d4,f4]@2 ~@2 f2@4 [g3,bb3,d4,f4]@2 ~@2", AR: "bb1@4 [g3,bb3,d4,f4]@3 ~ f2@4 [g3,bb3,d4,f4]@3 ~",
  AS: "f2@4 [c4,d4,f4,a4]@3 ~@5 d4@2 f4@2, ~@8 c2@7 ~, ~@5 a3@3", // Dm7
  AT: "~@2 [c4,d4,f4,a4] ~ c3@2 [c4,d4,f4,a4]@2, [f2,a3]@7 ~@9", // Dm7 F
  AU: "~@4 [a3,c4,e4,g4]@3 ~@5 [c4,eb4,gb4,a4]@2 ~@2, e2@3 ~ [eb2,eb3]@3 ~", AV: "f3@2 c3@2 f2@3 ~",
  AW: "bb1@4 [d4,f4,g4,bb4]@3 ~@5 [d4,f4,g4,bb4]@3 ~, ~@4 f2@3 ~", AX: "f2@2 [c4,eb4,f4,a4] ~ c2@2 [c4,eb4,f4,a4] ~",
  AY: "~@2 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~, bb1@7 ~ f2@7 ~", AZ: "~@4 [d4,f4,ab4,b4]@2 ~@2 f2@7 ~, b1@3 ~@5",
  BA: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~, c2@7 ~ c2@7 ~", // F
  BB: "~@4 [a3,c4,f4]@3 ~@5 [c4,d4,f4,ab4]@3 ~, [c2,c3]@3 ~ f2@3 ~", // F Dm7b5 C
  BC: "c2@3 ~ [bb3,c4,e4,g4]@3 ~ g2@4 [bb3,c4,e4,g4]@2 ~@2", BD: "f2@3 ~ [d4,a4,c5]@2 ~@2 c3@3 ~ [d4,a4,c5]@3 ~",
  BE: "f2 ~@3 c3 ~@3 [f2,d4,a4,c5]@7 ~", // Dm7
})).s("gm_piano").gain(0.26)

// chords · piano · "A.PIANO 1"
const piano_2 = note(`<
  A B@2 C@2 D E@3 F@2 G H I J K L M@5 N@4 O P Q R S T U V W X@3 E@3 Y@2 Z AA AB AC K AD M@5 AE@4 O P Q R S T AF B@2 C@2
  AG AH@3 AI@2 G AJ AK AC K AD AL AM@4 N@4 O P Q R S T AF AN AO
>`.pickRestart({
  A: "~@11 ab4 [c4,a4]@2 ~ ab4", // F
  B: "[[c4,a4]@2 ~@9 ab4 [c4,a4]@2 ~@2 [c4,a4]@7 ~@4 ab4 [c4,a4]@2 ~ ab4, ~@15 ab4@2 ~@15]/2", // F
  C: "[[c4,a4]@4 g4@3 ~ e4@2 ~ c4@2 ~@2 f4@6 ~@6 db5 [f4,d5]@3 db5]/2", D: "[f4,d5]@9 ~@2 db5 [f4,d5]@3 db5",
  E: "[[f4,d5]@10 ~@2 d5@3 db5 d5@4 ~ bb4@2 ~ f4@3 bb4@3 ~ [f4,d5]@11 ~@2 a4@2 ~ bb4, ~@11 db5@2 ~@35, ~@12 f4@8 ~@24 f4 ~@3]/3", // Dm
  F: "[[a4,c5] ~@2 c5 d5@2 ~@2 c5@4 d5@2 ~@2 c5 ~@3 d5@3 ~ c5@4 ~@4, ~@3 a4@3 ~ a4@7 ~ a4@3 ~ c5@2 ~@2 a4@2 ~@7]/2", // Am
  G: "f4@3 ~ a4@2 ~@2 f4@4 a4@2 ~ c4, ~@7 c4@2 ~@7", H: "f4 ~@3 a4 ~@2 c4 f4@6 ~@2, ~@3 f4@2 ~@11",
  I: "[c4,e4,g4]@2 ~@2 [c4,e4,g4]@4 ~@5 a4 ~@2, ~@6 [c4,gb4] ~", J: "[d4,f4,b4]@3 ~@2 g4@3 a4@3 ~ b4@3 ~",
  K: "~ [f4,a4] ~@14, [e4,c5]@7 ~, ~ g4@11 ~@4", L: "bb4@3 a4@2 g4@5 ~ ab4 a4@2 ~ ab4",
  M: "[[c4,a4]@3 ~@7 ab4 ~ [c4,a4]@3 ~ [c4,a4]@9 ~@2 ab4 [c4,a4]@3 ~ [c4,a4]@3 ~ g4@2 ~@2 e4@3 c4 ~@3 [a3,f4]@8 ~@4 db5 [f4,d5]@3 ~ [f4,d5]@10 db5 ~ [f4,d5]@2 db5@2, ~@15 ab4@2 ~@14 ab4@2 ~@30 db5@2 ~@15]/5", // F Dm
  N: "[[f4,d5]@11 db5 [f4,d5]@3 ~ [f4,d5]@4 bb4@2 ~@2 f4@3 ~ bb4@2 ~ [f4,d5]@10 ~ a4 ~ bb4@2 ~@2 c5@2 ~@2 c5 ~@3 c5@3 ~ a4@2 ~@2, ~@15 db5@2 ~@30 b4@2 ~@15]/4", // Dm
  O: "g4@4 f4@4 a4@3 ~ g4@2 ~@2", P: "f4@4 f5@3 ~", Q: "d5@3 ~ [ab4,f5]@5 ~@2 b4 c5@2 ~ b4", R: "c5@2 ~@9 b4 c5@2 ~ b4",
  S: "c5@8 ~@3 d5@3 ~ db5", T: "[e4,d5]@6 ~ c5 a4@2 ~@2 g4@2 ~@2", U: "f4@3 ~@8 ab4 [c4,a4]@2 ab4 ~",
  V: "[c4,a4]@2 ~@9 ab4 [c4,a4]@2 ~ ab4", W: "[c4,a4]@7 ~@4 ab4 [c4,a4]@2 ~ ab4",
  X: "[[c4,a4]@4 g4@3 ~ e4@2 ~ c4@2 ~@2 f4@6 ~@6 db5 [f4,d5]@3 ~ [f4,d5]@9 ~@2 db5 [f4,d5]@3 db5, ~@31 db5@2 ~@15]/3", // F Dm
  Y: "[[a4,c5] ~@2 c5 d5@2 ~@2 c5@3 ~ d5@2 ~@2 c5@2 ~@2 d5@3 ~ c5@4 ~@4, ~@3 a4@3 ~ a4@7 ~ a4@2 ~@2 c5@2 ~@2 a4@2 ~@7]/2", // Am
  Z: "f4@3 ~@2 a4@2 ~ f4@4 a4@2 ~ c4, ~@7 c4@2 ~@7", AA: "f4 ~@2 f4 a4@2 ~ c4 f4@6 ~@2",
  AB: "[c4,e4,g4]@2 ~@3 [c4,e4,g4]@4 ~@3 [c4,gb4,a4]@2 ~@2", AC: "[d4,f4,b4]@3 ~ g4@3 ~ a4@3 ~ b4@3 ~",
  AD: "bb4@3 a4 g4@6 ~ ab4 a4@2 ~ ab4",
  AE: "[[f4,d5]@11 db5 [f4,d5]@3 ~@2 f4@3 bb4@2 ~@2 f4@3 ~ bb4@2 ~ [f4,d5]@10 ~ a4 ~ bb4@2 ~@2 c5@2 ~@2 c5 ~@3 c5@3 ~ a4@2 ~@2, ~@15 db5@2 ~@30 b4@2 ~@15, ~@4 d5 ~@11]/4", // Dm
  AF: "f4@3 ~@8 ab4 [c4,a4]@2 ~ ab4", AG: "[f4,d5]@10 ~ db5 [f4,d5]@3 db5",
  AH: "[[f4,d5]@10 ~@2 d5@3 db5 d5@4 bb4@2 ~@2 f4@3 bb4@3 ~ [f4,d5]@11 ~@2 a4@2 ~ bb4, ~@11 db5@2 ~@35, ~@12 f4@8 ~@24 f4 ~@3]/3", // Dm
  AI: "[[a4,c5] ~@2 c5 d5@2 ~@2 c5@4 d5@2 ~@2 c5 ~@2 c5 d5@3 ~ c5@4 ~@4, ~@3 a4@3 ~ a4@7 ~ a4@3 ~@5 a4@2 ~@7]/2", // Am
  AJ: "f4@2 ~ f4 a4 ~ c4 ~ f4@6 ~@2", AK: "[c4,e4,g4]@2 ~@2 [c4,e4,g4]@5 ~@3 [c4,gb4,a4]@2 ~@2",
  AL: "[c4,a4]@3 ~@7 ab4 ~ [c4,a4]@3 ab4", // F
  AM: "[[c4,a4]@9 ~@2 ab4 [c4,a4]@3 ~ [c4,a4]@3 ~ g4@2 ~@2 e4@3 c4 ~@3 [a3,f4]@8 ~@4 db5 [f4,d5]@3 ~ [f4,d5]@10 db5 ~ [f4,d5]@2 db5 ~, ~@15 ab4@2 ~@30 db5@2 ~@15]/4", // F Dm
  AN: "[c4,a4]@2 ~ f4 ~@3 c4 ~ d4 c4 ~ a3 g3 ~@2", AO: "f3 ~@3 [f3,f4] ~@3",
})).s("gm_piano").gain(0.36)

stack(bass, piano, piano_2)

More by Scott Joplin