Strudelify

Green-Eyed Lady

Sugarloaf

KeyE minorTempo147 bpm
0:00/0:00
// Green-Eyed Lady — Sugarloaf
// 147 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 3/4 at bar 88, 4/4 at bar 89) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 141 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(147/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B A B A C D E ~@3 F G H I J K L M F G H I J K L M F G H I J K L M F G H I J K L M F G H I J K L M L M L M L M L M L
  M L M L M L M L M L M L M L M L M L M L M L M L N L N ~ O P Q R S T U V W P Q R X T Y V W P Q R X T Y V W P Q R X T Y
  V W P Q R X T Y V W P Q R X T Z T Z T AA ~@2
>`.pickRestart({
  A: "~ f#1 g1 g#1 a1 a#1 b1 d2", B: "e2@5 ~@11", C: "e2 ~ d2 ~", D: "g1@5 ~@3 a1@5 ~@3", E: "e1@3 ~@13",
  F: "~@2 e1 ~@2 d2 ~@2", G: "g2 ~@2 d2 ~ a1 a#1 b1", H: "~@2 e1 ~@2 c#2 ~@2", I: "g2 ~@2 c#2 ~ a1 a#1 b1",
  J: "~@2 e1 ~@2 c2 ~@2", K: "g2@2 ~@4 c2@3 ~ a1@2 a#1@2 b1@2", L: "e1@3 ~ a#1@4 b1@4 e1@4",
  M: "g#1@4 a1@3 ~ f#1@2 g1@2 f#1@2 g1@2", N: "g#1@4 a1@3 ~ f#1@2 g1@2 e1 ~@3", O: "~@3 a1 a#1 b1 ~@2",
  P: "e1 ~@2 c#2 ~@2 g2 ~", Q: "~ c#2 ~ a1 a#1 b1 ~@2", R: "e1 ~@2 c2 ~@2 g2 ~", S: "~@2 c2@2 ~@2 a1@2 a#1@2 b1 ~ e1@4",
  T: "a#1 b1 e1 g#1", U: "a1@4 f#1@2 g1@2 f#1@2 g1 ~@5", V: "e1 ~@2 d2 ~@2 g2 ~", W: "~ d2 ~ a1 a#1 b1 ~@2",
  X: "~@2 c2@3 ~ a1@2 a#1@2 b1@2 e1@3 ~", Y: "a1@3 ~ f#1@2 g1@2 f#1@2 g1@2 ~@4",
  Z: "a1@3 ~ f#1@2 g1@2 f#1@2 g1@2 e1@3 ~", AA: "a1@3 ~ f#1@2 g1@2 ~@8",
})).s("gm_acoustic_bass").gain(0.72)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B@2 C@2 D E F ~ G H ~@8 I J K L M N O P I J K L M N O P I J K L M N O P I J K L M N O P Q@2 R@26 O P O P O S O T@3
  ~@6 U V W X Y Z AA AB U V W X Y Z AA AB U V W X Y Z AA AB U V W X Y Z AA AB U V W X Y Z AA AC AA AC AA AD@3
>`.pickRestart({
  A: "~ f#2 g2 g#2 a2 a#2 b2 d3",
  B: "[e3@4 ~@4 [e3,g3,b3] ~@5 [a3,c#4,e4]@4 f#2@2 g2@2 g#2@2 a2@2 a#2@2 b2@2 d3@2, ~@4 d4 ~@11]/2", // Em A
  C: "[e3@4 ~@4 [e3,g3,b3,d4] ~@5 [e3,g3,b3]@4 f#2@2 g2@2 g#2@2 a2@2 a#2@2 b2@2 d3 ~]/2", // Em7 Em
  D: "[e4,g4,b4] ~@3 [a3,d4,f#4] ~@3", E: "[g3,b3,d4] ~@3 [a3,c#4,e4] ~@3", F: "[e3,g3,b3] ~@7",
  G: "[e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~ [e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~ [e4,g4,b4,d5] ~@2", // Em7
  H: "[e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~ [e4,g4,b4,d5] ~@10", I: "~@2 e2 ~@2 d3 ~@2", J: "g3 ~@2 d3 ~ a2 a#2 b2",
  K: "~@2 e2 ~@2 c#3 ~@2", L: "g3 ~@2 c#3 ~ a2 a#2 b2", M: "~@2 e2 ~@2 c3 ~@2", N: "g3@2 ~@4 c3@3 ~ a2@2 a#2@2 b2@2",
  O: "e2@3 ~ a#2@4 b2@4 e2@4", P: "g#2@4 a2@3 ~ f#2@2 g2@2 f#2@2 g2@2", Q: "[[e3,g3,b3,d#4,f#4]@3 ~]/2",
  R: "[[e4,g4,b4]@3 ~ [e4,g4,b4] ~@5 [f#4,a4,c#5] ~@3 [d4,e4,g4,b4,d5]@4 [d4,e4,g4,b4,d5] ~@3 [e4,f#4,a4,c#5]@3 ~ [e4,f#4,a4,c#5]@2 ~@2 [e4,a4,c#5] ~]/2", // Em F#m Em7 F#m7 A
  S: "g#2@4 a2@3 ~ f#2@2 g2@2 e2 ~@3", T: "[g#2@4 a2@3 ~ f#2@2 g2@2 [e3,g3,b3,d#4]@27 ~@9, ~@12 e2 ~@35]/3",
  U: "e2 ~@2 d3 ~@2 g3 ~", V: "~ d3 ~ a2 a#2 b2 ~@2", W: "e2 ~@2 c#3 ~@2 g3 ~", X: "~ c#3 ~ a2 a#2 b2 ~@2",
  Y: "e2 ~@2 c3 ~@2 g3 ~", Z: "~@2 c3@3 ~ a2@2 a#2@2 b2@2 e2@3 ~", AA: "a#2 b2 e2 g#2",
  AB: "a2@3 ~ f#2@2 g2@2 f#2@2 g2@2 ~@4", AC: "a2@3 ~ f#2@2 g2@2 f#2@2 g2@2 e2@3 ~",
  AD: "[a2@3 ~ f#2@2 g2@2 [e3,g3,b3,d#4,f#4]@34 ~@6]/3", // Em
})).s("gm_epiano2").gain(0.54)

