Strudelify
Bad Girl cover art

1992 · Erotica

Bad Girl

Madonna

KeyF♯ minorTempo72 bpm
0:00/0:00
// Bad Girl — Madonna
// 72 bpm, 4/4, key F# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/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 · "FRETLESS"
const bass = note(`<
  ~@4 A B C D A B C D E F C G E F C G ~ H I J K H I J L ~ A B C D A B C D E F C G E F C G ~ H I J K H I J L ~ E F C G E
  F C G E F C G E F C G ~ H I J K H I J L ~ H I J K H I J L ~@6
>`.pickRestart({
  A: "f#1 c#2", B: "f#1@7 ~ f#1@3 g#1@3 a1@2", C: "d2 c#2", D: "f#1@7 ~", E: "d2@8 c#2@6 e1 a1",
  F: "f#1@4 g#1@4 a1@4 b1 e2 c#2@2", G: "f#1@4 f#2@3 a1 g#1@2 ~ g#1 e1@4", H: "f#1@6 ~ f#1 a1@4 ~@2 f#1 a1",
  I: "b1@5 ~@2 b1 c#2 b1 f#1 b1 c#2 e2 c#2@2", J: "f#1@6 ~ f#1 a1@5 ~ f#1 a1",
  K: "b1@4 a1@2 ~ a1 g#1@3 f#1 e1 g#1 e1@2", L: "b1@15 ~",
})).s("gm_fretless_bass").gain(0.2)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~@2 A@2 ~@8 B C D E B C D E ~ F@2 G H I J K L M ~@8 B C D E B C D E ~ F@2 G H I J K L M B C D E B C D E B C D E B C D
  E ~ F@2 G H I J K L M F@2 G H I J K L ~@6
>`.pickRestart({
  A: "[~@17 a7@8 ~ [c7,e7] a6 b6 ~@3, ~@2 c#4@4 c#5 e5 g#5@3 e6@2 a6 c#7 e7 g#7@9 ~@7, ~@3 e4@22 ~@7, ~@4 g#4@21 ~@7, ~@5 a4@20 ~@7]/2", // C
  B: "[d3,a3,c#4,f#4] [b3,e4,g#4]", C: "[b3,e4,g#4,a4]", D: "[a3,c#4,f#4] [b3,e4,g#4]",
  E: "[b3,e4,g#4,a4]@8 [b3,e4,g#4]@7 ~", // E
  F: "[~@2 [f#3,c#4,f#4]@3 [b3,f#4]@3 [b3,f#4]@3 f#4@3 [f#3,c#4,f#4]@4 [f#3,c#4,f#4]@3 [f#3,b3,f#4]@3 [b3,f#4]@2 [f#3,e4]@3 [f#3,b3,d#4]@3, ~@11 b3@7 ~@8 b3 ~@5]/2", // F#5 B5 F#5 B5 F#7 B
  G: "~@2 [c#4,f#4]@3 [b3,f#4]@3 [b3,f#4]@3 f#3@3 b3@2, ~@2 b3 ~@8 [c#4,f#4]@5", H: "[b2,b3,e4] [b3,e4,g#4], g#4 ~@15",
  I: "~@2 [f#3,f#4]@3 [f#3,b3,f#4]@3 f#4@3 [f#3,c#4,f#4]@3 [f#3,b3,f#4]@2, ~@2 c#4@9 ~@5, ~@4 b3@3 ~", // F# B5 F#5 B5
  J: "~@2 [f#3,f#4]@3 [f#3,b3,f#4]@2 c#3 [f#3,b3,f#4]@3 ~@3 [f#3,b3,f#4]@2, ~@2 c#4@5 ~@4 [f#3,c#4,f#4]@4 ~, ~@13 c#3@2 ~", // F# B5 F#5
  K: "~@2 [f#3,f#4]@3 [f#3,b3,f#4]@3 [b3,f#4]@3 [f#3,f#4]@3 [f#3,b3,f#4]@2, ~@2 c#4@6 ~@3 c#4@5", // F# B5 F# B5
  L: "[b3,e4,a4]@8 [b3,e4,g#4]@7 ~, b2@15 ~", M: "[b3,e4,a4]@7 ~ [b3,e4,g#4]@6 ~@2, b2@7 ~",
})).s("gm_piano").gain(0.2)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note(`<
  ~@2 A@2 ~@17 B C D ~ E ~ E ~@19 B C D ~ E ~ E ~@19 B C D ~ E ~ E ~@2 B C D ~ E ~ E ~@7
