Strudelify

I Feel for You

Prince

KeyF♯ majorTempo123 bpm
0:00/0:00
// I Feel for You — Prince
// 123 bpm, 4/4, key F# 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: duplicate parts dropped: ch 13 synth bass 1 (copy of ch 2 electric bass finger)
// note: Full arrangement: all 182 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(123/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 · epiano2
const epiano2 = note(`<
  ~@10 A@2 B@2 A@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 H@2 J K L@2 M N O@2 P Q A@2 B@2 A@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 H@2 J K
  L@2 M N O@2 P Q R@2 S T@3 L@2 M N O@2 P Q L@2 M N O@2 P Q ~@12 U@2 ~@2 V@2 ~@2 U@2 ~@2 V@2 ~@2 W@2 X@2 ~ Y@4 Z@4 AA@4
  ~@41
>`.pickRestart({
  A: "[f#2,g#3,b3,d#4]/2", B: "[f#2,g#3,a#3,f#4]/2",
  C: "[[f#2,g#3,a#3,f#4]@12 [a3,c#4,d4] ~ [a3,c#4,d4,f#4] ~, ~@24 f#4 ~@7]/2", // F# Dmaj7
  D: "[[f#2,g#3,a#3,c#4,f#4]@7 [b1,b2,b3,c#4,d#4,f#4]@9]/2", // F# B
  E: "[[e3,g#3,b3,e4,f#4]@14 [f#3,a#3,c#4,f#4]@9 ~ [e3,a3,c#4,d4,f#4]@2 ~@2 [e3,a3,c#4,d4,f#4]@4]/2", // E F# Dmaj7
  F: "[[f#3,g#3,a#3,c#4,f#4]@7 [b1,b3,c#4,d#4,f#4]@9]/2", // F# B
  G: "[[e3,g#3,b3,e4,f#4]@13 ~ [f#3,a#3,c#4,f#4]@10 [e3,a3,c#4,d4,f#4]@2 ~@2 [e3,a3,c#4,d4,f#4]@2 ~@2]/2", // E F# Dmaj7
  H: "[[f#3,b3,e4,g#4]@7 [f#3,a#3,d#4,f#4]@9]/2", // E D#m
  I: "[[b2,b3,c#4,f#4,a#4]@4 [a#2,a#3,c#4,f#4,g#4]@3 [g#2,b3,d#4,f#4]@4 [c#3,b3,d#4,f#4]@5]/2", // F# G#m7 B
  J: "[b2,b3,c#4,f#4,a#4]@4 [a#2,a#3,c#4,f#4,g#4]@3 [g#2,d#4,f#4], ~@14 b3 ~", K: "~@4 [c#3,b3,d#4,f#4]@11 ~",
  L: "[[f#3,b3,e4,g#4]@3 ~@11 [f#3,c#4,f#4,a#4]@17 ~]/2", M: "~@2 f#4 [e4,g#4]@4 ~, ~@2 b3@5 ~, ~@4 a4 ~@11",
  N: "~@4 [f#4,a4]@2 [e4,g#4]@7 ~@3, ~ b3@2 ~", O: "[[f#3,b3,e4,g#4]@3 ~@11 [f#3,c#4,f#4,a#4]@16 ~@2]/2",
  P: "~@4 [f#4,a4]@2 [e4,g#4]@9 ~, ~@4 b3@11 ~", Q: "~@4 [f#4,a4]@2 [e4,g#4]@7 ~@3, ~@4 b3@9 ~@3",
  R: "[[f#3,b3,e4,g#4]@7 [f#3,c#4,f#4,a#4]@9]/2", S: "[b2,b3,d#4,f#4]@7 ~ [a#2,a#3,c#4,f#4]@6 [g#2,b3,d#4,f#4] ~",
  T: "[~ [c#3,b3,d#4,f#4,a#4]@11]/3", U: "[[e3,g#3,b3,d#4]@3 ~]/2", V: "[[e3,g#3,b3,d#4]@31 ~]/2",
  W: "[e3,g#3,b3,d#4]/2", X: "[[f#2,g#3,a#3,f#4]@15 ~]/2",
  Y: "[~ [f#2,e3,g#3,b3,d#4]@14 [f#2,f#3,a#3,c#4]@18 [g3,b3,d4]@13 ~ [a3,c#4,e4]@7 ~ [b3,d#4,f#4] ~ [b3,d#4,f#4]@7]/4", // Emaj7 F# G A B
  Z: "[~ [f#2,e3,g#3,b3,d#4]@14 [f#2,f#3,a#3,c#4]@18 [g3,b3,d4]@14 [a3,c#4,e4]@8 [b3,f#4] ~ [b3,d#4,f#4]@2 ~@5, ~@55 d#4@2 ~@7]/4", // Emaj7 F# G A B5 B
  AA: "[~ [f#2,e3,g#3,b3,d#4]@14 [f#2,f#3,a#3,c#4]@18 [g3,b3,d4]@14 [a3,c#4,e4]@8 [b3,d#4] ~ [d#4,f#4]@2 ~@5, ~@55 f#4@2 b3 ~@6]/4", // Emaj7 F# G A B D#m
})).s("gm_epiano2").gain(0.36)

