Strudelify
Causing a Commotion cover art

1987 · Who's That Girl Soundtrack

Causing a Commotion

Madonna

KeyC minorTempo120 bpm
0:00/0:00
// Causing a Commotion — Madonna
// 120 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 140 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.

// other · soprano sax · "Niki & Donna (S. Sax)"
const soprano_sax = note(`<
  ~@24 A B C D A B C E ~@16 A B C D A B C E ~@16 A B C D A B C F@2 G@2 H@2 G@2 I J@3 K@2 L M N O ~@10 P ~@4 J@3 K@2 L M
  N Q B C D A B C F@2 G@2 R@2 G@2 H@2 G@2 ~
>`.pickRestart({
  A: "~@2 c4@2 c4@2 c4@2 eb4@2 ~ c4@3 c4@2", B: "~@2 c4@2 c4@2 bb3@2 bb3@2 c4@2 c4@3 ~", C: "c4!4 eb4 c4!3",
  D: "[c4,c5]@2 [c4,c5]@2 [bb3,c5]@2 [bb3,bb4]@2 [bb3,bb4]@2 [c4,g4]@2 [c4,g4]@3 ~", // C Bbsus2 Bb C5
  E: "[c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [bb3,bb4]@2 [bb3,bb4]@2 [c4,g4]@2 [c4,g4]@3 ~", // C Bb C5
  F: "[[c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [bb3,bb4]@2 [bb3,bb4]@2 [c4,g4]@2 [c4,g4]@15 ~@5]/2", // C Bb C5
  G: "[[c4,g4]!2 [c4,f4] [c4,eb4] eb4 [c4,f4] g4@6 f4@2 ~@2, ~@3 c4@4 ~]/2", // C5 F5 Cm F5
  H: "[[c4,c5]!3 [c4,bb4] [bb3,bb4] [c4,g4] g4@6 f4@2 ~@2, ~@3 c4@4 ~]/2", // C C7 Bb C5
  I: "[c4,c5]!3 [c4,bb4] [bb3,bb4] [c4,g4] [c4,g4]@2", // C C7 Bb C5
  J: "[~@6 eb4@2 d4@3 ~ c4@2 d4@5 ~ bb3@2 bb3@2 g3@2 d4@3 ~ d4@5 ~@7 eb4@2 d4@2 d4@2]/3",
  K: "[c4@3 ~ c4@3 ~ bb3@3 ~ c4@2 ab3@5 ~ ab3@3 ~ bb3@3 ~ d4@3 ~]/2", L: "~@4 c4@3 ~ d4@3 ~ g4@3 ~",
  M: "[f4,bb4]@5 ~@2 bb4", N: "c5@3 ~ bb4@2 ab4@2 g4@2 ab4@2 bb4@2 c5@2", O: "bb3@3 ~@13",
  P: "c5@3 ~ bb4@3 ~ ab4@4 g4@3 ~", Q: "bb3@2 c4@2 c4@2 c4@2 eb4@2 ~ c4@3 c4@2",
  R: "[[c4,c5]@2 [c4,c5]@2 [c4,c5]@2 [c4,bb4]@2 [bb3,bb4]@2 [c4,g4]@2 [c4,g4]@15 ~@5]/2", // C C7 Bb C5
})).s("gm_soprano_sax").gain(0.36)

