Strudelify
Ray of Light cover art

1998 · Ray of Light

Ray of Light

Madonna

KeyB♭ majorTempo130 bpm
0:00/0:00
// Ray of Light — Madonna
// 130 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 164 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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
const bass = note(`<
  ~@8 A B A B A B A B C D C D C D C D C D C D C D C E C D C D C D C D F@4 C D C D C D C D C D C D C D C E C D C D C D C
  D C D C D C D C D C D C D C D C D C D C D ~@16 C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D C D
  C D C D G H@2 G C D C D C D C D C D C D C D C D
>`.pickRestart({
  A: "bb1 ~ bb1@4 bb1 ~ bb1 ~ bb1@3 ~ bb1 ~", B: "bb1 ~ bb1@3 ~ bb1 ~ bb1 ~ bb1@4 ab1@2",
  C: "bb1@4 f1 ~ eb1@4 eb1@4 g1@2", D: "bb1@4 f1@2 eb1@3 ~ eb1@4 g1@2", E: "bb1 ~@3", F: "bb1@6 d1 ~ eb1 ~ eb1@5 ~",
  G: "bb1 ~ bb1 ~ bb1@2 eb1@2 ~@2 eb1@4 g1@2", H: "bb1 ~ bb1 ~ bb1 ~ eb1@3 ~ eb1@4 g1@2",
})).s("gm_electric_bass_finger").gain(0.35)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@8 A@2 B@4 C D ~@64 E@2 F@2 G H I J ~@24 K L@2 M K L@2 M K L@2 M K L@2 M N O P Q R@2 S T U V W X@5 Y@2 Z@2 ~@8 AA
  AB@3 AC AD AE@2
>`.pickRestart({
  A: "[f5@13 ab5@3]/2", B: "[~ bb5@30 ~]/4", C: "~@4 ab5@3 ~ ab5@3 ~ ab5@3 ~", D: "ab5@3 ~ ab5 ~ ab5 ~ ab5@6 ~@2",
  E: "[f5@3 ~ f5@3 ~ f5@3 ~ ab5@10 bb4@9 ~]/2", F: "[ab5@6 ab5@16 bb4@9 ~]/2", G: "f5@15 ~", H: "f5@6 bb4@9 ~",
  I: "ab5@3 g5", J: "f5@3 bb4@3 ~@2", K: "ab5@3 bb4@5", L: "[ab5 ab5@2 bb4@6 ab5@3 bb4@4]/2", M: "ab5@3 bb4@4 ~",
  N: "ab5@6 g5 f5", O: "f5 eb5", P: "d5", Q: "c5", R: "[bb4@10 ab4@14 g4@7 ~]/2", S: "g4@3 f4@5", T: "bb4@6 f5@9 ~",
  U: "g5@3 ab5@5", V: "g5@3 f5@2 ab5@2 g5", W: "ab5 g5 f5@6",
  X: "[ab5@2 g5 ab5@2 g5@2 f5@2 eb5@2 d5@2 c5@2 bb4@23 ~@2]/5", Y: "[bb5@7 bb4]/2", Z: "[ab5@23 ~ bb4@5 ~@3]/2",
  AA: "d6@7 g5", AB: "[f5@4 c6@2 bb5@4 g5@4 f5@25 ~@9]/3", AC: "d6@3 eb6@5", AD: "f6@5 eb6 d6 c6",
  AE: "[bb5@4 ~@3 ab6@4 bb5@4 ~]/2",
})).s("gm_overdriven_guitar").gain(0.2)

// other · percussive organ
const percussive_organ = note(`<
  ~@16 A B C D E F@2 ~ G H@2 I J K@2 L M@2 N O P@2 Q@2 ~@4 R S@2 T@2 U@2 ~ V W X@2 Y@2 Z AA AB AC N AD AE@2 AF@2 AG@2
  ~@2 V AH V AH AI AJ@3 ~@8 AK@3 D AL AM@3 AN AO@2 AP AL AQ@2 AR AS@2 ~@6 AT@4 AU I Z AV AW AX AY AX AZ@3 ~ BA BB BC AH
  BD BE@3 BF BG BH BI BJ@2 BK BL@2 ~@3 BM@2 BN BO@2 BP@3 ~@8
