Strudelify

Greenwich Witch

Zez Confrey

KeyE♭ majorTempo180 bpm
0:00/0:00
// Greenwich Witch — Zez Confrey
// 180 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 124 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/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.

// chords · piano
const piano = note(`<
  ~ A B C D E F@2 G H I J D E F@2 K L M N D E F@2 G H I J D E F@2 K L M O P Q R S T U V W P Q X S Y U Z@2 P Q R S T U V
  W P Q X S Y U Z@2 ~ A B C D E AA@2 G H I J D E F@2 K L AB AC AD AE AF AG AH AI AJ@2 AK AL AM AN AH AI AJ@2 AO AP AQ AR
  AH AI AJ@2 AK AL AM AS AT AI AJ@2 AO AP AQ AU
>`.pickRestart({
  A: "[bb3,d4] [b3,eb4] ~ [c4,e4] [db4,f4]@2 [d4,gb4]@4 [eb4,g4]@2 [e4,ab4]@4", // Bb B C Db D Eb E
  B: "[f4,a4]@2 [gb4,bb4] [g4,b4]@2 [ab4,c5] [a4,db5]@2", C: "[bb4,d5] ~ [ab4,d5,bb5] ~",
  D: "[eb5,g5] f5 ~ eb5 c5@2 bb4 c5 bb4@2 g4@2 [c5,eb5]@2 bb4@2", E: "g4 [c5,eb5] bb4 g4 [c5,e5] bb4 g4 gb4",
  F: "[f4 gb4 g4 ab4 a4 [d5,f5]@2 ~ [c5,eb5]@6 ~@2, ~@7 a4@7 ~@2]/2", // Dm Cm
  G: "[ab5,c6] bb5 ~ ab5 ~@2 c5 d5 c5@2 ab4@2 [d5,f5]@2 c5@2, ~ f5 ~@2", H: "ab4 [d5,f5] c5 ab4 [d5,f5] c5 ab4 bb4",
  I: "[g4,eb5]@3 [a4,eb5,g5]@2 [d5,f5] [c5,eb5]@2", J: "[ab4,d5,f5]@3 ~",
  K: "bb5 c6 ~ bb5 a5@2 ab5@4 f5@2 [ab5,f6]@4, g6@3 f6@3 ~@2", // Db
  L: "f5 g5 ~ f5 d5@2 [bb4,g5]@4 [a4,gb5]@2 [ab4,f5]@4, d6@3 ~@5", // Eb D Db
  M: "[g4,eb5]@2 ab4@2 ab4 b4 [f4,ab4,eb5]@2, ~@2 [f4,eb5]@3 ~@3", N: "[g4,bb4,eb5] ~@3",
  O: "[g4,bb4,eb5] ~ [f4,b4,g5]@2", P: "[eb5,g5] c5 [ab5,c6] g5 f5 [eb5,g5] d5 c5",
  Q: "[ab5,c6] g5 f5 [eb5,g5] d5 c5 [ab5,c6] g5", R: "f5 [eb5,g5] d5 c5 [bb4,d5] g4!2 eb4", S: "[d4,g4,b4]",
  T: "[bb4,e5] [b4,d5] g4 [eb5,a5] [e5,g5]@2 [bb4,e5] [b4,eb5]", // Bbdim Bm Ebdim Em Bbdim B
  U: "g4 [eb5,a5] [e5,g5]@2 [bb4,e5] [b4,eb5] g4 [eb5,a5]", V: "[e5,g5]@2 [bb4,e5] [b4,d5] g4 [eb5,a5] [e5,g5]@2",
  W: "[bb4,e5] [b4,d5] g4 [eb5,a5] [e5,g5]@4", X: "f5 [eb5,g5] d5 c5 [ab4,c5] g4 f4 eb4",
  Y: "[bb4,e5] [bb4,d5] g4 [eb5,a5] [e5,g5]@2 [a4,e5] [bb4,eb5]", // Bbdim Bb Ebdim Em A5 Eb5
  Z: "[[e5,g5]@2 [g4,eb5]@2 [g4,eb5] d5@2 [eb4,g4,c5]@3 ~@2 [c5,eb5,g5,c6]@2 ~@2]/2", // Em Cm
  AA: "[f4 gb4 g4 a4!2 [d5,f5]@2 ~ [c5,eb5]@6 ~@2, ~@7 a4@7 ~@2]/2", AB: "[g4,eb5]@2 [f4,ab4,eb5]@3 b4 [ab4,eb5]@2",
  AC: "[g4,bb4,eb5] ~ [eb5,g5,bb5,eb6] ~", AD: "~ b3 [f4,g4] ~ bb3 [e4,ab4] ~ [bb3,e4,ab4]",
  AE: "~ db4 [g4,a4] ~ c4 [gb4,bb4] ~ [c4,gb4,bb4]", AF: "~ eb4 [a4,b4] ~ d4 [ab4,c5] ~ bb4",
  AG: "[db4,g4,db5]@4 ~@4 [db5,g5,eb6]@4 ~@3 [eb5,f5]", AH: "eb5@3 d5 eb5@3 e5 f5@3 eb5 d5@3 eb5",
  AI: "db5 eb5 ~ db5 c5@3 bb4 ab4@3 g4 f4@3 eb4",
  AJ: "[c4@3 eb4 ab4@3 c5 eb5@2 [ab5,c6]@4 ~@2 [g5,bb5]@12 [f5,ab5]@4, ~@7 c5@7 ~@2]/2", // Ab Gm Fm
  AK: "eb5 f5 ~ eb5 d5@2 db5@4 g4@2 eb5@2 d5@2, g5@3 f5@3 g5@2", AL: "[db5,f5]@3 [db5,e5]",
  AM: "[c5,eb5] d5 eb5 [c5,ab5]@3 [db5,bb5]@2", AN: "[c5,eb5,c6]@12 ~@3 [eb5,f5]",
  AO: "eb5 f5 ~ eb5 d5@2 db5@4 b4@2 [c5,eb5]@4, gb5@3 f5@3 ~@2", // Cm
  AP: "bb4 c5 ~ bb4 a4@2 ab4@2 ab4@2 g4@2 [f4,d5]@4, d5@3 d5@3 ~@2", // Dm
  AQ: "eb4 [c5,eb5]@2 ~ [c5,eb5]@2 [db4,bb4,db5]@2, ~@3 eb4@3 ~@2", // Cm Gb
  AR: "[c4,ab4,c5]@4 ~@4 [ab4,c5,eb5,ab5]@4 ~@3 [eb5,f5]", AS: "[c5,eb5,c6]@12 ~@3 eb5",
  AT: "eb5@3 d5 eb5@3 e5 f5@3 eb5 d5@3 eb5, f5 ~@15", AU: "[c4,ab4,c5] ~ [ab4,c5,eb5,ab5] ~",
})).s("gm_piano").gain(0.31).pan(0.6)

