Strudelify
I've Seen All Good People cover art

Jersey City

I've Seen All Good People

Yes

KeyE majorTempo120 bpm
0:00/0:00
// I've Seen All Good People — Yes
// 120 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 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
const piano = note(`<
  ~@11 A B C D E D C D E D C D E D C D E D@4 C D F D C D E G C D E H I J K L I J K L I J K L I J K L M D@2 C D N H C D N
  H I O K L I@2 K L I P K L Q J K L R S H T U T U T V T W T U T U T V T W T U T X Y Z@2
>`.pickRestart({
  A: "~@2 [g#4,b4] ~ [g#4,b4] [a4,c#5] [g#4,b4] ~ [g#4,b4] ~ [a4,c#5] ~ [g#4,b4] ~ [c#5,e5]@2", // G#m A G#m A G#m C#m
  B: "~@2 [b4,d#5]@3 ~ [g#4,b4]@7 ~@3", C: "[e4,g#4] ~ b3 ~ [e4,g#4] ~ [e4,g#4]@3 ~ b3 ~ [e4,g#4] ~ [e4,g#4] ~",
  D: "[f#4,a4] ~ c#4 ~ [f#4,a4] ~ [f#4,a4]@3 ~ c#4 ~ [f#4,a4] ~ [f#4,a4] ~", // F#m
  E: "[g#4,b4] ~ d#4 ~ [g#4,b4] ~ [g#4,b4]@3 ~ d#4 ~ [g#4,b4] ~ [g#4,b4] ~", // G#m
  F: "[g#4,b4] ~ d#4 ~ [g#4,b4] ~ [g#4,b4] ~ [g#4,b4] ~ d#4 ~ [g#4,b4] ~ [g#4,b4] ~", // G#m
  G: "[f#4,a4] ~ c#4 ~ [f#4,a4] ~ [f#4,a4]@3 ~ c#4 ~ [f#4,a4] ~ [g#4,a4] ~", // F#m Amaj7
  H: "[f#4,a4] ~ c#4 ~ [f#4,a4] ~ [f#4,a4]@3 ~ c#4 ~ [f#4,a4]@3 ~", I: "~@4 [e5,g#5,b5]@9 ~@3",
  J: "~@4 [c#5,f#5,a5]@9 ~@3", K: "[b4,d#5,g#5]@11 ~@5",
  L: "~@4 [c#5,f#5] ~ g#5 ~ [c#5,f#5,a5] ~ [e5,a5,c#6]@5 ~, ~@2 a5 ~@5", // F#5 F#m A
  M: "[c#5,f#5] ~ g#5 ~ [c#5,f#5,a5] ~ e5 ~ e5@5 ~@3, a5@2 ~@4 [a5,c#6]@7 ~@3", // F#5 F#m A
  N: "[g#4,b4] ~ e4 ~ [g#4,b4] ~ [g#4,b4]@3 ~ d#4 ~ [g#4,b4] ~ [g#4,b4] ~", O: "~@4 [c#5,a5,c#6]@9 ~@3",
  P: "~ [c#5,f#5,a5]@2 ~", Q: "~ [e5,g#5,b5]@2 ~", R: "[c#5,f#5] ~ g#5 ~ [c#5,f#5,a5] ~ [e5,a5,c#6]@7 ~@3, a5 ~@7",
  S: "[f#4,a4] ~ c#4 ~ [f#4,a4] ~ [f#4,a4] ~ [f#4,a4] ~ c#4 ~ [f#4,a4] ~ [f#4,a4] ~", T: "[g#5,b5]@11 ~@5",
  U: "[e5,a5]@11 ~@5", V: "[f#5,a5]@11 ~@5", W: "a5@5 ~@3 [f#5,b5]@5 ~@3", X: "[c#5,e5,a5]@11 ~@5",
  Y: "~ [c#5,e5,a5]@7", Z: "[~@11 [c#5,e5,a5]@8 ~@13]/2",
})).s("gm_piano").gain(0.27).pan(0.3)

// bass · synth bass 2 · "Bass"
const bass = note("<~@11 A B C D E@66 ~ E@8 F G H I J D J K F G H I J D J K E D J L M N@2>".pickRestart({
  A: "~@8 b3 ~ c#4 ~ b3 ~ e4@2", B: "~@2 d#4@3 ~ b3@5 ~ b2@3 ~", C: "[e2,e3]@11 ~@5", D: "f#2@11 ~@5", E: "e2@11 ~@5",
  F: "[e2,b2,e3]@11 ~@5", G: "[c#3,e3]@11 ~@5", H: "[b2,e3]@11 ~@5", I: "[a2,c#3]@11 ~@5", J: "g#2@11 ~@5",
  K: "a2@5 ~@3 b2@5 ~@3", L: "[a2,c#3,e3]@11 ~@5", M: "~ [a2,c#3,e3]@7", N: "[~@11 a3@8 ~@13]/2",
})).s("gm_synth_bass_2").gain(0.27).pan(0.7)

