Strudelify

Gold

Prince

KeyB♭ majorTempo90 bpm
0:00/0:00
// Gold — Prince
// 90 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 109 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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 · electric bass finger · "Bass"
const bass = note(`<
  ~@18 A B C B D E F G F H I J K L I J K M N O P Q N O P Q B Q B Q E P G R S I J K L I J K M N O P Q N O P Q B Q B Q E P
  G R S I J K L I J K L J@2 L T I J K U I J K V W@4 ~@7
>`.pickRestart({
  A: "~@3 f2", B: "g1 eb1", C: "f1", D: "f1@15 ~", E: "g1 f1", F: "eb1", G: "c1 d1", H: "ab1@9 ~@7",
  I: "bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~ bb1@3 ~",
  J: "ab1@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~",
  K: "eb1@3 ~ eb1@3 ~ eb1@3 ~ eb1@3 ~ eb1@3 ~ eb1@3 ~ eb1@3 ~ eb1@3 ~",
  L: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~", M: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~@13",
  N: "bb1@11 ~ bb1@4 bb1@15 ~", O: "ab1@11 ~ ab1@4 ab1@15 ~", P: "eb1@11 ~ eb1@4 eb1@15 ~", Q: "f1@11 ~ f1@4 f1@15 ~",
  R: "eb1@10 ~@2 eb1@4 eb1@15 ~", S: "ab1@10 ~@2 ab1@4 ab1@3 ~@13", T: "f1@3 ~@29",
  U: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~", V: "f1@3 ~ f1@3 ~ f1@3 ~ f1@3 ~ ab1@7 ~ ab1@7 ~",
  W: "bb1/4",
})).s("gm_electric_bass_finger").gain(0.45)

// chords · piano
const piano = note(`<
  ~@3 A B C D A B C D A B C D A B C D E F E G H I J C K L M N O L M N P A B C D A B C D E F E G H Q J R S L T U O L V N
  P A W C D A X C D E F E G H Y J R S L M N O L M N Z AA@2 AB AC AD AE AF AG AH AE AF AG AH AI AJ ~ AK ~@6
>`.pickRestart({
  A: "[bb3,d4,f4,bb4]@31 ~", B: "[c4,eb4,g4,bb4]@31 ~", C: "[bb3,eb4,g4,bb4]@31 ~",
  D: "[c4,g4,bb4,c5]@15 ~ [c4,g4,a4,c5]@15 ~", E: "[bb3,d4,g4]@15 ~ [bb3,eb4,g4]@15 ~",
  F: "[bb3,c4,f4]@15 ~ [a3,c4,f4]@15 ~", G: "[a3,c4,f4]@31 ~", H: "[g3,bb3,d4,g4]@15 ~ [f3,a3,c4,f4]@15 ~",
  I: "~@7 bb4 [d5,f5]@8, [eb3,g3,bb3,g4]@31 ~, ~@16 c5 ~@15", J: "[bb3,eb4,g4]@15 ~ [bb3,c4,f4]@15 ~",
  K: "[c4,eb4,g4,bb4]@8 [c4,eb4,g4,bb4] ~@7", L: "[f3,bb3,d4]@31 ~", M: "[f3,bb3,d4,f4]@31 ~", N: "[eb3,g3,bb3]@31 ~",
  O: "[bb3,c4,f4,bb4]@15 ~ [a3,c4,f4,a4]@16", P: "[bb3,c4,f4,bb4]@15 ~ [a3,c4,f4,a4]@2 ~@14", Q: "[eb3,g3,bb3,g4]@31 ~",
  R: "[bb3,f4,g4]@31 ~", S: "[c4,eb4,g4,bb4]@8 [c5,eb5,g5,bb5] ~@7", T: "~@20 bb4@5 ~ d5@4 ~@2, [f3,bb3,d4,f4]@31 ~",
  U: "[eb3,g3,bb3]@31 ~, g4@15 ~@17", V: "bb3@19 ~ bb3@5 ~ d4@5 ~, [f3,f4]@31 ~, d4@25 ~@7",
  W: "~@6 bb3@6 eb4@19 ~, [c4,g4,bb4]@31 ~, eb4@11 ~@21", X: "~@6 [eb5,f5,bb5]@9 ~, [c4,eb4,g4,bb4]@31 ~",
  Y: "~@7 bb4 [d5,f5]@7 ~, [eb3,g3,bb3,g4]@31 ~", Z: "[bb3,c4,f4,bb4]@15 ~ [a3,c4,f4,a4]@15 ~", AA: "[ab3,d4,f4]@31 ~",
  AB: "[f3,bb3,c4,eb4]@31 ~", AC: "[bb3,c4,eb4,f4] ~@15", AD: "d4@15 ~ d4@6 eb4@6 f4@4, bb3@31 ~, f4@27 ~@5",
  AE: "[ab3,c4,eb4,ab4]@31 ~", AF: "[eb3,g3,bb3,eb4]@31 ~", AG: "[f3,bb3,c4,eb4]@15 ~ [ab3,bb3,c4,eb4]@16",
  AH: "[bb3,d4,f4]@31 ~", AI: "[ab3,c4,eb4]@31 ~", AJ: "[f3,c4,f4]@31 ~", AK: "[d4,f4,bb4]@31 ~",
})).s("gm_piano").gain(0.52).pan(0.7)

