Strudelify
Material Girl cover art

1984 · Like a Virgin

Material Girl

Madonna

KeyD majorTempo80 bpm
0:00/0:00
// Material Girl — Madonna
// 80 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 156 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: The whole transcription plays 11 ms behind the beat; the grid follows it, so its parts stay together.
setcpm(80/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest.
// A part's distinct bars are riffs (A, B, C...) played in order, A@4 for four bars: edit a riff to change every repeat.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@4 A@2 B@2 A@2 B@2 A@2 C A D A@5 B E A@2 F A@3 B E G A F H I J K L M J K A@6 B E N A F A@3 B E A@2 F O I J K P K J K
  A@6 B E A@2 F A@2 Q B E A@2 F H I J K R K J K A@6 B E A@2 F A@3 B E A@2 F A@3 B E A@2 F A@3 B E A@2 F A I J K R K J K
  I J K S K J K T ~@8
>`.pickRestart({
  A: "d2@2 ~@2 d2@2 ~@2 a1 ~ d2@2 ~@2 a1 ~", B: "c2@2 ~@2 c2@2 ~@2 g1 ~ c2@2 ~@2 f#1 ~",
  C: "d2@2 ~@2 d2@2 ~@2 a1 ~ d2@2 ~@3 a1", D: "d2@2 ~@3 d2@2 ~ a1 ~ d2@2 ~@3 a1",
  E: "b1@2 ~@2 b1@2 ~@2 f#1 ~ b1@2 ~@2 a1 ~", F: "e2@2 ~@2 e2@2 ~@2 a1 ~ a2@2 ~@2 a1 ~",
  G: "d2@2 ~@3 d2@2 ~ a1 ~ d2@2 ~@2 a1@2", H: "d2@2 ~@2 d2@2 ~@2 a1 ~ d2 ~ e2@2 f#2 ~",
  I: "g2@2 ~@2 g1 ~ f#1@2 a1@2 ~@4 a1 ~", J: "a1@2 ~@2 a1 ~ f#1 ~ b1@2 ~@2 a1@2 ~@2",
  K: "g1@2 ~@2 g1 ~ f#1 ~ a1@2 ~@4 a1 ~", L: "b1@2 ~@2 b1 ~@2 f#1 a1@2 ~@4 a1 ~",
  M: "g1@2 ~@2 g1 ~ f#1 ~@2 a1@2 ~@3 a1 ~", N: "d2@2 ~@2 d2@2 ~@2 a1 ~@2 d2@2 ~ a1@2",
  O: "d2@2 ~@2 d2@2 ~@2 a1 ~ d2 ~@2 e2 f#2 ~", P: "b1@2 ~@2 b1 ~ f#1@2 a1@2 ~@5 a1",
  Q: "d2@2 ~@2 d2@2 ~@2 a1 ~@2 d2@2 ~ a1 ~", R: "b1@2 ~@2 b1@2 f#1@2 a1@2 ~@4 a1 ~",
  S: "b1@2 ~@2 b1@2 f#1 ~ a1@2 ~@4 a1@2", T: "d2 ~@7",
})).s("gm_electric_bass_finger").gain(0.3)

// other · piano · "A.PIANO"
const piano = note(`<
  ~@8 A@12 B@2 C D B@6 C D B@4 E F E G H F E B@6 C D B I B@4 C D B@3 J E F E G E F E B@6 C D B@6 C D B@4 E F E G E F E
  B@6 C D B@6 C D B@6 C D B@6 C D B@4 E F E G E F E@2 F E G E F E K ~@8
>`.pickRestart({
  A: "a4", B: "~@4 a4 ~ a4 ~@5 a4 ~ a4 ~", C: "~@4 c5 ~ c5 ~@5 c5 ~ c5 ~", D: "~@4 b4 ~ b4 ~@5 b4 ~ b4 ~", E: "b4 a4",
  F: "a4 b4", G: "a4@8 ~@2 a4@5 ~", H: "b4@8 ~ a4@7", I: "~@4 a4 ~@2 a4 ~@4 a4 ~ a4 ~", J: "~@4 a4 ~ a4 ~@6 a4!2 ~",
  K: "d5 ~@7",
})).s("gm_piano").gain(0.35)

// other · piano · "A.PIANO"
const piano_2 = note(`<
  ~@8 A B A B A B A B A B A B C@2 D C@7 D C@5 E F E G H F E C@6 D C@2 I C@4 D C@4 J E F E G E F E C@6 D C@7 D C@5 E F E
  G E F E C@6 D C@7 D C@7 D C@7 D C@5 E F E G E F E@2 F E G E F E K ~@8
>`.pickRestart({
  A: "c5", B: "d5", C: "~@4 d5 ~ d5 ~@5 d5 ~ d5 ~", D: "~@4 e5 ~ e5 ~@5 e5 ~ e5 ~", E: "d5 c#5", F: "c#5 d5",
  G: "c#5@8 ~@2 c#5@5 ~", H: "d5@8 ~ c#5@7", I: "~@4 d5 ~@2 d5 ~@4 d5 ~ d5 ~", J: "~@4 d5 ~ d5 ~@6 d5!2 ~",
  K: "f#5 ~@7",
})).s("gm_piano").gain(0.35)

// other · piano · "A.PIANO"
const piano_3 = note(`<
  ~@8 A B A B A B A B A B A B C D C D C D C D C D C D C D C D E F E G H I E C D C D C D C D C J C D C D C D C D C K E F
  E G E I E C D C D C D C D C D C D C D C D C D C D E F E G E I 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 C D C D C D C D E F E G E I E@2 F E G E I E L ~@8
>`.pickRestart({
  A: "g5", B: "f#5", C: "~@4 g5 ~ g5 ~@5 g5 ~ g5 ~", D: "~@4 f#5 ~ f#5 ~@5 f#5 ~ f#5 ~", E: "g5 a5", F: "a5@7 ~ f#5@8",
  G: "a5@8 ~@2 a5@5 ~", H: "g5@8 ~ a5@7", I: "a5 b5", J: "~@4 f#5 ~@2 f#5 ~@4 f#5 ~ f#5 ~",
  K: "~@4 f#5 ~ f#5 ~@6 f#5!2 ~", L: "a5 ~@7",
})).s("gm_piano").gain(0.35)

// drums · kick
const kick = s("bd").struct(`<
  A@2 B@17 C B@15 C B@10 C B@15 C B@10 C B@7 C B@7 C B@10 C B@15 C B@7 C B@14 C B@6 C A ~@8
>`.pickRestart({
  A: "x", B: "x!4", C: "x ~ x!3 ~ x!2",
})).gain(0.35)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@8 A@11 B A@15 B A@10 B A@15 B A@10 B A@7 B A@7 B A@10 B C@8 A@7 B A@7 B A@7 C A@6 B A@6 B ~@9
>`.pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "~@2 x!2 ~@2 x!2", C: "~ x ~ x",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<x!2 ~@154>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@2 [x!8]!145 ~@9>").gain(0.2)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A@6 ~@11 A ~@15 A ~@10 A ~@15 A ~@10 A ~@7 A ~@7 A ~@10 A@9 ~@7 A ~@7 A ~@7 A ~@6 A ~@6 A ~@9
>`.pickRestart({
  A: "~@7 x",
})).gain(0.2)

// drums · crash
const crash = s("cr").struct("<A ~ A ~ A ~@96 A ~ A ~ A ~ A ~@24 A@2 ~@3 A ~@2 A ~@3 A ~@2 A ~@8>".pickRestart({
  A: "x",
})).gain(0.2)

// drums · ride
const ride = s("rd").struct("<~@147 x ~@8>").gain(0.2)

stack(bass, piano, piano_2, piano_3, kick, snare, clap, low_tom, hihat, open_hat, crash, ride)

More by Madonna