>`.pickRestart({
  A: "~@4 d5 ~ d5@2 d5 ~ d5@4 f5@2", B: "~ f5@2 f5@2 d5 c5@2", C: "~@8 c5@2 bb4@3 ~@3, d5@5 ~@3",
  D: "d5 ~ d5@4 c5@4 bb4@6", E: "d5@3 bb4@4 ~", F: "[d5@2 ~@2 d5@2 c5@4 bb4 ~ d5@13 ~@7]/2",
  G: "~@2 d5 ~ d5 ~ d5 ~ d5@4 c5 ~ f5@2", H: "[~ f5@2 d5@2 c5@2 ~@4 c5@2 bb4@3, ~@7 d5@5 ~@4]/2",
  I: "d5@3 ~ d5@2 c5@4 bb4@6", J: "d5@6 bb4@9 ~", K: "[d5@3 ~ d5@2 c5@4 bb4 ~@11 eb5@2 d5@6 eb5@2, ~@3 d5@3 ~@2]/2",
  L: "d5@2 eb5@2 d5@2 eb5@2 d5 ~ bb5 ~ bb5 ~ c6@2", M: "[bb5@7 ~@3 bb5 ~ bb5@2 c6@4 d6@4 bb5@2 ~@2 ab5@2 bb5@2 c6@2]/2",
  N: "bb5@7 ~@9", O: "~@10 bb5 ~ bb5 ~ c6@2", P: "[bb5@5 ~@5 bb5@2 bb5@2 c6@4 d6@3 ~ eb6@2 d6@2 eb6@2 d6@2 eb6@2]/2",
  Q: "[d6@6 c6@4 bb5@4 ab5@4 g5@4 f5@7 ~@3]/2", R: "~@4 d5 ~ d5 ~ d5 ~ d5@3 ~ f5@2",
  S: "[~@2 f5@3 ~ f5@4 d5@2 c5 ~@11 c5@2 bb4@3 ~@3, ~@7 d5@6 ~@3]/2",
  T: "[d5 ~ d5@4 c5@4 bb4@4 ~@8 bb4@9 ~, ~@7 d5@5 ~@4]/2", U: "[d5@4 d5@2 c5@4 bb4 ~ d5@10 ~@10]/2",
  V: "~@4 d6 ~ d6@2 c6 ~ c6@4 bb5@2", W: "~ bb5@2 ab5@2 g5@2 ab5",
  X: "[g5@6 ~@10 d5 ~ d5@4 c5@4 bb4@6, ~@3 f5@6 ~@7]/2", Y: "[d5@3 ~@5 d5 ~ d5 c5@2 bb4@3, ~@3 f5@6 ~@7]/2",
  Z: "d5@3 eb5 d5@3 eb5", AA: "d5@2 eb5@2 d5@2 eb5@2 d5@2 bb5 ~ bb5 ~ c6@2", AB: "bb5@6 ~@4 bb5 ~ bb5@2 c6@2",
  AC: "~ d6@2 bb5@2 ab5 bb5 c6", AD: "~@10 bb5@2 ab5 ~ c6@2",
  AE: "[bb5@4 ~@6 bb5 ~ bb5@2 c6@4 d6@3 ~ eb6@4 d6 ~ eb6@2 d6 ~]/2",
  AF: "[eb6 d6@2 c6@2 bb5@2 ab5@2 g5@2 f5@4 ~, ~@6 d6 ~@25]/2", AG: "[~@3 bb4@13]/2", AH: "~ bb5@2 ab5@4 ~",
  AI: "~@4 f6 ~ f6@2 eb6 ~ eb6@4 d6@2",
  AJ: "[~@2 d6@4 c6@4 bb5@4 ab5@4 g5@4 f5@4 eb5@4 d5@4 eb5@4 f5@4 bb5@2 f5@3 ~]/3",
  AK: "[~@4 d5 ~ d5 ~ d5 ~ d5@4 f5@4 f5@4 f5@4 d5@4 ~@10 c5@2 bb4@4 ~@2, ~@5 d5@2 ~]/3", AL: "d5@3 bb4@5",
  AM: "[eb5@4 d5@2 c5@4 bb4 ~ d5@25 ~@11]/3", AN: "~@2 d5 ~ d5 ~ d5 ~ d5@4 d5@2 f5@2",
  AO: "[~@2 f5@3 ~ f5@4 d5@4 d5@15 ~@3]/2", AP: "d5@2 d5 c5@2 bb4@3",
  AQ: "[d5 ~ d5@4 c5@4 bb4 ~@9 eb5@2 ~@8 eb5@2, ~@6 d5@5 d5@5]/2", AR: "d5@2 eb5@2 d5@2 eb5@2 d5@2 bb5 ~ bb5@2 c6@2",
  AS: "[bb5@27 ~@5]/2",
  AT: "[~@4 d6 ~ d6@2 c6 ~ c6@4 bb5@4 bb5@4 ab5@4 g5@4 ab5@4 g5@4 ~@10 d5 ~ d5@4 c5@4 bb4@6, ~@19 f5@6 ~@7]/4",
  AU: "d5@3 f5@5", AV: "d5 eb5 d5 eb5 d5 eb5 d5 eb5", AW: "d5@2 eb5@2 d5 ~ eb5@2 d5 ~ eb5@2 d5 ~ eb5@2",
  AX: "d5 ~ eb5@2 d5 ~ eb5@2 d5 ~ eb5@2 d5 ~ eb5@2", AY: "d5 ~ eb5@2 d5@2 eb5@2 d5 ~ eb5@2 d5 ~ eb5@2",
  AZ: "[f5@5 ~]/3", BA: "~@2 d6 ~ d6 ~ d6@2 c6 ~ c6@3 ~ bb5@2", BB: "~@2 bb5@4 ab5@9 ~",
  BC: "~@2 d6 ~ d6 ~ d6@2 c6 ~ c6@4 bb5@2", BD: "~@2 f6 ~ f6 ~ f6@2 eb6 ~ eb6@4 d6@2",
  BE: "[~ d6@2 c6@2 c6@2 bb5@14 bb5!2 c6]/3", BF: "bb5", BG: "~@10 bb5 ~ bb5@2 c6@2", BH: "bb5@11 ~@5",
  BI: "~@5 bb5!2 c6", BJ: "[bb5@8 ~@2 bb5 ~ bb5@2 c6@4 d6@4 eb6@4 d6@2 eb6@2 d6 ~]/2",
  BK: "d6@2 c6@2 bb5@2 ab5@2 g5@2 ab5 g5 f5 ab5 c6@2", BL: "[f6@3 bb6@6 ~@7]/2",
  BM: "[~@4 f5 ~ f5@2 g5@2 bb5@4 c6@4 bb5@4 g5@4 bb5@4 c6@2]/2", BN: "bb5@6 ~@8 g5 ~, ~@3 bb5@5",
  BO: "[ab5 ~ g5@4 f5@6 eb5 ~ f5@5 ~ ab5@2 f5 ~ ab5@4 f5 ~ ab5@2]/2",
  BP: "[~@2 f5@3 ~ ab5@4 bb5@4 c6@4 bb5@4 bb5@25 ~]/3",
})).s("gm_percussive_organ").gain(0.35)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@32 A B C D E D F G ~@20 A B C D E D F G A B C D E D F G E D F G A B C D E D F G H I J K H I J K H I J K H I J K A B
  C D E D F G ~@8 L M L M L M L M ~@8 A B C D E D F G ~@20
>`.pickRestart({
  A: "~@4 [d4,f4]@2 ~@2 [eb4,g4] ~ [eb4,ab4]@4 ~@2", B: "~@4 [d4,f4] ~ [d4,f4] ~ [eb4,g4] ~ [eb4,ab4]@4 ~@2",
  C: "~@4 [d4,f4] ~@3 [eb4,g4] ~ [eb4,ab4]@3 ~@3", D: "~@2 [d4,f4] ~@3 [eb4,g4] ~@3 [eb4,ab4]@5 ~",
  E: "~@2 [d4,f4] ~ [d4,f4] ~@3 [eb4,g4] ~ [eb4,ab4]@4 ~@2", // Dm Eb Ab5
  F: "~@2 [d4,f4] ~ [d4,f4] ~@3 [eb4,g4] ~ [eb4,ab4]@3 ~ [d4,f4] ~", G: "~@2 [d4,f4] ~@3 [eb4,g4] ~@3 [eb4,ab4]@4 ~@2",
  H: "~@2 bb4@4 [d4,f4] ~ d4 ~ [d4,bb4]@4 f4@2, [bb2,f3,bb3]@7 ~ [bb2,f3,bb3]@7 ~, [d4,f4]@5 ~@3 f4@5 ~@3", // Dm Gm Bb5 Dm
  I: "~@2 bb4@4 [eb4,g4] ~@3 bb4@4 g4@2, [c3,eb3,g3]@15 ~, [bb3,eb4,g4]@7 ~ [bb3,eb4]@7 ~, ~@2 g4 ~", // Eb Cm Eb Eb5
  J: "~@2 a4@4 [d4,f4] ~@3 a4@4 f4@2, [d3,f3,a3,f4]@7 ~ [d3,f3,a3,d4,f4]@6 ~@2, d4@5 ~@11", // Dm
  K: "~@2 bb4@4 [bb3,eb4,g4] ~@3 bb4@4 [eb4,g4] ~, [eb3,g3,bb3,eb4,g4]@6 ~@2 [eb3,g3,bb3]@7 ~, ~@8 [eb4,g4]@5 ~@3", // Eb
  L: "~@4 [d4,f4]@2 [eb4,ab4] ~@3 [eb4,ab4]@5 ~", M: "~@2 [f4,bb4] ~ [f4,bb4] ~ [eb4,ab4] ~@3 [eb4,ab4]@3 ~@3",
})).s("gm_acoustic_guitar_nylon").gain(0.26).pan(0.6)

