Strudelify

Evergreen Rag

Scott James

KeyD majorTempo97 bpm
0:00/0:00
// Evergreen Rag — Scott James
// 97 bpm, 2/4, key D 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(97/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 A B E F G H I J A B E F K L M@2 A B E F G H I J A B E F K L N@2 O P Q R S T U@2 O P Q V W X Y Z O P Q R S T
  U@2 O P Q V W X Y AA AB AC AB AD AE AF AG@2 AH AI AJ AK AL AM AN AO AB AC AB AD AE AF AG@2 AH AI AJ AK AL AM AP AQ AR
  AS AT AU O P Q R S AV U@2 O P Q V W X Y Z O P Q R S T U@2 O P Q V W X Y AA
>`.pickRestart({
  A: "[d5,d6] ~ g5 ~ [c#5,c#6] ~ [d5,d6]@3 ~ g5 ~ [e5,e6] ~ g5 ~", B: "[d5,d6]@3 ~ [c5,c6]@3 ~ [b4,b5]@3 ~ [a4,a5]@3 ~",
  C: "[g4,b4,e5,g5]@3 ~ [g4,b4,e5,g5]@5 ~@3 [a4,c#5,g5,a5]@3 ~", D: "[d5,f#5,d6]@3 ~@5 [d6,f#6,d7]@3 ~@5",
  E: "[g4,g5] ~ c5 ~ [f#4,f#5] ~ [g4,g5]@3 ~ c5 ~ [a4,a5] ~ c5 ~", // G F# G A
  F: "[g4,g5]@3 ~ [e4,g4,e5]@3 ~ [d4,g4,d5]@3 ~ [d4,f#4,c5]@3 ~", // G Em G5 D7
  G: "[d4,g4,b4] ~ a#4 ~ b4 ~ [e4,g#4,e5]@3 ~ d5 ~ [e4,b4]@3 ~", H: "a4@3 ~ g4 ~ e4@3 ~ f#4 ~ g4 ~ g#4 ~",
  I: "a4 ~ g#4 ~ a4 ~ [d4,f#4,d5]@4 ~@6", J: "a5 ~ g#5 ~ a5 ~ [d5,f#5,d6]@3 ~ d5 ~ f#5 ~ a5 ~",
  K: "[e4,g#4,b4] ~ a#4 ~ b4 ~ [e4,g#4,e5]@3 ~ d5 ~ [d4,b4]@3 ~", L: "~@2 g#4 ~ a4 ~ [d4,f#4,d5]@4 b4 ~ a4@3 ~, a4 ~@3",
  M: "[g4@19 ~ [d5,f#5,a5]@3 ~ [d5,g5,b5]@3 ~ [d5,f#5,a5,c6]@3 ~]/2", // D G D7
  N: "[g4@19 ~ [d5,d6] ~ [d5,d6] ~ [d5,d6]@3 ~ [d5,d6]@3 ~]/2", O: "~@2 d5 ~ e5 ~ f#5 ~ d5 ~ e5 ~ f#5 ~ d5 ~",
  P: "g5 ~ a5 ~ b5 ~ a5@3 ~ g5 ~ e5@3 ~", Q: "[d5,f#5,c6,d6]@5 ~@3 [e5,f#5,c6,e6]@5 ~@3",
  R: "[d5,g5,b5,d6] ~ a#5 ~ b5 ~ [e5,g#5,e6]@3 ~ [d5,d6] ~ [d5,g#5,b5]@3 ~", // G E D G#dim
  S: "[c#5,g5,a5]@5 ~@3 [e4,a4,c#5,e5]@5 ~@3", T: "~@2 c6 ~ c#6 ~ [a5,a6]@3 ~ g6 ~ [g5,c#6,e6]@3 ~",
  U: "[[e5,f#5,c6,e6]@5 ~@3 [d5,f#5,c6,d6]@11 ~ [c5,c6]@3 ~ [a4,a5]@3 ~ [f#4,f#5]@3 ~]/2", // F#m7b5 D7 C A F#
  V: "[d5,g#5,b5,d6] ~ a#5 ~ b5 ~ [e5,g#5,e6]@3 ~ [d5,d6] ~ [d5,g#5,b5]@3 ~", W: "[c#5,g5,a5]@5 ~@3 [e5,g5,e6]@5 ~@3",
  X: "~@2 g#5 ~ a5 ~ [d5,f#5,d6]@3 ~ b5 ~ [c5,f#5,a5]@3 ~", // D F#dim
  Y: "[b4,d5,g5] ~ [a#4,c#5] ~ [b4,d5] ~ [c#5,e5]@3 ~ [b4,d5] ~ [a4,c5]@3 ~", // G A#m Bm C#m Bm Am
  Z: "[g4,b4]@3 ~ [d5,d6] ~ [d5,d6] ~ [d5,d6]@3 ~ [d5,d6]@3 ~", AA: "[g4,b4]@3 ~@5 [g5,b5,g6]@3 ~@5",
  AB: "[e4,g4]@3 ~ [e4,a4]@5 ~@3 c5@3 ~", AC: "[f4,a4]@3 ~ [f4,b4]@5 ~@3 d5@3 ~",
  AD: "[f4,b4]@3 ~ [f4,b4,f5]@5 ~@3 [f4,a4]@3 ~", AE: "[e4,g4]@3 ~ [e4,c5]@5 ~@3 [e4,b4]@3 ~",
  AF: "[f#4,a4]@3 ~ [f#4,b4]@5 ~@3 [f#4,c5]@3 ~", AG: "[[f4,g4,b4,d5]@19 ~ c#5@3 ~ d5@3 ~ d#5@3 ~]/2",
  AH: "[c#5,e5]@3 ~ [a4,c#5,f5]@5 ~@3 [a4,c#5,e5]@3 ~", AI: "a5@3 ~ a4@5 ~@3 c5@3 ~",
  AJ: "b4@3 ~ [g4,b4,e5]@5 ~@3 [g4,b4,d5]@3 ~", AK: "g5@3 ~ [e4,g4,a#4,c5]@3 ~ [f4,a4,d5]@3 ~ [f#4,c5,d#5]@3 ~",
  AL: "[g4,c5,e5]@3 ~ [b4,d#5,f#5,b5]@5 ~@3 [a4,d#5,f#5,a5]@3 ~", AM: "[f4,a4]@3 ~ [f4,b4]@5 ~@3 [f4,g4,b4,e5]@3 ~",
  AN: "[e4,g4,c5]@3 ~ f#5 ~ g5@3 ~ f#4 ~ g4@3 ~", AO: "~@4 [c4,e4,c5]@3 ~ [d4,f4,b4]@3 ~ [d#4,f#4,a4]@3 ~",
  AP: "[e4,g4,c5]@3 ~@13", AQ: "~@8 [c5,e5,c6]@3 ~@5", AR: "~@4 d5 ~ e5 ~ f#5 ~ d5 ~ e5 ~ f#5 ~, [c4,d4,f#4,a4]@7 ~@9",
  AS: "~@4 d6 ~ e6 ~ f#6 ~ d6 ~ e6 ~ f#6 ~, [c5,d5,f#5,a5]@7 ~@9", // D7
  AT: "d6 ~ d#6 ~ e6 ~ f6 ~ f#6 ~ g6 ~ g#6 ~ a6 ~, [d5,f#5,a5,c6]@7 ~@9", AU: "d7@3 ~@13",
  AV: "~@2 c6 ~ c#6 ~ [a5,a6]@3 ~ g6 ~ [g5,a5,c#6,e6]@3 ~", // A A7
})).s("gm_piano").gain(0.31).pan(0.7)

// other · piano
const piano_2 = note(`<
  A B C D E F G H I J K L E F G H M N O P E F G H I J K L E F G H M N O Q R S T U V W X Y R S T Z AA AB AC AD R S T U V
  W X Y R S T Z AA AB AC AE AF AG AF AG AF AH AI AJ AK AL AM AN AO AP AQ AD AF AG AF AG AF AH AI AJ AK AL AM AN AO AP AR
  AS ~@3 AT R S T U AU W AV Y R S T Z AA AB AC AD R S T U V W X Y R S T Z AA AB AC AW