// chords · synth strings 1 · "SynString"
const synth_strings_1 = note(`<
  ~@2 A@8 B@8 C@7 D@2 E@8 F@8 G@7 D@2 E@8 F@8 G@7 D@2 E@8 H@4 I@8 J K@4 L@6 ~
>`.pickRestart({
  A: "[~@31 [bb1,bb3,d4,f4]@32 [ab1,c4,eb4,g4]@32 [eb1,bb3,eb4,g4]@32 [eb4,g4,bb4]@16 [eb4,g4,a4]@16 [bb1,bb3,d4,f4]@32 [ab1,c4,eb4,g4]@32 [eb1,bb3,eb4,g4]@32 [f1,eb4,g4,bb4], ~@127 f1@32 ~@97]/8", // Bb Abmaj7 Eb Am7b5 Bb Abmaj7 Eb
  B: "[~@15 [eb4,g4,a4]@16 [bb1,bb3,d4,f4]@32 [ab1,c4,eb4,g4]@32 [eb1,bb3,eb4,g4]@32 [eb4,g4,bb4]@16 [eb4,g4,a4]@16 [bb1,bb3,d4,f4]@32 [ab1,c4,eb4,g4]@32 [eb1,bb3,eb4,g4]@32 [f1,eb4,g4,bb4], ~@127 f1@32 ~@97]/8", // Am7b5 Bb Abmaj7 Eb Am7b5 Bb Abmaj7 Eb
  C: "[~@15 [eb4,g4,a4]@16 [bb3,d4,g4]@16 [bb3,eb4,g4]@16 [bb3,c4,f4]@16 [a3,c4,f4]@16 [bb3,d4,g4]@16 [bb3,eb4,g4]@16 [a3,c4,f4]@32 [g3,bb3,d4]@16 [f3,a3,c4]@16 [eb3,g3,bb3]@32 [bb3,eb4,g4]]/7", // Am7b5 Gm Eb Bbsus2 F Gm Eb F …
  D: "[~@15 [c4,f4,bb4]@16 [eb4,f4,bb4]@32 [c4,eb4,g4,bb4]]/2", // Fsus4 Ebsus2 Cm7
  E: "[~@31 [f3,bb3,d4]@32 [f3,bb3,d4,f4]@32 [eb3,g3,bb3]@32 bb3@16 a3@16 [f3,bb3,d4,f4]@32 [f3,bb3,d4,f4]@32 [eb3,g3,bb3]@32 [f3,bb3,c4], ~@127 [f3,c4]@32 ~@97]/8", // Bb Eb Bb Eb Fsus4 F5
  F: "[~@15 a3@2 ~@14 [bb3,d4,f4]@32 [ab3,c4,eb4,g4]@32 [eb3,bb3,eb4,g4]@32 [f3,eb4,g4,bb4]@16 [f3,eb4,g4,a4]@16 [bb3,d4,f4]@32 [ab3,c4,eb4,g4]@32 [eb3,bb3,eb4,g4]@32 [f3,eb4,g4,bb4]]/8", // Bb Abmaj7 Eb F7 Bb Abmaj7 Eb
  G: "[~@15 [f3,eb4,g4,a4]@16 [bb3,d4,g4]@16 [bb3,eb4,g4]@16 [bb3,c4,f4]@16 [a3,c4,f4]@16 [bb3,d4,g4]@16 [bb3,eb4,g4]@16 [a3,c4,f4]@32 [g3,bb3,d4]@16 [f3,a3,c4]@16 [eb3,g3,bb3]@32 [bb3,eb4,g4]]/7", // F7 Gm Eb Bbsus2 F Gm Eb F …
  H: "[~@15 a3@16 [ab3,d4,f4]@64 [f3,bb3,c4,eb4]@33]/4", // Ddim Fsus4
  I: "[~@31 [bb3,d4,f4]@32 [ab3,eb4,ab4]@32 [eb3,g3,bb3]@32 f3@16 ab3@16 [bb3,d4,f4]@32 [ab3,eb4,ab4]@32 [eb3,g3,bb3]@32 [eb3,f3,c4], ~@127 [eb3,c4]@32 ~@97]/8", // Bb Ab5 Eb Bb Ab5 Eb F7 Cm
  J: "~@15 ab3@16 ~", K: "[[d4,f4]@32 [ab3,c4,eb4]@32 [f3,c4,f4]@63 ~, [bb2,bb3]]/4",
  L: "[[d4,f4]@48 [c4,eb4]@16 [c4,f4]@63 ~ [d4,f4]@48 [c4,eb4]@16, [bb1,bb2,bb3]]/6", // Dm Cm F5 Dm Cm Bb
})).s("gm_synth_strings_1").gain(0.14)