// bass · electric bass finger
const bass = note(`<
  ~@10 A B C D E F G H I J K H L M N O P Q R S T Q U V W X Y Z W X AA AB A B C D AC F G H I J K H L M N O P Q R S T Q U
  V W X Y Z AD X AA AB AE AF AG AH@3 AD AI AJ@2 AD AI AJ@2 AK AL AM@2 AD AN AO@2 AP ~ AQ AR AP ~ AS AR AP ~ AQ AR ~@21
  AT AU AT AV@2 AW AT AX AT AW AY@2 AZ ~ BA BB AZ ~ BC BB BD@4 BE@4 BD@4 BE@4 BD@4 BE@4 BD@4 BF@4 ~
>`.pickRestart({
  A: "f#1 f#1@2 ~ d#2 ~ d#2@2 f#1@2 ~@4 f#1@2", B: "~@10 f#1!2 g#1@2 e1 ~", C: "f#1@4 a#1 ~ a#1 ~ d#2@2 ~@4 d#2@2",
  D: "~@6 e2 ~ f#2 ~ b1 c2 c#2 e1 g#1 g1", E: "f#1 ~@3 d#2 ~ d#2@2 f#1@2 ~@4 f#1@2", F: "~@10 f#2!2 g#2@2 e2 ~",
  G: "f#1@2 ~@2 d#2 ~ d#2@2 d#1@2 e1@2 ~@2 f#1@2", H: "~@3 f#1 e1 ~ e1 ~", I: "f#2@2 ~ f#2 d#2@2 c#2@2 f#1@2 ~@4 b1@2",
  J: "~@6 b1 ~ b1@2 ~ b1 f#1@2 f1 ~", K: "e1@2 ~@4 e1 ~ e1@2 ~@4 f#1@2", L: "f#2@2 ~ f#2 d#2 ~ c#2 ~ f#2@2 ~@4 b1@2",
  M: "~@6 b1 ~ b1@2 ~ a1 f#1@2 f1@2", N: "e1@2 ~@4 e1 ~ e1 ~@3 e2@2 f#1@2", O: "~@6 f#1@2 e1@2 ~@2 e1 ~@3",
  P: "f#1!2 ~@4 f#1 ~ f#1!2 ~@4 f#1 ~", Q: "~@6 f#1 ~ f#1!2 ~@4 f#1 ~", R: "b1!2 ~@4 b1 ~ a#1 ~@5 g#1 ~",
  S: "~@6 g#1 ~@3 b1 c2 c#2 e1 g#1 g1", T: "f#1 ~@5 f#1 ~ f#1!2 ~@4 f#1 ~", U: "b1 ~@5 b1 ~ a#1 ~@5 g#1 ~",
  V: "~@4 c#2@11 ~", W: "f#1@2 e1 ~@3 e1 ~ f#1 ~@5 f#1 ~", X: "~@6 e1 ~ f#1 ~@2 e1 f#1@2 f1@2",
  Y: "e1@2 ~@2 b0@2 e1@2 e1@4 ~@2 b0 ~", Z: "e1@3 ~ d1@3 ~ c#1@3 ~ b0@3 ~", AA: "e1@2 ~@2 b0@2 e1@2 e1@5 ~ b0@2",
  AB: "e1@3 ~ d1@3 ~ c#1@3 ~ b0@2 ~@2", AC: "f#1@2 ~@2 d#2 ~ d#2@2 f#1 ~@5 f#1@2",
  AD: "f#1@2 e1 ~@3 e1 ~ f#1 ~@5 f#1@2", AE: "f#1@2 ~ f#1 d#1 ~ c#1 ~ f#1@2 ~@4 f#1 ~",
  AF: "~@6 c#1 d#1 f#1 ~ f#1@2 d#1@2 c#1 ~", AG: "b1@2 ~@4 b1 ~ a#1@2 ~@4 g#1 ~", AH: "[~@4 c#2@43 ~]/3",
  AI: "~@6 e1 ~ f#1@2 ~ e1 f#1@2 f1@2", AJ: "[e1@2 ~@4 f#2@2 e2@2 ~@4 e1@4 e2@2 d1@2 d2 ~ c#1@2 c#2@2 b0@2 b1 ~]/2",
  AK: "f#1@2 e1 ~@3 e1 ~ f#1 ~@5 b1 c2", AL: "c#2@2 ~@4 e1 ~ f#1@2 ~ e1 f#1@2 f1 ~",
  AM: "[e1@2 ~@2 f#2@2 e2 ~@7 e1@4 e2 ~ d1@2 d2 ~ c#1@2 c#2@2 b0@2 b1 ~]/2", AN: "~@6 e1 ~ f#1@3 e1 f#1@2 f1@2",
  AO: "[e1 ~@5 f#2@2 e2@2 ~@4 e1@4 e2@2 d1@2 d2@2 c#1@2 c#2 ~ b0@2 b1 ~]/2", AP: "f#1@5 ~@11", AQ: "e2@3 ~@5",
  AR: "~@4 e2 ~ e2 ~", AS: "e2@5 ~@11", AT: "~ f#1@2 ~@2 c#1 ~ e1 ~ f#1 ~@5 f#1", AU: "~@4 f#1 c#1 ~ e1 ~ f#1 ~@6",
  AV: "[~@4 f#1 c#1@2 e1 ~ f#1 ~@5 e1@2 f#1@2 ~@2 c#1 ~ e1 ~ f#1 ~@5 f#1]/2", AW: "~@4 f#1 c#1 ~ e1 ~ f#1 ~@5 e1",
  AX: "~@4 f#1 c#1@2 e1 ~ f#1 ~ f#2@2 e2 c#2 b1", AY: "[~ f#1 ~@3 c#1 ~ e1 ~ f#1 ~@5 f#1@2 ~@6 f#1 ~ f#1 ~@6]/2",
  AZ: "~ f#1@5 ~@10", BA: "~ e2@6 ~@9", BB: "~@9 e2@2 ~@2 e2@2 ~", BC: "~ e2@5 ~@10",
  BD: "[~ f#1@2 ~@4 e1@2 f#1@2 ~@4 f#1@2 ~@11 e1 f#1@2 f1@2 e1@2 ~@4 g1@2 g#1@2 ~@4 e1@2 ~@8 e2@2 ~@2 e2@2 ~]/4",
  BE: "[~ f#1@2 ~@4 e1 ~ f#1@2 ~@4 f#1@2 ~@11 e1 f#1@2 f1@2 e1@2 ~@4 g1 ~ g#1@2 ~@4 e1@5 ~ d1@3 ~ c#1@3 ~ b0@3]/4",
  BF: "[~ f#1@2 ~@4 e1 ~ f#1@2 ~@4 f#1@2 ~@11 e1 f#1@2 f1@2 e1@2 ~@4 g1 ~ g#1@2 ~@4 e1@5 ~@12]/4",
})).s("gm_electric_bass_finger").gain(0.54)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@8 A B ~@7 C ~@15 A D ~ E F G ~ H I ~@7 C ~@15 A D ~ E F G ~ H I J@3 ~@2 K L ~ E M N ~ H O P ~ E Q R ~ H S T U V W X
  U Y Z X U AA AB ~@19 AC AD ~@12 AE@2 AF@2 AE@2 AG@2 AE@2 AH@2 AE@2 AG@2 AE@2 AI@2 AE@2 AG@2 AE@2 AF@2 AJ@2 AG@2 AE@2
  AK@2 AE@2 AL@2 ~