// chords · epiano2 · "E.PIANO 2" · soft notes
const epiano2_soft = note("<~@10 A B@2 ~@41 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@62>".pickRestart({
  A: "~@8 [e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~ [e4,g4,b4,d5] ~@2", // Em7
  B: "[e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~ [e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~ [e4,g4,b4,d5] ~@2", // Em7
  C: "~@14 f#4 ~",
})).s("gm_epiano2").gain(0.23)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  A B@2 C@2 D E F ~ G H ~@8 I@2 J@2 K@2 L@2 I@2 J@2 K@2 L@2 M@2 N@2 O@2 P@2 M@2 N@2 O@2 Q@2 R@4 S T U V W X Y Z AA AB AC
  AD AE AF AG AH AI AJ AK AL AM@2 AN@2 AO@8 AP AQ AR AS AT AU AV AW@8 AX@8 AY@4 AZ@8 BA@5 BB@7 ~@4 BC@3
>`.pickRestart({
  A: "~@2 f#2 ~ g2 ~ g#2 ~ a2 ~ a#2 ~ b2 ~ d3 ~",
  B: "[e3@3 ~@5 [e4,g4,b4,d5] ~@5 [e4,a4,c#5]@4 f#2 ~ g2 ~ g#2 ~ a2 ~ a#2 ~ b2 ~ d3 ~]/2", // Em7 A
  C: "[e3@3 ~@5 [e4,g4,b4,d5] ~@5 [e4,g4,b4]@4 f#2 ~ g2 ~ g#2 ~ a2 ~ a#2 ~ b2 ~ d3 ~]/2", // Em7 Em
  D: "[e4,g4] ~@3 [a3,d4,f#4] ~@3", E: "[g3,b3,d4] ~@7 [a3,c#4,e4] ~@7", F: "[e3,g3,b3,d4] ~@15",
  G: "[e5,g5,b5,d6] ~@2 [e5,g5,b5,d6] ~ [e5,g5,b5,d6] ~@2 [e5,g5,b5,d6] ~@2 [e5,g5,b5,d6] ~ [e5,g5,b5,d6] ~@2", // Em7
  H: "[e5,g5,b5,d6] ~@2 [e5,g5,b5,d6] ~ [e5,g5,b5,d6] ~@10", I: "[[e4,g4,b4,d5]@31 ~]/2", J: "[[a4,c#5,e5]@31 ~]/2",
  K: "[[g4,c5,e5]@31 ~]/2", L: "[[e4,b4,d5]@31 ~]/2", M: "[e4,g4,b4,d5]/2", N: "[[g4,a4,c#5,e5]@31 ~]/2",
  O: "[[g4,c5,e5]@15 ~]/2", P: "[[e4,g4,b4,d5,e5]@31 ~]/2",
  Q: "[[e3,e4,g4]@28 [c4,d4] [f3,g3,a3,b3] e3 ~, [b3,d5]@27 ~@5]/2", // Em Csus2 G7 Bm
  R: "[b4@26 ~ c#5 ~@2 e5 ~ f#5 ~ a5 ~ g5 ~@5 a#5 a5@6 ~ [a5,e6] g#5 [a5,e6]@2 g#5 ~ g5 ~ e5 ~ d5 ~ b4 ~, [e4,g4,d#5,f#5]@7 d#5@7 ~@2, ~@13 b4@13 ~@6, ~@42 e6@7 ~@15]/4", // A5
  S: "d5@2 e5 ~ e5 ~@5 d5 e5 g5 e5 b4 ~", T: "d5 ~ e5 ~ g5 ~ b4 ~ a5 ~ b4 ~ b5 ~@3",
  U: "g5 a5 g#5 g5 e5 g#5 g5 e5 d5 ~ c#5 c5 b4 a4 b4 ~", V: "e5 ~ f#5 ~ g5 ~ a5 ~ b5@2 c#6@2 d6@3 ~",
  W: "a#4 a4 g4 a#4 a4 g4 a4 e4 a4 g4 a4 a#4 g4 a4 a#4!2", X: "b4 a#4 d5 ~ d5 a#4 e5@2 a#4 f#5@2 a#4 g5@2 ~@2",
  Y: "[g5,b5] f#5 e5!2 f#5 e5 g5 f#5 e5 f#5 e5 g5 a5 ~ b5@2, ~@3 [g5,b5]@2 ~@11", // G
  Z: "[b5,e6]@3 ~ [b5,e6]@3 ~ [b5,e6]@3 ~ b5 a#5 a5 a#5, a#5 ~@3 d6 ~@7 e6@4", // E5
  AA: "g6 [d6,g6]!6 d6 [d6,g6]!5 g6 [d6,g6] d6", // G5
  AB: "[f6,g6,a6] [c6,d6,e6] [e5,f5,g5,a5,b5] ~@3 e4!2 g4 e4!2 a4 e4 a4 e4 b4", // F C Em
  AC: "a4 e4 d5 e4 d5!2 e4 b4!2 e4 a4 e4 g4 e4 a4 g4", AD: "e4 e5 e4 d5 e4 e5 d5 e4 f#5 e4 g5 e4 e5 e4 d5 e4",
  AE: "a#5 b5 e6 b5 a#5 b5 e6 a5 b5 e6 a#5 a5 g#5 g5 f#5 g5", AF: "e5 d#5 d5 c#5 c5 b4 a#4 a4 g4 f#4 e4 ~ e4 a4 b4 d5",
  AG: "[g5,b5,d6]@3 ~ [g5,b5,d6] ~@3 [f#5,a5,d6] ~ [g5,b5,d6] ~@3 [g5,b5,d6] ~", // G D G
  AH: "~@2 [g5,b5,d6] ~@3 [f#5,a5,c#6]@3 ~ [f#5,a5,c#6] ~@3 [f#5,a5,c#6] ~", // G F#m
  AI: "~@2 [g5,b5,d6] ~ [g5,b5,d6] ~@3 [f#5,a5,d6] ~ [g5,a5,b5,d6] ~@3 [g5,b5,d6]@2", // G D G
  AJ: "~@2 [g5,b5,d6] ~@3 [f#5,a5,c#6]@6 [f5,g5,g#5,a5,a#5,b5,c6] [b4,c5,d5,e5,f5] a4 ~", AK: "[d6,g6]@13 ~ [d6,g6]@2",
  AL: "~@2 [d6,g6] f#6 e6 f#6 e6 d6 ~ d6 ~ d6 e6 d6 b5 ~", AM: "[b4@6 ~@2 a4 ~@3 g4@2 f#4@8 ~@2 f#4@2 g4@2 ~@2 a4@2]/2",
  AN: "[b4@4 a4 b4 ~ f#4@7 ~@2]/2", AO: "[~@96 a5@28 [e3,b3,a4] ~@3, [e4,g4,b4]@31 ~, ~@8 d#5@23 ~, ~@16 f#5@15 ~]/8",
  AP: "[e3,e4] ~@5 [a3,a4] ~@5 [d4,d5] ~@3", AQ: "~@2 [a3,a4] ~@13", AR: "e2 ~@2 c#3 ~@2 g3 ~",
  AS: "~ c#3 ~ a2 a#2 b2 ~@2", AT: "e2 ~@2 c3 ~@2 g3 ~", AU: "~@2 c3@2 ~@2 a2@2 a#2@2 b2 ~ e2@4", AV: "a#2 b2 e2 g#2",
  AW: "[a2@4 f#2@2 g2@2 f#2@2 g2 ~ [e4,g4,b4,d5]@31 ~ [a4,c#5,e5]@31 ~ [g4,b4,c5,e5]@31 ~ [e4,b4,d5]@20]/8", // Em7 A Cmaj7 E7
  AX: "[~@12 [e4,g4,b4,d5]@31 ~ [a4,c#5,e5]@31 ~ [g4,b4,c5,e5]@31 ~ [e4,b4,d5]@20]/8", // Em7 A Cmaj7 E7
  AY: "[~@3 [e4,g4,b4,d5,b5,e6]@8 [g4,a4,c#5,e5,c#6,g6]@5]/4", // Em7 A7
  AZ: "[~@12 [g4,c5,e5]@30 ~@2 [e4,g4,b4,d5,e5]@31 ~ [e4,g4,b4,d5]@32 [g4,a4,c#5,e5]@20, ~@12 e6@95 ~@21, ~@12 c6@32 b5@63 ~@21]/8", // C Em7 A7
  BA: "[~@12 [g4,c5,e5,c6,e6]@31 ~ [e3,e4,g4]@28 [c4,d4] [f3,g3,a3,b3,d5,e5] e3 ~@5, ~@44 [b3,d5,e6]@27 ~@9]/5", // C Em Csus2 Em7 E7
  BB: "[~@2 b6 ~ b6@83 ~@2 c6@2 ~ b6@13 ~@7, ~@44 d6 ~@11]/7",
  BC: "[~@8 [e4,g4,f#5]@31 ~ [g4,c5] [c4,d4,e4,f4] b3 ~@5, ~ [b4,d#5]@4 ~]/3", // Em C5 Dm7 B
})).s("gm_rock_organ").gain(0.72)

// chords · rock organ · "ORGAN 3" · soft notes
const rock_organ_soft = note(`<
  ~@10 A B@2 ~@12 C@2 ~@6 C@2 ~@15 D ~@49 E@3 ~@5 E@3 ~@9 F@3 ~@3 G ~ H@5 I@6 ~ J
