Strudelify
Skin cover art

1998 · Ray of Light

Skin

Madonna

KeyC minorTempo143 bpm
0:00/0:00
// Skin — Madonna
// 143 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 192 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(143/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.

// other · piano
const piano = note("<~@98 A@2 B@4 ~@34 A@2 B@4 ~@10 A@2 B@4 ~@32>".pickRestart({
  A: "[d4@3 c4@3 ab3 d4@4 c4@4 d4]/2", B: "[eb4@4 d4@2 c4@4 d4@4 eb4@4 d4@4 c4@12 eb4@29 ~]/4",
})).s("gm_piano").gain(0.05)

// bass · synth bass 2
const bass = note(`<
  ~@29 A@19 B ~ C D E F C G H I E J K@2 L M N O C@25 D E F C G H I E J K@2 L M N O C@4 ~@20 C D E F C G H I E J K@2 L M
  N O C D E F C G H I E J K@2 L M N O C@29 P
>`.pickRestart({
  A: "c2@2 ~ c2@2 ~@9 bb1@2", B: "c2 ~@7", C: "c2@3 c2@3 ~@8 bb1@2", D: "c2@3 c2@3 ~@8 g1@2", E: "ab1@3 ab1@3 ~@8 g1@2",
  F: "ab1@3 ab1@3 ~@8 bb1@2", G: "c2@3 c2@3 ~@8 f1@2", H: "g1@3 g1@3 ~@8 f1@2", I: "g1@3 g1@3 ~@8 g1@2",
  J: "ab1@3 ab1@3 ~@8 eb1@2", K: "f1@3 f1@3 ~@8 eb1@2", L: "eb1@3 eb1@3 ~@8 eb1@2", M: "eb1@3 eb1@3 ~@8 ab1@2",
  N: "bb1@3 bb1@3 ~@8 ab1@2", O: "bb1@3 bb1@3 ~@8 bb1@2", P: "c2 ~@15",
})).s("gm_synth_bass_2").gain(0.69)