>`.pickRestart({
  A: "~@13 [e1,f1,g1,a1] [b1,c2,d2,e2] [f2,g2,a2,b2,c3]", // Fmaj7 Cmaj7 F
  B: "[d3,e3,a4,c#5,d5,f#5] [a4,c#5,d5,f#5] ~@6 [a4,c#5,d5,f#5]@2 ~@2 [b4,d#5,e5,g#5]@4", // Dmaj7 Emaj7
  C: "~@4 [a3,c#4,d4] ~ [a3,c#4,d4,f#4] ~, ~@8 f#4 ~@7", D: "[b3,e4,g#4] ~@7, [d3,e3,f3] ~@15",
  E: "~@2 [f#4,a4] [e4,g#4]@5, ~ b3@3", F: "~@2 [f#4,a4] [e4,g#4]@4 ~, ~@2 b3@5 ~", G: "[b3,e4] ~@15, g#4 ~@7",
  H: "~@2 [f#4,a4] [e4,g#4]@5, ~@4 b3@11 ~", I: "~@2 [f#4,a4] [e4,g#4]@4 ~, ~@4 b3@9 ~@3",
  J: "[~@4 a#4@4 f#4 ~ d#4 ~@3 c#4@4 d#4 ~@5 [c#4,f#4]@2 [d#4,g#4] ~ [f#4,b4] ~ [f#4,b4]@7 ~ [g#4,c#5] ~ [f#4,a#4]@2 g#4@2 [c#4,f#4]@3 ~, ~@42 d#4 ~@5]/3", // F#5 G#5 B5 C#5 F# F#5
  K: "~@11 e1 [f1,g1,a1] [b1,c2,d2] [e2,f2,g2,a2] [b2,c3,d3,e3,f3]", L: "[g3,a3,b3] ~@15, [e4,g#4] ~@7",
  M: "~@4 [f#4,a4]@2 ~@6 [e1,f1] [g1,a1] [b1,c2,d2,f2] [g2,a2,b2,c3,d3,e3], ~@2 b3@5 ~, ~@3 [e4,g#4]@4 ~", // F#m Fmaj7 Gsus2 Bdim Cmaj7 E
  N: "[f3,g3,a3,b3,e4] ~@15, g#4 ~@7", // Em
  O: "~@4 [f#4,a4]@2 ~@6 [f1,f#1,g1] [g#1,a1,b1,c2,d2] [e2,f2,g2,a2,b2,c3] [d3,e3,f3,g3,a3,b3,c4], ~@4 b3@9 ~@3, ~@3 [e4,g#4]@4 ~", // F#m G#dim Cmaj7 Dm7 E
  P: "[d4,e4,f4,g4] ~@15, [b3,g#4] ~@7", // Em7 E
  Q: "~@4 [f#4,a4]@2 ~@6 [f1,g1] [a1,b1,c2,d2] [e2,f2,a2,b2,c3] [d3,e3,f3,g3,a3,b3,c4], ~@2 b3@5 ~, ~@3 [e4,g#4]@4 ~", // F#m Fsus2 D7 Fmaj7 Dm7 E
  R: "[b3,d4,e4] ~@15, g#4 ~@7", // E7
  S: "~@4 [f#4,a4]@2 [e4,g#4]@7 [f1,g1,a1,b1] [c2,d2,e2,f2,g2] [a2,b2,c3,d3,e3,f3], ~@4 b3@9 ~@3", // F#m E G7 C Dm7
  T: "[g3,e4,g#4,b4,d#5] ~ [e4,g#4,b4,d#5]!4 ~@2 [e4,g#4,b4,d#5] ~@2 [e4,g#4,b4,d#5] ~@2 [e4,g#4,a#4,d#5]@2", // Emaj7
  U: "~@2 [e4,g#4,a#4,d#5]!4 ~@10", // Emaj7
  V: "[f#4,a4]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@2, [d4,c#5] ~@15", // F#m Dmaj7
  W: "~@2 [d4,f#4,g#4,c#5]!4 ~@2 [d4,f#4,g#4,c#5]@2 ~@2 [f#4,g#4,c#5]@2 ~@2, ~@12 d4 ~@3", // Dmaj7 F#sus2
  X: "[e4,g#4,b4,d#5] ~ [e4,g#4,b4,d#5]!4 ~@2 [e4,g#4,b4,d#5] ~@2 [e4,g#4,b4,d#5] ~@2 [e4,g#4,a#4,d#5]@2", // Emaj7
  Y: "[d4,f#4,a4,c#5]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@2", // Dmaj7
  Z: "~@2 [d4,f#4,g#4,c#5]!4 ~@2 [f#4,c#5]@2 ~@2 [d4,f#4,c#5]@2 ~@2, ~@8 [d4,g#4] ~@3 g#4 ~@3", // Dmaj7 F#5 Dmaj7 Ddim
  AA: "[d4,f#4,a4]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@2, c#5 ~@15", // D Dmaj7
  AB: "~@2 [d4,f#4,g#4,c#5]!4 ~@2 [f#4,g#4,c#5]@2 ~@2 [g#4,c#5]@2 ~@2, ~@8 d4 ~@3 [d4,f#4] ~@3", // Dmaj7 F#sus2 C#5 D
  AC: "~@12 e1 [f1,g1,a1,b1] [c2,d2,e2,f2,g2,a2] [b2,c3,d3,e3,f3,g3]", // G7 Dm7 Cmaj7
  AD: "[a4,c#5,d5,f#5]@3 ~@5 [b4,d#5,e5,g#5]@4 ~ [b4,d#5,e5,g#5]@3, [a3,b3,c4] ~@15", // Dmaj7 Emaj7 Am
  AE: "[~ [e4,g#4,b4,d#5] ~ [e4,g#4,b4,d#5]!4 ~@2 [e4,g#4,b4,d#5] ~@2 [e4,g#4,b4,d#5] ~@2 [e4,g#4,a#4,d#5]@3 ~ [e4,g#4,a#4,d#5]!4 ~@9]/2", // Emaj7
  AF: "[~ [f#4,a4]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@3 ~ [d4,f#4,g#4,c#5]!4 ~@2 [f#4,g#4,c#5]@2 ~@2 [g#4,c#5]@2 ~, ~ [d4,c#5] ~@23 d4 ~@3 [d4,f#4] ~@2]/2", // F#m Dmaj7 F#sus2 C#5 Dmaj7 D
  AG: "[~ [d4,f#4,a4,c#5]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@3 ~ [d4,f#4,g#4,c#5]!4 ~@2 [f#4,c#5]@2 ~@2 [d4,f#4,c#5]@2 ~, ~@25 [d4,g#4] ~@3 g#4 ~@2]/2", // Dmaj7 F#5 Dmaj7 Ddim
  AH: "[~ [f#4,a4]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@3 ~ [d4,f#4,g#4,c#5]!4 ~@2 [f#4,g#4,c#5]@2 ~@2 [f#4,g#4,c#5]@2 ~, ~ [d4,c#5] ~@23 d4 ~@3 d4 ~@2]/2", // F#m Dmaj7 F#sus2 Dmaj7
  AI: "[~ [d4,f#4,a4]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@3 ~ [d4,f#4,g#4,c#5]!4 ~@2 [f#4,g#4,c#5]@2 ~@2 [g#4,c#5]@2 ~, ~ c#5 ~@23 d4 ~@3 [d4,f#4] ~@2]/2", // D Dmaj7 F#sus2 C#5 D
  AJ: "[~ [e4,b4,d#5] ~ [e4,g#4,b4,d#5]!4 ~@2 [e4,g#4,b4,d#5] ~@2 [e4,g#4,b4,d#5] ~@2 [e4,g#4,a#4,d#5]@3 ~ [e4,g#4,a#4,d#5]!4 ~@9, ~ g#4@2 ~@29]/2", // Emaj7
  AK: "[~ [f#4,a4]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@3 ~ [d4,f#4,g#4,c#5]!4 ~@2 [d4,f#4,g#4,c#5]@2 ~@2 [g#4,c#5]@2 ~, ~ [d4,c#5] ~@27 [d4,f#4] ~@2]/2", // F#m Dmaj7 C#5 Dmaj7 D
  AL: "[~ [d4,f#4,a4,c#5]@2 [d4,f#4,a4,c#5]!4 ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,a4,c#5] ~@2 [d4,f#4,g#4,c#5]@3 ~@14]/2", // Dmaj7
})).s("gm_synth_brass_1").gain(0.48)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@18 A@2 B@2 C@2 D@2 ~@2 E F G ~ H ~@17 A@2 B@2 C@2 D@2 ~@2 E F G ~ H ~@9 I@3 ~@19 J ~ K L M ~ N L J ~ K L ~@33 O ~ P
  Q R ~ S Q O ~ P Q R ~ S Q O ~ P Q R ~ S Q O ~ P Q R ~ S Q O ~ P Q R ~ S ~@2
>`.pickRestart({
  A: "[[g#3,a#3,c#4,f#4]@7 [b3,c#4,f#4]@9]/2", // F# Bsus2
  B: "[[e4,f#4]@14 [c#4,f#4]@9 ~ [c#4,f#4]@2 ~@2 [a3,c#4]@2 ~@2, ~@28 d4 ~@3]/2", // Esus2 F#5 A
  C: "[[g#3,a#3,c#4,f#4]@7 [c#4,f#4]@9]/2", D: "[[b3,e4,f#4]@7 [a#3,c#4,f#4]@5 [c#4,f#4] ~ [c#4,f#4] ~, ~@24 d4 ~@7]/2",
  E: "~@3 [d#5,g#5] [c#5,f#5]@3 ~", F: "~@3 g#5@5", G: "f#5@3 ~", H: "~@6 [d#5,g#5]@2 [c#5,f#5]@5 ~@3",
  I: "[~@4 a#5@4 f#5 ~ d#5 ~@3 c#5@4 d#5 ~@5 [c#5,f#5]@2 [d#5,g#5] ~ f#5 ~ [f#5,b5]@7 ~ [g#5,c#6] ~ [f#5,a#5]@2 g#5@2 [c#5,f#5]@3 ~]/3", // F#5 G#5 B5 C#5 F# F#5
  J: "[e4,g#4,b4,d#5] ~@3", K: "[d4,f#4,a4,c#5]@3 ~@13", L: "~@4 [d4,f#4,g#4,c#5] ~ [d4,f#4,g#4,c#5] ~",
  M: "[e4,g#4,b4,d#5]@3 ~@13", N: "[d4,f#4,a4,c#5] ~@3", O: "~ [e4,g#4,b4,d#5]@4 ~@11", P: "~ [d4,f#4,a4,c#5]@3 ~@12",
  Q: "~@9 [d4,f#4,g#4,c#5]@2 ~@2 [d4,f#4,g#4,c#5]@2 ~", R: "~ [e4,g#4,b4,d#5]@3 ~@12", S: "~ [d4,f#4,a4,c#5]@4 ~@11",
})).s("gm_lead_8_bass_lead").gain(0.37)