// chords · drawbar organ · "Organ"
const drawbar_organ = note(`<
  ~@3 A B C D A B C D A B C D A B C D E F E G H I J K L ~@16 E F E M N O P K Q ~@16 E F E M N O P K Q ~@31
>`.pickRestart({
  A: "[bb4,d5,f5,bb5]", B: "[c5,eb5,g5,bb5]", C: "[bb4,eb5,g5,bb5]", D: "[c5,g5,bb5,c6] [c5,g5,a5,c6]",
  E: "[bb4,d5,g5] [bb4,eb5,g5]", F: "[bb4,c5,f5] [a4,c5,f5]", G: "[a4,c5,f5]", H: "[g4,bb4,d5,g5] [f4,a4,c5,f5]",
  I: "[eb4,g4,bb4,g5]", J: "[bb4,eb5,g5] [c5,f5,bb5]", K: "[eb5,f5,bb5]", L: "[c5,eb5,g5,bb5]@17 ~@15",
  M: "[a4,c5,f5]@15 ~", N: "[g4,bb4,d5,d6] [f4,a4,c5,d6]", O: "[eb4,g4,bb4,bb5]", P: "[bb4,eb5,g5,bb5] [c5,f5,bb5]",
  Q: "[eb5,g5,bb5,g6,bb6]@17 ~@15", // Eb
})).s("gm_drawbar_organ").gain(0.22).pan(0.4)

// chords · pad choir · "Organ"
const pad_choir = note(`<
  ~@28 A B C D A B C E B F G H B F G I ~@9 A B C D A B C E ~@17 A B C D A B C E J@2 K ~@20
>`.pickRestart({
  A: "[f3,bb3,d4]", B: "[bb3,d4,f4]", C: "[g3,bb3,eb4]", D: "[f4,bb4,c5] [f4,a4,c5]", E: "[f4,bb4,c5]@8 [f4,a4,c5] ~@7",
  F: "[c4,eb4,g4,bb4]", G: "[bb3,eb4,g4,bb4]", H: "[c4,f4,bb4,c5] [c4,f4,a4,c5]",
  I: "[c4,f4,bb4,c5]@4 [c4,f4,a4,c5]@3 ~", J: "[ab3,d4,f4]/2", K: "[a3,c4,eb4,bb4]@31 ~",
})).s("gm_pad_choir").gain(0.17).pan(0.4)

// chords · string ensemble 1 · "Organ"
const string_ensemble_1 = note("<~@61 A@2 B@2 C D E F ~@20 G H I J K H I J L ~@2 M@2 ~@2 N@2 ~@3>".pickRestart({
  A: "[~@3 eb5 d5 c5 bb4 c5, f5]/2", B: "[bb4@4 c5@2 g5 a5, f5@3 a4]/2", C: "bb5@2 c6 d6, [bb4,f5]",
  D: "eb6@3 f6, [bb4,f5]", E: "[bb4,f5,bb5]", F: "bb4 a4, [f5,c6]", G: "~@12 f4 g4 bb4 c5", H: "bb4", I: "ab4",
  J: "eb4", K: "f4 ab4", L: "f4@16 ab4@15 ~", M: "[c4@14 [gb2,eb4,bb4]@5 [f2,d4,d5]@5 [eb2,c4,a4]@8]/2",
  N: "[~@14 [gb2,eb4,bb4]@5 [f2,d4,d5]@5 [eb2,c4,a4]@8]/2", // Ebm Dm Adim
})).s("gm_string_ensemble_1").gain(0.19).pan(0.4)

