Strudelify
Sad Eyes cover art

1979 · Classic Masters

Sad Eyes

Robert John

KeyC majorTempo107 bpm
0:00/0:00
// Sad Eyes — Robert John
// 107 bpm, 12/8, key C major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 61 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(107/6)

// 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.

// bass · electric bass finger · "Staff-3"
const bass = note(`<
  ~@4 A@4 B C D E B C F G H@2 I J K L M N O P Q R S T Q R U V W@2 X J O L M N K Y Z AA AB AC Z AA AB AD@2 AE AF AG AH AE
  AI ~@2
>`.pickRestart({
  A: "[~ c2@6 c2@6 d2@6 d3@6 f2@6 f3@6 g1@7 g1!3 a1]/4", B: "c2 c2@5 c2 c2@4 g1", C: "a1 c2@5 c2 c2@3 g1 a1",
  D: "d2 c2@5 c2 c2@4 g1", E: "a1 c2@3 ~@3 g1!4 a1", F: "d2 c2@3 c2@2 c2 c2@4 g1", G: "a1 g1@3 g1!2 d2 g1@3 g1@2",
  H: "[g1 d2@10 d1@2 f1@6 a1!5]/2", I: "f1 c2@3 c2@2 a2 g2 ~@2 g2 a2", J: "c2 d2@3 d2@2 a2 g2 ~@2 g2 c3",
  K: "a2@2 f2@6 f2@4 d3@2 c3 ~@5 c3@4", L: "g2@2 c3@6 c3@2 e2@2 f2@2 g2 ~ g2@2 g2@2 g2 ~ a2@2",
  M: "c3@2 c2@6 c2@4 a2@2 g2 ~@5 g2@2 a2@2", N: "c2@2 d2@6 d2@4 a2@2 g2 ~@5 g2@2 c3@2",
  O: "a2 f2@3 f2@2 d3 c3 ~@2 c3@2", P: "g2 c3@7 g2!3 a2", Q: "c3 c3@5 c3 c3@4 g2", R: "a2 c3@5 c3 c3@3 g2 a2",
  S: "d3 c3@5 c3 c3@4 g2", T: "a2 c3@3 ~@3 g2!4 a2", U: "d3 c3@3 c3@2 c3 c3@4 g2", V: "a2 g2@3 g2!2 d3 g2@3 g2@2",
  W: "[g2 d3@10 d2@2 f2@6 a2!5]/2", X: "f2 c2@3 c2@2 a2 g2 ~@2 g2 a2", Y: "g2 c3@6 g2!4 a2",
  Z: "c3 c2@3 c2@2 a2 g2@3 g2 a2", AA: "c2 d2@3 d2@2 a2 g2@3 g2 c3", AB: "a2 f2@3 f2@2 d3 c3@3 c3@2",
  AC: "g2 c3@3 c3 e2 f2 g2!4 a2", AD: "[g2 c3!4 e2 g2 a2@2 [g1,g2]@2 [a1,a2]@2 d2@3 d2@2 b2 a2@3 a2@2]/2",
  AE: "d2 e2@3 e2@2 b2 a2@3 a2@2", AF: "a2 g2@3 g2@2 e3 d3@4 b2", AG: "a2 d3@3 f#2 g2 g#2 a2!4 b2",
  AH: "a2 d2@3 d2@2 b2 a2@3 a2@2", AI: "a2 ~@11",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · vibraphone · "Staff-4"
const vibraphone = note("<A B C@8 D@4 E@3 ~@8 F@3 G@4 E@3 ~@26>".pickRestart({
  A: "e3 [e3,g3,c4] [e3,g3,c4,e4]@12 [e3,g3,b3,d4]@8 ~@2", B: "~ e4@6 [f3,a3,c4,d4]@4 ~, f3@7 ~@5, ~ [a3,c4]@13 ~@10",
  C: "[f3 [f3,a3,c4] [f3,a3,c4,e4]@6 [f3,a3,c4,d4]@18 [c3,e4]@12 [f3,a3]@6 [f3,c4]@6 e4@12 [g3,b3,d4]@12 [f3,a3,c4,e4]@12 [f3,a3,c4,d4]@12 [f3,a3,c4,e4]@6 [f3,a3,c4,d4]@18 [e3,g3]@24 [e3,g3]@24 [a3,c4,f4]@16 c3@4 a3@2, ~@25 e3@12 ~@59]/8", // F Fmaj7 Dm7 C F F5 G Fmaj7 …
  D: "[c4 [f3,a3]@12 [g3,c4]@12 [g3,c4]@12 f4@8 c3@2 a3]/4", E: "[c4 [f3,a3]@12 [g3,b3]@12 ~@11]/3",
  F: "[~@5 g3 c4 [c3,f3,a3]@2 [f3,a3,c4]@2 [a3,c4,f4]@2 [e3,g3]@12 [a3,c4,f4]@8 c3@2 a3]/3", // F Em F
  G: "[c4 [f3,a3]@12 [g3,c4]@12 [g3,c4]@12 [a3,c4,f4]@8 c3@2 a3]/4", // F C5 F
})).s("gm_vibraphone").gain(0.32).pan(1)

// chords · vibraphone · "Staff-5"
const vibraphone_2 = note("<A@4 B C D@2 E@8 F G@8 H I@8 F J@8 K ~@17>".pickRestart({
  A: "[~@2 [c5,e5]@8 c5@2 e5@2 [b4,d5]@12 d5@8 c5@2 e5@2 d5@12 [f4,a4,c5,e5]@6 [f4,a4,c5,d5]@6 [f4,a4,c5,d5]@6 [f4,a4,c5,d5]@6 d5 e5 d5@2 c5@4 ~@2 c5@2 f4@2 a4@2 c5@2 f4@2 a4@2, ~ c4@12 d4@12 ~@12 e4@6 ~@5, ~@37 g4@4 g4@2 ~@5]/4", // C Bm Fmaj7 Dm7
  B: "c5 c5@4 c5 e5 b4@3 e4 g4, ~ c4@9 ~@2", C: "b4 d5@4 c5 e5 d5@2 d5 c5 a4, ~ d4@8 ~@3",
  D: "[f4 [f4,a4,c5,e5]@3 [f4,a4,c5,d5]@3 [f4,a4,c5,d5]@3 [f4,a4,c5,d5]@3 e5 d5 c5@2 ~ c5 f4 a4 c5 f4 a4, ~@13 e4@6 ~@5, ~@13 g4@4 g4@2 ~@5]/2", // Fmaj7 Dm7
  E: "[c5 ~@4 [g4,c5,e5]@2 [c5,e5,a5]@6 [a4,c5]@6 [f4,a4]@6 [c5,f5,a5]@6 [a4,c5]@6 ~@6 [c5,f5,a5]@2 [f5,a5,c6]@2 [c5,f5,a5]@2 ~@3 [g4,c5,e5]@3 [e5,g5,c6]@2 [c5,e5,a5]@4 [a4,c5]@6 [f4,a4]@6 [c5,f5,a5]@6 [a4,c5]@6 [g4,b4]@2 [g4,b4]@2 [g4,b4]@2 [g4,c5] d4 [g4,c5]@2 [g4,b4]]/8", // C Am F Am F C Am F …
  F: "~ [a4,c5]@11", // Am
  G: "[~ [f4,a4,c5,f5]@12 [e4,g4,c5,e5]@5 [e4,g4,b4,d5] [e4,g4,b4,d5]@4 [e4,g4,b4,d5]@2 [f4,a4,c5]@6 [f4,a4,c5,d5]@6 [f4,a4,c5,e5]@6 [f4,a4,c5]@6 [e4,g4,c5] [f4,a4] [e4,g4]@4 [f4,a4,d5]@3 [f4,a4,c5,e5]@3 [e4,g4,c5,e5]@5 [e4,g4,b4,d5] [e4,g4,b4,d5]@4 [e4,g4,b4,d5]@2 [f4,a4,c5]@6 [f4,a4,c5,d5]@6 [f4,a4,c5,e5]@6 [f4,a4,c5]@5]/8", // F C Em7 F Dm7 Fmaj7 F C …
  H: "~ [e4,g4] [f4,a4] [e4,g4,c5]@6 ~@3", // Em F C
  I: "[~@5 [g4,c5,e5]@2 [c5,e5,a5]@6 [a4,c5]@6 [f4,a4]@6 [c5,f5,a5]@6 [a4,c5]@6 ~@6 [c5,f5,a5]@2 [f5,a5,c6]@2 [c5,f5,a5]@2 ~@3 [g4,c5,e5]@3 [e5,g5,c6]@2 [c5,e5,a5]@4 [a4,c5]@6 [f4,a4]@6 [c5,f5,a5]@6 [a4,c5]@6 [g4,b4]@2 [g4,b4]@2 [g4,b4]@2 [g4,c5] d4 [g4,c5]@2 [g4,b4]]/8", // C Am F Am F C Am F …
  J: "[~@2 [f4,a4,c5,f5]@24 [e4,g4,c5,e5]@10 [e4,g4,b4,d5]@2 [e4,g4,b4,d5]@8 [e4,g4,b4,d5]@4 [f4,a4,c5]@12 [f4,a4,c5,d5]@12 [f4,a4,c5,e5]@12 [f4,a4,c5]@12 [e4,g4,c5]@2 [f4,a4]@2 [e4,g4]@8 [f4,a4,d5]@6 [f4,a4,c5,e5]@6 [e4,g4,c5,e5]@10 d5 b4 [e4,g4,b4,d5]@8 [e4,g4,b4,d5]@4 [f4,a4,c5]@8 a4@2 c5@2 [f4,a4,c5,d5]@12 [f4,a4,c5,e5]@12 [f4,a4,c5]@10]/8", // F C Em7 F Dm7 Fmaj7 F C …
  K: "~ [e4,g4] [f4,a4] [e4,g4,c5]@4 ~@5", // Em F C
})).s("gm_vibraphone").gain(0.56).pan(0)

// chords · electric guitar clean · "Staff-7"
const electric_guitar_clean = note(`<
  ~@8 A B@2 C A B@2 ~@3 D E F G D E F E A B@2 C A B@2 ~@3 D E F G D E F E D E F G D E F E H I J K H I ~@3
>`.pickRestart({
  A: "~@8 [g4,c5,e5] ~ [g4,c5,e5] ~@9 [g4,c5,e5] ~ [g4,c5,e5] ~", // C
  B: "~@8 [a4,c5,f5] ~ [a4,c5,f5] ~@9 [a4,c5,f5] ~ [a4,c5,f5] ~", C: "~@8 [g4,c5,e5] ~ [g4,c5,e5] ~@13",
  D: "~@8 [g4,c5,e5] ~ [g4,c5,e5] ~@9 [g4,b4,d5] ~ [g4,b4,d5] ~", // C G
  E: "~@8 [f4,a4,c5] ~ [f4,a4,c5] ~@9 [f4,a4,c5,d5] ~ [f4,a4,c5,d5] ~", // F Dm7
  F: "~@8 [f4,a4,c5,e5] ~ [f4,a4,c5,e5] ~@9 [f4,a4,c5] ~ [f4,a4,c5] ~", // Fmaj7 F
  G: "~@8 [e4,g4,c5] ~ [e4,g4,c5] ~@9 [f4,a4,c5,e5] ~ [f4,a4,c5,e5] ~", // C Fmaj7
  H: "~@8 [a4,d5,f#5] ~ [a4,d5,f#5] ~@9 [a4,c#5,e5] ~ [a4,c#5,e5] ~", // D A
  I: "~@8 [b4,d5,f#5] ~ [b4,d5,f#5] ~@9 [b4,d5,e5] ~ [b4,d5,e5] ~", // Bm E7
  J: "~@8 [b4,d5,f#5] ~ [b4,d5,f#5] ~@9 [g4,b4,d5] ~ [g4,b4,d5] ~", // Bm G
  K: "~@8 [f#4,a4,d5] ~ [f#4,a4,d5] ~@9 [g4,b4,d5] ~ [g4,b4,d5] ~", // D G
})).s("gm_electric_guitar_clean").gain(0.4)

// chords · electric guitar clean · "Staff-7" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@8 A B C D A B C E ~@2 A F G H I F G J K B C D A B C E ~@2 A F G H I F G J K F G H I F G J L M N O P M Q ~@2
>`.pickRestart({
  A: "~@12 [g4,c5,e5] ~@11", B: "[g4,c5,e5] ~@11 [a4,c5,f5] ~@11", C: "[a4,c5,f5] ~@11 [a4,c5,f5] ~@11",
  D: "[a4,c5,f5] ~@11 [g4,c5,e5] ~@11", E: "[a4,c5,f5] ~@23", F: "[g4,b4,d5] ~@11 [f4,a4,c5] ~@11",
  G: "[f4,a4,c5,d5] ~@11 [f4,a4,c5,e5] ~@11", H: "[f4,a4,c5] ~@11 [e4,g4,c5] ~@11",
  I: "[f4,a4,c5,e5] ~@11 [g4,c5,e5] ~@11", J: "[f4,a4,c5] ~@11 [f4,a4,c5] ~@11",
  K: "[f4,a4,c5,d5] ~@11 [g4,c5,e5] ~@11", L: "[f4,a4,c5,d5] ~@11 [a4,d5,f#5] ~@11",
  M: "[a4,c#5,e5] ~@11 [b4,d5,f#5] ~@11", N: "[b4,d5,e5] ~@11 [b4,d5,f#5] ~@11", O: "[g4,b4,d5] ~@11 [f#4,a4,d5] ~@11",
  P: "[g4,b4,d5] ~@11 [a4,d5,f#5] ~@11", Q: "[b4,d5,e5] ~@23",
})).s("gm_electric_guitar_clean").gain(0.08)

// chords · string ensemble 2 · "Staff-8"
const string_ensemble_2 = note("<~@4 A@4 B@7 C@2 D@8 E@8 C@2 F@8 G@8 H@8 ~@2>".pickRestart({
  A: "[~ c4@12 d4@12 f4@12 c4@6 f4@5]/4",
  B: "[~ [c4,e4]@12 [c4,f4]@24 e4@6 f4@6 [c4,e4]@12 [c4,f4]@23, ~@37 c4@12 ~@35]/7", // C F5 C F5
  C: "[~ [b3,d4,g4]@12 [d4,a4]@11]/2", // G D5
  D: "[~ [f4,a4,c5]@12 [c4,e4,a4]@12 [c4,f4,a4]@12 [c4,f4,a4]@12 [c4,e4,g4]@6 [f3,a3,d4]@3 [f3,a3,c4,e4]@3 [c4,e4,a4]@12 [c4,f4,a4]@12 [c4,f4,a4]@11]/8", // F Am F C Dm Fmaj7 Am F
  E: "[~ [c4,e4,g4]@6 [c4,f4,a4]@2 [f4,a4,c5]@4 [c4,e4]@12 [c4,f4]@24 e4@6 f4@6 [c4,e4]@12 [c4,f4]@23, ~@49 c4@12 ~@35]/8", // C F C F5 C F5
  F: "[~ [f4,a4,c5]@12 [c4,e4,a4]@12 [c4,f4,d5]@12 [c4,f4,a4]@12 [c4,e4,g4]@6 [f3,a3,d4]@3 [f3,a3,c4,e4]@3 [c4,e4,a4]@12 [c4,f4,a4]@12 [c4,f4,a4]@11]/8", // F Am Dm7 F C Dm Fmaj7 Am …
  G: "[~ [c4,e4,g4]@6 [c4,f4,a4]@2 [f4,a4,c5]@4 [c4,e4,a4]@12 [c4,f4,a4]@12 [c4,f4,a4]@12 [c4,e4,g4]@6 [f3,a3,d4]@3 [f3,a3,c4,e4]@3 [c4,e4,a4]@12 [c4,f4,a4]@12 [c4,f4,a4]@11]/8", // C F Am F C Dm Fmaj7 Am …
  H: "[~ [c4,e4,g4]@6 [c4,f4,a4]@2 [a3,c4,g4]@2 [a3,c4,f4]@2 [a3,d4,f#4]@6 [a3,c#4,e4]@6 [b3,d4,f#4]@6 [b3,d4,e4]@6 [b3,d4,f#4]@6 [g3,b3,d4]@6 [f#3,a3,d4]@6 [g3,b3,d4]@6 [a3,d4,f#4]@6 [a3,c#4,e4]@6 [b3,d4,f#4]@6 [b3,d4,e4]@6 ~@11]/8", // C F Am7 F D A Bm E7 …
})).s("gm_string_ensemble_2").gain(0.48)

// chords · distortion guitar · "Staff-9"
const distortion_guitar = note("<~@43 A B@3 C@4 D@3 ~@7>".pickRestart({
  A: "~@7 g3 a3 c4 e4 g4",
  B: "[a4@2 [e4,g4,c5,e5]@10 [e4,g4,b4,d5]@2 [e4,g4,b4,d5]@8 [e4,g4,b4,d5]@4 [f4,a4,c5]@12 [f4,a4,c5,d5]@8 ~ [c5,d5]@3 [f4,a4,c5,e5]@8 c5@2 e5@2 [f4,a4,c5]@8 f4@2]/3", // C Em7 F Dm7 Csus2 Fmaj7 F
  C: "[a4 [e4,g4,c5] [f4,a4] [e4,g4]@4 [f4,a4,d5]@3 [f4,a4,c5,e5]@3 [e4,g4,c5,e5]@5 [e4,g4,b4,d5] [e4,g4,b4,d5]@4 [e4,g4,b4,d5]@2 [f4,a4,c5]@4 [f4,a4,c5]@2 [f4,a4,c5,d5]@6 [f4,a4,c5,e5]@3 e5 c5 a4 [f4,a4,c5]@5]/4", // C F Em Dm Fmaj7 C Em7 F …
  D: "[[f4,a4] [e4,g4] [f4,a4] [e4,g4,c5]@6 [a4,c5,g5]@2 [a4,c5,f5]@2 [a4,d5,f#5]@6 e5@6 ~@11]/3", // F Em F C Am7 F D
})).s("gm_distortion_guitar").gain(0.64)

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

// drums · snare
const snare = s("sd").struct("<~@7 A B ~@8 A B ~@2 A B ~@12 A B ~@24>".pickRestart({
  A: "~@9 x!3", B: "x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@4 A@3 B C@8 ~ D E F@2 G C H C@10 ~ D C@22 ~@3>".pickRestart({
  A: "~ x ~@5 x ~@4", B: "~ x ~@8 x!2", C: "~ x!3 ~ x!3 ~ x!3", D: "~@10 x!2", E: "~ x!3 ~@2 x!4 ~@2",
  F: "x!4 ~@2 x!4 ~@2", G: "x!4 ~@3 x ~@2 x!2", H: "~ x!3 ~ x!3 ~ x ~ x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A B@7 ~@2 A B@3 A C B@10 ~@2 A B@21 ~@3>".pickRestart({
  A: "x ~@4 x ~@5 x", B: "~@5 x ~@5 x", C: "~@5 x ~@4 x ~",
})).gain(0.56)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~@4
  [~@2 x ~@2 x]!3
  [~ x ~]
  ~@8
  [~ x ~@2 x ~@2 x ~@2 x ~]!2
  ~@16
  [~ x ~@2 x ~@2 x ~@2 x ~]!2
  ~@25
>`).gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@18 A@8 ~@10 A@15 B C A@3 C A ~@3>".pickRestart({
  A: "~ x ~@10", B: "~ x ~@7 x ~ x", C: "~ x ~@2 x ~@7",
})).gain(0.56)

stack(
  bass, vibraphone, vibraphone_2, electric_guitar_clean, electric_guitar_clean_2, string_ensemble_2, distortion_guitar,
  kick, snare, hihat, open_hat, ride_bell, crash
)

More by Robert John