// chords · lead 8 bass lead · soft notes
const lead_8_bass_lead_soft = note("<~@20 A@2 B@2 C D ~@26 A@2 B@2 C D ~@17 E F ~@105>".pickRestart({
  A: "[[g#3,b3]@14 a#3@9 ~ [a3,d4] ~@3 f#4@2 ~@2]/2", B: "[~@7 b3@9]/2", C: "g#3@7 ~", D: "~@4 a3 ~ [a3,d4] ~",
  E: "~@12 b5 ~@3", F: "~@10 d#5 ~@5",
})).s("gm_lead_8_bass_lead").gain(0.25)

// other · distortion guitar
const distortion_guitar = note("<~@149 A@4 B@4 A@4 B@4 A@4 B@4 A@4 B@4 ~>".pickRestart({
  A: "[~ f#2@2 ~@4 e2@2 f#2@2 ~@4 f#2@2 ~@11 e2 f#2@2 f2@2 e2@2 ~@4 g2@2 g#2@3 ~@3 e2@2 ~@8 e2@2 ~@2 e2@2 ~]/4",
  B: "[~ f#2@2 ~@4 e2@2 f#2@2 ~@4 f#2@2 ~@11 e2 f#2@2 f2@2 e2@3 ~@3 g2@2 g#2@3 ~@3 e2@2 ~@15]/4",
})).s("gm_distortion_guitar").gain(0.45).pan(0.9)

