Strudelify

Beautiful Stranger

Madonna

KeyA majorTempo130 bpm
0:00/0:00
// Beautiful Stranger — Madonna
// 130 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@9 A@2 B@2 ~@24 C@2 D ~@5 C@2 E@2 ~@16 A@2 B F ~@16 G@2 D ~@13 C@2 E@2 ~@16
>`.pickRestart({
  A: "c#5 ~ g#4 ~ [f#4,c#5] ~ f4 ~ c#5 ~ g#4 ~ [f#4,c#5] ~ f4 ~", // F#5
  B: "[c#5,c#6] ~ [g#4,g#5] ~ [f#4,c#5,f#5,c#6] ~ [f4,f5] ~ [c#5,c#6] ~ [g#4,g#5] ~ [f#4,c#5,f#5,c#6] ~ [f4,f5] ~", // C# G# F#5 F C# G# F#5 F
  C: "[a#5@31 [g#5,a#5]]/2", D: "b5@5 a#5 g#5 f#5", E: "[b5@5 a#5 g#5 f#5@9]/2",
  F: "[c#4,c#5,c#6] ~ [g#4,g#5] ~ [c#4,f#4,c#5,f#5,c#6] ~ [f4,f5] ~ [c#4,c#5,c#6] ~ [g#4,g#5] ~ [c#4,f#4,c#5,f#5,c#6] ~ [f4,f5] ~", // C# G# F#5 F C# G# F#5 F
  G: "[~@8 c#5 ~ d#5@2 ~@2 f#5@10 a#5@4 f#5@3 [g#5,a#5]]/2", // G#sus2
})).s("gm_string_ensemble_1").gain(0.4)

// bass · electric bass finger · "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 ~@8 C D E F A B A B ~@4 A B A B G H A B G H A B A B A B A B
  A B A B A B A B A B I J A B I J A B C D E F A B A B I J A B I J A B C D E K A B A B A B A B G H A B G H ~@2
>`.pickRestart({
  A: "c#2 ~@3 c#2 ~@2 c#2 ~@2 g#1 ~ b1 ~ g#1 ~", B: "c#2 ~@3 c#2 ~@2 c#2 ~@2 g#1 ~ b1 ~ c#2 ~",
  C: "f#1 ~@3 f#1 ~@2 f#1 ~@2 a#1 ~ c#2 ~ a#1 ~", D: "f#1 ~@3 f#1 ~@2 f#1 ~@2 a#1 ~ c#2 ~ d#2 ~",
  E: "e2 ~@3 e2 ~@2 e2 ~@2 b1 ~ e2 ~ b1 ~", F: "b1 ~@15", G: "e2 ~@3 e2 ~@2 e2 ~@2 b1 ~ b1 ~ d#2 ~",
  H: "f#2 ~@3 f#2 ~@2 f#2 ~@2 a1 ~ a1 ~ b1 ~", I: "g#1 ~@3 g#1 ~@2 g#1 ~@2 g#1 ~ b1 ~ d#2 ~",
  J: "a1 ~@3 a1 ~@2 a1 ~@2 a1 ~ c#2 ~ e2 ~", K: "b1 ~@3 b1 ~@2 b1 ~@2 b1 ~ d#2 ~ f#2 ~",
})).s("gm_electric_bass_finger").gain(0.52)

// other · whistle
const whistle = note("<~@113 A B C@2 A B ~@2>".pickRestart({
  A: "~@2 e5 f#5 g#5@2 e5@2 f#5@2 d#5@2 f#5@4", B: "c#6 g#5 c#6@2 e6 c#6 e6@2", C: "c#6/2",
})).s("gm_whistle").gain(0.59)