// chords · piano · "Elec Grand Piano"
const piano = note(`<
  ~@16 A B C D A B C D A B C D A B C D E F G H E F G I E F G H E F G I A B C D A B C D E F G H E F G I E F G H E F G I A
  B C D A B C D A B C D A B C D J K L M@2 N O@2 A B C D A B C D E F G H E F G I J K L M@2 N O@2 A B C D A B C D A B C D
  A B C D A B C P
>`.pickRestart({
  A: "~@2 [bb3,c4,eb4,g4]@2 [bb3,c4,eb4,g4]!2 ~@2 [bb3,c4,eb4,g4]@2 ~ [bb3,c4,eb4,g4] ~@2 [bb3,c4,eb4,g4]!2", // Cm7
  B: "[bb3,c4,eb4,g4]@2 [bb3,c4,eb4,g4]@2 ~ [bb3,c4,eb4,g4]@2 ~ [bb3,c4,eb4,g4]@2 ~@4 [bb3,c4,eb4,f4]!2", // Cm7 Bbsus4
  C: "[bb3,c4,eb4,f4]@2 [bb3,c4,eb4,g4]@2 ~ [bb3,c4,eb4,g4]@2 ~ [bb3,c4,eb4,g4]@2 ~@4 [bb3,c4,eb4,g4]!2", // Bbsus4 Cm7
  D: "[bb3,c4,eb4,g4]@2 [bb3,c4,eb4,g4]@2 ~ [bb3,c4,eb4,g4]@2 ~ [bb3,c4,eb4,g4]@2 ~@2 [c4,eb4,g4]!4", // Cm7 Cm
  E: "[c4,eb4,g4]@3 ~ [bb3,d4,f4]@3 ~ [bb3,d4,f4]@2 ~ [ab3,c4,eb4] ~@4", // Cm Bb Ab
  F: "[c4,eb4,g4]@2 [c4,eb4,g4]@2 ~ [bb3,d4,f4]@2 ~ [ab3,c4,eb4]@3 ~ [bb3,d4,f4]@3 ~", // Cm Bb Ab Bb
  G: "[c4,eb4,g4]@3 ~ [c4,eb4,g4]@3 ~ [bb3,d4,f4]@2 ~ [ab3,c4,eb4] ~@4", // Cm Bb Ab
  H: "[ab3,c4,eb4]@2 [ab3,c4,eb4]@2 ~ [c4,eb4,g4]@2 ~ [bb3,d4,f4]@3 ~ [f3,bb3,d4]@3 ~", // Ab Cm Bb
  I: "[ab3,c4,eb4]@2 [ab3,c4,eb4]@2 ~ [bb3,d4,f4]@2 ~ [ab3,c4,eb4]@3 ~ [bb3,d4,f4]@3 ~", J: "[ab3,c4,eb4]@13 ~@3",
  K: "[bb3,d4,f4]@13 ~@3", L: "[g3,bb3,d4]@13 ~@3", M: "[ab3,c4,eb4]@3 ~ [g3,bb3,d4]@3 ~",
  N: "[f3,ab3,c4]@3 ~ [g3,bb3,d4]@3 ~", O: "[[bb3,d4,f4]@13 ~@3]/2",
  P: "[bb3,c4,eb4,g4]@2 [eb4,eb5]@2 [d4,d5]@2 [g3,g4]@2 [bb3,bb4]@2 ~ [c4,c5]@3 [c4,c5]@2", // Cm7 Eb D G Bb C
})).s("gm_piano").gain(0.29)

// other · synth brass 1 · "Synth Brass"
const synth_brass_1 = note(`<
  ~@15 A ~@7 A ~@7 A ~@2 B ~@3 B ~ C ~ B A C ~ B ~@8 A ~@2 B ~@3 B ~ C ~ B A C ~ B ~@8 A ~@7 A ~@15 A C ~ B A C ~ B ~@16
  A ~@11 D
>`.pickRestart({
  A: "~@8 [bb3,bb4] [c4,c5] [eb4,eb5] [g4,g5] [c4,c5] [g4,g5] [bb4,bb5] [c5,c6]", // Bb C Eb G C G Bb C
  B: "[c4,eb4,g4,bb4] ~ [c4,eb4,g4,bb4] ~@5", C: "[c4,eb4,g4,bb4] ~@7",
  D: "~@2 [eb4,eb5] ~ [d4,d5] ~ [g3,g4] ~ [bb3,bb4]@2 ~ [c4,c5]@2 ~ [c5,c6] ~", // Eb D G Bb C
})).s("gm_synth_brass_1").gain(0.42)

// chords · electric guitar clean · "Elec Guitar (Clean)"
const electric_guitar_clean = note(`<
  ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@2 B ~@3 B ~ C ~ B ~ C ~ B D ~@3 A ~@3 A ~@2 B ~@3 B ~ C ~ B ~ C ~ B D ~@3 A ~@3
  A ~@3 A ~@3 A ~@6 E@2 F G F H F G F H C ~ B ~ C ~ B D ~@6 E@2 ~@3 A ~@3 A ~@11 I
>`.pickRestart({
  A: "~@12 [c4,eb4,g4,bb4]!4", B: "[bb4,bb5] ~ [bb4,bb5] ~@5", C: "[bb4,bb5] ~@7",
  D: "~@8 [ab3,c4,eb4]@3 ~ [bb3,d4,f4]@3 ~", E: "[bb4,bb5] ~ [bb4,bb5] ~ [bb4,bb5] ~ [bb4,bb5] ~",
  F: "[eb4,eb5]@3 ~ [d4,d5]@3 ~ [bb3,bb4]@2 ~ [g3,g4]@3 ~@2", // Eb D Bb G
  G: "~@2 [eb4,eb5]@2 [d4,d5]@3 ~ [bb3,bb4]@2 ~ [f3,f4]@3 [eb3,eb4]@2", // Eb D Bb F Eb
  H: "~@2 [eb4,eb5]@2 [d4,d5]@2 [g3,g4]@2 [bb3,bb4]@2 [c4,c5] [c4,c5]@3 ~@2", // Eb D G Bb C
  I: "~@2 [eb4,eb5]@2 [d4,d5]@2 [g3,g4]@2 [bb3,bb4]@2 ~ [c4,c5]@3 [c4,c5]@2", // Eb D G Bb C
})).s("gm_electric_guitar_clean").gain(0.35)

// chords · electric guitar clean · "Elec Guitar (Clean)" · soft notes · Cm7
const electric_guitar_clean_2 = note("<~@131 [~@12 [c4,eb4,g4,bb4]!4] ~@3 [~@12 [c4,eb4,g4,bb4]!4] ~@4>")
  .s("gm_electric_guitar_clean").gain(0.21)