// chords · pad poly
const pad_poly = note(`<
  ~@24 A B C D E F G H I J K L M L N O P Q P Q ~@6 R S T U V W T X V W Y Z Y Z Y Z Y Z AA AB AA AB ~@8 Y Z Y Z Y Z Y Z
  ~@16 Y Z Y Z Y Z Y Z AC AD AE AF AC AD AE AF AG AH AG AH AG AH AG AH AI AJ AI AJ AI AJ AI AJ Y Z Y Z Y Z Y Z AK AL AK
  AM ~@8 AN AO AN AO AN AO AN AO
>`.pickRestart({
  A: "~@2 f4@2 [eb4,ab4]@2 [c4,f4] ~@3 f4@2 [eb4,ab4]@2 [c4,f4] ~, ~@2 c4 ~@7 c4 ~@5", // Ab5 F5 Ab5 F5
  B: "~@2 [c4,f4]@2 eb4@2 [c4,f4] ~@3 [c4,f4]@2 [eb4,ab4]@2 [c4,f4] ~, ~@4 ab4 ~@11", // F5 Ab5 F5
  C: "~@2 f4@2 ab4@2 [c4,f4] ~ [c4,eb4] ~ [c4,d4] ~@5, ~@2 c4 ~ eb4 ~@11", // F5 Cm Csus2
  D: "~@2 eb4@2 [bb3,d4]@2 ~@4 f4@2 [eb4,ab4]@2 [c4,f4] ~, ~@2 bb3 ~@7 c4 ~@5", // Bb Ab5 F5
  E: "~@2 [c4,f4]@2 [eb4,ab4]@2 [c4,f4] ~@3 f4@2 [eb4,ab4]@2 [c4,f4] ~, ~@10 c4 ~@5", // F5 Ab5 F5 Ab5 F5
  F: "~@2 [c4,f4]@2 [eb4,ab4]@2 [c4,f4] ~@3 eb4@2 [bb3,d4] ~@3, ~@10 bb3 ~@5", // F5 Ab5 F5 Bb
  G: "[bb3,eb4]@2 d4@2 bb3 ~ bb3@3 ~ f4@2 [eb4,ab4] ~ [c4,f4] ~, ~@10 c4 ~@5", // Eb5 Ab5 F5
  H: "~@2 [c4,f4]@2 [eb4,ab4]@2 [c4,f4] ~@3 eb4@2 [bb3,d4]@2 ~@2, ~@10 bb3 ~@5", // F5 Ab5 F5 Bb
  I: "~@4 [d4,f4]@2 ~@2 [eb4,g4] ~ [eb4,ab4]@4 ~@2", J: "~@4 [d4,f4] ~ [d4,f4] ~ [eb4,g4] ~ [eb4,ab4]@4 ~@2",
  K: "~@4 [d4,f4] ~@3 [eb4,g4] ~ [eb4,ab4]@3 ~@3", L: "~@2 [d4,f4] ~@3 [eb4,g4] ~@3 [eb4,ab4]@5 ~",
  M: "~@2 [d4,f4] ~ [d4,f4] ~@3 [eb4,g4] ~ [eb4,ab4]@4 ~@2", // Dm Eb Ab5
  N: "~@2 [d4,f4] ~ [d4,f4] ~@3 [eb4,g4] ~ [eb4,ab4]@3 ~ [d4,f4] ~", O: "~@2 [d4,f4] ~@3 [eb4,g4] ~@3 [eb4,ab4]@4 ~@2",
  P: "[bb3,f4]@4 [eb4,g4]@2 [bb3,f4] ~ [eb4,g4] ~ [eb4,ab4]@5 ~", // Bb5 Eb Bb5 Eb Ab5
  Q: "[bb3,f4]@3 ~ eb4@2 [bb3,f4] ~ [eb4,g4] ~ [eb4,ab4]@3 ~ [eb4,g4] ~, ~@4 g4 ~@11", // Bb5 Eb Ab5 Eb
  R: "~@4 ab4@2 d4 ~ ab4@2 d4@2 ~@4", S: "~@4 ab4@2 d4 ~ ab4@2 d4 ~ ab4@3 ~",
  T: "~@4 [bb3,d4] ~ [bb3,eb4]@3 ~ [bb3,eb4]@3 ~@3", U: "~@4 [bb3,d4] ~ [bb3,eb4]@3 ~ [bb3,f4]@4 ~@2",
  V: "~@4 [bb3,d4] ~ [bb3,eb4]@2 ~@2 [bb3,eb4]@3 ~@3", W: "~@2 [bb3,d4] ~ [bb3,d4] ~ [bb3,eb4]@2 ~@2 [bb3,f4]@4 ~@2",
  X: "~@4 [bb3,d4] ~ [bb3,eb4]@2 ~@2 [bb3,f4]@4 ~@2", Y: "~@2 [bb3,d4,f4] ~@2 [bb3,eb4,ab4]@2 ~",
  Z: "~@2 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,eb4,ab4]@5 ~", // Bb Ebsus4
  AA: "[ab4,db5] ~ [ab4,db5]@2 [bb3,d4,f4]@2 ~@4 [bb3,eb4,ab4]@4 ~@2", // Db5 Bb Ebsus4
  AB: "[ab4,db5] ~ [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,eb4,ab4]@5 ~, ~@2 [ab4,db5]@3 ~@11", // Db5 Bb Ebsus4 Db5
  AC: "~@4 [bb3,d4,ab4] ~ [bb3,eb4,ab4]@7 ~@3", AD: "~@4 [d4,f4]@2 [bb3,eb4,ab4] ~@3 [bb3,eb4,ab4]@5 ~, ~@4 bb3 ~@11",
  AE: "~@2 [bb3,d4,f4] [bb3,eb4,ab4]@4 ~", AF: "~@2 [bb3,d4,f4] ~@3 [bb3,eb4,ab4] ~@3 [bb3,eb4,ab4]@5 ~",
  AG: "~@4 [d4,f4]@2 [eb4,ab4] ~@3 [eb4,ab4]@5 ~", AH: "~@2 [d4,f4] ~ [d4,f4] ~ [eb4,f4,ab4] ~@3 [eb4,ab4]@5 ~",
  AI: "~@4 [bb3,d4] ~ [bb3,eb4,ab4] ~@3 [bb3,eb4,ab4]@4 ~@2, ~@2 f4 ~@5", // Bb Ebsus4
  AJ: "~@2 [bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb3,eb4,ab4] ~@3 [bb3,eb4,ab4]@4 ~@2", // Bb Ebsus4
  AK: "[bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,eb4] ~@3 [bb3,eb4]@3 ~ eb4@2, ~@14 bb3 ~", // Bb Eb5
  AL: "[bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,eb4] ~@3 [bb3,eb4]@4 [bb3,f4] ~", // Bb Eb5 Bb5
  AM: "[bb3,d4] ~ [bb3,d4] ~ [bb3,d4] ~ [bb3,eb4] ~@3 [bb3,eb4]@3 ~ [bb3,eb4] ~", // Bb Eb5
  AN: "~@2 [bb3,d4] ~ [bb3,d4] ~ [bb3,eb4]@3 ~ [bb3,eb4]@3 ~ [bb3,eb4] ~", // Bb Eb5
  AO: "~@2 [bb3,d4] ~ [bb3,d4] ~ [bb3,eb4]@3 ~ [bb3,eb4]@4 ~@2", // Bb Eb5
})).s("gm_pad_poly").gain(0.25).pan(0.4)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  A@3 B C@2 D B E@8 ~@64 F@3 G@4 ~@12 B ~@3 B H@3 I ~ J K L ~@36 M@2 N@2 M@2 N@2 ~@8
>`.pickRestart({
  A: "[f4@47 ~]/3", B: "g4@15 ~", C: "[f4@31 ~]/2", D: "f4@15 ~", E: "[bb4@96 ab4@29 ~@3]/8",
  F: "[bb4@3 ab4@8 g4, bb3@5 ~]/3", G: "[ab4 g4@2 ~@13 c4@16, ~@3 f4@29, ~ bb3@3, ~@22 f3@41 ~]/4",
  H: "[[f4,ab4]@38 ~@4 [d4,d5]@2 ~ [d4,d5]@2 ~]/3", I: "[d4,d5]@2 ~ [d4,d5]@2 ~ [d4,d5]@2 ~ [d4,d5]@3 ~@4",
  J: "[f4,ab4]@7 ~", K: "[f4,ab4]@15 ~", L: "[f4,ab4]@3 ~", M: "[d4@8 eb4@8 d4@7 ~@9, [bb3,f4]@31 ~]/2",
  N: "[d4@7 ~ eb4@8 d4@13 ~@3, f4@29 ~@3, bb3@23 ~@9]/2",
})).s("gm_lead_8_bass_lead").gain(0.31).pan(0.6)

// chords · lead 8 bass lead · soft notes
const lead_8_bass_lead_soft = note("<~@92 A@3 B C@2 D ~ C@2 D ~@61>".pickRestart({
  A: "[f4@47 ~]/3", B: "g4@15 ~", C: "[f4@31 ~]/2", D: "f4@15 ~",
})).s("gm_lead_8_bass_lead").gain(0.18).pan(0.6)

// chords · lead 1 square
const lead_1_square = note(`<
  ~@41 A B C ~@62 D E ~@20 F G F G F G F G H I J I K I J L ~@4 M@3 N M O M N ~@8
