Strudelify

Crazy Bone" Rag (One Step or Trot)

Johnson

KeyG majorTempo104 bpm
0:00/0:00
// Crazy Bone" Rag (One Step or Trot) — Johnson
// 104 bpm, 2/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 148 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano · "Crazy Bone Rag"
const piano = note(`<
  A B C D E F C G H I J K E F C G H L M N E F C G H I J K E F C G H L M O P Q R S T@2 U V P Q W S T X Y Z P Q R S T@2 U
  V P Q W S T X Y AA E F C G H I J L E F C G H L M AB AC AD AE AF AE AG AE AH AI AD AE AF AJ AK AL AM AC AD AE AF AE AG
  AE AH AI AD AE AF AJ AK AL AN AO AP P AQ AR@2 AS AT AO AU P AQ AR@2 AV AW AO AP P AQ AR@2 AS AT AO AU P AQ AR@2 AV AX
>`.pickRestart({
  A: "[g4,g5]@2 [e4,e5] [d4,d5] [g4,g5]@2 [e4,e5] [d4,d5]", B: "[g4,g5]@2 [e4,e5]@2 [d4,d5]@2 [g4,b4,g5]@6 ~ g4 a4 a#4",
  C: "b4 a4 g4 b4@2 a4 g4@2", D: "[f#4,c5,d5] [f#4,c5,d#5] [c5,e5] [c5,f#5]", E: "[b4,g5]@2 e5 d5 [b4,g5]@2 e5 d5",
  F: "[b4,g5]@2 e5@2 d5@2 [b4,g5]@6 ~ g4 a4 a#4", G: "b4 a4 g4 e4@2 d4 e4 f4", H: "f#4 [f#4,c5,e5]!3",
  I: "[f#4,c5,e5] [f#4,c5,f#5]@2 [f#4,c5,e5]@2 d4 e4 f#4", J: "g4 [g4,b4,e5]!3",
  K: "[f#4,c5,e5] [f#4,c5,f#5]@2 c5 c5@2 [f#4,c5,d5]@2, ~@3 [f#4,e5]@3 ~@2", // F#m7b5 F#dim D7 F#7
  L: "[f#4,c5,e5] [f#4,c5,f#5]@2 [f#4,c5,e5]@3 [f#4,c5,d5]@2", M: "[g4,b4,g5] [g4,d5,g5] [g4,c#5,g5] [g4,c5,g5]",
  N: "[g4,b4,g5]@2 b4 c5 c#5 d5 e5 f#5", O: "[g4,b4,g5]@4 g4@2 a4@2 b4@4 d5@3 [d#5,f#5]",
  P: "[e5,g5]@4 c5@3 [d#5,f#5] [e5,g5]@4 c5@3 [d#5,f#5]", Q: "[e5,g5]@2 f#5@2 g5@2 [c5,e5]@4 d#5@2 [c5,e5]@3 [a#4,c#5]",
  R: "[b4,d5]@4 g4@3 [b4,c#5] [b4,d5]@4 g4@3 [a#4,c#5]", S: "[b4,d5] c#5 d5 [g4,b4]@2 a#4 [g4,b4]@2",
  T: "[b4,d5]@2 [a#4,c#5] [a4,c5]@2 [g#4,b4] [a4,c5]@2", U: "~ [g4,b4] ~ d4 ~ e4 ~ f#4",
  V: "~@2 g4@2 ~@2 a4@2 ~@2 b4@2 ~@3 [d#5,f#5], ~@7 d5", W: "[b4,d5]@4 g4@3 [a#4,c#5] [b4,d5]@4 g4@3 [a#4,c#5]",
  X: "[b4,d5]@2 [a#4,c#5] [a#4,c5]@2 [g#4,b4] [a4,c5]@2", Y: "[g4,b4]@2 b3 c4 c#4 d4 e4 f#4",
  Z: "g4@4 g4@2 a4@2 b4@4 d5@3 [d#5,f#5]", AA: "g4 ~ [g4,b4,g5] ~", AB: "[g4,b4,g5] ~ [g4,b4,g5] ~",
  AC: "g4@2 a4@2 b4 d5@3", AD: "a4 b4", AE: "a4@2 b4 a4@3 g4@2", AF: "[g4,e5]", AG: "[g4,b4,f5]",
  AH: "[g4,e5]@2 c5 b4 d5 c5 b4 a4", AI: "g4@2 a4@2 b4 c5@3", AJ: "a4 c5@2 a4 c5@2 c5 d5",
  AK: "e5 [c5,g5]@2 e5 a5 g5 [c5,e5]@2", AL: "[f4,b4,d5]", AM: "[e4,c5]@2 c5 b4 d5 c5 b4 a4",
  AN: "[e4,c5]@4 c5@2 d5@2 e5@4 g5@3 [g#5,b5]", AO: "[a5,c6]@4 f5@3 [g#5,b5] [a5,c6]@4 f5@3 [g#5,b5]",
  AP: "[a5,c6]@2 b5@2 c6@2 [f5,a5]@4 g5@2 [f5,a5]@3 [d#5,f#5]", AQ: "[e5,g5] f#5 g5 [c5,e5]@2 d#5 [c5,e5]@2",
  AR: "[e5,g5]@2 [d#5,f#5] [d5,f5]@2 [c#5,e5] [d5,f5]@2", AS: "~ [c5,e5] ~ g4 ~ a4 ~ b4",
  AT: "~@2 c5@2 ~@2 d5@2 ~@2 e5@2 ~@3 [g#5,b5], ~@7 g5", AU: "[a5,c6]@2 b5@2 c6@2 [f5,a5]@4 g#5@2 [f5,a5]@3 [d#5,f#5]",
  AV: "[c5,e5]@2 e4 f4 f#4 g4 a4 b4", AW: "c5@4 c5@2 d5@2 e5@4 g5@3 [g#5,b5]", AX: "c5 ~ [c5,e5,c6] ~",
})).s("gm_piano").gain(0.31).pan(0.6)

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

stack(piano, piano_2)