// other · clarinet
const clarinet = note(`<
  ~ A@4 B@2 C ~ D E F@2 G@2 ~@2 H I J ~ K L@3 M N@2 ~ O P ~@2 Q R ~ S T S U V S W X@2 S Y S Z ~ AA@2 AB@2 AC@2 AD ~ AE@2
  AF AG AH@2 ~@6 AI AJ ~ AK AL AM@2 AN AO AK AP AQ AK AL AR@2 AO AK AS ~ AT@2 AB@2 AC@2 AD ~ AE@2 AF AG AH@2 ~@6 AU@2
  ~@2 AV@2 ~ S AW S AX AY ~ S AZ S BA ~@3 AT@2 AB@2 AC@2 AD ~ AE@2 AF AG AH@2 ~@2 AA@2 AB@2 AC@2 AD ~ AE@2 AF AG AH@2
  ~@6 AU@2 ~@2 BB@2 BC ~@4 BD BE@2 ~ BD BF@2 BG BH BC ~@5
>`.pickRestart({
  A: "[~@11 g4@3 ~ g4@3 d5@6 ~ eb5@5 bb4@4 ~ bb4@5 c5@10 ~@14]/4",
  B: "[~@4 g4@3 ~ g4@2 ~ g4@3 ~ d5@5 ~ eb5@4 bb4@2 ~@2 bb4@3]/2", C: "g4@13 ~@3", D: "bb4@3 ~ bb4@2 ab4@5 ~ eb4@4",
  E: "bb4@3 ~ bb4@2 ab4@5 ~@2 ab4@2 ~", F: "[g4@3 ~ f4@3 ~ eb4@4 f4@2 g4@4 f4@4 eb4@6 ~@4]/2",
  G: "[~@4 bb4@3 ~ bb4@20 ~@4]/2", H: "~@8 bb4 ~ bb4@2 ~@2 c5@2", I: "~@2 g4@2 ~@2 bb4@3 ~ f5@6", J: "e5@11 ~@5",
  K: "~@11 bb4 ~@2 bb4 ~", L: "[~ c5@2 ~ g4@2 ~@2 bb4@2 ~@2 f5@6 ~ e5@16 ~@13]/3", M: "~@10 bb4 ~@2 bb4@2 ~",
  N: "[c5@2 ~@2 g4@2 ~@2 bb4@2 ~@3 f5@7 e5@11 ~]/2", O: "c5@2 g4@3 bb4@3", P: "f4@6 f4@9 ~",
  Q: "bb4@2 c5@3 c5@4 ~ g4@2 bb4@4", R: "f5@3 e5@5", S: "~@7 g4", T: "bb4@2 c5@4 c5@9 ~",
  U: "bb4@2 c5@3 ~ c5@4 f4 ~ f4 ~ f4@2", V: "~ e4 ~@6", W: "bb4@2 c5@3 ~ c5@3 ~ g4@2 f5@4", X: "[e5@13 ~@3]/2",
  Y: "bb4 c5 ~ c5@4 ~", Z: "bb4 ~ c5@2 ~@2 c5@10", AA: "[~@8 g4@2 g4@4 d5@6 d5@7 ~ bb4@4]/2", AB: "[bb4@6 c5@17 ~@9]/2",
  AC: "[~@4 g4@3 ~ g4 ~ g4@4 d5@4 eb5@6 bb4@4 bb4@4]/2", AD: "g4",
  AE: "[bb4@3 ~ bb4@2 ab4@6 eb4@2 bb4@4 bb4@4 ab4@6 ~@2 ab4@2]/2", AF: "g4@3 ~ f4@2 eb4@4 f4@3 ~ g4@2",
  AG: "~@2 f4@3 ~ eb4@5 ~@5", AH: "[~ bb4 ~ bb4@9 ~@4]/2", AI: "~@4 c5@2 ~@2 g4@3 ~ bb4@3 ~", AJ: "f4!2 ~@2",
  AK: "~@7 g3", AL: "bb3@2 c4@3 ~ c4@4 g3@2 bb3@4", AM: "[f4 e4@3]/2", AN: "c4@9 ~@5 g3@2", AO: "bb3@2 c4@3 ~ c4@9 ~",
  AP: "bb3@2 c4@3 ~ c4@3 ~ f3 ~ f3 ~ f3@2", AQ: "~@2 eb3 ~@13", AR: "[f4@4 e4@8 ~@3 g3]/2", AS: "bb3@2 c4@3 ~ c4@3 ~@7",
  AT: "[~@4 g4 g4@2 d5@3 d5@4 bb4@2]/2", AU: "[~@4 g5@3 ~ g5@2 ab5@4 g5@4 f5@8 ~@6]/2",
  AV: "[g5 ~ g5@3 ~ g5@4 f5@2 g5@2 ab5@13 ~@5]/2", AW: "bb4@2 c5@3 ~ c5@9 ~",
  AX: "bb4@2 c5@2 ~@2 c5@4 ab4 ~ ab4 ~ ab4@2", AY: "~@2 g4@5 ~@9", AZ: "bb4@2 c5@3 ~ c5@7 ~@3", BA: "bb4@2 c5@5 c5@9",
  BB: "[~@4 g5@3 ~ g5@2 ab5@4 g5@6 f5@4 d5@8]/2", BC: "eb5", BD: "~@14 g5 ~",
  BE: "[g5@3 ~ g5 ~ g5@4 f5@2 g5@2 ab5@15 ~@3]/2", BF: "[g5@3 ~ g5 ~ g5@4 f5@2 g5@2 ab5@18]/2", BG: "g5", BH: "f5",
})).s("gm_clarinet").gain(0.4)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@34 A B C D ~@6 E F@2 G ~@25 H I ~@2 J ~@8 K L M N ~@15 O ~@6 H I ~@2 J ~@7 K L M P@3 ~@39 H I ~@2 J ~@8 K L M N ~@6
>`.pickRestart({
  A: "~@14 [c2,g2,c3] ~", // C5
  B: "[c2,g2,c3] ~ [c2,g2,c3] ~ [c2,g2,c3] ~ [c2,g2,c3] ~ [c2,g2,c3] ~ [c2,g2,c3] ~ [c2,g2,c3]@3 ~", // C5
  C: "[c2,g2,c3]@3 ~ [c2,g2,c3]@3 ~ [c2,g2,c3]@3 ~ [c2,g2,c3]@3 ~", D: "[c2,g2,c3]@3 ~ [c2,g2,c3]@3 ~ [c2,g2,c3]@3 ~@5",
  E: "~@12 ab2!2 ~ ab2", F: "[ab2!2 ~ ab2!3 ~ ab2!3 ~ ab2!3 ~ ab2@2 ~@9 [c2,g2] ~ [c2,g2] ~ [c2,g2] [c2,g2,c3]]/2",
  G: "[c2,g2,c3]!2 [c2,g2,c3]@2 [c2,g2,c3]@2 ~@10", H: "~@7 c2!2 ~ c2!6", I: "c2 ~@7", J: "~@6 c2!6 c2@2 c2@2",
  K: "~@10 [c2,g2] ~ [c2,g2] ~ [c2,g2]!2", L: "[c2,g2]!2 [c2,g2]@2 [c2,g2]@2 ~@10", M: "~@14 [c2,g2] ~",
  N: "[c2,g2] ~ [c2,g2]!4 [c2,g2]@2 [c2,g2]@8", O: "~@2 c2@2 c2 ~ c2@2 ~@3 c2!2 ~ c2 ~",
  P: "[[c2,g2] ~ [c2,g2]!4 [c2,g2]@2 [c2,g2,bb4]@40]/3", // C5 C7
})).s("gm_distortion_guitar").gain(0.4).pan(0.3)

// chords · synth strings 2
const synth_strings_2 = note(`<
  A@3 B@2 C@2 D@2 E@2 F@2 G@2 H@2 ~@7 I@5 J@19 ~@2 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@2 J@24 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@2
  J@22 ~@2 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@2 K@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@2 J@29 ~