>`.pickRestart({
  A: "[~@12 g#6@13 ~@2 b6 ~ a6 f#6 e6, g#3@25 ~@7, ~ a3@24 ~@7, ~@9 a5@16 ~@7, ~@10 c#6@15 ~@7]/2",
  B: "~@5 f#3@3 f#3@3 f#3@3 ~@2", C: "~@4 f#3 ~@3", D: "~@2 f#3@3 f#3@3 f#3@3 ~@3 f#3@2", E: "~@8 f#3@3 ~@5",
})).s("gm_piano").gain(0.1)

// other · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note(`<
  ~@4 A B C D E@2 F G H@2 I J@2 K L M N O P Q R S T U V W X Y Z AA AB AC AD G AE I@2 AF@2 K L M AG AH AI AJ R S AK AL AM
  AN ~@8 AO AP@2 AQ AR AS@2 AT AU AH AI Q R AV AW Q R AX AY AZ BA R S BB BC BD@7
>`.pickRestart({
  A: "~ f#5!2 e5 f#5 e5 f#5 e5 f#5 ~ e5 ~ c#5@4", B: "~ f#5!2 e5 f#5 ~ f#5 e5 f#5 ~ e5 ~ c#5 ~ e5 ~",
  C: "e5@5 ~ f#5 c#5", D: "c#5@15 ~", E: "~@2 f#5 e5 f#5@3 e5 f#5 e5 f#5 e5 c#5@2 e5@2",
  F: "~@4 f#5@2 e5 ~ e5@2 f#5 ~ f#5@3 e5", G: "f#5 ~ f#5 e5 f#5@10 ~@2",
  H: "[~@4 f#5@2 ~@2 g#5@4 a5 ~ g#5@6 f#5@8 ~@2 f#5 g#5]/2", I: "a5 g#5 a5 g#5 f#5@8 ~@2 f#5 g#5",
  J: "[g#5 ~ g#5@2 f#5@2 a5 ~ b5@4 b5@6 ~@2 f#5 ~ f#5@2 g#5@5 ~ g#5@2]/2", K: "a5 g#5 a5 g#5 f#5@9 ~ f#5 g#5",
  L: "a5 g#5 a5 g#5 f#5@6 e5 ~ e5@2 f#5@2", M: "c#5@12 ~@2 f#4 a4", N: "b4@2 b4 ~ b4@11 ~",
  O: "~@2 c#5@2 b4@3 ~ c#5 ~ c#5@2 b4@4", P: "~@2 b4!2 a4 ~ b4 a4 b4@2 a4 ~ f#4@4",
  Q: "~@2 c#5 ~ b4 ~ b4!3 c#5 b4 a4 f#4@4", R: "~@2 b4 ~ b4 c#5 b4 a4 b4 ~ a4 ~ f#4@4", S: "~@2 b4 ~ b4@3 ~ b4 ~ b4@6",
  T: "~@2 b4 a4 b4@2 a4@2 b4 ~ a4 ~ f#4@4", U: "~@2 c#5@2 b4 ~ b4!2 b4@3 a4 f#4@4", V: "~ b4!2 ~ b4@2 a4@9 ~",
  W: "~ a4 b4 ~ b4@2 a4@8 ~@2", X: "~ f#5!2 e5 f#5@3 e5 f#5 e5 f#5 e5 c#5@3 ~",
  Y: "~ f#5!2 e5 f#5@3 e5 f#5@2 e5@2 c#5@2 e5 ~", Z: "f#5@4 e5@7 ~ f#5@2 c#5@2", AA: "c#5@13 ~@3",
  AB: "~ e5@5 ~ e5 f#5 e5 f#5 e5 c#5@2 e5 ~", AC: "~ e5 f#5 e5 f#5@3 e5 f#5 e5 f#5 e5 c#5@2 e5@2",
  AD: "~@4 f#5@2 e5 ~ e5@4 f#5@3 e5", AE: "~@4 f#5@2 ~@2 g#5@4 a5@2 ~ g#5",
  AF: "[g#5 ~ g#5@2 f#5@2 a5 ~ b5@4 b5@6 ~@2 f#5 ~ f#5@2 g#5@4 a5@3 ~]/2", AG: "b4@2 b4 ~ b4@12",
  AH: "~@2 c#5@2 b4@3 ~ b4 ~ b4@6", AI: "~@2 b4!2 a4 ~ b4 a4 b4 ~ a4 ~ f#4@4",
  AJ: "~@2 c#5 ~ b4 ~ b4!2 b4@2 ~ a4 f#4@4", AK: "~@2 b4 a4 b4 ~ a4 ~ b4@2 a4@2 f#4@4",
  AL: "~@2 c#5 ~ b4 ~ b4!2 b4@3 a4 f#4@4", AM: "~@2 a4 ~ b4@2 a4@10", AN: "~@2 b4 ~ b4@2 a4@9 ~",
  AO: "~@4 f#5@4 g#5@4 a5@2 ~ g#5", AP: "[a5 g#5 a5 g#5 f#5@9 ~ f#5 g#5@5 f#5@9 ~ f#5@2]/2",
  AQ: "g5@2 f#5@4 a5 ~ b5@4 b5@4", AR: "~@4 f#5 ~ f#5@2 g#5@4 ~@2 g#5@2",
  AS: "[a5 g#5 a5 g#5 f#5@8 ~@2 f#5 g#5@5 f#5@5 ~ e5 ~ e5@2 f#5@2]/2", AT: "c#5@13 ~ f#4 a4", AU: "c#5 b4!2 ~ b4@11 ~",
  AV: "~@2 c#5 ~ b4@4 c#5 ~ c#5 ~ b4@4", AW: "~@2 b4!2 a4@2 b4 a4 b4@2 a4@2 f#4@4", AX: "~ f#4 b4 ~ b4 a4 b4@10",
  AY: "~@2 c#5 ~ b4@4 c#5 ~ c#5@2 b4@4", AZ: "~@2 b4 ~ b4 c#5 b4 a4 b4 ~ a4 ~ e4@4",
  BA: "~@2 c#5 ~ b4@3 a4 b4 c#5 b4 a4 f#4@4", BB: "~@2 b4 a4 b4 ~ a4 ~ b4 ~ a4 ~ f#4@4",
  BC: "~@2 c#5 ~ b4 ~ b4 ~ b4 c#5 b4 a4 f#4@4", BD: "[~ f#4 a4 ~ b4 ~ a4@97 ~@9]/7",
})).s("gm_lead_8_bass_lead").gain(0.25)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@4 A@8 B@8 ~ C@2 D@2 C@2 D@2 ~ A@8 B@8 ~ C@2 D@2 C@2 D@2 ~ B@16 ~ C@2 D@2 C@2 D@2 ~ C@2 D@2 C@2 D@2 ~@6
>`.pickRestart({
  A: "[[f#3,f#4]@40 [g#3,g#4]@8 [a#3,a#4]@15 ~, [c#4,c#5]@63 ~]/4", B: "c#6/4",
  C: "[f#4 g#4 [c#4,a4]@2, e4@15 ~, b3 ~]/2", D: "[f#4@8 g#4@8 [c#4,a4]@8 [b3,g#4]@7 ~, e4@31 ~, b3 ~]/2",
})).s("gm_string_ensemble_1").gain(0.07)

