Strudelify

Uncle John's Band

Grateful Dead

KeyG majorTempo120 bpm
0:00/0:00
// Uncle John's Band — Grateful Dead
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 8, 4/4 at bar 8, 3/4 at bar 11, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 139 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · "Treble Clef"
const piano = note(`<
  A B C B D@2 E@2 D F G@2 H I J K@3 L M N D@2 O@3 D P Q R S T U V W X M@2 D@2 Y Z AA AB@2 AC AD D AE AF AG AH T AI J
  AJ@2 D@2 E@2 D F G@2 H I J AK@2 AL L M AM AN D O@3 D P Q R S T U V AO X M@2 AP D AE AF AG AH T AI AQ D AE AF AG AH T
  AI AQ AR AS@2 AT AU AV AW T AX@2 ~@8 D AE AF AG AH T AI AY AR AZ AR BA@2
>`.pickRestart({
  A: "b4@2 b4 d5 a4@2 a4 c5", B: "g4 ~ g4 a4 f#4 d4 a3@2", C: "b4@2 b4 d5 a4 f#4 a4 b4", D: "[g3,b3,d4]!4",
  E: "[[c4,e4]@2 g3 [c4,e4]@2 g3 [b3,d4]@8 [g3,b3,d4]@2]/2", F: "[g3,b3,d4]!3 [c4,e4]",
  G: "[g3 [c4,e4]@2 g3 [b3,d4]@8 [a3,c4,e4]@2 [a3,c4,e4]@2]/2", H: "[a3,c4,e4]!2 [g3,b3,e4]!2",
  I: "[g3,b3,e4]!2 [c4,e4,g4]!2", J: "[c4,e4,g4]!2 [d4,f#4,a4]!2",
  K: "[[d4,f#4,a4]@2 [d4,f#4,a4]@2 [c4,e4,g4]@3 [c4,e4,g4]@3 [d4,f#4,a4]@2 [d4,g4,b4]@3 [d4,g4,b4]@2 a4 [c4,e4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2]/3", // D C D G C G
  L: "[a3,d4,f#4]!2 [b3,d4,g4]!2", M: "[b3,d4,g4]!4", N: "[b3,d4,g4]!2 [g3,b3,d4]!2",
  O: "[[g3,b3,d4]@2 [g3,b3,d4]@2 [c4,e4]@2 g3 [c4,e4]@2 g3 [b3,d4]@8 [g3,b3,d4]@2 [g3,b3,d4]@2 [g3,b3,d4]@2]/3", // G C Bm G
  P: "[g3,b3,d4]@2 [c4,e4]@2 g3 [c4,e4]@2 g3", Q: "[b3,d4]", R: "[a3,c4,e4]!4", S: "[g3,b3,e4]!4", T: "[c4,e4,g4]!4",
  U: "[d4,f#4,a4]!4", V: "[c4,e4,g4]@3 [c4,e4,g4]@3 [d4,f#4,a4]@2", W: "[d4,g4,b4]@3 [d4,g4,b4]@2 a4 [c4,e4]@2",
  X: "[b3,d4,g4]!2 [a3,d4,f#4]!2", Y: "[g3,b3,d4] [g3,c4,e4]!3", Z: "[a3,c4,e4]!2 [b3,d4] [a3,c4,e4]", AA: "[a3,d4]!4",
  AB: "[g3,c4,e4]!4", AC: "[b3,d4]!2 [a3,d4]!2", AD: "[g3,c4,e4]!2 [a3,d4]!2", AE: "[g3,b3,d4]!2 [g3,c4,e4]!2",
  AF: "[a3,c4,e4]!2 [b3,d4,g4]!2", AG: "d4 f#4 g4 a4 b4 c5 b4 a4", AH: "[e4,g4]!2 [c4,e4,g4]!2",
  AI: "[b3,d4,g4]!2 [d4,f#4,a4]!2", // G D
  AJ: "[[b3,d4,g4]@2 [b3,d4,g4]@2 [a3,d4,f#4]@2 [a3,d4,f#4] e4 e4 [g3,c4,e4] [g3,c4,e4]@2 [a3,d4,f#4]@4, ~@7 [g3,c4]@2 ~@7]/2", // G D C D C5
  AK: "[[d4,f#4,a4]@2 [d4,f#4,a4]@2 [c4,e4,g4]@3 [c4,e4,g4]@3 [d4,f#4,a4]@2 [d4,g4,b4]@3 [d4,g4,b4]]/2", // D C D G
  AL: "~ a4 [c4,e4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2, [d4,g4,b4] ~@3", AM: "[b3,d4,g4]!2 [b3,d4]!2",
  AN: "[b3,d4]!2 [g3,b3,d4]!2", AO: "[d4,g4,b4]@3 [d4,g4,b4] ~ a4 [c4,e4]@2, ~@2 [d4,g4,b4] ~", AP: "[b3,d4]!4",
  AQ: "[c4,e4,g4] [c4,e4] [a3,d4]!2", AR: "d3@3 f3 a3 g3 ~ f3", AS: "[d3@2 a2 c3 ~ e3 d3@3 f3 a3 g3 ~ f3 d3@2]/2",
  AT: "a2 c3 ~ e3 e4 d4 a3 d4", AU: "e4 d4 a3 d4 e4 d4 a3 d4", AV: "[c4,d4,e4,g4]!4",
  AW: "[c4,d4,e4,g4]@2 [c4,d4,e4,g4] [c4,d4,e4,g4]@2 [c4,d4,e4,g4] [c4,d4,e4,g4]@2", // C
  AX: "[[b3,d4,g4]@3 [b3,d4,g4]@13]/2", AY: "[c4,e4,g4]!2 [a3,d4,f#4]!2", AZ: "~@2 d3@2 a2 c3 ~ e3",
  BA: "[d3@2 a2 c3 ~ e3 [a3,e4]@8 ~@2]/2", // A5
})).s("gm_piano").gain(0.35)