// chords · acoustic guitar nylon · "NylonGt."
const acoustic_guitar_nylon = note(`<
  ~@11 A B C D A B C E F G F H I J K L M N@2 O P N@2 O Q N R O P N R O P S T S U V O W X Y N@2 O P N@2 O Q N R O P N R O
  P S T S U V O W X Y N@2 O P N@2 O P ~@4 N Z O AA N Z O AA ~@11
>`.pickRestart({
  A: "[bb3,d4,f4,bb4]@13 ~@3", B: "[c4,eb4,g4,bb4]@27 ~@5", C: "[bb3,eb4,g4,bb4]@3 ~", D: "[c4,f4,g4,bb4] ~",
  E: "[c4,f4,g4,bb4]@7 ~ [c4,f4,g4,a4]@7 ~", F: "[bb3,d4,g4]@15 ~ [g3,bb3,eb4]@15 ~",
  G: "[c4,f4]@16 [a3,c4,f4]@15 ~, bb3@31 ~", H: "[a3,c4,f4]@31 ~", I: "[g3,bb3,d4]@15 ~ [f3,a3,c4]@15 ~",
  J: "[eb3,g3,bb3]@31 ~", K: "[bb3,eb4,g4]@15 ~ [bb3,c4,f4]@15 ~", L: "[bb3,eb4,f4]@31 ~", M: "[bb3,c4,eb4,g4]@17 ~@15",
  N: "[bb3,d4,f4]@2 [bb3,d4,f4] [bb3,d4,f4]@3 [bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4] [bb3,d4,f4]@2 [bb3,d4,f4]!2 [bb3,d4,f4]@2", // Bb
  O: "[g3,bb3,eb4]@2 [g3,bb3,eb4] [g3,bb3,eb4]@3 [g3,bb3,eb4] [g3,bb3,eb4]@2 [g3,bb3,eb4] [g3,bb3,eb4]@2 [g3,bb3,eb4]!2 [g3,bb3,eb4]@2", // Eb
  P: "[bb3,c4,f4]@2 [bb3,c4,f4] [bb3,c4,f4]@3 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4]!2 [a3,c4,f4]@2", // Bbsus2 F
  Q: "[bb3,c4,f4]@2 [bb3,c4,f4] [bb3,c4,f4]@3 [a3,c4,f4] [a3,c4,f4]@2 ~@7", // Bbsus2 F
  R: "[bb3,eb4,g4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@3 [bb3,eb4,g4] [bb3,eb4,g4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@2 [bb3,eb4,g4]!2 [bb3,eb4,g4]@2", // Eb
  S: "[bb3,d4,g4]@2 [bb3,d4,g4] [bb3,d4,g4]@3 [bb3,d4,g4] [bb3,eb4,g4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@2 [bb3,eb4,g4]!2 [bb3,eb4,g4]@2", // Gm Eb
  T: "[bb3,c4,f4]@2 [bb3,c4,f4] [bb3,c4,f4]@3 [bb3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4]!2 [a3,c4,f4]@2", // Bbsus2 F
  U: "[a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@3 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4]!2 [a3,c4,f4]@2", // F
  V: "[bb3,d4,g4]@2 [bb3,d4,g4] [bb3,d4,g4]@3 [bb3,d4,g4] [a3,c4,f4]@2 [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4]!2 [a3,c4,f4]@2", // Gm F
  W: "[bb3,eb4,g4]@2 [bb3,eb4,g4] [bb3,eb4,g4]@3 [bb3,eb4,g4] [bb3,c4,f4]@2 [bb3,c4,f4] [bb3,c4,f4]@2 [bb3,c4,f4]!2 [bb3,c4,f4]@2", // Eb Bbsus2
  X: "[bb3,eb4,f4]@2 [bb3,eb4,f4] [bb3,eb4,f4]@3 [bb3,eb4,f4] [bb3,eb4,f4]@2 [bb3,eb4,f4] [bb3,eb4,f4]@2 [bb3,eb4,f4]!2 [bb3,eb4,f4]@2", // Bbsus4
  Y: "[bb3,c4,eb4,g4]@2 [bb3,c4,eb4,g4] [bb3,c4,eb4,g4]@3 [bb3,c4,eb4,g4] [bb3,c4,eb4,g4]@2 ~@7", // Cm7
  Z: "[ab3,c4,eb4]@2 [ab3,c4,eb4] [ab3,c4,eb4]@3 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]!2 [ab3,c4,eb4]@2", // Ab
  AA: "[f3,c4,eb4]@2 [f3,c4,eb4] [f3,c4,eb4]@3 [f3,c4,eb4] [f3,c4,eb4]@2 [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]!2 [ab3,c4,eb4]@2", // F7 Ab
})).s("gm_acoustic_guitar_nylon").gain(0.2).pan(0.2)