// other · drawbar organ · "Organ"
const drawbar_organ = note("<~@44 A@17 ~@10 A@17 ~@2 B C B D E F E G B C B D E F E G H I J K L@3>".pickRestart({
  A: "~@2 b2 ~ e3 ~ b2 ~ e3 ~ b2 ~ e3 ~ b2 ~", B: "~@2 g#3 ~ b3 ~ g#3 ~ b3 ~ g#3 ~ b3 ~ g#3 ~",
  C: "~@2 a3 ~ c#4 ~ a3 ~ c#4 ~ a3 ~ c#4 ~ a3 ~", D: "~@2 e3 ~ a3 ~ e3 ~ a3 ~ e3 ~ a3 ~ e3 ~",
  E: "g#3 ~ e3 ~ g#3 ~ e3 ~ g#3 ~ e3 ~ g#3 ~ e3 ~", F: "f#3 ~ c#3 ~ e3 ~ c#3 ~ e3 ~ c#3 ~ e3 ~ c#3 ~",
  G: "a3 ~ e3 ~ b3 ~ e3 ~ b3 ~ f#3 ~ b3 ~ f#3 ~", H: "e3 ~ b2 ~ e3 ~ b2 ~ e3 ~ b2 ~ e3 ~ b2 ~",
  I: "e3 ~ c#3 ~ e3 ~ c#3 ~ e3 ~ c#3 ~ e3 ~ c#3 ~", J: "g#3 ~ e3 ~ g#3 ~ e3 ~ g#3 ~ e3 ~ g#3@3 ~",
  K: "a2@5 ~@3 c#3@6 ~@2", L: "[~@2 e3@7 ~@4 a3@8 ~@6 [a2,c#3,e3]@5 ~@16, ~@27 a3@8 ~@13]/3",
})).s("gm_drawbar_organ").gain(0.21)

// other · brass section · "Brass"
const brass_section = note(`<
  ~@44 A B C D A B C E A B C F A B C G H ~@10 A I C J A@2 C J A K C J L B C J M ~@2 N O P Q R S R T N O P Q R S R T R S
  U V W X ~
>`.pickRestart({
  A: "~@4 [e5,g#5,b5]@9 ~@3", B: "~@4 [c#5,f#5,a5]@9 ~@3", C: "[b4,d#5,g#5]@11 ~@5",
  D: "~@4 [c#5,f#5] ~ g#5 ~ [c#5,f#5,a5] ~ [e5,a5,c#6]@2 [e5,a5,c#6]@3 ~, ~@2 a5 ~@5", // F#5 F#m A
  E: "~@4 a5@2 g#5 ~ f#5 ~ c#6@5 ~", F: "~@4 a5@2 g#5 ~ [f#5,a5] ~ [e5,c#6]@5 ~, ~@4 f#5 ~@11",
  G: "~@4 a5@2 g#5 ~ a5 ~ c#6@5 ~", H: "a5@2 g#5 ~ a5 ~ c#6@7 ~@3", I: "~@4 [c#5,a5,c#6]@9 ~@3",
  J: "~@4 [c#5,f#5] ~ g#5 ~ [c#5,f#5,a5] ~ [e5,a5,c#6]@5 ~, ~@2 a5 ~@5", K: "~ [c#5,f#5,a5]@2 ~",
  L: "~ [e5,g#5,b5]@2 ~", M: "[c#5,f#5] ~ g#5 ~ [c#5,f#5,a5] ~ [e5,a5,c#6]@7 ~@3, a5 ~@7",
  N: "~@2 e5 ~ b4 ~ e5 ~ b4 ~ f#5 ~ b4 ~ e5 ~", O: "~@2 c#5 ~ a4 ~ c#5 ~ a4 ~ c#5 ~ a4 ~ c#5 ~",
  P: "~@2 e5 ~ b4 ~ e5 ~ b4 ~ e5 ~ b4 ~ e5 ~", Q: "~@2 c#5 ~ a4 ~ c#5 ~ a4 ~ d#5 ~ a4 ~ c#5 ~",
  R: "b4 ~ e5 ~ b4 ~ e5 ~ b4 ~ e5 ~ b4 ~ e5 ~", S: "a4 ~ c#5 ~ a4 ~ c#5 ~ a4 ~ c#5 ~ a4 ~ c#5 ~",
  T: "c#5 ~ e5 ~ c#5 ~ e5 ~ b4 ~ e5 ~ b4 ~ e5 ~", U: "b4 ~ e5 ~ b4 ~ e5 ~ b4 ~ e5 ~ b4@3 ~", V: "a5!8 [e5,a5] e5!7",
  W: "e5!2 c#5!11 a4!3", X: "a4!11 a4@5",
})).s("gm_brass_section").gain(0.28).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@13 A@3 B A@7 B A@6 B A@3 B A@7 B A@3 B A@7 B A@6 B A@3 B A@3 B A@3 B A@7 B A@6 C A@3 C A@3 C A@3 C A@3 C A@2 D C ~ E
  ~
>`.pickRestart({
  A: "x!2", B: "x ~@3 x ~@2 x", C: "x", D: "x ~@2 x!2 ~@3", E: "~@11 x ~@4",
})).gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@12 A B@80 C B@3 D B@3 C B@3 C B@2 E ~@4>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x!3", D: "~@4 x ~@3 x ~ x!3 ~@3", E: "~@4 x ~@5 x!3 ~@3",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@12 A ~@76 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2 B ~@4>".pickRestart({
  A: "~@7 x", B: "~@14 x!2",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@89 A ~@3 B ~@7 B ~@3 B ~@7>".pickRestart({
  A: "~@8 x ~ x!2 ~@4", B: "~@10 x!2 ~@4",
})).gain(0.32)

// drums · crash
const crash = s("cr").struct(`<
  ~@13 A ~@3 A ~@7 A ~@6 A ~@3 A ~@7 A ~@3 A ~@7 A ~@6 A@2 ~@2 A@2 ~@2 A ~@3 A ~@7 A ~@6 A@2 ~@2 A@2 ~@2 A@2 ~@2 A@2 ~@2
  A@4 ~ B ~
>`.pickRestart({
  A: "x", B: "~@11 x ~@4",
})).gain(0.28)

// drums · ride
const ride = s("rd").struct("<~@13 [x!8]!96 [x!2 ~@6] ~@3>").gain(0.32)

stack(piano, bass, drawbar_organ, brass_section, kick, snare, low_tom, mid_tom, crash, ride)

More by Yes