Strudelify

You Are So Beautiful

Joe Cocker

KeyG majorTempo60 bpm
0:00/0:00
// You Are So Beautiful — Joe Cocker
// 60 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 40 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(60/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@2 C D E F G H I F J K L M N O P Q@2 R E S T R E S T U V W N X Y@2 T E S Z ~>".pickRestart({
  A: "[b3,d4,a4]@2 b4@2 [b3,d4,b4]@2 [b3,a4]@2 a4 b4!2 ~ b4 [d5,g5] d4@2, [g2,g3]!2 [g2,f3,b3,d4,d5] [g2,f3], ~@11 a4@2 ~@3, ~@6 [b3,d4] ~", // Bm7 Bm B7 G5 G G7 Bm
  B: "[f#4 ~@5 g3@2 d4 ~ c4@2 ~@3 a4 ~@2 b4@2 [g3,b3,d4,b4]@2 [b3,a4]@2 a4 b4 ~ a4 b4 ~ d4@2, [c2,b4]@4 c2@3 g3 [g2,g3,b3,d4,a4]@2 g2@2 [g2,f3,b3,d4,d5]@2 g2@2, g3@2 [e3,c4]@2 [c3,g3]@2 c3@4 ~@4 [f3,b3,d4] ~, [e3,c4]@2 e4@6 c4 e4@3 [e3,g3,c4,d4]@2 [c4,g4]@6 ~@12, ~ g4@7 g4@5 e4@7 ~@6 b4@2 ~ [d5,g5]@2 ~]/2", // G B7 Cmaj7 G G7 C C5 Bdim …
  C: "a4 ~ [g4,c5]@2 [e3,c4,g4,c5]@2 [g3,e4]@2 [c3,g3,c4,g4,c5]@3 c4 d4 ~ [g3,c4]@2, c2!2, [e3,g3,c4,d5] ~@2 [c3,e3,g4], ~ b4@3 ~@8 [g3,c4]@2 ~@2, ~@13 e4@2 ~", // C5 C C5 C C5
  D: "~@3 d3 ~ d3 ~ d3, g2!2, [g3,b3,d4,g4]!2 [g3,b3,d4,f#4] [g3,b3,d4,f4], ~ d3@2 ~@5", // G Gmaj7 G7
  E: "~@3 g3 c4 ~@2 g4, g4@3 e4, [c2,b3,c4,e4] [c2,c3,g3,b3], g3 e3@3, ~ c3@3 e4 c4@3", // Cmaj7
  F: "c3 ~@5 g3@2 [c4,d#4] [a3,c4,d#4]!2 [b3,c4,d#4]!2 [a3,c4,d#4]!2 [g3,c4,d#4], [c2,c4,d#4,g4,a4]@8 g3@7 ~, ~@2 c3@13 ~, ~@4 d#3@11 ~, ~@2 g2 c2", // Cm Adim B Adim Cm Am7b5
  G: "~@3 d3 ~@3 [d3,e4], g2@4 ~ g2@3, [g3,b3,d4,g4]!2 [g3,b3,d4,f#4]!2, ~ g1@3 ~@4", // Dsus2 G Gmaj7
  H: "~ d3 ~ d3 ~ d3 ~ d3, g2!2, [g3,b3,d4,f4]!2 [g3,b3,d4,f#4] [g3,b3,d4,f4]", // G7 Gmaj7 G7
  I: "~@5 g4 ~ b3, [c2,b3,c4,e4,g4]@2 [c2,c4,e4,b4,d5] [g3,g4,c5], g3@6 g3@2 g4 a4@7, ~ c3@3 b3 c3@3, ~ e3@3", // Cmaj7 C5
  J: "~@3 d3 ~@3 [d3,e4], [g3,b3,d4,g4]!2 [g3,b3,d4,f#4]!2, ~@2 g2@7 ~ g2@6", // Dsus2 G Gmaj7
  K: "d3@2 ~ a2 [g2,g3] ~ d2 g2, [d2,c4,d4,f4,a4]@4 ~ g1@2 ~, ~ d3 [b3,d4,g4]@2, ~@5 b2@3 ~@8", // G Dm7 G
  L: "[c3,b3,c4,e4,g4]@2 ~@2 [c3,b3,c4,e4,g4]@2 ~@2 [c3,b3,c4,e4,g4]@2 [c2,e3]@2 e4 ~ c2@2, ~@2 c2@5 g3@4 ~@2 [a3,e4]@3, ~@3 [g2,a3,e4] ~@2 [c3,g3,b3,c4,g4]@2", // Cmaj7 C A5 A7 Cmaj7
  M: "b2@2 ~@2 d3@2 ~ [a2,a3] [d4,f#4]@2 b1@2 ~@2 a1@2, [a3,b3,d4,f#4] ~, ~ b2@3 [b2,b3]@2 ~@2, ~ b1 ~@2, ~@6 f#3@2 [a#2,a#3] ~@3 [a2,b3,d4,f#4]@4", // A D Bm7 B A# Bm7
  N: "e2@2 ~@4 e3@2 ~@2 b2@2 d3 ~@2 b3, [e4,g4,b4]@2 ~ [d4,g4,b4], e3@6 ~@2 [d#3,d#4,g4,b4]@4 ~ d3@3, ~ e2@3 ~@4, ~@2 b2@2 ~@3 g3", // Em G D#aug
  O: "a2@2 ~@2 [c#4,e4]@2 [d4,f#4]@2 [e4,g4] ~ [c#4,e4]@2 ~@2 a2@2, [g3,a3]@6 ~@3 [d4,f#4]@3 ~@4, [c#4,e4]@2 a2@2 a2@3 ~, ~ a1@5 [a1,c#4,e4]@2", // C#m D Em C#m Gsus2 D C#m A
  P: "~@6 d3@2 ~@2 d3@2 [g3,b3,d4,f4]@2 [a1,d3] b1, g2@2 [g2,g3,b3,d4,f#4] ~, [g3,b3,d4,g4]!2 ~@2, ~ d3@2 ~@5", // G7 D5 Gmaj7 G
  Q: "[c2@2 ~@4 c3@2 [a4,b4] a4 ~ g4 ~ d#4 ~@8 d3@2 ~@6 d3@2, [b3,c4,e4,g4]@4 c4@3 [g3,d#4] [g3,b3,d4,g4]@2 [g3,b3,d4,g4]@2 [g3,b3,d4,f#4]@2 [g3,b3,d4,f#4]@2, c3@4 g2@4 d#4@4 [d#3,g4]@5 ~@15, ~@2 c2@6 [c3,g4]@2 [c3,a4]@7 ~ g2@7 ~ g2@6, ~@15 c4@2 ~@15]/2", // Asus2 Cmaj7 Cm G Gmaj7 D# C5 F
  R: "~ d3 ~ d3 ~ d3 ~ d3, g2@2 [g1,g3,b3,d4,f#4] [b1,g3,b3,d4,f4], [g3,b3,d4,f4]!2 ~@2", // Gmaj7 G7
  S: "~@5 d4 d#4 f4, [c2,d#4,g4,a4]@2 c4 ~, c4@6 g3@9 ~, ~ c3@3 c3@4, ~@4 d#3@11 ~", // Am7b5
  T: "~@3 d3 ~@3 d3, [g3,b3,d4,g4]!2 [g3,b3,d4,f#4]!2, ~@2 g2@7 ~ g2@6", // G Gmaj7
  U: "~@3 d3 ~@2 d3 [g3,b3,d4,f4], [c4,d4,f4,a4]@4 [g3,b3,d4,g4]@3 ~, d3@3 ~@5, ~ d2@3 ~@4, ~@2 a2@2 ~ g2@2 ~", // G7 Dm7 G
  V: "~@2 [c3,b3,c4,e4,g4] g2 ~ c2 ~ c2, [c3,b3,c4,e4,g4] ~ [c3,b3,c4,e4,g4]!2, ~ c2@3 ~@4", // Cmaj7
  W: "~@2 b1@2 ~@2 b1@2 ~@2 b1@2 [b2,a3,d4,f#4] [b1,b3] [d2,d4] [d#2,d#4], [b2,a3,b3,d4,f#4]@4 [b2,a3,b3,d4,f#4]@4 [b2,a3,b3,d4,f#4]@5 ~@3", // Bm7 B D D# Bm7
  X: "a2 ~@5 c#4 e4, e4@8 g3@2 a3@5 ~, c#4@6 e3@9 ~, a3@4 a2@11 ~, g3@2 a1@13 ~",
  Y: "[~@3 d3 ~ d3 ~@5 c3!2 ~ d#3 g3, g2@4 g1@4 c3 c2 g2@2 ~@4, [g3,b3,d4,g4]!2 [g3,b3,d4,f#4] [g3,d4,f4]@3 ~@2, ~@2 d3@4 ~@6 b3@4 [b3,c4,e4,g4]@8 [c4,d#4,g4,a4]@7 ~, ~@14 d3@10 ~@2 c3@5 ~]/2", // G Gmaj7 G7 Cmaj7 Am7b5
  Z: "[g3,b3,d4,g4]", // G
})).s("gm_piano").gain(0.8)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@21 A@8 B C B D E@6 ~>".pickRestart({
  A: "[g5,g6]/8", B: "[g5,g6]", C: "[f#5,f#6]", D: "[a5,b6]", E: "[g5,g6]/3",
})).s("gm_string_ensemble_1").gain(0.39).pan(0.7)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note("<~@27 A B C D E F G H I J@2 K ~>".pickRestart({
  A: "~ [b4,d5,f#5]", // Bm
  B: "[a4,c5,d5,f5]@8 [b3,d4,f4] [c4,e4,g4] [d4,f4,a4] [e4,g4,b4] [f4,a4,c5] [g4,b4,d5] [a4,c5,e5] [b4,d5,f5]", // Dm7 Bdim C Dm Em F G Am …
  C: "[c4,c5,e5,g5]", D: "[b3,a4,b4,d5,f#5]", E: "[e4,e5]@2 [d#4,d#5] [d4,d5], [b4,g5]", F: "[e4,g4,a4,c#5,e5]",
  G: "g5@2 f#5 f5, [g3,b4,d5]", H: "[c4,e5,g5] [c5,d#5,g5,a5]", I: "[g4,b4,d5,g5] [f#4,b4,d5,f#5]",
  J: "[[g4,e5] [g4,a4,d#5], [c3,c4,c5]]/2", K: "[g3,b4,d5,g5]",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.6)

// other · timpani · G5
const timpani = note(`<
  ~@28
  [~@8 [d2,g2]!8]
  [[d2,g2] ~@15]
  [~@4 b2 f#2 b2 f#2]
  [e2 ~]
  ~@6
  [[d2,g2]!16]
  [g2 ~@7, d2 ~@15]
>`).s("gm_timpani").gain(0.24).pan(0.7)

// bass · electric bass finger · "BASS"
const bass = note("<~@13 A B C D E A E F G@2 H F G I J K L M N O F I J G@2 E ~>".pickRestart({
  A: "c2", B: "b1", C: "e2", D: "a1", E: "g1", F: "g1@2 g1 b1", G: "c2!2", H: "g1@2 g1 d2", I: "c2@2 c2!2", J: "g1!2",
  K: "d2@2 g1 b1", L: "c2@4 c2@2 g1 c2", M: "b1@4 b1@2 d2 d#2", N: "e2@2 d#2 d2", O: "a1@2 a1 b1",
})).s("gm_electric_bass_finger").gain(0.5).pan(0.2)

// drums · kick
const kick = s("bd").struct("<~@20 [x!2]!18 x ~>").gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@20 [~ x ~ x]!9 ~@11>").gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@29 [~ x ~ x]!9 ~@2>").gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@4 [~@3 x]!16 [x!8]!9 ~@11>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@29 [x!8]!9 x ~>").gain(0.36)

// drums · crash
const crash = s("cr").struct("<~@29 x ~@9 x>").gain(0.4)

stack(piano, string_ensemble_1, string_ensemble_1_2, timpani, bass, kick, rim, snare, hihat, ride, crash)

More by Joe Cocker