// bass · slap bass 2
const bass = note(`<
  ~@8 A B A C A B A C A B A C A B A C A B A C A B A C D E F G D E F H D E F G D E F H A B A C A B A C D E F G D E F H D
  E F G D E F H A B A C A B A C A B A C A B A C I J K L M N O P A B A C A B A C D E F G D E F H I J K L M N O P A B A C
  A B A C A B A C A B A C A B A Q
>`.pickRestart({
  A: "c2@3 ~ bb1@3 ~ ab1@2 ~ ab1@2 g1 ab1 bb1", B: "c2@2 c2@2 ~ bb1@2 ~ ab1@2 ~ ab1@2 g1 bb1@2",
  C: "c2@2 c2@2 ~ bb1@2 bb1 f1 f2 gb1@2 g1 g2 bb1 eb2", D: "c2@3 ~ bb1@3 ~ bb1@2 ~ ab1 ~@3 ab1",
  E: "ab1 ab2 ab1@2 ~@3 ab1 f1 f2 f1@2 g1 g2 g1@2", F: "c2@3 ~ c2@3 ~ eb2@2 ~ ab1 ~@3 ab1",
  G: "ab1 ab2 ab1@2 ~@3 ab1 f1 f2 f1@2 bb1 bb2 bb1@2", H: "ab1 ab2 ab1@2 ~@3 ab1!2 ab2 ab1@2 bb1 bb2 bb1@2",
  I: "ab1 ab2 ab1@2 ab1@2 ~ ab1 ~@3 ab1!2 ab2 ab1!2", J: "bb1 bb2 bb1@2 bb1@2 ~ bb1 ~@3 bb1!2 bb2 bb1!2",
  K: "g1 g2 g1@2 g1@2 ~ g1 ~@3 g1!2 g2 g1!2", L: "ab1 ab2 ab1@2 ab1@2 ~ g1 ~@3 g1!2 g2 g1!2",
  M: "ab1 ab2 ab1@2 ab1@2 ~ g1@3 g2@2 g1@2 g2 g1", N: "f1 f2 f1@2 f1@2 ~ g1@3 g2@2 g1@2 g2 g1",
  O: "bb1 bb2 bb1@2 bb1@2 ~ bb1 bb1@2 bb2@2 bb1@2 bb1@2", P: "bb1@2 bb1@2 bb1@2 bb1@2 bb1@2 g1@2 bb1 bb2 bb1@2",
  Q: "c2@2 eb2@2 d2@2 g1@2 bb1@2 ~ c2@3 c2@2",
})).s("gm_slap_bass_2").gain(0.42)

// drums · kick
const kick = s("bd").struct("x!4").gain(0.39)

// drums · rim
const rim = s("rim").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~@9 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "x ~ x ~@2 x ~@2 x ~@7",
})).gain(0.39)

// drums · clap
const clap = s("cp").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@19 A ~@3 A B@8 C@6 B@2 D E D E D E D E ~@8 C@6 B@2 ~@3
  A ~@3 A B@11 F
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~@3 x ~@2 x ~@2 x ~", E: "~@2 x ~@2 x ~ x", F: "~@2 x ~@3 x!2",
})).gain(0.39)

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

// drums · hihat
const hihat = s("hh").struct("x!16").gain(0.39)

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

// drums · cowbell
const cowbell = s("cb").struct(`<
  ~@49 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
>`.pickRestart({
  A: "x ~ x ~@2 x!4 ~ x!2 ~ x!3",
})).gain(0.39)

// drums · bongos
const bongos = s("bongo:18").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 ~@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 ~@8 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
>`.pickRestart({
  A: "~@6 x!3 ~@4 x!3", B: "x ~@5 x!3 ~@7",
})).gain(1.02)

// drums · congas
const congas = s("conga:13").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 ~@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 ~@8 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
>`.pickRestart({
  A: "x!2 ~@3 x ~@2", B: "~@2 x ~@7 x ~ x!2 ~@2",
})).gain(1.24)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct(`<
  ~@48 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "x ~ x ~@3 x!3 ~ x ~@5",
})).gain(2.47)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@19 A ~@3 A ~@19 A ~@3 A B@8 C@6 B@2 D E D F D E D F ~@8 C@6 B@2 ~@3
  A ~@3 A B@11 G
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x ~@3 x ~@2 x ~@2 x ~", E: "~@2 x ~@2 x ~ x", F: "~@2 x ~@2 x!2 ~",
  G: "~@2 x ~@3 x!2",
})).gain(1.96)

stack(
  soprano_sax, piano, synth_brass_1, electric_guitar_clean, electric_guitar_clean_2, bass, kick, rim, clap, snare,
  hihat, crash, cowbell, bongos, congas, agogo_bells, cabasa
)

More by Madonna