// chords · string ensemble 1 · "STRINGS" · soft notes
const string_ensemble_1_soft = note("<~@12 A@8 ~@18 A@8 ~@10 A@16 ~@24>".pickRestart({
  A: "f#5/4",
})).s("gm_string_ensemble_1").gain(0.05)

// other · pad poly · "POLYSYNTH"
const pad_poly = note("<~@13 A ~@3 A ~@4 A ~@3 A ~@12 A ~@3 A ~@4 A ~@3 A ~@4 A ~@3 A ~@3 A ~@3 A ~@26>".pickRestart({
  A: "~@10 e5@3 d#5@3",
})).s("gm_pad_poly").gain(0.2)

// other · pad poly · "POLYSYNTH" · soft notes
const pad_poly_soft = note(`<
  ~@14 A ~@3 A ~@4 A ~@3 A ~@12 A ~@3 A ~@4 A ~@3 A ~@4 A ~@3 A ~@3 A ~@3 A ~@25
>`.pickRestart({
  A: "f#5 ~",
})).s("gm_pad_poly").gain(0.15)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note("<~@30 A B@2 C D E@2 F ~@58>".pickRestart({
  A: "[f#3,c#4,e4,a4] [g#3,b3,e4,g#4]", // F#m7 E
  B: "[[f#3,c#4,f#4,a4]@8 [c#4,f#4,a4]@3 e4@3 e4@2 [c#4,d4,f#4]@8 [b3,e4,g#4,b4]@8, ~ f#3 ~@2, ~@11 [g#4,b4]@5 ~@16, ~@7 [a4,c#5]@5 ~@4]/2", // F#m Dmaj7 E G#m A
  C: "[f#3,f#4,a#4,c#5]@7 ~", D: "[f#3,a3,c#4,f#4] [g#3,b3,g#4], ~@4 e4@3 ~",
  E: "[[f#3,c#4,f#4,a4]@8 [c#4,f#4,a4]@3 [e4,g#4]@3 [e4,a4] ~ [d4,a4]@8 [e4,b4]@8, ~@8 f#3@7 ~ f#4@6 ~@2 g#4@6 ~@2, ~@11 b4 ~@2 c#5@10 ~@8]/2", // F#m E A5 D5 E5
  F: "[f#3,f#4,a#4,c#5]@15 ~", // F#
})).s("gm_epiano1").gain(0.13)