// other · pad halo · "HaloPad"
const pad_halo = note("<~@19 A B A C D E F@2 G ~@16 A B A C D E F@2 G ~@16 A B A C D E F@2 G ~@31>".pickRestart({
  A: "g5 ~ g5 ~ d5 ~ d5 ~ bb4 ~ bb4 ~ d5 ~ d5 ~ g5 ~ g5 ~ d5 ~ d5 ~ bb4 ~ bb4 ~ d5 ~ d5 ~",
  B: "f5 ~ f5 ~ c5 ~ c5 ~ bb4 ~ bb4 ~ c5 ~ c5 ~ a4 ~ a4 ~ c5 ~ c5 ~ f5 ~ f5 ~ c5 ~ c5 ~",
  C: "f5 ~ f5 ~ c5 ~ c5 ~ a4 ~ a4 ~ c5 ~ c5 ~ f5 ~ f5 ~ c5 ~ c5 ~ a4 ~ a4 ~ c5 ~ c5 ~",
  D: "g5 ~ g5 ~ d5 ~ d5 ~ c5 ~ c5 ~ bb4 ~ bb4 ~ c5 ~ c5 ~ d5 ~ d5 ~ bb4 ~ bb4 ~ c5 ~ c5 ~",
  E: "d5 ~ d5 ~ c5 ~ c5 ~ bb4 ~ bb4 ~ c5 ~ c5 ~ d5 ~ d5 ~ bb4 ~ bb4 ~ c5 ~ c5 ~ d5 ~ d5 ~",
  F: "f5 ~ f5 ~ c5 ~ c5 ~ bb4 ~ bb4 ~ c5 ~ bb4 ~ f5 ~ f5 ~ c5 ~ c5 ~ bb4 ~ bb4 ~ c5 ~ bb4 ~",
  G: "bb4 ~ c5 ~ d5 ~ f5 ~ c5 ~ d5 ~ f5 ~ g5 ~ bb5 ~@15",
})).s("gm_pad_halo").gain(0.35).pan(0.7)

// other · lead 2 sawtooth · "HaloPad"
const lead_2_sawtooth = note("<~@94 A B C D E@4 ~@7>".pickRestart({
  A: "~@10 db5 c5 bb4 g4 f4 eb4", B: "d4 bb3 db5 c5 bb4 g4 f4 eb4 d4 bb3 db5 c5 bb4 g4 f4 eb4",
  C: "d4@2 bb3@2 ~@20 [db4,db5]@2 ~ [bb3,bb4]@2 [g3,g4]@2 ~", // Db Bb G
  D: "[f3,f4]@2 ~ [eb3,eb4]@2 [d3,d4] ~@2 [bb2,bb3]@2 ~ [g2,g3] ~ [f2,f3] ~@2 [d3,d4] ~@2 [bb2,bb3]@13", E: "bb2/4",
})).s("gm_lead_2_sawtooth").gain(0.31).pan(0.3)

