Strudelify

When You Were Mine

Prince

KeyE majorTempo147 bpm
0:00/0:00
// When You Were Mine — Prince
// 147 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 6 "BRASS 2" named as a brass, played on brass section (its pad poly patch is not one)
// note: duplicate parts dropped: ch 12 "0+> BACKING VOX" choir aahs (copy of ch 11 "0+> BACKING VOX" choir aahs)
// note: Full arrangement: all 120 bars on a 24-step grid, each part at one level. 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 · synth bass 1 · "BASS"
const bass = note(`<
  ~ A@2 B@2 C@4 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N@2 O@2 P Q R P@2 S T U P V W@2 X@2 Y@2 Z@2 AA@2 AB@2 AC@2 AD S
  AE@2 AF@2 AG@2 AH@2 AI@2 R AJ AK AL R P AJ AM AN AO AP AQ AR AS AP AT ~@8 P AU@2 AV AJ AW AX AY AJ AZ BA@2 BB@2 BC@2
  BD@2 BE@2 BF@2 BG@2 BH@2 BI
>`.pickRestart({
  A: "[~ e1@10 ~ e1@3 f#1@3 a1@3 b1@27]/2", B: "[a1@10 ~@2 a1@3 b1@2 a1@3 ~ b1@12 a1@3 c#2@6 b1@3 a1@3]/2",
  C: "[e1@9 ~@5 f#1@4 a1@3 b1@27 a1@10 ~ a1@3 ~ b1@3 a1@3 b1@12 ~@3 c#2@6 b1@3 a1@3, ~@12 e1@4 ~@65 a1@5 ~@10]/4",
  D: "[e1@4 ~@2 e1@4 ~@2 e1@3 f#1@3 a1@2 ~ b1@26 ~]/2",
  E: "[a1@10 ~@2 a1@2 ~ b1@3 a1@2 ~ b1@13 a1@2 ~@6 b1@6, ~@37 c#2@7 ~@4]/2",
  F: "[e1@9 ~@3 e1@3 f#1@3 a1@2 ~ b1@26 ~]/2",
  G: "[a1@10 ~@2 a1@2 ~ b1@2 ~ a1@2 ~ b1@11 ~ b1@5 ~ b1@2 ~ b1@2 ~ b1@3]/2",
  H: "[e1@5 ~ e1@3 ~@3 e1@3 f#1@2 ~ a1@2 ~ b1@26 ~]/2",
  I: "[a1@11 ~ a1@2 ~ b1@2 ~ a1@2 ~ b1@12 a1@2 ~ c#2@6 b1@3 a1@3]/2",
  J: "[~ d1@2 ~@3 e1@4 ~@2 e1@3 f#1@2 ~ a1@2 ~ b1@26 ~, e1@5 ~@43]/2",
  K: "[a1@11 ~@2 a1@2 b1@2 ~ a1@2 ~ b1@12 a1@3 ~@6 b1@3 a1@3, ~@37 c#2@7 ~@4]/2",
  L: "[e1@5 ~ e1@5 ~ e1@3 f#1@3 a1@2 ~ b1@27]/2", M: "[a1@10 ~@2 a1@2 b1@2 ~@2 a1@2 b1@13 a1@3 c#2@6 b1@2 a1@4]/2",
  N: "[~ e1@4 ~ e1@4 ~@2 e1@3 f#1@2 ~ a1@3 b1@26 ~]/2", O: "[a1@12 ~ a1@2 ~ b1@2 a1@2 ~ b1@12 a1@3 c#2@6 b1@5 ~]/2",
  P: "a1@11 ~", Q: "b1@23 ~", R: "e1", S: "b1", T: "e1@23 ~", U: "a1@5 ~", V: "b1@11 ~",
  W: "[e1@5 ~ e1@5 ~ e1@3 f#1@3 a1@2 ~ b1@26 ~]/2", X: "[a1@12 a1@2 ~ b1@3 a1@2 ~ b1@12 a1@3 ~ c#2@5 b1@6]/2",
  Y: "[e1@10 ~@2 e1@3 f#1@3 a1@2 ~ b1@26 ~]/2", Z: "[a1@11 ~ a1@2 ~ b1@2 ~ a1@2 ~ b1@13 a1@3 c#2@5 b1@3 a1@3]/2",
  AA: "[e1@5 ~@7 e1@3 f#1@3 a1@2 ~ b1@26 ~]/2", AB: "[a1@11 ~ a1@3 b1@3 a1@3 b1@12 a1@3 c#2@6 b1@6]/2",
  AC: "[e1@6 e1@4 ~@2 e1@3 f#1@3 a1@2 ~ b1@26 ~]/2", AD: "a1@23 ~", AE: "[~ e1@5 ~ e1@4 ~ e1@3 f#1@3 a1@2 ~ b1@26 ~]/2",
  AF: "[a1@11 ~ a1@2 ~ b1@2 ~ a1@2 ~ b1@12 a1@2 ~ c#2@6 b1@2 a1@3 ~]/2", AG: "[e1@11 ~ e1@3 f#1@3 a1@3 b1@26 ~]/2",
  AH: "[a1@11 ~ a1@2 ~ b1@2 ~ a1@3 b1@12 a1@3 ~ c#2@5 b1@6]/2", AI: "[~ b1, a1@13 ~@11]/2", AJ: "~ a1@22 ~",
  AK: "~ a1@23", AL: "~ b1@23", AM: "b1@19 ~@5", AN: "c#2 ~@5 c#2 ~@2 c#2@2 ~@7 c#2 ~@2 b1 ~@2",
  AO: "g#1@3 ~@3 g#1 ~@2 g#1@2 ~@7 g#1@2 ~@4", AP: "a1 ~@5 a1 ~@2 a1 ~@8 a1 ~@5", AQ: "~ a1 ~@5 a1 ~ a1 ~@8 a1 ~@5",
  AR: "c#2 ~@5 c#2 ~@2 c#2 ~@8 c#2 ~@2 b1@2 ~", AS: "~ g#1@2 ~@3 g#1 ~@3 g#1@2 ~@6 g#1@2 ~@4", AT: "a1 ~@23",
  AU: "[b1@23 e1@24 ~]/2", AV: "~ a1@20 ~@3", AW: "b1@7 ~", AX: "e1@11 ~", AY: "a1@7 ~", AZ: "b1@5 ~",
  BA: "[e1@5 ~ e1@5 ~ e1@3 f#1@3 a1@2 ~ b1@5 ~ b1@5 ~ b1@2 ~ b1@5 ~ b1@5 ~]/2",
  BB: "[a1@10 ~@2 a1@2 ~ b1@2 ~ a1 ~@2 b1@6 a1@2 ~ b1@2 ~ a1@2 ~ c#2@5 ~ b1@5 ~]/2",
  BC: "[e1@5 ~ e1@4 ~@2 e1@3 f#1@3 a1@2 ~ b1@5 ~ b1@5 ~ b1@2 ~ b1@5 ~ b1@5 ~]/2",
  BD: "[a1@5 ~ a1@5 ~ a1@2 ~ b1@2 ~ a1@2 ~ b1@6 a1@2 ~ b1@3 a1@3 c#2@6 b1@6]/2",
  BE: "[e1@4 ~@2 e1@4 ~@2 e1@3 f#1@2 ~ a1@2 ~ b1@5 ~ b1@4 ~@2 b1 ~@2 b1@5 ~ b1@5 ~]/2",
  BF: "[a1@5 ~ a1@5 ~ a1@2 ~ b1@2 ~ a1@2 ~ b1@6 ~ a1@2 ~ b1@2 a1@2 ~@2 c#2@6 b1@5]/2",
  BG: "[~ e1@5 ~ e1@4 ~@2 e1@3 f#1@3 a1@2 ~ b1@5 ~ b1@4 ~ b1 ~@2 b1@5 ~ b1@4 ~@2]/2",
  BH: "[a1@5 ~ a1@4 ~@3 a1@2 b1@2 ~@2 a1@2 b1@5 ~ a1@2 ~ b1@3 a1@2 ~ c#2@5 ~ b1@6]/2", BI: "e1 ~@11",
})).s("gm_synth_bass_1").gain(0.16)