>`.pickRestart({
  A: "~@8 [e5,g5,b5,d6] ~@2 [e5,g5,b5,d6] ~ [e5,g5,b5,d6] ~@2", // Em7
  B: "[e5,g5,b5,d6] ~@2 [e5,g5,b5,d6] ~ [e5,g5,b5,d6] ~@2 [e5,g5,b5,d6] ~@2 [e5,g5,b5,d6] ~ [e5,g5,b5,d6] ~@2", // Em7
  C: "[g4@31 ~]/2", D: "~@11 [f4,a4,c5] ~@4", E: "[~@12 g4@31 ~@5]/3", F: "[~@12 [c#6,g6]@31 ~@5]/3",
  G: "~@6 d6 [f4,a4,c5,b5,c6] [g5,a5] f5 [b4,c5] ~@5", // F Gsus2 Cmaj7
  H: "[~@60 f6@8 e6@2 f6@2 ~@2 [g5,a5] [e5,f5] ~@4, ~@3 a6@15 ~@2, ~@28 g#6@42 ~@3 b5@2 ~@5, ~@22 g6@14 e6 ~@3]/5", // Gsus2 Fmaj7
  I: "[~@14 a6@8 ~@55 g5@7 ~@12, ~@8 a#6@8 ~@6 g6@9 ~@6 e6@11 ~@5 c6@10 ~@6 a5@10 ~@17, ~@29 f6@11 ~@5 d6@11 ~@5 b5@11 ~@24]/6",
  J: "~@7 [a4,c#5] ~@8", // A
})).s("gm_rock_organ").gain(0.32)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B C@2 D@2 E F E F E F E F E G E F E F E F E G E F E F E F E G E F E F E F E G E F E F E F E G E G C H C H C H
  C H C H C H C H C H C H C H E F C F C F E G E G E G E I ~ J K@4 G I L I L I L I G I L I L I L I G I L I L I L I G I L
  I L I L I G I L I L I L I G@2 I G@2 M ~ N
>`.pickRestart({
  A: "x ~@3 x ~@2 x", B: "~ x!7", C: "x ~@2 x!3 ~ x", D: "x!4", E: "x ~@2 x ~ x ~ x", F: "x!2 ~ x ~ x ~ x",
  G: "~ x ~ x ~ x ~ x", H: "x!2 ~ x!3 ~ x", I: "~ x ~ x ~ x!2 ~", J: "~@3 x!4 ~", K: "~ x!3 ~ x!2 ~",
  L: "~ x ~ x ~ x!3", M: "~ x ~ x!2 ~@3", N: "~@9 x ~@6",
})).gain(0.7)