// chords · viola
const viola = note("<~@61 A@3 B A@3 B ~@9 A C D B A C D E F@4 G H I J G H I J ~@11>".pickRestart({
  A: "[f4,bb4,f5] ~@3 [f4,bb4,f5] ~ [f4,bb4,f5] ~ [f4,bb4,f5] ~@3 [f4,bb4,f5] ~ [f4,bb4,f5] ~ [f4,bb4,f5] ~ [f4,bb4,f5] ~ [f4,bb4,f5] ~@3 [f4,bb4,f5] ~@3 [f4,bb4,f5] ~ [f4,bb4,f5] ~", // Bb5
  B: "[f4,bb4,f5] ~@3 [f4,bb4,f5] ~ [f4,bb4,f5] ~ [f4,bb4,f5] ~@3 [f4,bb4,f5] ~ [f4,bb4,f5] ~ [f4,a4,f5] ~ [f4,a4,f5] ~ [f4,a4,f5] ~@3 [f4,a4,f5] ~@3 [f4,a4,f5] ~ [f4,a4,f5] ~", // Bb5 F
  C: "[f4,ab4,f5] ~@3 [f4,ab4,f5] ~ [f4,ab4,f5] ~ [f4,ab4,f5] ~@3 [f4,ab4,f5] ~ [f4,ab4,f5] ~ [f4,ab4,f5] ~ [f4,ab4,f5] ~ [f4,ab4,f5] ~@3 [f4,ab4,f5] ~@3 [f4,ab4,f5] ~ [f4,ab4,f5] ~", // Fm
  D: "[g4,bb4,f5] ~@3 [g4,bb4,f5] ~ [g4,bb4,f5] ~ [g4,bb4,f5] ~@3 [g4,bb4,f5] ~ [g4,bb4,f5] ~ [g4,bb4,f5] ~ [g4,bb4,f5] ~ [g4,bb4,f5] ~@3 [g4,bb4,f5] ~@3 [g4,bb4,f5] ~ [g4,bb4,f5] ~", // Gm7
  E: "[f4,bb4,f5] ~@3 [f4,bb4,f5] ~ [f4,bb4,f5] ~ [f4,bb4,f5] ~@3 [f4,bb4,f5] ~ [f4,bb4,f5] ~ [f4,a4,f5] ~ [f4,a4,f5] ~ [f4,a4,f5] ~@3 f4@2 g4@2 bb4@2 c5@2", // Bb5 F
  F: "[bb4@97 ~@31]/4",
  G: "[bb3,bb4] ~@3 [bb3,bb4] ~ [bb3,bb4] ~ [bb3,bb4] ~@3 [bb3,bb4] ~ [bb3,bb4] ~ [bb3,bb4] ~ [bb3,bb4] ~ [bb3,bb4] ~@3 [bb3,bb4] ~@3 [bb3,bb4] ~ [bb3,bb4] ~", // Bb
  H: "[bb3,ab4,bb4] ~@3 [bb3,ab4,bb4] ~ [bb3,ab4,bb4] ~ [bb3,ab4,bb4] ~@3 [bb3,ab4,bb4] ~ [bb3,ab4,bb4] ~ [bb3,ab4,bb4] ~ [bb3,ab4,bb4] ~ [bb3,ab4,bb4] ~@3 [bb3,ab4,bb4] ~@3 [bb3,ab4,bb4] ~ [bb3,ab4,bb4] ~", // Bb7
  I: "[bb3,g4,bb4] ~@3 [bb3,g4,bb4] ~ [bb3,g4,bb4] ~ [bb3,g4,bb4] ~@3 [bb3,g4,bb4] ~ [bb3,g4,bb4] ~ [bb3,g4,bb4] ~ [bb3,g4,bb4] ~ [bb3,g4,bb4] ~@3 [bb3,g4,bb4] ~@3 [bb3,g4,bb4] ~ [bb3,g4,bb4] ~", // Eb
  J: "[f3,bb3,bb4] ~@3 [f3,bb3,bb4] ~ [f3,bb3,bb4] ~ [f3,bb3,bb4] ~@3 [f3,bb3,bb4] ~ [f3,bb3,bb4] ~ [ab3,bb3,bb4] ~ [ab3,bb3,bb4] ~ [ab3,bb3,bb4] ~@3 [ab3,bb3,bb4] ~@3 [ab3,bb3,bb4] ~ [ab3,bb3,bb4] ~", // Bb5 Absus2
})).s("gm_viola").gain(0.34).pan(0.6)

