Strudelify

What It Feels Like For a Girl

Madonna

KeyE♭ majorTempo102 bpm
0:00/0:00
// What It Feels Like For a Girl — Madonna
// 102 bpm, 8/8, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 lead 1 square (copy of ch 11 ocarina); ch 14 koto (copy of ch 13 electric guitar muted)
// note: Full arrangement: all 120 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(102/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.

// chords · pad warm
const pad_warm = note(`<
  ~@2 A B C D A B C D A B C E F@2 G H I@2 J K@2 L@2 M@3 N O A B C D A B C D A B C ~@8 P@2 ~@7 A B C D A B C O A B C D A
  B C Q ~@4 K@2 R@2 ~@5 A B C D A B C O A B C D A B C A@2 B C A@2 B C A@2 B S T U V W X@2
>`.pickRestart({
  A: "[bb3,eb4,g4]!8", B: "[ab3,c4,eb4]!8", C: "[f3,ab3,c4,eb4]!8", D: "[eb3,g3,bb3]!8",
  E: "[g3,c4]@2 bb3 [g3,bb3,eb4]@5", // C5 Eb
  F: "[[g3,c4]@2 bb3 [g3,bb3,eb4]@2 bb3 [ab3,c4] [g3,c4]@2 [g3,bb3]@5 [ab3,c4,eb4]@2]/2", // C5 Eb Ab C5 Gm Ab
  G: "[g3,bb3,eb4]@2 [g3,bb3,f4] [ab3,c4,eb4]", H: "[g3,c4]@2 ~ [g3,bb3,eb4]@5",
  I: "[[g3,c4]@2 ~ [g3,bb3,eb4]@2 [ab3,c4]@2 [g3,c4]@2 [g3,bb3]@5 [ab3,c4,eb4]@2]/2", J: "[g3,bb3,eb4]@3 ab3", K: "eb4",
  L: "c4",
  M: "[[bb3,eb4,g4]@2 ~ [bb3,eb4,g4]@2 ~@2 [c4,eb4,g4]@2 ab4@2 [c4,eb4,g4]@2 ~@2 [ab3,c4,eb4,g4]@3 ~ [ab3,c4,eb4,g4]@2 ~@3]/3", // Eb Cm Abmaj7
  N: "bb3 ~", O: "[g3,bb3,eb4]@5 [eb4,g4,bb4]@2 g4",
  P: "[[g3,c4]@2 bb3 [g3,bb3,eb4]@2 bb3@2 [ab3,c4]@2 bb3@2 [g3,bb3,eb4]@2 [g3,bb3]@3]/2", Q: "[g3,bb3,eb4]",
  R: "[~@7 [ab3,c4]@2 bb3@2 [g3,bb3,eb4]@2 bb3 eb4 f4, db4 ~]/2", // Ab Eb
  S: "[f3,ab3,c4,eb4]!3 [f3,ab3,c4,eb4]@2 [f3,ab3,c4]@2 ~", T: "[g3,bb3,eb4]@5 [eb4,g4,bb4]@2 ~",
  U: "[bb3,eb4,ab4]@2 [bb3,eb4,g4]@3 g4@2 ~", V: "[ab3,c4,eb4]@5 [c4,eb4,bb4]@2 g4",
  W: "[c4,eb4,ab4]@2 [c4,eb4,g4]@2 [ab3,c4,f4] eb4 [ab3,c4,eb4]@2", X: "[[g3,bb3,eb4]@3 ~]/2",
})).s("gm_pad_warm").gain(0.43)

// chords · pad metallic
const pad_metallic = note(`<
  ~@2 A B C D A B C D A B C ~@17 A B C D A B C D A B C ~@17 A B C D A B C ~ A B C D A B C ~@14 A B C D A B C ~ A B C D A
  B C ~@3 C ~@3 C ~@10
>`.pickRestart({
  A: "[bb3,eb4,g4]!8", B: "[ab3,c4,eb4]!8", C: "[f3,ab3,c4,eb4]!8", D: "[eb3,g3,bb3]!8",
})).s("gm_pad_metallic").gain(0.32)