// other · brass section
const brass_section = note("<~ A@4 B@4 C ~@33 D@4 E@4 C ~@51 F@4 G@4 H@4 I@4 C>".pickRestart({
  A: "[~@12 b4@3 c#5@3 e5@3 f#5@40 e5@2 f#5@2 ~ e5@2 f#5@13 e5@3 g#5@6 f#5@3 e5@2 ~]/4",
  B: "[e5@12 b4@3 c#5@2 e5@3 f#5@39 e5@3 f#5@3 e5@3 f#5@13 e5@3 g#5@6 ~@2 e5@2 ~@2, ~@45 f#5@2 ~]/4", C: "e5 ~@7",
  D: "[~@11 b4@4 ~@2 e5@2 ~ f#5@40 e5@3 f#5@3 e5@2 f#5@13 e5@3 g#5@7 f#5@3 e5 ~, ~@15 c#5@4 ~@77]/4",
  E: "[e5@12 b4@3 c#5@3 e5@2 ~ f#5@39 e5@3 f#5@3 e5@2 f#5@13 e5@2 g#5@7 f#5@3 e5@2 ~]/4",
  F: "[~@15 c#5@3 e5@2 f#5@40 e5@3 f#5@3 e5@3 f#5@12 e5@3 g#5@6 f#5@3 e5@2 ~, ~@12 b4@5 ~@79]/4",
  G: "[e5@12 b4@3 c#5@3 e5@2 f#5@40 e5@2 ~ f#5@3 e5@2 ~ f#5@12 e5@3 g#5@6 f#5@2 e5@2 ~@2]/4",
  H: "[e5@12 b4@3 c#5@2 e5@2 ~ f#5@40 e5@3 f#5@3 ~ e5@2 f#5@12 e5@3 g#5@6 f#5@3 e5@2 ~]/4",
  I: "[e5@12 b4@3 c#5@3 e5@2 ~ f#5@39 e5@3 f#5@2 ~ e5@2 f#5@13 e5@3 g#5@5 f#5@3 ~ e5@2 ~]/4",
})).s("gm_brass_section").gain(0.16).pan(0)