>`.pickRestart({
  A: "[~@5 d5, [c2,c3,c4,g4]]/3", B: "[ab1,ab2,ab3,eb4,bb4]/2", C: "[c2,c3,c4,g4]/2", D: "[g1,g2,g3,d4,bb4]/2",
  E: "[ab2,eb3,c4,eb4,bb4]/2", F: "[f2,c3,g3,c4,g4]/2", G: "[eb2,bb2,eb3,bb3,eb4,bb4]/2",
  H: "[bb1,bb2,f3,bb3,f4,bb4]/2", I: "[~ c4@9]/5", J: "bb3 c4@13 ~@2", K: "[~@3 d5, [c3,g3,c4,g4]]/2",
  L: "[ab2,eb3,eb4,bb4]/2", M: "[c3,g3,c4,g4]/2", N: "[g2,g3,d4,g4,bb4]/2", O: "[ab2,eb3,ab3,eb4,bb4]/2",
  P: "[f2,f3,c4,eb4,g4]/2", Q: "[eb2,eb3,bb3,eb4,bb4]/2", R: "[bb2,f3,bb3,f4,bb4]/2",
})).s("gm_synth_strings_2").gain(0.31)

// other · marimba
const marimba = note("<~@13 A@16 ~@37 B@24 ~@16 B@22 ~@34 B@29 ~>".pickRestart({
  A: "g2!2 bb2!2 g2 [g2,bb2] bb2!2 c3 bb2 c3 d3 g2 bb2 d3 bb2", B: "g2 ~ bb2!2 g2 [g2,bb2] bb2!2 c3 bb2 c3 d3 ~@2 d3 ~",
})).s("gm_marimba").gain(0.17).pan(0.2)

// other · marimba · soft notes
const marimba_soft = note(`<
  ~@66
  [~ g2 ~@10 g2 bb2 ~ bb2]!24
  ~@16
  [~ g2 ~@10 g2 bb2 ~ bb2]!22
  ~@34
  [~ g2 ~@10 g2 bb2 ~ bb2]!29
  ~
>`).s("gm_marimba").gain(0.11).pan(0.2)

// other · synth drum
const synth_drum = note("<~@29 A@19 B ~ A@16 ~@24 A@38 ~@2 A@61 B>".pickRestart({
  A: "f4 bb4 ~ bb4 ~@4 f4 bb4 ~ bb4 ~@4", B: "f4 ~@15",
})).s("gm_synth_drum").gain(0.23)

// chords · percussive organ
const percussive_organ = note(`<
  ~@50 A B C D A B E F C G H I J K L M N O P N O P N O P N O P N O P N O P N O P N O P A B C D A B E F C G H I J K L Q R
  S T R ~@20 A B C D A B E F C G H I J K L U A B C D A B E F C G H I J K L Q V W X V O P N O P N O P N O P N O P N O P N
  O P N O P N O ~