>`.pickRestart({
  A: "[f4,bb4]@7 ~, bb3", B: "[f4,bb4,f5]@15 ~",
  C: "[ab4,bb4,eb5]@2 ~ [ab4,bb4,eb5]@2 ~ [ab4,bb4,eb5]@2 [f4,bb4,f5]@6 ~@2", D: "~@11 d5@2 ~ d5@2",
  E: "d5@2 ~ d5@2 ~ d5@2 d5@2 ~ d5@3 ~@2", F: "~@4 [bb4,d5] ~ [bb4,d5] ~@3 [bb4,d5] ~ [bb4,eb5]@3 ~",
  G: "~@4 [bb4,d5] ~ [bb4,d5] ~@3 [bb4,eb5]@4 ~@2", H: "~@2 [f4,d5] ~@3 [bb4,d5] ~",
  I: "~@4 [bb4,d5]@2 ~@4 [bb4,d5]@5 ~", J: "~@4 [bb4,d5]@3 ~@5 [bb4,d5]@3 ~", K: "~@4 [bb4,d5]@3 ~@5 [bb4,d5]@2 ~@2",
  L: "~@2 [bb4,d5] ~@2 [bb4,d5]@2 ~", M: "~@4 [bb4,d5]@2 ~@6 [bb4,eb5]@3 ~", N: "~@4 [bb4,d5]@3 ~@5 [bb4,eb5]@3 ~",
  O: "~@2 [bb4,d5] ~@3 [bb4,eb5] ~", // Bb Eb5
})).s("gm_lead_1_square").gain(0.33).pan(0.4)

// chords · lead 8 bass lead
const lead_8_bass_lead_2 = note("<~@41 A@2 B ~@36 C@2 D E@2 F@3 ~@76>".pickRestart({
  A: "[~@20 f5@9 ~@3, [bb3,f4]@29 ~@3, ~@16 bb4@13 ~@3]/2", // Bb5
  B: "[ab4,bb4,eb5]@2 ~ [ab4,bb4,eb5]@2 ~ [ab4,bb4,eb5]@2 ~ [bb4,f5]@2 ~ [ab4,bb4,f5]@2 [ab4,bb4] ~, ~@4 ab4 ~@2 f5", // Absus2 Bb5 Bb7 Absus2
  C: "[[bb4,f5]@20 ~@6 bb5@5 ~, bb5@25 ~@7, ~@20 bb4@11 ~, ~@22 f5@9 ~]/2", // Bb5
  D: "f5 ~ f5@9 ~ [bb4,g5]@4, [bb4,ab5]@5 ~@3", E: "[ab5@2 [bb4,g5]@3 ~ [bb4,f5]@16 ~@10, bb4 ~@31]/2",
  F: "[bb4@8 ~@15 c5, [c5,f5]@9 bb4@2 c5@3 f5@3 f4@3 bb4@4, f4@15 ~ f4@8 bb4@4 ~@2 c5@6 f5@6 f4@6, ~@10 f5@3 f4@3 bb4@3 c5@3 f5@2]/3", // F5
})).s("gm_lead_8_bass_lead").gain(0.27).pan(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@8 A B@2 C D@2 C E F G H I F G H I F G H I F G H I F G H I F G H I ~@4 F G H I F G H I F G H I F G H I F G H I F G H
  I J K L M N O P Q N O P Q F G H I F G H I ~@16 F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I F G H I
  F G H I ~@12 F G H I F G H I
>`.pickRestart({
  A: "~ f4 bb4 ~ f4 ~@2 f4, bb3@5 ~ bb3@4 bb4@4 ~@2, ~@3 bb3",
  B: "[bb4 ~ f4 bb4 ~ f4 bb4 ~ f4 bb4 ~ f4 bb4 ~ f4 bb4, ~@2 bb3@5 ~ bb3@5 ~ bb3@5 ~ bb3@4 ~@2 bb3@4 ~@2]/2",
  C: "~ f4 bb4 ~ f4 bb4 ~ f4, bb3@2 ~ bb3@2 ~ bb3@2",
  D: "[bb4 ~ f4 bb4 ~ f4 bb4 ~ f4 bb4 ~ f4 bb4 ~ f4 bb4, ~ bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~ bb3@2 ~]/2",
  E: "bb4 ~ f4 bb4 ~ f4 bb4 bb3, ~ bb3@2 ~ bb3@2 ~@2",
  F: "[f3,bb3,d4] ~@3 [f3,bb3,d4] ~ [f3,bb3,eb4] ~@3 [f3,bb3,eb4]@3 ~ [f3,bb3,eb4] ~", // Bb Ebsus2
  G: "[f3,bb3,d4] ~@3 [f3,bb3,d4] ~ [f3,bb3,eb4] ~@3 [f3,bb3,eb4]@4 ~@2", // Bb Ebsus2
  H: "~@2 [f3,bb3,d4] ~@3 [f3,bb3,d4] ~ [f3,bb3,eb4]@2 ~@2 [f3,bb3,eb4]@2 [f3,bb3,d4] ~", // Bb Ebsus2 Bb
  I: "~@2 [f3,bb3,d4] ~@3 [f3,bb3,eb4] ~@3 [f3,bb3,eb4]@3 ~ [f3,bb3,eb4] ~", // Bb Ebsus2
  J: "~@4 [f3,bb3,d4] ~ [bb3,eb4]@2 ~@2 [bb3,eb4]@4 ~@2", // Bb Eb5
  K: "~@4 [f3,bb3,d4]@2 [bb3,eb4] ~@3 [bb3,eb4]@3 ~ [bb3,eb4] ~", L: "~@4 [f3,bb3,d4]@2 [bb3,eb4]@2 ~@2 [bb3,eb4]@5 ~",
  M: "~@4 [f3,bb3,d4]@2 [bb3,eb4]@2 ~@2 [bb3,eb4]@3 ~ [bb3,eb4] ~", N: "~@4 [f3,bb3,d4] ~ [bb3,eb4] ~@3 [bb3,eb4]@5 ~",
  O: "~@4 [f3,bb3,d4]@2 [bb3,eb4] ~@3 [bb3,eb4]@2 ~@2 [bb3,eb4] ~", P: "~@4 [f3,bb3,d4]@2 [bb3,eb4] ~@3 [bb3,eb4]@5 ~",
  Q: "~@4 [f3,bb3,d4]@2 [bb3,eb4] ~ f3 ~ [bb3,eb4]@2 f3 ~ [bb3,eb4] ~", // Bb Eb5
})).s("gm_electric_guitar_clean").gain(0.23).pan(0.6)

// other · synth brass 2
const synth_brass_2 = note("<~@8 A@36 ~@6 A@18 ~@12 A@5 B@2 C ~@16 A@5 B@2 C A@52>".pickRestart({
  A: "bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3",
  B: "bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3, [d5,f5]@15 ~", // Dm
  C: "bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3 bb2 bb3, [d5,f5]@13 ~@3", // Dm
})).s("gm_synth_brass_2").gain(0.21).pan(0.4)

// drums · kick
// … 47 more lines

More by Madonna