// chords · electric guitar clean · "GUITARS 1"
const electric_guitar_clean = note(`<
  ~ A B C@2 D E@3 F@2 G@2 H@2 I@4 J@2 K L M@2 N O@3 P@2 Q@2 R S T R U V W R U V X Y Z@2 AA AB AC@2 AD@2 AE@2 AF@2 AG@2
  AH@2 AI@2 AJ@2 AK@2 AL S T U R S W R@2 AM AN AO AP AQ AR AS AQ AT AU@2 AV@2 AW@2 AX@2 U S W R AL AY W AZ BA BB A B C@2
  D E@3 A B C@2 D BC@4
>`.pickRestart({
  A: "[e2,b2]@10 ~ [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~@2 [b2,f#3]@3", // E5 F#5 A5 B5
  B: "~@2 [b2,f#3]@4 ~@2 [b2,f#3] ~@3 [b2,f#3]@4 ~@2 [b2,f#3]@5 ~", // B5
  C: "[[a2,e3]@12 ~ [a2,e3]@2 ~ [a2,e3] ~ [a2,e3]@2 ~ [b2,f#3]@10 ~@2 [b2,f#3] ~@2 [c#3,g#3]@6 [b2,f#3]@6]/2", // A5 B5 C#5 B5
  D: "[e2,b2]@10 ~@2 [e2,b2]@3 [f#2,c#3]@2 [a2,e3]@2 ~ [b2,f#3]@4", // E5 F#5 A5 B5
  E: "[~@2 [b2,f#3]@5 ~@2 [b2,f#3] ~@2 [b2,f#3]@4 ~ [b2,f#3]@5 ~ [a2,e3]@11 ~ [a2,e3]@2 ~ [a2,e3]@5 ~ [b2,f#3]@11 ~ [b2,f#3]@2 ~ [c#3,g#3]@6 [b2,f#3]@7]/3", // B5 A5 B5 C#5 B5
  F: "[[e2,b2]@5 ~ [e2,b2]@5 ~ [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@11 ~ [b2,f#3]@5 ~ [b2,f#3]@2 ~ [b2,f#3]@2 ~ [b2,f#3]@2 ~]/2", // E5 F#5 A5 B5
  G: "[[a2,e3]@10 ~@2 [a2,e3]@2 ~ [a2,e3]@2 ~ [a2,e3] ~@2 [b2,f#3]@11 ~ [b2,f#3] ~@2 [c#3,g#3]@6 [b2,f#3]@6]/2", // A5 B5 C#5 B5
  H: "[[e2,b2]@9 ~@3 [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@4 ~@2 [b2,f#3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~]/2", // E5 F#5 A5 B5
  I: "[[a2,e3]@11 ~ [a2,e3]@2 ~ [a2,e3]@5 [b2,f#3]@11 ~ [b2,f#3]@5 ~@2 [b2,f#3] ~@2 [b2,f#3] ~@2 [b2,f#3]@2 [e2,b2]@5 ~@2 [e2,b2]@5 ~ [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@3 ~@3 [b2,f#3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~]/4", // A5 B5 E5 F#5 A5 B5
  J: "[[a2,e3]@11 ~ [a2,e3]@2 ~ [b2,f#3]@2 ~ [a2,e3]@2 ~ [b2,f#3]@12 [a2,e3]@3 [c#3,g#3]@6 [b2,f#3]@6]/2", // A5 B5 A5 B5 A5 C#5 B5
  K: "[e2,b2]@4 ~@2 [e2,b2]@5 ~ [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@3", // E5 F#5 A5 B5
  L: "~@3 [b2,f#3]@5 ~ [b2,f#3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~", // B5
  M: "[[a2,e3]@10 ~@2 [a2,e3]@2 ~ [b2,f#3]@2 ~ [a2,e3]@2 ~ [b2,f#3]@11 ~ [b2,f#3] ~@2 [c#3,g#3]@6 [b2,f#3]@6]/2", // A5 B5 A5 B5 C#5 B5
  N: "[e2,b2]@5 ~ [e2,b2]@5 [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@4", // E5 F#5 A5 B5
  O: "[~@3 [b2,f#3]@5 [b2,f#3]@2 ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 [a2,e3]@11 ~@2 [a2,e3]@2 ~ [b2,f#3]@2 ~ [a2,e3]@2 ~ [b2,f#3]@12 [a2,e3]@3 [c#3,g#3]@6 [b2,f#3]@6]/3", // B5 A5 B5 A5 B5 A5 C#5 B5
  P: "[[e2,b2]@10 ~@2 [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@5 ~ [b2,f#3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~]/2", // E5 F#5 A5 B5
  Q: "[[a2,e3]@11 ~ [a2,e3]@2 ~ [b2,f#3]@2 ~ [a2,e3]@2 ~ [b2,f#3]@12 [a2,e3]@3 ~ [c#3,g#3]@5 [b2,f#3]@6]/2", // A5 B5 A5 B5 A5 C#5 B5
  R: "[a2,e3]@11 ~", S: "[b2,f#3]", T: "[e2,b2]", U: "[a2,e3]@23 ~", V: "[b2,f#3]@23 ~", W: "[e2,b2]@23 ~",
  X: "[e2,b2]@5 ~ [e2,b2]@5 ~ [e2,b2]@3 [f#2,c#3]@2 [a2,e3]@2 ~ [b2,f#3]@4", // E5 F#5 A5 B5
  Y: "~@2 [b2,f#3]@5 ~@2 [b2,f#3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@5 ~", // B5
  Z: "[[a2,e3]@11 ~ [a2,e3]@2 ~ [b2,f#3]@2 ~@4 [b2,f#3]@11 ~ [b2,f#3] ~@2 [c#3,g#3]@6 [b2,f#3]@6]/2", // A5 B5 C#5 B5
  AA: "~ [e2,b2]@5 [e2,b2]@4 ~@2 [e2,b2]@3 [f#2,c#3]@2 [a2,e3]@2 ~ [b2,f#3]@4", // E5 F#5 A5 B5
  AB: "~@3 [b2,f#3]@5 ~ [b2,f#3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@5 ~", // B5
  AC: "[[a2,e3]@12 [a2,e3]@4 ~@2 [a2,e3]@2 ~ [b2,f#3]@12 [a2,e3]@2 ~ [c#3,g#3]@6 [b2,f#3]@5 ~]/2", // A5 B5 A5 C#5 B5
  AD: "[[e2,b2]@5 ~ [e2,b2]@5 ~ [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@4 ~@2 [b2,f#3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~]/2", // E5 F#5 A5 B5
  AE: "[[a2,e3]@11 ~ [a2,e3]@5 ~ [a2,e3]@2 ~ [b2,f#3]@12 [a2,e3]@2 ~ [c#3,g#3]@6 [b2,f#3]@6]/2", // A5 B5 A5 C#5 B5
  AF: "[[e2,b2]@5 ~ [e2,b2]@4 ~@2 [e2,b2]@3 [f#2,c#3]@2 [a2,e3]@2 ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~ [b2,f#3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@5 ~]/2", // E5 F#5 A5 B5
  AG: "[[a2,e3]@10 ~@2 [a2,e3]@5 ~ [a2,e3]@2 ~ [b2,f#3]@11 ~ [b2,f#3]@6 ~ [b2,f#3] ~ [b2,f#3] ~@2 [b2,f#3]@3]/2", // A5 B5
  AH: "[~ [e2,b2]@5 ~ [e2,b2]@4 ~ [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@5 ~ [b2,f#3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@5 ~]/2", // E5 F#5 A5 B5
  AI: "[[a2,e3]@11 ~ [a2,e3]@4 ~@2 [a2,e3]@2 ~ [b2,f#3]@12 [a2,e3]@2 ~ [c#3,g#3]@6 [b2,f#3]@6]/2", // A5 B5 A5 C#5 B5
  AJ: "[[e2,b2]@4 ~@2 [e2,b2]@5 ~ [e2,b2]@3 [f#2,c#3]@2 ~ [a2,e3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@4 ~@2 [b2,f#3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~]/2", // E5 F#5 A5 B5
  AK: "[[a2,e3]@11 ~@2 [a2,e3]@4 ~ [a2,e3]@2 ~ [b2,f#3]@12 [a2,e3]@2 ~ [c#3,g#3]@6 [b2,f#3]@6]/2", AL: "~ [a2,e3]@23",
  AM: "[b2,f#3]@11 ~", AN: "[c#3,g#3]@2 ~@4 g#3 ~@2 g#3 ~@8 g#3 ~@5", AO: "[g#2,d#3] ~@5 d#3 ~@2 d#3 ~@8 d#3 ~@5",
  AP: "[a2,e3] ~@5 e3 ~@2 e3 ~@8 e3 ~@5", AQ: "[a2,e3]@2 ~@4 e3 ~@2 e3 ~@8 e3 ~@5",
  AR: "[c#3,g#3] ~@5 g#3 ~@2 g#3 ~@8 g#3 ~@5", AS: "[g#2,d#3]@2 ~@5 d#3 ~ d#3 ~@8 d#3 ~@5",
  AT: "[a2,e3] a2 e3 [a2,e3] ~ [a2,e3]!2 ~@17", // A5
  AU: "[[e2,b2]@5 ~ [e2,b2]@4 ~@2 [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@5 ~ [b2,f#3]@4 ~@2 [b2,f#3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~]/2", // E5 F#5 A5 B5
  AV: "[[a2,e3]@5 ~@2 [a2,e3]@5 [a2,e3]@2 ~ [a2,e3]@2 ~ [a2,e3]@2 ~@2 [b2,f#3]@5 [b2,f#3]@2 ~@2 [b2,f#3] ~ [b2,f#3] ~@3 [c#3,g#3]@5 [c#3,g#3] [b2,f#3]@5]/2", // A5 B5 C#5 B5
  AW: "[~ [e2,b2]@5 ~ [e2,b2]@4 ~@2 [e2,b2]@3 [f#2,c#3]@3 [a2,e3]@2 ~ [b2,f#3]@5 [b2,f#3]@4 ~@2 [b2,f#3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@5 ~]/2", // E5 F#5 A5 B5
  AX: "[~ [a2,e3]@5 ~ [a2,e3]@5 ~ [a2,e3]@2 ~ [a2,e3] ~ [a2,e3] ~@2 [b2,f#3]@5 ~ [b2,f#3]@2 ~ [b2,f#3] ~@2 [b2,f#3] ~@2 [c#3,g#3]@5 ~ [b2,f#3]@5 ~]/2", // A5 B5 C#5 B5
  AY: "~ [b2,f#3]@23", AZ: "[a2,e3]@7 ~", BA: "[a2,e3]", BB: "[b2,f#3]@5 ~",
  BC: "[~@2 [b2,f#3]@5 ~@2 [b2,f#3] ~@2 [b2,f#3]@4 ~ [b2,f#3]@5 ~ [a2,e3]@11 ~ [a2,e3]@2 ~ [a2,e3]@5 ~ [b2,f#3]@11 ~ [b2,f#3]@2 ~ [c#3,g#3]@6 [b2,f#3]@6 ~ b2 ~@23, ~@71 e2@2 ~@23]/4", // B5 A5 B5 C#5 B5
})).s("gm_electric_guitar_clean").gain(0.7).pan(0.6)