// chords · clavinet
const clavinet = note("<~@108 A B C B C B C B A B C B C B C B A B C B ~@54>".pickRestart({
  A: "f#3!2 ~@2 f#3 ~ f#3!2 [f#3,e4] [e4,f#4] [f#3,c#4,f#4] [f#3,c#4,e4] [b3,e4] [b3,f#4] [f#3,c#4] f#3", // F#7 Esus2 F#5 F#7 E5 B5 F#5
  B: "~@2 f#3!2 ~@2 f#3!2 [f#3,e4] [e4,f#4] [f#3,c#4,f#4] [c#4,e4] f#3 [f#3,b3,f#4] [f#3,b3,c#4] [f#3,c#4]", // F#7 Esus2 F#5 C#m B5 F#sus4 F#5
  C: "[f#3,c#4] f#3!2 c#4 f#3 ~ f#3!2 [f#3,e4] [e4,f#4] [f#3,c#4,f#4] [f#3,c#4,e4] [b3,e4] [b3,f#4] [f#3,c#4] f#3", // F#5 F#7 Esus2 F#5 F#7 E5 B5 F#5
})).s("gm_clavinet").gain(0.36).pan(0.2)

// chords · clavinet · soft notes
const clavinet_soft = note("<~@108 A B C B C B C B A B C B C B C B A B C B ~@54>".pickRestart({
  A: "~@15 e4", B: "b3 ~@10 f#3 e4 ~@2 e4", C: "~ b3 ~@13 e4",
})).s("gm_clavinet").gain(0.18).pan(0.2)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@26 A B ~ C A B ~ D ~@24 A B ~ C A B ~ D ~@8 E F G ~@31 H I J K I L J M H I J K I L J M H I J K ~ N O P Q R O S T R O
  U V ~@41