// chords · lead 5 charang · "Charang"
const lead_5_charang = note(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B ~@12 A B A B ~@4 A B A B C D E@2 C D E@2 A B A B A B A B A B A B A
  B A B ~@12 A B A B ~@12 A B A B A B A B C D E@2 C D ~@2
>`.pickRestart({
  A: "[c#4,f#4,g#4] ~@5 [c#4,f#4,g#4] ~@3 [c#4,f#4,g#4] ~@2 [c#4,f#4,g#4] ~@2", // C#sus4
  B: "[c#4,f4,g#4] ~@5 [c#4,f4,g#4] ~@3 [c#4,f4,g#4] ~@2 [c#4,f4,g#4] ~@2", // C#
  C: "[b3,e4,g#4] ~@3 [b3,e4,g#4] ~@2 [b3,e4,g#4] ~@2 [b3,d#4,f#4] ~@2 [b3,d#4,f#4] ~@2", // E B
  D: "[c#4,f#4,a#4] ~@3 [c#4,f#4,a#4] ~@2 [c#4,f#4,a#4] ~@2 [c#4,e4,a4] ~@2 [c#4,e4,a4] ~@2", // F# A
  E: "[c#4,f4,g#4] ~@3 [c#4,f4,g#4] ~@2 [c#4,f4,g#4] ~@2 [c#4,f4,g#4] ~@2 [c#4,f4,g#4] ~@2", // C#
})).s("gm_lead_5_charang").gain(0.25)

// chords · pad sweep · "Sweep Pad"
const pad_sweep = note(`<
  ~@13 A B A B A B A B A B A B A B A B ~@12 A B A B ~@4 A B A B C D E@2 C D E@2 ~@8 A B A B A B A B ~@12 A B A B ~@12 A
  B A B A B A B C D E@2 C D ~@2
>`.pickRestart({
  A: "[c#3,b3,c#4,f#4]", B: "[c#3,g#3,c#4,f4]", C: "[e3,e4,g#4] [b2,d#4,f#4], b3", D: "[f#3,a#4] [a2,e4], c#4",
  E: "[c#3,g#3,c#4,f4]/2", // C#
})).s("gm_pad_sweep").gain(0.16)

// chords · flute
const flute = note(`<
  ~@29 A B@3 A B@3 C@2 D ~@5 C@2 D E ~@4 F G H@2 F G H@2 ~@16 A B@3 A B@3 C@2 D ~@5 A B@3 A B@3 C@2 D ~@9 F G H@2 F G
  H@2
>`.pickRestart({
  A: "[b3,d#4,g#4]", B: "[[e4,a4] [f4,g#4]@2, c#4]/3", C: "[c#4,f#4,a#4]/2", D: "[b3,e4,g#4]", E: "[b3,d#4,f#4]",
  F: "[e4,g#4] [d#4,f#4], b3", G: "[c#4,f#4,a#4] [c#4,e4,a4]", H: "[c#4,f4,g#4]/2",
})).s("gm_flute").gain(0.25)

// other · lead 2 sawtooth · "Sawtooth"
const lead_2_sawtooth = note("<~@40 A B ~@6 A B ~@38 A B ~@14 A B ~@3 B ~@11>".pickRestart({
  A: "~@4 b4 g#4 b4 g#4", B: "c#4",
})).s("gm_lead_2_sawtooth").gain(0.5)

// other · lead 2 sawtooth · "Sawtooth" · soft notes
const lead_2_sawtooth_soft = note("<~@40 A ~@7 A ~@39 B ~@15 B ~@16>".pickRestart({
  A: "~@3 g#4 ~@4", B: "~@3 c#4 ~@4",
})).s("gm_lead_2_sawtooth").gain(0.31)

// bass · electric bass pick · "Pick Bass"
const bass_2 = note("<~@42 A@2 ~@6 B C ~@38 B C ~@14 B C ~@2 B C ~@9>".pickRestart({
  A: "[~ c#2, ~@5 c#3@11]/2", B: "~@5 c#3@3", C: "c#2",
})).s("gm_electric_bass_pick").gain(0.2)

// chords · drawbar organ · "Org."
const drawbar_organ = note("<~@53 A B C D A B C D ~@44 C D C D C D C D A B C D A B ~@2>".pickRestart({
  A: "[e3,b3,e4,g#4]@4 [b3,e4] ~ [b2,b3,d#4,f#4]@4 [b3,d#4] ~ [b2,b3,d#4,f#4]@2 [b3,d#4] ~", // E E5 B
  B: "[f#2,f#3,c#4,a#4]@4 [f#3,c#4] ~ [a2,a3,c#4,e4]@4 [a3,c#4] ~ [a2,a3,c#4,e4]@2 [a3,c#4] ~", // F# F#5 A
  C: "[c#3,g#3,c#4,f#4]@4 [g#3,c#4] ~ [c#3,b3,c#4,f#4]@4 [b3,c#4] ~ [c#3,b3,c#4,f#4]@2 [g#3,c#4] ~", // C#sus4 C#5 F#sus4 Bsus2 F#sus4 C#5
  D: "[c#3,g#3,c#4,f4]@4 [g#3,c#4] ~ [c#3,b3,c#4,f4]@4 [b3,c#4] ~ [c#3,b3,c#4,f4]@2 [g#3,c#4] ~", // C# C#5 C#7 Bsus2 C#7 C#5
})).s("gm_drawbar_organ").gain(0.18)

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

// drums · rim
const rim = s("rim").struct("<~@5 A@8 ~@16 A@11 ~@5 A@4 ~@12 A@8 ~@8 A@11 ~@5 A@12 ~@16>".pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@3",
})).gain(0.59)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!39 ~ [~ x ~ x]!47 ~ [~ x ~ x]!30 ~@2>").gain(0.59)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@2 [~ x ~ x] [~ x!3 ~ x!3 ~ x!3 ~ x!3]!2 ~@116>").gain(0.39)

// drums · hihat
const hihat = s("hh").struct(`<
  [x!4]
  ~@4
  [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!35
  ~
  [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!47
  ~
  [x!3 ~ x!3 ~ x!3 ~ x!3 ~]!30
  ~@2
>`).gain(0.59)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A ~@7 A ~@7 A ~@7 A ~@10 A@2 ~@11 A@7 B A ~@13 A ~ A ~@10 A@2 ~@3 A ~@11 A ~@3 A ~@3 A@7 ~
>`.pickRestart({
  A: "x", B: "x!4",
})).gain(0.59)

// drums · shaker
const shaker = s("sh").struct("<~@5 [~ x ~ x ~ x ~ x]!35 ~ [~ x ~ x ~ x ~ x]!47 ~ [~ x ~ x ~ x ~ x]!30 ~@2>").gain(0.59)

stack(
  string_ensemble_1, bass, whistle, lead_5_charang, pad_sweep, flute, lead_2_sawtooth, lead_2_sawtooth_soft, bass_2,
  drawbar_organ, kick, rim, clap, snare, snare_soft, hihat, crash, shaker
)

More by Madonna