// other · electric guitar clean · "LEAD GTR"
const electric_guitar_clean_2 = note(`<
  ~ A@2 B@2 C@4 D ~@23 E F G H I F J H K L A@2 B@2 C@4 D ~@15 E F G H I F J H K L M N O@2 M N O P ~@8 E F G H I F J H K
  L Q@4 R@4 S@4 T@4 U
>`.pickRestart({
  A: "[~@11 b3@3 c#4@3 e4@2 ~ f#4@28]/2", B: "[e4@11 ~ e4@2 ~ f#4@2 ~ e4@2 ~ f#4@11 e4@3 ~ g#4@6 f#4@3 e4@3]/2",
  C: "[b3@4 ~@2 b3@5 ~ b3@3 c#4@2 e4@3 ~ f#4@39 e4@2 f#4@3 ~ e4@2 f#4@13 e4@3 g#4@5 f#4@3 ~ e4@2 ~]/4", D: "e4 ~@5",
  E: "[a2,e3]@11 ~", F: "[b2,f#3]@5 ~", G: "[e2,b2]@7 ~", H: "[a2,e3]@7 ~", I: "~ a2@22 ~, e3@11 ~", J: "[e2,b2]@11 ~",
  K: "[a2,e3]@23 ~", L: "[b2,f#3]@11 ~", M: "~@6 g#3 ~@2 g#3 ~@8 g#3 ~@5", N: "~@6 d#3 ~@2 d#3 ~@8 d#3 ~@5",
  O: "~@6 e3 ~@2 e3 ~@8 e3 ~@5", P: "e3!2 ~ e3 ~ [d3,e3] e3 ~@17",
  Q: "[~@12 b3@2 c#4@3 ~ e4@2 ~ f#4@38 ~ e4@2 ~ f#4 ~@2 e4@2 ~ f#4@11 ~ e4@2 ~ g#4@6 f#4@2 ~ e4@2 ~]/4",
  R: "[e4@11 b3@3 c#4@3 e4@2 ~ f#4@39 ~ e4@2 ~ f#4 ~ e4@2 ~ f#4@12 ~ e4@2 ~ g#4@5 f#4@2 ~ e4@2 ~@2]/4",
  S: "[e4@11 ~ b3@3 c#4@2 e4@2 ~ f#4@40 e4@2 ~@2 f#4@2 e4@2 ~ f#4@12 e4@2 ~ g#4@6 f#4@2 ~ e4@2 ~]/4",
  T: "[e4@11 ~ b3@3 c#4@2 ~ e4@2 ~ f#4@39 e4@2 ~ f#4@2 e4@2 ~@2 f#4@12 e4@2 ~ g#4@6 f#4@2 e4@2 ~@2]/4", U: "e4 ~@11",
})).s("gm_electric_guitar_clean").gain(0.5).pan(1)

