Strudelify
Express Yourself cover art

1989 · Like a Prayer

Express Yourself

Madonna

KeyC majorTempo120 bpm
0:00/0:00
// Express Yourself — Madonna
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 116 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(120/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 · fretless bass · "tk2"
const bass = note(`<
  ~@3 A B A C A B A C A B A C A B A C D E F B D E F B D E F B D E F B A B A C A B A C D E F B D E F B D E F B D E F B A
  B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~
>`.pickRestart({
  A: "g1 ~@5 g1 ~ f1 ~@2 e1 ~@2 c1 ~", B: "~@2 g1 ~@2 g1 ~@2 f1 ~@2 e1 ~@2 c1 ~",
  C: "~@2 g1 ~@2 g1 ~@2 f1 ~@2 e1 ~@2 d1 ~", D: "g1 ~@3 g1 ~@3 f1 ~@2 e1 ~@2 c1 ~",
  E: "~@2 f1 ~@2 f1 ~@2 d1 ~@2 c1 ~@2 e1 ~", F: "f1 ~@3 f1 ~@3 f1 ~@2 d1 ~@2 g1 ~",
})).s("gm_fretless_bass").gain(0.4)

// chords · synth bass 1 · "tk3"
const synth_bass_1 = note(`<
  ~@11 A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A
  B C D A B C D ~@8 A B C D A B C D A B C D A B C D A B C D A B C D E F E G E F E G ~
>`.pickRestart({
  A: "[b3,d4,g4]!2 ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4]!2 ~", // G
  B: "~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4] [a3,c4,f4] ~ [a3,c4,f4] ~", // F Am F
  C: "~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4]!4 ~@2 [a3,c4,f4] ~@2", // F
  D: "~ [b3,d4,g4] ~ [b3,d4,g4] g4 [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] ~ [b3,d4,g4] [b3,g4] [b3,d4,g4] [b3,d4] [b3,d4,g4]", // G Em G Bm G
  E: "[a3,c4,f4]!2 ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] [g3,c4,e4] ~ [g3,b3,d4] ~@3", // F C G
  F: "~ [a3,c4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] [g3,c4,e4] ~ [b3,d4] ~@3", // Am F C Bm
  G: "~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] ~ [a3,c4,f4] [g3,c4,e4] ~ [g3,b3,d4] ~ [b3,d4,g4] [d4,g4]", // F C G G5
})).s("gm_synth_bass_1").gain(0.09).pan(0)

// other · string ensemble 1 · "tk5"
const string_ensemble_1 = note(`<
  ~@2 A B ~@2 C D ~@2 E D ~@2 F G ~@2 H I ~@2 J K ~@2 L I ~@2 M N ~@2 O D ~@2 P Q ~@2 R K ~@2 M I ~@2 S I ~@2 T G ~@2 U
  V ~@2 W K ~@2 X Y ~@6 Z AA AB N AC N AB N AD K ~@2 AE K ~@2 AF AG ~@2 AH G ~@2 AI AJ AK AL AM ~@13
>`.pickRestart({
  A: "~@4 [g3,g4] ~@3 [e3,e4] ~@3 [d3,d4] ~@3", B: "[c3,c4] ~@7", C: "~@10 [f3,f4] [e3,e4] [f3,f4] [e3,e4] [d3,d4] ~",
  D: "[g2,g3] ~@15", E: "~@2 [g3,g4] ~@2 [g3,g4] ~@2 [f3,f4] ~@2 [e3,e4] ~@2 [d3,d4] ~",
  F: "~@2 [g3,g4] ~@2 [g3,g4] ~@2 [f3,f4] ~@2 [e3,e4] ~@2 [d3,d4]@2", G: "[g2,g3] ~@7",
  H: "~@2 [g3,g4] ~@2 [g3,g4] ~@2 [f3,f4] ~@2 [e3,e4]@2 ~ [d3,d4]@2", I: "[g2,g3]@3 ~@13",
  J: "[d3,d4]@2 [e3,e4] ~ [d3,d4]@2 [e3,e4]@2", K: "[g3,g4]@3 ~@13",
  L: "~@4 [d3,d4]@2 [e3,e4] ~ [f3,f4]@2 [e3,e4] ~ [d3,d4]@2 [c3,c4] ~", M: "[b2,b3] [c3,c4] [c#3,c#4] [d3,d4]",
  N: "[g3,g4] ~@7", // G
  O: "[d3,d4] [e3,e4] [d3,d4] [e3,e4] [f3,f4] [e3,e4] [d3,d4] ~ [b2,b3] [c3,c4] [b2,b3] [c3,c4] [d3,d4] [c3,c4] [b2,b3] ~", // D E D E F E D B …
  P: "~@4 [b3,b4] [c4,c5] [d4,d5] [e4,e5]", Q: "[g4,g5]@3 ~@13", R: "~@2 [g4,g5] ~ e5 ~ [d4,d5] ~, ~@8 e4 ~@7",
  S: "~@2 d3 [e3,e4] f3 [e3,e4] [d3,d4] ~@3 [b2,b3] [c3,c4] [d3,d4] [c3,c4] [b2,b3] ~, ~ d4 f4 ~@5", // E D B C D C B
  T: "[d3,d4] [c3,c4] [b2,b3] [a2,a3]", // D C B A
  U: "[b3,b4] [c4,c5] [b3,b4] [c4,c5] [d4,d5] [c4,c5] [b3,b4] ~ [b3,b4] [c4,c5] [b3,b4] [c4,c5] [d4,d5] [b3,c4,c5] b4 ~", // B C B C D C B C …
  V: "[g4,g5] ~@15", W: "~@2 g4 ~ e5 ~ d5 ~, ~@4 g5 ~@3 e4 ~@3 d4 ~@3",
  X: "[b3,b4]@2 [c4,c5] ~ [b3,b4]@2 [c4,c5] ~ [b3,b4]@2 [c4,c5] ~ [d4,d5]@2 [e4,e5]@2", Y: "[g4,g5] ~@7",
  Z: "~@8 [b3,b4] [c4,c5] [b3,b4] [c4,c5] [d4,d5] ~ [b3,b4] ~", AA: "[g3,g4] ~@15", AB: "~@7 [f3,f4]",
  AC: "~@6 [f3,f4] ~@3 [f3,f4] ~@3 [f3,f4]@2", // F
  AD: "[b2,b3] [a2,a3] [b2,b3] ~ [c3,c4] [b2,b3] [c3,c4] ~ [d3,d4] [c3,c4] [d3,d4] ~ [e3,e4] [d3,d4] [e3,e4] ~", // B A B C B C D C …
  AE: "~@4 e4 ~ d5 ~, ~@8 e5 ~@3 d4 ~@3",
  AF: "[b3,b5] [c4,c6] [b3,b5] [c4,c6] [b3,b5] [c4,c6] [d4,d6] ~ [g3,g5] [a3,a5] [g3,g5] [a3,a5] [b3,b5] [a3,a5] [g3,g5] ~", // B C B C B C D G …
  AG: "[g3,g5] ~@15", AH: "[b2,b3] ~ [c3,c4] ~ [c#3,c#4] ~ [d3,d4] ~",
  AI: "~@2 [d3,d4] [e3,e4] [f3,f4] [e3,e4] [d3,d4] ~@3 [b2,b3] [c3,c4] [d3,d4] [c3,c4] [b2,b3] ~", // D E F E D B C D …
  AJ: "[g2,g3]@2 [g4,g5] ~@2 [g4,d5,g5] ~@2 [g4,d5,g5] ~@2 [g4,g5]@2 ~ [f4,f5] ~", // G G5 G F
  AK: "~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] ~@2 [f4,f5] ~", // G F
  AL: "~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,d5,g5] ~@2 [f4,f5] ~", // G G5 F
  AM: "~@2 [g4,g5] ~@2 [g4,d5,g5] ~@2 [g4,d5,g5] ~@2 [g4,d5,g5] ~@2 [f4,f5] ~", // G G5 F
})).s("gm_string_ensemble_1").gain(0.3)

// other · synth brass 1 · "tk6"
const synth_brass_1 = note(`<
  ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@3 g5",
})).s("gm_synth_brass_1").gain(0.19).pan(1)

// chords · pad poly · "tk7"
const pad_poly = note(`<
  ~@11 A B C D A B C D ~@16 A B C D A B C D ~@16 A B C D A B C D A B C D A B C D E F E G E F E G E F E G E F E G A B C D
  A B C D A B C D A B C D ~@9
>`.pickRestart({
  A: "~ [g3,b3,d4]@15", B: "[c4,e4], g3@7 ~", C: "[a3,c4,f4]", D: "[b3,d4,g4]@15 ~",
  E: "[b3,d4,g4] ~@5 [b3,d4,g4] ~ [a3,c4,f4] ~ g3 [g3,c4,e4] ~ g3 [g3,b3,d4] ~", // G F C G
  F: "~@6 [b3,d4,g4] ~ [a3,c4,f4] ~ g3 [g3,c4,e4] ~ g3 [g3,b3,d4] ~", // G F C G
  G: "~@6 [b3,d4,g4] g3 [a3,c4,f4] ~ g3 [g3,c4,e4] ~ g3 [g3,b3,d4] ~", // G F C G
})).s("gm_pad_poly").gain(0.2)

// chords · percussive organ · "tk8"
const percussive_organ = note("<~@51 A@4 B C D@2 ~@57>".pickRestart({
  A: "[~@4 d5@4 f5@8 [c5,e5]@8 d5@7 ~, g5@31 ~]/4", B: "[b3,d4,g4]", C: "[c4,f4,a4]@15 ~",
  D: "[a4 g4 a4 ~ [b3,d4]@4, [c4,f4]!2 ~@2, ~@3 g4@5]/2", // Bm F5
})).s("gm_percussive_organ").gain(0.15)

// other · lead 2 sawtooth · "tk9"
const lead_2_sawtooth = note(`<
  ~@11 A B A B A B A B ~@16 A B A B A B A B ~@16 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@8 g5!2 g4!2 ~ g4 g5!2", B: "g6!2 g5!2 ~ g5 g6!2 g5!2 g4!4 g5!2",
})).s("gm_lead_2_sawtooth").gain(0.12)