// bass · electric bass finger
const bass = note(`<
  ~@2 A B C D A B C D A B C E F G@2 E F G E@2 H I E J K L M D H K I E H K I E A B C E F G@2 E F G E@2 H I E J K L M D H
  K I E H K I D H K I E H K I E ~@4 E ~ I E J K L M D H K I E H K I D H K I E H K I N O P I N O P I N O P I E H K I D ~
>`.pickRestart({
  A: "f2", B: "ab2", C: "db2", D: "eb2", E: "eb2@7 eb2 eb2@4 ~@4", F: "f2@7 f2 f2@4 ab2@4", G: "eb2@7 eb2 eb2@4 ab2@4",
  H: "f2@7 f2 f2@4 ~@4", I: "db2@7 db2 db2@4 ~@4", J: "f2@7 f2 f2@4 g2@4", K: "ab2@7 ab2 ab2@4 ~@4",
  L: "db2@7 db2 db2@4 db2@4", M: "eb2@7 eb2 eb2@8", N: "eb2@7 eb2@7 ~@2", O: "f2@7 f2@7 ~@2", P: "ab2@7 ab2@7 ~@2",
})).s("gm_electric_bass_finger").gain(0.4)

// other · ocarina
const ocarina = note("<A@2 ~@6 A@2 ~@66 A@2 ~@42>".pickRestart({
  A: "[~@7 ab4, ~@3 bb4@12 ~]/2",
})).s("gm_ocarina").gain(0.59)

// chords · pad halo
const pad_halo = note("<~@41 A B@2 C D E@2 F G@2 H@2 I@3 J K ~@24 I@3 J K ~@33>".pickRestart({
  A: "[g3,c4]@2 bb3 [g3,bb3,eb4]@5", // C5 Eb
  B: "[[g3,c4]@2 bb3 [g3,bb3,eb4]@2 bb3 [ab3,c4] [g3,c4]@2 [g3,bb3]@5 [ab3,c4,eb4]@2]/2", // C5 Eb Ab C5 Gm Ab
  C: "[g3,bb3,eb4]@2 [g3,bb3,f4] [ab3,c4,eb4]", D: "[g3,c4]@2 ~ [g3,bb3,eb4]@5",
  E: "[[g3,c4]@2 ~ [g3,bb3,eb4]@2 [ab3,c4]@2 [g3,c4]@2 [g3,bb3]@5 [ab3,c4,eb4]@2]/2", F: "[g3,bb3,eb4]@3 ab3", G: "eb4",
  H: "c4",
  I: "[[bb3,eb4,g4]@2 ~ [bb3,eb4,g4]@2 ~@2 [c4,eb4,g4]@2 ab4@2 [c4,eb4,g4]@2 ~@2 [ab3,c4,eb4,g4]@3 ~ [ab3,c4,eb4,g4]@2 ~@3]/3", // Eb Cm Abmaj7
  J: "bb3 ~", K: "[g3,bb3,eb4]@5 [eb4,g4,bb4]@2 g4",
})).s("gm_pad_halo").gain(0.32)

// chords · electric guitar muted · Ab Eb Fm Eb
const electric_guitar_muted = note(`<
  ~@74
  [[eb3,ab3,c4]@2 ~@2 [eb3,g3,bb3]@2 ~ [eb3,g3,bb3] [f3,ab3,c4]@2 ~@2 [eb3,g3,bb3]@2 ~@2]!4
  ~@42
>`).s("gm_electric_guitar_muted").gain(0.32)

// bass · slap bass 1
const bass_2 = note("<~@78 [eb1@7 bb1 c2@2 g1@4 bb1@2]!2 db1 ~@39>").s("gm_slap_bass_1").gain(0.22)

// drums · kick
const kick = s("bd").struct("<~@10 A@46 B ~ A@20 ~@4 A@3 B ~ A@30 ~@3>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.52)

// drums · snare
const snare = s("sd").struct("<~@10 A@19 B@27 C ~ B@20 ~@4 B@3 C ~ B@30 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@2 x ~@8",
})).gain(0.52)

// drums · low tom
const low_tom = s("lt").struct("<~@9 [~@6 x!2] ~@110>").gain(0.52)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@9 A B@19 C@27 ~@2 C@20 A@4 C@3 ~@2 C@30 ~@3>".pickRestart({
  A: "x!8", B: "~@3 x ~@3 x", C: "~@7 x",
})).gain(0.52)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 [~@10 x!2 ~@4] ~@110>").gain(0.52)

// drums · open hat
const open_hat = s("oh").struct("<~@10 A@46 B ~ A@20 ~@4 A@3 B ~ A@30 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.52)

// drums · shaker
const shaker = s("sh").struct("<~@2 A@7 ~ A@47 ~ A@20 ~@4 A@4 ~ A@30 ~@3>".pickRestart({
  A: "x!8",
})).gain(0.52)

stack(
  pad_warm, pad_metallic, bass, ocarina, pad_halo, electric_guitar_muted, bass_2, kick, snare, low_tom, pedal_hat,
  mid_tom, open_hat, shaker
)

More by Madonna