>`.pickRestart({
  A: "[b2,b3]@3 ~ [a#2,a#3]@3 ~ [b2,b3]@3 ~ [c3,c4]@3 ~", B: "[b2,b3]@3 ~ [a2,a3]@3 ~ [g2,g3]@3 ~ [f#2,f#3]@3 ~",
  C: "[e2,e3]@3 ~ [e2,e3]@5 ~@3 [d#2,d#3]@3 ~", D: "[d2,d3]@3 ~@5 [d1,d2]@3 ~@5",
  E: "[b3,b4]@3 ~ [a#3,a#4]@3 ~ [b3,b4]@3 ~ [c4,c5]@3 ~", F: "[b3,b4]@3 ~ [a3,a4]@3 ~ [g3,g4]@3 ~ [f#3,f#4]@3 ~",
  G: "[e3,e4]@3 ~ [d#3,d#4]@3 ~ [e3,e4]@3 ~ [f#3,f#4]@3 ~", H: "[e3,e4]@3 ~ [c3,c4]@3 ~ [b2,b3]@3 ~ [a2,a3]@3 ~",
  I: "[g2,g3]@3 ~ [d3,g3,b3]@3 ~ [b2,b3]@3 ~ [e3,g#3,d4]@3 ~", // G B E7
  J: "[c#3,c#4]@3 ~ [g3,a3,c#4]@3 ~ [a2,a3]@3 ~ [g2,g3]@3 ~", // C# A7 A G
  K: "[f#2,f#3]@3 ~ [d3,f#3,c4]@3 ~ [d3,f#3,c4]@3 ~ [d2,d3]@3 ~", L: "[a2,a3]@3 ~ [d3,f#3,c4]@3 ~ [d3,f#3,c4]@3 ~@5",
  M: "[g#2,g#3]@3 ~ [d3,g#3,b3]@3 ~ [e2,e3]@3 ~ [e3,g#3,d4]@3 ~", // G# G#dim E E7
  N: "[a2,a3]@3 ~ [g3,a3,c#4]@3 ~ [d2,d3]@3 ~ [d3,f#3,c4]@3 ~", // A A7 D D7
  O: "[g3,b3]@3 ~ [a2,a3] ~ [a#2,a#3]@3 ~ [b2,b3]@3 ~ [d3,d4] ~", // G A A# B D
  P: "[g3,g4]@3 ~ [f#3,f#4]@3 ~ [g3,g4]@3 ~ [a3,a4]@3 ~", Q: "[g3,g4]@3 ~@13",
  R: "~@4 [f#4,a4]@3 ~@5 [d4,f#4,a4]@3 ~, d4@7 ~ c4@7 ~", S: "~@4 [d4,g4]@3 ~ [a2,a3]@3 ~ [g2,g3]@3 ~, b3@7 ~@9",
  T: "[f#2,f#3]@3 ~ [d3,f#3,c4]@3 ~ [d2,d3]@3 ~ [c2,c3]@3 ~", // F# D7 D C
  U: "[b1,b2]@3 ~ [d3,g3,b3]@3 ~ [e2,e3]@3 ~ [e3,g#3,d4]@3 ~", V: "[a2,a3]@3 ~ [g3,a3,c#4]@3 ~@5 [c#3,c#4]@3 ~",
  W: "[e3,e4]@3 ~ [a3,c#4,g4]@3 ~ [a2,a3]@3 ~ [a3,c#4,g4]@3 ~", X: "[d3,d4]@3 ~ [a3,c4,d4,f#4]@5 ~@3 [a2,a3]@3 ~",
  Y: "[d2,d3]@5 ~@11", Z: "[b1,b2]@3 ~ [e3,g#3,b3,d4]@3 ~ [e2,e3]@3 ~ [e3,g#3,d4]@3 ~",
  AA: "[a2,a3]@3 ~ [g3,a3,c#4]@3 ~ [g3,a3,c#4]@3 ~ [g2,g3]@3 ~", // A A7 G
  AB: "[f#2,f#3]@3 ~ [d3,f#3,c4]@3 ~ [d2,d3]@3 ~ [d3,f#3,c4]@3 ~", // F# D7 D D7
  AC: "[g2,g3]@3 ~ [d2,d3]@3 ~ [e2,e3]@3 ~ [f#2,f#3]@3 ~", AD: "[g2,g3]@3 ~@13", AE: "[g2,g3]@3 ~@5 [g1,g2]@3 ~@5",
  AF: "c3@3 ~ [e3,g3,e4]@3 ~ [e2,e3]@3 ~ [d#2,d#3]@3 ~", AG: "[d2,d3]@3 ~ [f3,g3,b3]@3 ~ g2@3 ~ [f3,g3,b3]@3 ~",
  AH: "[d2,d3]@3 ~ [f#3,a3,d4]@3 ~ [a2,a3]@3 ~ [f#2,f#3]@3 ~", // D A F#
  AI: "[g2,g3]@3 ~ [g#2,g#3] ~ [a2,a3]@3 ~ [a#2,a#3] ~ [b2,b3]@3 ~", AJ: "[d3,d4]@3 ~@13",
  AK: "a3@4 [c#4,e4]@3 ~ g3@4 [a3,c#4,e4]@3 ~", AL: "f#3@4 [a3,c4,d4]@3 ~ d3@4 [a3,c4,d4]@3 ~",
  AM: "g3@4 [b3,d4]@3 ~ f3@4 [g3,b3,d4]@3 ~", AN: "e3@3 ~ [a#2,a#3]@3 ~ [a2,a3]@3 ~ [g#2,g#3]@3 ~",
  AO: "[g2,g3]@3 ~ [f#2,f#3]@5 ~@3 [f#2,f#3]@3 ~", AP: "[g2,g3]@3 ~ [f3,g3,b3]@3 ~ [g2,g3]@3 ~ [f3,g3,b3]@3 ~",
  AQ: "[c3,c4]@3 ~@13", AR: "[c3,c4]@3 ~ [a2,a3]@5 ~@3 [g2,g3]@3 ~", AS: "[c2,c3]@3 ~@5 [c1,c2]@3 ~@5",
  AT: "~@8 [d2,d3]@3 ~@5", AU: "[a2,a3]@3 ~ [g3,a3,c#4]@5 ~@3 [c#3,c#4]@3 ~",
  AV: "[d3,d4]@3 ~ [a3,c4,d4,f#4]@3 ~@5 [a2,a3]@3 ~", AW: "[g2,g3]@3 ~@5 [g1,g2,g3]@3 ~@5",
})).s("gm_piano").gain(0.31).pan(0.3)

stack(piano, piano_2)

More by Scott James