Strudelify

Human Nature

Madonna

KeyE♭ minorTempo100 bpm
0:00/0:00
// Human Nature — Madonna
// 100 bpm, 4/4, key D# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 112 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · "Synth"
const soprano_sax = note(`<
  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 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 ~@8 A B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "eb6!3 d6@4 ~", B: "ab6!3 gb6@4 ~",
})).s("gm_soprano_sax").gain(0.1)

// chords · brass section · "Brass"
const brass_section = note(`<
  ~@3 A ~@3 A B C D@2 B C D@2 ~@3 A ~@3 A ~@3 A ~@3 A B C D@2 B C D@2 ~@3 A ~@3 A ~@3 A ~@3 A B C D@2 B C D@2 ~@3 A ~@3
  A ~@3 A ~@3 A B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B C D@2 B E ~@2
>`.pickRestart({
  A: "eb4!3 ~@5", B: "[gb3,bb3,eb4] [f3,ab3,d4]", C: "f4@5 gb4 f4@2 [gb3,bb3,eb4]@8, [bb3,db4] ~",
  D: "[~@6 [gb3,bb3,eb4]@2 [f3,ab3,d4]@4 [gb3,bb3,f4]@2 [gb3,bb3,f4]@4 [gb3,bb3,eb4]@5 ~@9]/2", // Ebm Ddim Gbmaj7 Ebm
  E: "f4@5 gb4 f4@2 ~@8, [bb3,db4] ~", // Bbm
})).s("gm_brass_section").gain(0.19)

// chords · brass section · "Brass" · soft notes
const brass_section_soft = note(`<
  ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@29 B C@2
>`.pickRestart({
  A: "~@3 eb4 ~@4", B: "~ [gb3,bb3,eb4]",
  C: "[~@6 [gb3,bb3,eb4]@2 [f3,ab3,d4]@4 [gb3,bb3,f4]@2 [gb3,bb3,f4]@4 [gb3,bb3,eb4]@5 ~@9]/2", // Ebm Ddim Gbmaj7 Ebm
})).s("gm_brass_section").gain(0.12)

// chords · pad poly · "PolySynth"
const pad_poly = note(`<
  ~@8 A B A C A B A C A B A B A B A B A B A B A B A B A B A C A B A C A B A B A B A B A B A B A B A B A B A C A B A C
  ~@8 A B A B A B A B A B A C A B A C D E D E D E D E A B A C A B A C A B A C F ~@3
>`.pickRestart({
  A: "~@4 [bb3,eb4,gb4]@3 ~ [d4,f4]@6 ~@2", B: "~ [eb4,gb4] [db4,f4,ab4] [eb4,gb4,bb4]@4 ~",
  C: "~@2 [db4,f4,ab4] [eb4,gb4,bb4]@4 ~", D: "~@4 [eb4,gb4]@3 ~ [d4,f4]@6 ~@2",
  E: "~@2 [f4,ab4] gb4 gb4@3 ~, ~@3 bb4@4 ~", F: "~@4 [bb3,eb4,gb4]@3 ~ [ab3,d4,f4]@6 ~@2",
})).s("gm_pad_poly").gain(0.31)

// chords · pad poly · "PolySynth" · soft notes
const pad_poly_soft = note(`<
  ~@8 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 ~@9
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~@2 B C D
>`.pickRestart({
  A: "~@4 ab3@3 ~", B: "~ [eb4,gb4] [db4,f4,ab4] [eb4,gb4,bb4]@4 ~", C: "~@4 [bb3,eb4,gb4]@3 ~ [ab3,d4,f4]@6 ~@2",
  D: "~@2 [db4,f4,ab4] [eb4,gb4,bb4]@3 ~@2", // Db Ebm
})).s("gm_pad_poly").gain(0.16)

// bass · fretless bass · "Bass"
const bass = note(`<
  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 ~@8 A B A B A B A B A B A B A B A C
>`.pickRestart({
  A: "b2@3 ~ b1@3 ~ bb1@3 ~ bb1@3 ~, ~@4 bb1 ~@3 ab1 ~@7", B: "eb2@3 ~ db2@2 b1@5 ~ gb2@2 bb2@2",
  C: "eb2@3 ~ db2@2 b1@5 ~ gb2@4",
})).s("gm_fretless_bass").gain(0.42)

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

// drums · rim
const rim = s("rim").struct("<~@88 [~ x ~ x]!8 ~@16>").gain(0.35)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!88 ~@7 [~@3 x] [~ x ~ x]!16>").gain(0.42)

// drums · low tom
const low_tom = s("lt").struct("<~@26 A ~@3 A ~@19 A ~@3 A ~@19 A ~@3 A ~@33>".pickRestart({
  A: "~ x ~@2",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<~@4 [x!7 ~]!60 ~@4 [x!7 ~]!20 ~@8 [x!7 ~]!16>").gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@3 [~@7 x]!61 ~@3 [~@7 x]!21 ~@8 [~@7 x]!16>").gain(0.42)

// drums · crash
const crash = s("cr").struct("<~@88 x ~@23>").gain(0.42)

stack(
  soprano_sax, brass_section, brass_section_soft, pad_poly, pad_poly_soft, bass, kick, rim, snare, low_tom, hihat,
  open_hat, crash
)

More by Madonna