// other · electric guitar clean · "LEAD GTR"
const electric_guitar_clean_3 = note(`<
  ~ A@2 B@2 C@4 D ~@23 E@8 F@2 A@2 B@2 C@4 D ~@15 E@8 F@2 G H I@2 J H I K ~@8 E@8 F@2 ~@8 L@8 ~
>`.pickRestart({
  A: "[~@11 b3@3 c#4@3 e4@2 ~ f#4@28]/2", B: "[e4@11 ~ e4@2 ~ f#4@2 ~ e4@2 ~ f#4@11 e4@3 ~ g#4@6 f#4@3 e4@3]/2",
  C: "[b3@4 ~@2 b3@5 ~ b3@3 c#4@2 e4@3 ~ f#4@39 e4@2 f#4@3 ~ e4@2 f#4@13 e4@3 g#4@5 f#4@3 ~ e4@2 ~]/4", D: "e4 ~@5",
  E: "[~@6 a3@3 c#4@8 a3@3 ~ e3@9 b3@3 d#4@9 b3@3 f#3@8 ~ g#3@3 b3@9 e3@12 a3@3 c#4@9 a3@3 e3@10 a3@2 c#4@9 a3@11 ~@2 b3@2 d#4@9 b3@3 f#3@9 g#3@3 ~ b3@9 ~@5 b3@23 ~, ~@163 e3@9 ~@20]/8",
  F: "[[a3,c#4]@22 ~@3 [b3,d#4]@22 ~, e3@7 ~@5]/2", G: "~@6 [c#4,g#5] ~@2 [c#4,g#5] ~@8 [c#4,g#5] ~@5",
  H: "~@6 [g#3,d#5] ~@2 [g#3,d#5] ~@8 [g#3,d#5] ~@5", I: "~@6 [a3,e5] ~@2 [a3,e5] ~@8 [a3,e5] ~@5",
  J: "~@6 [c#4,g#5] ~@2 [c#4,g#5] ~@9 [c#4,g#5] ~@4", K: "[a3,e5] ~ [a3,e5]!2 ~ [a3,e5]!2 ~@17", L: "[f#4,f#5]!4",
})).s("gm_electric_guitar_clean").gain(0.5).pan(0)