>`.pickRestart({
  A: "[g4,c5]@3 ~@3 [g4,c5]@3 ~@3 [g4,c5]@3 ~", B: "~@2 [g4,c5]@2 ~@4 [g4,c5]@3 ~@5",
  C: "[ab4,eb5]@3 ~@3 [ab4,eb5]@3 ~@3 [ab4,eb5]@3 ~", D: "~@2 [ab4,eb5]@3 ~@3 [ab4,eb5]@3 ~@5",
  E: "[g4,d5]@3 ~@3 [g4,d5]@3 ~@3 [g4,d5]@3 ~", F: "~@2 [g4,d5]@3 ~@3 [g4,d5]@3 ~@5",
  G: "~@2 [ab4,eb5]@2 ~@4 [ab4,eb5]@3 ~@5", H: "[f4,c5]@3 ~@3 [f4,c5]@3 ~@3 [f4,c5]@3 ~",
  I: "~@2 [f4,c5]@3 ~@3 [f4,c5]@3 ~@5", J: "[eb4,bb4]@3 ~@3 [eb4,bb4]@3 ~@3 [eb4,bb4]@3 ~",
  K: "~@2 [eb4,bb4]@2 ~@4 [eb4,bb4]@3 ~@5", L: "[f4,bb4]@3 ~@3 [f4,bb4]@3 ~@3 [f4,bb4]@3 ~",
  M: "~@2 [f4,bb4]@3 ~@3 [f4,bb4]@3 ~@4 eb3", N: "e3@3 e3 ~@2 e3@3 e3 ~@2 e3@3 e3",
  O: "~@2 e3@3 e3 ~@2 e3@3 e3 ~@2 e3@2", P: "~ e3 ~@2 e3@3 e3 ~@2 e3@3 e3 ~@2",
  Q: "~@2 [f4,bb4]@3 ~@3 [f4,bb4]@3 ~@4 bb2", R: "c3@3 c3 ~@2 c3@3 c3 ~@2 c3@3 c3",
  S: "~@2 c3@3 c3 ~@2 c3@3 c3 ~@2 c3@2", T: "~ c3 ~@2 c3@3 c3 ~@2 c3@3 c3 ~@2", U: "~@2 [f4,bb4]@3 ~@3 [f4,bb4]@3 ~@5",
  V: "[c3,e3]@3 [c3,e3] ~@2 [c3,e3]@3 [c3,e3] ~@2 [c3,e3]@3 [c3,e3]", // C
  W: "~@2 [c3,e3]@3 [c3,e3] ~@2 [c3,e3]@3 [c3,e3] ~@2 [c3,e3]@2", // C
  X: "~ [c3,e3] ~@2 [c3,e3]@3 [c3,e3] ~@2 [c3,e3]@3 [c3,e3] ~@2", // C
})).s("gm_percussive_organ").gain(0.34).pan(0.7)

// other · shanai
const shanai = note("<~@71 A B ~@5 C@2 D E F G ~@83 A B ~@5 C@2 D E F G ~@12>".pickRestart({
  A: "~ c5 ~ f5@2 c5 ~ f5@2 c5 ~ f5 ~ f5 eb5 ~", B: "f5@3 ~ c5 ~ f5 ~ c5 ~ eb5 ~ eb5@2 d5@2",
  C: "[~@13 c5 ~ f5@2 c5 ~ f5@2 c5 ~ f5 ~ f5 eb5 ~ f5@3 ~]/2", D: "c5 ~ f5 ~ c5 ~ eb5 ~ eb5@2 d5@2 ~@4",
  E: "~@8 c5 ~ f5@2 c5 ~ f5@2", F: "c5 ~ f5!2 ~ eb5 ~ f5@3 c5 ~ f5 ~ c5 ~", G: "eb5 ~ eb5@2 d5@2 ~@10",
})).s("gm_shanai").gain(0.05)

// drums · kick
const kick = s("bd").struct("<~@29 A@19 B ~ A@60 B ~@19 A@61 B>".pickRestart({
  A: "x!4", B: "x",
})).gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@50 A@15 B A@23 B A@16 C@3 D ~@20 E@15 B E@31 B E@13 ~>".pickRestart({
  A: "~@2 x ~@4 x", B: "~@4 x ~@5 x!6", C: "~@2 x ~@3 x!2", D: "~@4 x ~@7 x!4", E: "~@4 x ~@5 x!5 ~",
})).gain(0.24)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@65 A ~@23 A ~@40 B@15 ~ B@31 ~ B@13 ~>".pickRestart({
  A: "~@8 x!2 ~@6", B: "~@15 x",
})).gain(0.16)

// drums · hihat
const hihat = s("hh").struct("<~@28 A B C@18 D A C@78 ~@2 B C@15 B C@15 B C@15 B C@12 ~>".pickRestart({
  A: "~@8 x!8", B: "~ x!3", C: "x!4", D: "x",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@29 [~ x ~ x ~ x ~ x]!19 ~@2 [~ x ~ x ~ x ~ x]!78 ~@2 [~ x ~ x ~ x ~ x]!61 ~>")
  .gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("<~@106 [x!16]!22 ~@2 [x!16]!61 x>").gain(0.16)

// drums · crash
const crash = s("cr").struct("<~@29 A ~@40 A ~@35 A ~@3 A ~@19 A ~@15 A ~@15 A ~@15 A ~@12 A>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · ht
const ht = s("ht").struct("<~@130 [~ x ~ x]!61 ~>").gain(0.32)

stack(
  piano, bass, clarinet, distortion_guitar, synth_strings_2, marimba, marimba_soft, synth_drum, percussive_organ,
  shanai, kick, snare, snare_soft, hihat, open_hat, tambourine, crash, ht
)

More by Madonna