Strudelify

Woodstock

Joni Mitchell

KeyE minorTempo115 bpm
0:00/0:00
// Woodstock — Joni Mitchell
// 115 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Adlib Violin" named as a string part, played on violin (its choir aahs patch is not one)
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(115/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 · "Adlib Piano"
const piano = note(`<
  A B C D E F G H I J K L M N F O P Q R S T U V W X Y Z AA AB AC AD AE E AF G AG AH J K L M N F O P Q R S T U V W AI AJ
  X AK AI AL Z AA AB AC AD AE E F G H I J K L M N F O P Q R S T U V W AI AJ X AM AN AO AP AQ AB AR AS AT@2
>`.pickRestart({
  A: "e4@2 d4 [b3,e4] e4@2 d4 [d4,g4], b3@3 ~ b3@3 ~", B: "g4 a4!3 a4@2 g4@2, d4@15 ~",
  C: "e4@2 d4 [b3,e4] [b3,e4]@2 d4 [d4,a4], b3@3 ~@5", D: "a4@2 g4 [b3,e4] [b3,e4]@2 ~ d4, d4@3 ~@5",
  E: "e4@2 d4 [b3,e4] e4@2 d4 [b3,e4], b3@3 ~ b3@3 ~", F: "e4@2 d4 [b3,e4] e4@2 e4 g4, b3@3 ~ b3@4",
  G: "g4 a4!3 a4@2 g4@2, [d4,e4]@15 ~", H: "d5 [d4,g4,e5] b4 g4, ~ [b3,d4]",
  I: "~ g4 a4!2 a4@2 g4 [g4,d5], [d4,e4]@4 [d4,e4]@3 ~", J: "d5 e5@3 e5@2 b4 g4, g4@11 ~ b3@4",
  K: "~ [g3,b3,d4] ~ [g3,b3,d4], e4@15 ~", L: "~ [g3,b3,d4] ~ [g3,b3,d4], e4 g4",
  M: "~@4 [g3,b3,d4]@7 ~@3 d4@2, e4@11 ~@5", N: "d4 e4!2 [b3,e4] e4@2 d4 [b3,e4], b3@3 ~ b3@3 ~",
  O: "a4!3 [d4,e4,a4] a4!2 g4@2, [d4,e4]@3 ~ [d4,e4]@4", P: "~@2 [d4,g4,d5]@2 d5!2 b4 g4, ~@2 [d4,g4] [b3,d4]",
  Q: "a4 a4@3 a4@2 a4 g4, [d4,e4]@11 ~ [d4,e4]@4", R: "~@6 e5@2 d5 b4 a4 g4 e4@4, e5@3 ~@5, ~ [e4,g4,b4] [b3,d4] ~",
  S: "[g3,b3,d4] [g3,b3,d4]@2 [g3,b3,e4] [g3,b3]@2 [g3,b3]@2, ~ e4", T: "~ [g3,b3,d4] ~ [g3,b3,d4], e4",
  U: "[g3,b3,d4,e4] ~ e4 g4", V: "~@4 [b3,d4,e4]@4 a4@4 ~ b4 a4 g4, a4@2 ~ [b3,d4,e4]",
  W: "d4@2 e4@2 d4 e4 [b3,d4,e4]@2, b3@11 ~@5", X: "~@2 [d4,g4,b4] [g4,b4,d5,e5], d5@11 ~@5",
  Y: "[g4,b4,d5]!2 e4 g4, e5 [b3,d4]", Z: "b4 b4@2 [d4,a4] a4 g4@3, d4@3 ~ d4@4", AA: "[b3,d4]@3 b3 ~ d4@2 d4, ~ b3",
  AB: "~ [g3,b3] ~ [g3,b3], e4 d4", AC: "~ a3 ~ g3, c#4 b3", AD: "~ [e3,g3] ~ [e3,g3], a3",
  AE: "~@2 [e3,g3]@2 ~@3 d4, b3@4 b3@3 ~, ~@3 [e3,g3]", AF: "e4@2 g4 [b3,g4] g4@2 e4 g4, b3@3 ~ b3@4",
  AG: "~ d5 [d4,g4,e5]@2 b4@2 g4@2, ~ [b3,d4]", AH: "a4@2 g4 a4 a4@2 g4 [g4,d5], [d4,e4]@4 [d4,e4]@3 ~",
  AI: "~@2 e4 g4 [e4,a4]@2 [d4,e4,a4]@2, d4@11 ~@5", AJ: "[d4,e4,a4]@2 [d4,e4,a4]@2 d4 e4 [b3,d4,e4]@2, ~@2 b3 ~",
  AK: "[g4,b4,d5]!2 ~ [g4,b4,d5], e5!2", AL: "[d4,e4,a4]@2 [d4,e4,a4]@2 d4!2 [b3,d4,e4]@2, ~@2 b3 ~",
  AM: "[g4,b4,d5]!4, e5 ~", AN: "d4 e4!2 [d4,g4]!2 [b3,d4]@2 [b3,d4], b3@3 ~@5", AO: "d4 e4@3 d4@2 e4@2, b3!2",
  AP: "b4 b4@2 [d4,a4] a4 g4@2 [b3,d4], [d4,g4]@3 ~ d4@3 ~", AQ: "[b3,d4]@4 b3@2 d4!2, ~@3 b3",
  AR: "~ [d4,g4] ~ [d4,g4,e5], d5@11 ~@5", AS: "[e4,a4,e5]@11 ~ [e4,a4,e5]@4", AT: "[e5!8 e5@8, [e4,a4]]/2",
})).s("gm_piano").gain(0.26)

// chords · piano · "Adlib Piano"
const piano_2 = note(`<
  A B A C D E B F G H I@2 J D E K L M N O I P Q R S T U V W X I@2 D E B F G H I@2 J D E K L M N O I P Q R S Y S@3 Y U V
  W X I@2 D E B F G H I@2 J D E K L M N O I P Q R S Y S@2 Z AA AB AA W AC AD@3
>`.pickRestart({
  A: "[e3,g3]@3 [e3,g3] [e3,g3]@3 [a2,g3]", B: "[a2,g3]@15 ~", C: "[a2,g3]@3 [e3,g3] [e3,g3]@2 b2 ~",
  D: "[e3,g3]@3 [e3,g3] [e3,g3]@3 [e3,g3]", E: "[e3,g3]@3 [e3,g3] [e3,g3]@4", F: "[e3,b3] [e3,g3]",
  G: "[a2,g3]@4 [a2,g3]@3 [e3,b3]", H: "e3 b2 e3 [e3,g3], b3@11 ~@5", I: "e2@3 e3 e2@4", J: "e2@3 e3 e2@2 e3@2",
  K: "[a2,g3]@3 [a2,g3] [a2,g3]@4", L: "[e3,b3]@2 [e3,b3] [e3,g3]", M: "[a2,g3]!2 [a2,g3]@2",
  N: "[e3,d4]@4 [e3,g3]@3 e3", O: "e3@3 e3 e3@4", P: "e3 ~@3", Q: "[a2,g3]!2", R: "[a2,g3]!4", S: "[a2,e3]!2",
  T: "[a2,e3] [a2,g3]", U: "[e3,g3]!2 [e3,b3]!2", V: "[e3,g3]!4", W: "[g2,d3]@15 ~", X: "[a2,e3] [g2,d3]",
  Y: "[a2,e3]@2 [a2,e3]!2", Z: "[e3,g3]@3 [e3,b3]!2 [e3,g3]@2 [e3,g3]", AA: "[e3,g3]!2 [e3,g3]@2",
  AB: "e3@3 [e3,b3] [e3,b3]@3 [e3,g3]", AC: "[e3,b3]!2", AD: "[a2@8 e2@16 [a2,e3,c#4]@23 ~, [e3,c#4]@23 ~@25]/3",
})).s("gm_piano").gain(0.26)

stack(piano, piano_2)

More by Joni Mitchell