// other · music box · "MusicBox"
const music_box = note(`<
  ~@7 A B C D ~@17 A B E D A B E D ~@17 A B E D A B E D ~@14 F G ~ A B E D A H E D ~@4 A B E D A I E D ~@11
>`.pickRestart({
  A: "~@4 [g5,g6]@4 ~@2 [f5,f6]@5 ~ [d5,d6]@4 ~@2 [eb5,eb6]@4 ~@2 [f5,f6]@3 ~", B: "[bb4,bb5] ~",
  C: "~@4 [g5,g6]@3 ~@3 [f5,f6]@4 ~@2 [d5,d6]@5 ~ [eb5,eb6]@4 ~@2 [f5,f6]@3 ~", D: "[c5,c6]@7 ~@9",
  E: "~@4 [g5,g6]@4 ~@2 [f5,f6]@4 ~@2 [d5,d6]@5 ~ [eb5,eb6]@4 ~@2 [f5,f6]@3 ~", F: "[g5,g6]@7 ~ [a5,f6]@7 ~",
  G: "[bb5,f6]@7 ~@9", H: "[bb4,bb5]@15 ~ [c5,c6]@15 ~", I: "[bb4,bb5]@15 ~@17",
})).s("gm_music_box").gain(0.26).pan(0.4)

// other · glockenspiel · "Glockensp"
const glockenspiel = note(`<
  ~@27 A B ~@2 C D E ~@18 A B ~@2 C D E ~@18 A F ~@2 C G E ~@2 A H I J ~@14 A H I K ~
>`.pickRestart({
  A: "~ d8 [e8,f8] g8 f8 e8 d8 c8 [d8,e8] f8 g8 f8 e8 [c8,d8] d8 e8 f8 g8 [e8,f8] d8 c8 d8 e8 [f8,g8] f8 e8 d8 c8 d8 [e8,f8] g8 f8", // Fmaj7 Dsus2 Csus2 Fmaj7 Fsus2 Fmaj7
  B: "e8 d8 [c8,d8] e8 f8 g8 f8 [d8,e8] c8 d8 e8 f8 g8 [e8,f8] d8 c8 d8 e8 [f8,g8] f8 e8 d8 c8 [d8,e8] f8 g8 f8 e8 [c8,d8] d8 ~@2", // Csus2 Dsus2 Fmaj7 Fsus2 Dsus2 Csus2
  C: "~@9 d8 [e8,f8] g8 f8 e8 d8 c8 [d8,e8] f8 g8 f8 e8 [c8,d8] d8 e8 f8 g8 [e8,f8] d8 c8 d8 e8 [f8,g8]", // Fmaj7 Dsus2 Csus2 Fmaj7 Fsus2
  D: "f8 e8 d8 c8 d8 [e8,f8] g8 f8 e8 d8 [c8,d8] e8 f8 g8 f8 [d8,e8] c8 d8 e8 f8 g8 [e8,f8] d8 c8 d8 e8 [f8,g8] f8 e8 d8 c8 [d8,e8]", // Fmaj7 Csus2 Dsus2 Fmaj7 Fsus2 Dsus2
  E: "f8 g8 f8 e8 [c8,d8] d8 ~@26", // Csus2
  F: "e8 d8 [c8,d8] e8 f8 g8 f8 [d8,e8] c8 d8 e8 f8 [f8,g8] e8 d8 c8 d8 e8 [f8,g8] f8 e8 d8 c8 [d8,e8] f8 g8 f8 e8 [c8,d8] d8 ~@2", // Csus2 Dsus2 Fsus2 Dsus2 Csus2
  G: "f8 e8 d8 c8 d8 [e8,f8] g8 f8 e8 d8 [c8,d8] e8 f8 g8 f8 [d8,e8] c8 d8 e8 f8 [f8,g8] e8 d8 c8 d8 e8 [f8,g8] f8 e8 d8 c8 [d8,e8]", // Fmaj7 Csus2 Dsus2 Fsus2 Dsus2
  H: "e8 d8 [c8,d8] e8 f8 g8 f8 [d8,e8] c8 d8 e8 f8 [f8,g8] e8 d8 c8 d8 e8 [f8,g8] f8 e8 d8 c8 [d8,e8] f8 g8 f8 e8 [c8,d8] d8 e8 f8", // Csus2 Dsus2 Fsus2 Dsus2 Csus2
  I: "g8 [e8,f8] d8 c8 d8 e8 f8 [f8,g8] e8 d8 c8 d8 [e8,f8] g8 f8 e8 d8 [c8,d8] e8 f8 g8 f8 [d8,e8] c8 d8 e8 f8 g8 [e8,f8] d8 c8 d8", // Fmaj7 Fsus2 Fmaj7 Csus2 Dsus2 Fmaj7
  J: "e8 [f8,g8] f8 e8 d8 c8 [d8,e8] f8 g8 f8 e8 d8 [c8,d8] e8 f8 g8 f8 [d8,e8] c8 d8 e8 f8 [f8,g8] e8 d8 c8 d8 [e8,f8] g8 f8 e8 d8", // Fsus2 Dsus2 Csus2 Dsus2 Fsus2 Fmaj7
  K: "e8 [f8,g8] f8 e8 d8 c8 [d8,e8] f8 g8 f8 e8 d8 [c8,d8] e8 f8 g8 f8 [d8,e8] c8 d8 e8 f8 [f8,g8] e8 d8 c8 d8 e8 ~@4", // Fsus2 Dsus2 Csus2 Dsus2 Fsus2
})).s("gm_glockenspiel").gain(0.06)