// chords · lead 2 sawtooth · "LEAD KEYS"
const lead_2_sawtooth = note("<~@67 A B C D E F G H ~@2 I@4 J K L ~@9 A B C D E F G H ~@19>".pickRestart({
  A: "[e3,a3]", B: "[f#3,b3]", C: "~ [e3,b3]@23", D: "~ [e3,a3]@22 ~", E: "~ a3@23, e3@23 ~", F: "[f#3,b3]@23 ~",
  G: "[e3,b3]@11 ~", H: "[e3,a3]@23 ~", I: "[f#5@87 e5 ~@2 e5 ~@2 e5 ~@2]/4",
  J: "e5@3 f#5@2 ~@13 g#5@2 ~@2 f#5 ~, ~@10 c#5 ~, ~@21 e5@2 ~",
  K: "~ e5@2 f#5 ~@3 f#5 ~@2 e5@2 f#5 ~@2 e5@2 ~ c#5@2 ~ f#5@2 ~, c#5@2 ~@3 c#5@2 ~@2 c#5@2 ~@3 c#5@2 ~@8, ~@6 e5@2 ~@9 f#5@2 ~ e5@2 ~@2",
  L: "f#5@7 f#5 ~@2 c#5@13 ~, ~@9 e5@5 ~@10",
})).s("gm_lead_2_sawtooth").gain(0.21)