// chords · piano · "Zez Confrey (1921)"
const piano_2 = note(`<
  A ~@2 B C D E F G H I J C D E F G K L M C D E F G H I J C D E F G K L N O P Q R S@4 O T Q R S@2 U V O P Q R S@4 O T Q
  R S@2 U V A ~@2 B C D E F G H I J C D E F G K L W X Y Z AA AB AC AD AE AF AG AH AI AJ AC AD AK AL AM AN AO AB AC AD AE
  AF AG AH AI AJ AC AD AK AL AM AN AO
>`.pickRestart({
  A: "[eb3,g3] [e3,ab3] ~ [f3,a3] [gb3,bb3]@2 [g3,b3]@4 [ab3,c4]@2 [a3,db4]@4", B: "~@2 [bb2,bb3] ~",
  C: "[eb2,eb3] [bb3,eb4,g4] bb2 [bb3,eb4,g4]", D: "[eb2,eb3] [bb3,eb4] [c2,c3] [bb3,c4,e4]",
  E: "[f2,f3] [a3,eb4] [g2,g3] [ab2,ab3]", F: "[a2,a3] [f2,f3] [e2,e3] [eb2,eb3]",
  G: "[d2,d3] [ab3,bb3,d4] bb2 [ab3,bb3,d4]", H: "[f2,f3] [ab3,bb3,d4] [bb1,bb2] [ab3,bb3,d4]",
  I: "[eb2,eb3] [bb3,eb4] [f2,f3] [a3,eb4]", J: "[bb3,d4] [bb1,bb2] [c2,c3] [d2,d3]",
  K: "[d2,d3] [ab3,bb3,d4] [bb1,bb2] [ab3,bb3,d4]", L: "[eb2,eb3] [db3,b3]@2 [db3,b3]",
  M: "[eb3,bb3] [bb1,bb2] [c2,c3] [d2,d3]", N: "[eb3,bb3] ~ [g2,g3]@2", O: "[g3,c4] [g3,d4]@2 [g3,eb4]",
  P: "[g3,d4] ~@2 [g3,c4] ~@2 [g3,d4] ~", Q: "~ [g3,eb4] ~@2 [g3,d4] ~ [g3,c4] ~",
  R: "[g3,b3] [g2,g3] [a2,a3] [bb2,bb3]", S: "[b2,b3] [g3,b3,f4] g2 [g3,b3,f4]", T: "[g3,d4] ~@2 [g3,c4] [g3,d4] ~@3",
  U: "[b2,b3] [g2,g3] [a2,a3] [b2,b3]", V: "[c3,c4] ~ [c2,c3] ~", W: "[eb3,bb3] ~ [eb2,eb3] ~",
  X: "db4@2 ~ c4@2 ~ c4 ~", Y: "eb4@2 ~ d4@2 ~ d4 ~", Z: "f4@2 ~ e4@2 ~ e4 ~", AA: "eb4 ~ [eb2,eb3] ~",
  AB: "[bb2,g3] [db4,eb4,g4] [eb2,eb3] [db4,eb4,g4]", AC: "[g2,eb3] [db4,eb4,g4] [eb2,eb3] [eb3,g3,db4]",
  AD: "[ab2,ab3] [ab3,c4,eb4] [eb2,eb3] [ab3,c4,eb4]", AE: "[ab2,ab3] [ab3,c4,eb4] [c3,c4] [b2,b3]",
  AF: "[bb2,bb3] [db4,eb4,g4] [eb2,eb3] [db4,eb4,g4]", AG: "[bb2,bb3] [db4,eb4,g4] [eb2,eb3] [db4,g4]",
  AH: "[ab2,ab3] [ab3,c4,eb4] [f2,f3] [g2,g3]", AI: "[ab2,ab3] [g2,g3] [f2,f3] [eb2,eb3]",
  AJ: "[bb2,g3] [db4,eb4,g4] [f2,eb3] [db4,eb4,g4]", AK: "[ab2,ab3] [ab3,c4,eb4] [c3,c4] [bb2,bb3]",
  AL: "[a2,a3] [a3,eb4,f4] [f2,f3] [a3,eb4,f4]", AM: "f2 [ab3,bb3,d4] [bb1,bb2] [ab3,bb3,d4]",
  AN: "~ eb3 [f2,f3] [g2,g3], eb2@3 ~", AO: "[ab2,ab3] ~ [ab1,ab2] ~",
})).s("gm_piano").gain(0.31)

stack(piano, piano_2)

More by Zez Confrey