// drums · kick
const kick = s("bd").struct("<~@11 [x!4]!104 x>").gain(0.3)

// drums · clap
const clap = s("cp").struct("<~@3 A@8 B@8 A@16 B A B@6 A@16 B A B@6 A@11 ~ B@13 A B@22 ~>".pickRestart({
  A: "~@3 x", B: "~ x ~ x",
})).gain(0.35)

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

// drums · hihat
const hihat = s("hh").struct("<[x!4] ~@10 [x!2 ~ x ~ x ~ x!3 ~ x ~ x ~ x]!104 ~>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@11 [~ x!3 ~ x!3]!104 ~>").gain(0.2)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.3)

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@12 A ~ A ~ A ~ A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ A ~ A ~ A ~ A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ A ~ A ~ A ~ A ~ B
  ~ B ~ B ~ B ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@7 x!3 ~ x ~ x!2 ~", B: "~@7 x!8 ~",
})).gain(0.2)

// drums · shaker
const shaker = s("sh").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@4 x ~@7 x!2 ~@2", B: "~@4 x!2 ~@6 x!2 ~@2",
})).gain(0.25)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~@115 x>").gain(0.5)

stack(
  bass, synth_bass_1, string_ensemble_1, synth_brass_1, pad_poly, percussive_organ, lead_2_sawtooth, kick, clap, snare,
  hihat, open_hat, crash, cowbell, shaker, woodblocks
)

More by Madonna