>`.pickRestart({
  A: "~@2 c#3 d#3 f#3 ~ c#3 ~ f#3!2 ~@6", B: "~@2 c#3 d#3 f#3 ~ c#3 ~ f#3!2 ~@2 f#3!2 ~@2", C: "~@5 [c#4,f#4]@3",
  D: "~ [c#4,f#4]@6 ~", E: "f#3!2 d#3 c#3 f#3!2 d#3 c#3 ~@2 f#3!2 d#3 c#3 f#3!2",
  F: "d#3 c#3 ~@6 c#4@2 a#3@2 g#3 f#3 d#3 c#3", G: "f#3!2 d#3 c#3 f#3!2 d#3 c#3 ~@2 f#3!2 d#3 c#3 ~@2",
  H: "~@6 f#3 ~@3 f#3!2 ~ f#3 ~ f#3", I: "~@10 f#3 ~@2 f#3 ~ f#3", J: "~ a3 f#3 ~@7 f#3 ~@2 f#3 ~ f#3",
  K: "~ f#3 ~@8 f#3 ~@2 f#3 ~ f#3", L: "~@10 f#3 ~ f#2 f#3 ~ f#3", M: "~ f#3 ~@8 f#3!2 ~ f#3 ~@2",
  N: "~ f#3@2 ~@2 c#3 ~ e3 ~ f#3 ~@5 f#3", O: "~@4 f#3 c#3 ~ e3 ~ f#3 ~@5 f#3",
  P: "~ e3@2 ~ f#3 ~@2 c#3 ~ e3@2 ~ f#3 ~@3", Q: "~@3 f#3 ~@2 f#3 ~@2 f#3 ~@2 f#3 ~@2 f#3",
  R: "~ f#3 ~@3 c#3 ~ e3 ~ f#3 ~@5 f#3", S: "~ e3@2 ~ f#3 ~@2 c#3 ~ e3@2 ~ f#3 ~@2 f#3",
  T: "~@3 f#3 ~@2 f#3 ~@2 f#3 ~@2 f#3 ~@3", U: "~ e3@3 f#3 ~@2 c#3 ~ e3@3 f#3 ~@2 f#3", V: "~@7 f#3 ~ f#3 ~@6",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.8)

// other · electric guitar muted · soft notes
const electric_guitar_muted_2 = note("<~@108 A B C D B E D E A B C D B E D E A B C D ~@4 F ~@49>".pickRestart({
  A: "~@7 f#3 ~@4 f#2 ~@3", B: "~@8 f#2 ~@2 f#3 f#2 ~ f#2 ~", C: "~@11 f#3 f#2 ~@3", D: "~@11 f#3 f#2 ~ f#2 ~",
  E: "~@8 f#2 ~@7", F: "~@10 f#3 ~@5",
})).s("gm_electric_guitar_muted").gain(0.18).pan(0.8)

// bass · slap bass 2
const bass_2 = note(`<
  ~@36 A B ~@2 A B ~@26 A B ~@2 A B ~@12 A C ~@6 A D ~@59 E@2 ~@6 E@2 ~@6 E@2 ~@6 F@2 ~
>`.pickRestart({
  A: "~@7 b1", B: "e2@2 e3!2 d2@2 d3@2 c#2@2 c#3@2 b1@2 b2 ~", C: "e2@2 e3@2 d2@2 d3@2 c#2@2 c#3@2 b1@2 b2 ~",
  D: "e2@2 e3@2 d2@2 d3@2 c#2@2 c#3 ~ b1@2 b2 ~", E: "[~@15 e2@4 e3@2 d2@2 d3@2 c#2@2 c#3@2 b1@2 b2]/2",
  F: "[~@15 e2@4 ~@13]/2",
})).s("gm_slap_bass_2").gain(0.6).pan(0.3)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~ A B A B A B A B ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A C ~@2 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B ~ D E D E D E D E D E D F D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E D E
  D E D ~@2
>`.pickRestart({
  A: "~@4 x!2 ~@6 x!2 ~@2", B: "~@2 x!4 ~@6 x!2 ~@2", C: "~@2 x!4 ~@10", D: "~@5 x!2 ~@6 x!2 ~", E: "~@3 x!4 ~@6 x!2 ~",
// … 69 more lines

More by Prince