// drums · snare
const snare = s("sd").struct("<~ A ~ A ~ B@2 C D B@65 E B F B F B@7 F ~@2 G@49 H ~ I>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x ~ x ~@2 x ~ x", D: "x ~@14 x", E: "~@4 x ~@9 x!2", F: "~ x ~@2", G: "x!2", H: "x",
  I: "~@7 x!2 ~@7",
})).gain(0.7)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~ A ~ A ~@3 B ~@66 C D E D E ~@62>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~ x!3 ~@2 x!2 ~ x ~@2 x!2 ~ x", C: "~@12 x!2 ~@2", D: "~@7 x ~ x ~@6", E: "~@7 x ~@2 x ~ x!4",
})).gain(0.16)

// drums · low tom
const low_tom = s("lt").struct("<~ [~@3 x] ~ [~@3 x] ~@4 [~@14 x!2] ~@132>").gain(0.7)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@5 A@2 ~@46 B C B C B C B C B C B C B C B C B C B C B C ~@11 D ~@2 E@4 ~@45 F ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "~@3 x ~ x ~@2", E: "x!2", F: "~ x ~ x ~@4",
})).gain(0.16)

// drums · mid tom
const mid_tom = s("mt").struct("<~ [~@10 x!2 ~@4] ~ [~@10 x!2 ~@4] ~@4 [~@4 x!4 ~@2 x ~ x!2 ~@2] ~@132>").gain(0.7)

// drums · open hat
const open_hat = s("oh").struct("<~ A ~ A ~@50 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~@63 C ~@2>".pickRestart({
  A: "~@4 x ~@2 x", B: "~@7 x", C: "~ x",
})).gain(0.7)

// drums · high tom
const high_tom = s("ht").struct("<~@8 [x!4 ~@5 x ~@6] ~@132>").gain(0.7)

// drums · crash
const crash = s("cr").struct("<~ [~@4 x ~@2 x] ~ [~@4 x ~@2 x] ~@137>").gain(0.7)

// drums · ride
const ride = s("rd").struct("<~@53 [x!4]!22 ~@11 [~@3 x] ~@51 [~ x] ~@2>").gain(0.7)

stack(
  bass, epiano2, epiano2_soft, rock_organ, rock_organ_soft, kick, snare, snare_soft, low_tom, hihat, hihat_soft,
  mid_tom, open_hat, high_tom, crash, ride
)