// chords · melodic tom · "DRUM FILLS"
const melodic_tom = note("<~@41 A B ~@32 C D E ~@23 F G ~@7 H I ~@2 J K ~@2 L M>".pickRestart({
  A: "~@6 [f3,g3] ~@2 [f3,g3] ~@8 [b2,c3] ~@2 [a2,b2] ~@2", B: "~@6 [g2,a2] ~@2 [g2,a2] ~@9 d2@2 [e2,f2] ~@2",
  C: "[f3,g3] ~@5 e3 ~@2 d3 ~@5 [b2,c3] ~@2 a2@2 ~ a2@2 ~", // Fsus2 Cmaj7
  D: "g2@2 g2@2 ~@2 f2@2 ~ f2@2 ~ e2@2 ~ e2@2 ~ d2@2 d2@2 ~@2", E: "c2 ~@23",
  F: "~ f3 ~ f3 ~@5 e3 ~@6 d3 ~@2 c3 ~ [b2,c3] ~@2", G: "b2 ~@2 a2 ~@6 g2 ~@4 f2 ~@3 e2 ~ c2@2 ~, ~@21 d2 ~@2",
  H: "~@15 b2 ~@2 g2@2 ~ a2 ~@2, ~@18 f2 ~@5", I: "d2 ~@11", J: "~@15 a2 ~ [f2,g2] g2 ~@3 [c2,d2] ~",
  K: "~ c2@2 ~@21, ~ d2 ~@22", L: "~@3 g2 ~@2 f2 ~@2 e2 ~@2 d2 ~@2 [c2,d2] ~@2 c2@2 ~ c2@2 ~", M: "c2 ~@11",
})).s("gm_melodic_tom").gain(0.5)