// bass · piano · "Bass Clef"
const bass = note(`<
  A B A B C D E F@3 G H I@2 J K@2 L M N O P C Q@2 R S T U V W X Y Z AA AB AC AD@2 AE AF AG AH AI AJ AK@2 AL AM AN AO
  AP@2 AQ AR AS@2 C D E F@3 G H AT AU J K@2 L AV AW AX AY C Q@2 R S T U V AZ X Y Z AA AB BA BB BC AL AM AN AO AP@2 AQ BD
  AL AM AN AO AP@2 AQ BD BE BF@3 BG BH BI BJ BK@2 ~@7 BL AL AM AN AO AP@2 AQ BM BE BN BE BO@2
>`.pickRestart({
  A: "g2@2 d3 g2 a2@2 d3 c3", B: "~ c3 ~ c3 d3@3 d2", C: "g2@3 g2 g2@3 g2", D: "g2@3 g2 ~ g2 a2 b2",
  E: "c3@2 c2 e2@2 e2 g2@2", F: "[g2@2 g2 b2 ~ d3 g2@3 g2 b2 d3 ~ d3 g2@3 a2 ~ a2 b2@2 c3@2]/3",
  G: "c2 e2@2 e2 g2@2 g2@2", H: "g2 b2 ~ d3 a2@3 a2", I: "[a2!2 ~ a2 e2!2 ~ b1@2 e2@3 c3@3 g2]/2",
  J: "c3!2 ~ a2 d3!2 ~ a2", K: "[d3@2 d3 a2 c3@3 d3@2 d2 e2 f#2 g2!2 b2 d3]/2", L: "~ c3 ~ e2 g2@2 g2 b2",
  M: "d3@2 d3 d2 g2@3 g2", N: "~ g2 ~ d2 g2@3 b2", O: "d3@2 d3 g2@4 b2", P: "~ b2 d3@2 g2@3 g2",
  Q: "[~ g2 a2 b2 c3@2 c2 e2@2 e2 g2@2 g2@2 g2 b2]/2", R: "~ d3 g2@3 g2 b2 d3", S: "~ d3 g2@3 a2 ~ a2",
  T: "b2@2 c3@2 c2 e2@2 e2", U: "g2@2 g2@2 g2 b2 ~ d3", V: "a2@3 a2!3 ~ a2", W: "e2!2 ~ b1@2 e2@3",
  X: "c3@3 g2 c3!2 ~ a2", Y: "d3!2 ~ a2 d3@2 d3 a2", Z: "c3@3 d3@2 d2 e2 f#2", AA: "g2!2 b2 d3 ~ c3 ~ e2",
  AB: "g2@2 g2 b2 d3@2 d3 d2", AC: "g2@3 g2 ~ g2 ~ d2", AD: "[g2@3 b2 d3@2 d3 ~@2 b2 d3 e3 ~ e3 d3@2, ~@7 g2@4 ~@5]/2",
  AE: "g2@4 g2@3 g2", AF: "~ g2 c3@2 c3@2 c3 g2", AG: "a2@3 e3 g3@2 e3 a2", AH: "d3@3 d3!3 a2!2", AI: "c3@3 g2 c3@3 g2",
  AJ: "c3!2 ~ g2 c3!2 c2 e2", AK: "[g2@4 d2@3 c2@2 c2@2 d2!3 e2 f#2]/2", AL: "g2@4 b2 d3 ~ d3",
  AM: "g2@3 b2 c3@2 c3 e2", AN: "a2@4 g2!2 ~ a1", AO: "d2@3 a2 d3@2 d3 d2", AP: "[c2@4 a1@2 a1 c2@4 c3 e3 c3 b2 a2]/2",
  AQ: "g2@2 g2 d2 d2@2 d2 c2", AR: "~ c2 ~ a1 d2!2 e2 f#2", AS: "[g2@3 g2 a2@2 b2 c3@2 c3 c3@2 d3@2 d3 d2]/2",
  AT: "a2!2 ~ a2 e2!2 ~ b1", AU: "e2@3 b2 c3@3 g2", AV: "d3@2 d3 d2 g2@4", AW: "g3!2 ~ f#2 g2@4", AX: "b2@2 g2 b2",
  AY: "d3!2 e3 d3 g2@3 g2", AZ: "e2!2 ~ b1 e2@3 b2", BA: "g2@4 g3!2 ~ f#2", BB: "g2 b2", BC: "g2@2 b2@2 d3!2 e3 d3",
  BD: "~ c2 d2@2 d2 a2 d3 a2", BE: "d2@3 a2 d3 c3 a2 g2",
  BF: "[d2@4 ~ a2 d2@3 a2 d3 c3 a2 g2 d2@4 ~ a2 [d2,d3]@3 a2]/3", BG: "d3 a2 d2@2 d2 a2 d3 a2",
  BH: "d2@3 d2 a2 d3 ~ a2", BI: "d2@2 d2 d2@2 a1 c2@2", BJ: "c2@4 g2 c3@3", BK: "[g2@3 g2@13]/2", BL: "~@5 d2 e2 f#2",
  BM: "~ c2 ~ a1 d2!2 a2 d3", BN: "~@2 d2@4 ~ a2", BO: "[d2@4 ~ a2 [d2,a2]@8 ~@2]/2",
})).s("gm_piano").gain(0.35)

stack(piano, bass)

More by Grateful Dead