// chords · overdriven guitar · "Overdrive"
const overdriven_guitar = note(`<
  ~@43 A B C B C D E F G H I J K L I J K M ~@7 A B C B C D E F G H I J K L I J K L N O P Q I R S T U V W@2 X@7 Y ~@3
>`.pickRestart({
  A: "~@5 d3@3", B: "[g2,g3] [eb2,eb3]", C: "[f2,f3]", D: "[g2,g3] [f2,a3]", E: "[eb2,bb3]@29 f3 g3 f3",
  F: "[c3,g3] [d3,a3]", G: "[eb3,bb3]@15 ~", H: "[ab2,bb3]@19 ~@13", I: "[bb3,d4]", J: "[bb3,f4]", K: "[g3,c4]",
  L: "[c4,a4]", M: "[c4,a4]@17 ~@15",
  N: "[ab2,ab3,d4] ~@3 [ab2,ab3,d4] ~@3 [ab2,ab3,d4] ~@3 [ab2,ab3,d4] ~@3 [ab2,ab3,d4] ~@3 [ab2,ab3,d4]@2 ~@2 [ab2,ab3,d4]@2 ~@2 [ab2,ab3,d4] ~@3", // Abdim
  O: "[ab2,ab3,d4] ~@3 [ab2,ab3,d4] ~@3 [ab2,ab3,d4] ~@3 [ab2,ab3,d4]@2 ~@2 [ab2,ab3,d4] ~@3 [ab2,ab3,d4]@3 ~ [ab2,ab3,d4]@3 ~ [ab2,ab3,d4]@4", // Abdim
  P: "[f2,f3,c4] ~ [f2,f3,c4] ~ [f2,f3,c4] ~ [f3,c4,eb4]@2 [f3,c4,eb4]@2 [f3,c4,eb4]@2 [f3,c4,eb4]@2 [f3,c4,eb4]@2", // F5 F7
  Q: "[f3,c4,eb4]@2 ~@14 c4@15 ~", R: "[bb3,eb4]", S: "[g3,bb3] ab4",
  T: "bb3@11 ~ bb3@2 ab3@2 ~@2 f3@2 e3@2 eb3@2 db3@2 bb2@6",
  U: "~@4 db5@2 c5@2 bb4@2 g4@2 f4@2 eb4@2 d4@3 ~ db5@2 c5@2 bb4@2 g4@2 f4@2 eb4@2",
  V: "d4@3 ~ db5@2 c5@2 bb4@2 g4@2 f4@2 eb4@2 d4@3 ~ db5@2 c5@2 bb4@2 g4@2 f4@2 eb4@2",
  W: "[bb4 g4 f4 eb4 d4@2 db5 c5 bb4 g4 f4 eb4 d4 bb3@13 ~@2 f3@4]/2",
  X: "[~@32 f4@2 bb4@2 d5@2 f5@2 bb4@2 d5@2 f5@2 g5@2 ab5@7 ~@9 f5@144 d6@16, bb2@65 ~@159]/7",
  Y: "bb5@6 f5@4 bb5@13 ~@9",
})).s("gm_overdriven_guitar").gain(0.29).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@19 A B A B A B A B A@12 C A@3 C A@20 C A@3 C A@17 D@2 A B A@2 E F G@3 H B ~@10
>`.pickRestart({
  A: "x!2", B: "x", C: "x ~@3 x ~@2 x", D: "x ~@7 x ~@6 x", E: "x ~ x!2", F: "x ~ x ~ x!4", G: "x!4",
  H: "x ~@2 x!2 ~ x ~",
// … 67 more lines

More by Prince