// drums · kick
const kick = s("bd").struct("<~ A@83 B ~@8 A@6 C@2 A@14 C A@4>".pickRestart({
  A: "x", B: "x ~ x!2 ~ x!2 ~@17", C: "~ x ~@22",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<A B@83 C ~@7 D B@20 E F B@4 ~>".pickRestart({
  A: "~@6 x!2", B: "~@2 x!2 ~@2 x ~", C: "x!2 ~ x ~ x!2 ~@8 x ~@2 x ~@5", D: "~ x!7", E: "~@3 x ~ x ~@3 x ~@2",
  F: "~@6 x ~@3 x ~@8 x ~@4",
})).gain(0.36)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B C@2 D E F G D C H C@2 I J K L C@2 M C H C@2 N O P Q P L C@2 R S T C U C@2 T ~@2 U C@2 V W X C@2 D C@2 Y Z AA C@2
  U AB C@2 AC AD AE C AF AG AH AI C AJ D AK ~@2 U C@3 L C@2 ~@9 U AL C@2 AM C@2 AN ~@2 U C AO C U C AP AQ AR AS C AT AU
  C T AV ~
>`.pickRestart({
  A: "~@5 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2", B: "x ~@2 x ~ x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", C: "x!8",
  D: "x ~ x!6", E: "x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x",
  F: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x", G: "~@2 x ~@3 x ~ x ~@2 x ~@3 x ~@2 x ~@2 x ~@2",
  H: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@3", I: "x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x",
  J: "~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3", K: "x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2 x ~ x", L: "~ x!7",
  M: "x ~@3 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", N: "~@6 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x",
  O: "~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@3 x ~@2 x ~@2", P: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x",
  Q: "~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", R: "~@6 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x",
  S: "~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2", T: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@2 x ~@2", U: "~@2 x!6",
  V: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~@2 x ~", W: "~@6 x ~@5 x ~ x ~@3 x ~@2 x ~@2",
  X: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~ x ~@2", Y: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x",
  Z: "~@2 x ~@3 x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x", AA: "~@2 x ~@3 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2",
  AB: "x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2 x ~@2", AC: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x",
  AD: "~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", AE: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~",
  AF: "~@10 x ~@3 x ~ x ~@3 x ~@2 x", AG: "~@6 x ~ x ~@2 x ~@3 x ~@2 x ~@2 x ~@2",
  AH: "~@4 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", AI: "x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2 x ~@2",
  AJ: "x ~@3 x ~ x ~@2 x ~@2 x ~@2 x ~@2 x ~@2 x ~@2", AK: "x ~ x!2 ~ x!3",
  AL: "x ~ x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2", AM: "~@3 x ~@2 x ~@3 x ~ x ~@3 x ~ x ~@3 x ~",
  AN: "x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@2", AO: "x ~@2 x ~@2 x ~@2 x ~@2 x ~ x ~@3 x ~@2 x ~@2",
  AP: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~@2 x ~@3 x ~ x", AQ: "~ x ~@2 x ~ x ~@5",
  AR: "~@6 x ~@2 x ~@2 x ~@2 x ~@2 x ~@3 x ~", AS: "x ~@3 x ~ x ~@2 x ~@3 x ~@2 x ~@2 x ~ x ~@2",
  AT: "x ~@2 x ~@2 x ~@3 x ~@13", AU: "~@10 x ~@2 x ~@3 x ~@2 x ~@3", AV: "x!2 ~@6",
})).gain(0.32)
// … 13 more lines

More by Prince