// chords · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note(`<
  ~@12 A B A C A D A E ~@8 F G ~@8 A B A C A D A E ~@8 F G A B A C A D A E A B A C A D A E ~@8 F G ~@7 F ~@6
>`.pickRestart({
  A: "[a3,c#4,f#4] [b3,e4,g#4]", B: "[c#4,e4,a4]", C: "[c#4,e4,a4] [b3,e4,g#4]", D: "[c#4,e4,a4]@15 ~",
  E: "[c#4,e4,a4]@8 [b3,e4,g#4]@7 ~", F: "[b3,e4,a4]@8 [b3,e4,g#4]@7 ~, b2@15 ~",
  G: "[b3,e4,a4]@8 [e4,g#4]@7 ~, ~@8 b3 ~@7", // Esus4 E
})).s("gm_synth_brass_2").gain(0.12)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@5 A ~@3 A ~@3 A ~@3 A ~@4 A ~@3 A ~@4 A ~@3 A ~@3 A ~@3 A ~@4 A ~@3 A ~@4 A ~@3 A ~@3 A ~@3 A ~@4 A ~@3 A ~@4 A ~@3
  A ~@8
>`.pickRestart({
  A: "~@7 x",
})).gain(0.15)

// drums · rim
const rim = s("rim").struct("<[~ x ~ x]!4 ~@16 [~ x ~ x] ~@25 [~ x ~ x] ~@25 [~ x ~ x] ~@23>").gain(0.3)

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

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@13 A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~@9 A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A
  ~ A ~ A@2 ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "~@12 x!2 ~@2",
})).gain(0.2)

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@13 A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~@9 A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A
  ~ A ~ A@2 ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "~@9 x!2 ~@5",
})).gain(0.15)

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "~ x ~@2",
})).gain(0.2)

// drums · splash
const splash = s("cr").struct(`<
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~@7
>`.pickRestart({
  A: "~@5 x ~@10",
})).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@2 B A B A B A B@2 A B A B A B A B A B A B A B A B A@2 B A B A B A B@2 A B A
  B A B A B A B A B A B A B A@2 B A B A B A B@2 A B A B A B A C ~@6
// … 31 more lines

More by Madonna