Strudelify

Deeper and Deeper

Madonna

KeyG minorTempo120 bpm
0:00/0:00
// Deeper and Deeper — Madonna
// 120 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 157 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 · synth bass 2 · "tk2"
const bass = note(`<
  ~@9 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 ~@2 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 C D E F C@2 G H C D E F C@2 G H ~@10 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 I ~@8
>`.pickRestart({
  A: "g1 ~@3 g1 ~@3 bb0 ~@2 bb0 ~@2 bb0 ~", B: "c1 ~@3 c1 ~@3 eb1 ~@3 f1 ~@3",
  C: "c1 ~@3 c1 ~@2 c1 c1@2 d1@2 eb1@2 c1 ~", D: "c1 ~@3 c1 ~@3 c1@2 d1@2 eb1@2 ~@2",
  E: "c1@2 ~@2 c1 ~@2 c1 c1@2 d1@2 eb1@2 c1 ~", F: "c1 ~@3 c1 ~@2 c1 c1@2 d1@2 eb1@2 g1@2",
  G: "c1@2 ~@2 c1 ~@2 c1 c1@2 d1@2 eb1@2 d1@2", H: "c1 ~ c1@2 d1 ~ d1@2 eb1 ~ eb1@2 f1@2 g1 ~",
  I: "c1 ~@3 c1 ~@3 eb1 ~@7",
})).s("gm_synth_bass_2").gain(0.36)

// chords · piano · "tk3"
const piano = note(`<
  ~@5 A B C D A B C D A B C D A B C D A B C D E F G H I@2 J@2 E F G H I@2 J@2 A B C D A B C D ~@2 E F G H I@2 J@2 E F G
  H I@2 J@2 A B C D A B C D A B C D A B C D K L M L K N M O K L M L K N M O ~@10 P Q R S T U V Q E F G H I@2 J@2 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
>`.pickRestart({
  A: "[g3,bb3,eb4]@10 ~@2 [g3,c4,f4]@3 ~", B: "[g3,a3,c4,d4]@3 ~", C: "[g3,b3,d4,g4]@9 ~@3 [g3,b3,d4,g4]@2 ~@2",
  D: "[d3,g3,b3,d4,f4]@8 g3@5 ~@3", E: "[d4,g4,bb4]@7 ~", F: "~@12 [eb4,g4,bb4]@3 ~", G: "[d4,g4,bb4]",
  H: "~@8 [eb4,g4,c5]@5 ~@3", I: "[[d4,g4,bb4]@20 ~@8 [eb4,g4,bb4]@3 ~]/2", J: "[[d4,g4,bb4]@21 ~@3 [eb4,g4,c5]@8]/2",
  K: "[c4,eb4,g4]@15 ~", L: "[c4,eb4,ab4]@15 ~", M: "[c4,eb4,a4]@7 ~", N: "[c4,eb4]@7 ~, ab4", O: "[c4,eb4,ab4]@13 ~@3",
  P: "~@4 [bb3,f4,g4] ~@3 [bb3,f4,g4] ~@2 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~", // Gm7 Gm
  Q: "~@4 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~", // Eb
  R: "[bb3,d4,g4] ~@3 [d4,g4] ~@3 [bb3,d4,g4] ~ f3 [bb3,d4,g4] ~ f3 [bb3,d4,g4] ~", // Gm G5 Gm
  S: "~@4 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~ g3 [bb3,eb4,g4] ~ g3 [bb3,d4,g4]@2", // Eb Gm
  T: "~@4 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~ f3 [bb3,d4,g4]@2", // Gm
  U: "~@3 bb3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@2 [bb3,eb4,g4] ~ g3 [bb3,eb4] ~, ~@7 g4", // Eb Eb5
  V: "~@2 bb3 ~ [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~@2 [bb3,d4,g4] ~", // Gm
})).s("gm_piano").gain(0.24)

// chords · synth brass 1 · "tk5"
const synth_brass_1 = note(`<
  ~ A B C D A B C D E F G H E F G H E F G H E F G H ~@16 E F G H E F G H ~@18 E F G H E F G H E F G H E F G H ~@42 E F G
  H E F G H E F G H E F G H E F G H E F G H ~@8
>`.pickRestart({
  A: "[g3,eb4,g4,bb4]@7 ~", B: "[g3,eb4,g4,a4,d5]@7 ~ [g3,eb4,g4,a4,d5]@7 ~", C: "[g3,d4,g4,b4]@7 ~",
  D: "[g3,f4,g4,c5]@7 ~ [g3,f4,g4,b4]@7 ~", E: "[eb4,g4,bb4]@7 ~", F: "[eb4,g4,a4,d5]@7 ~ [eb4,g4,a4,d5]@7 ~",
  G: "[d4,g4,b4]@7 ~", H: "[f4,g4,c5]@7 ~ [f4,g4,b4]@7 ~",
})).s("gm_synth_brass_1").gain(0.19)

// other · string ensemble 1 · "tk6"
const string_ensemble_1 = note(`<
  ~@9 A B C D E F G H A B C D E F G H ~@8 I J K@2 I L M@2 ~@18 I J K@2 I L M@2 A B C D E F G H N B C D E F G H O@4 P@4
  Q@4 R@4 ~@10 S T S T S T S T U J V@2 U J W@2 A B C D E F G H ~@8 A B C D E F G H ~@8
>`.pickRestart({
  A: "[d5,d6] ~ [eb5,eb6] ~ d6 ~ [c5,c6] ~ d6 ~@3 bb4@2 ~@2, ~@12 bb5 ~@3", B: "[a4,a5]@2 bb5@2 [c5,c6]@3 ~",
  C: "d5@2 [eb5,eb6] ~ d6 ~ [c5,c6] ~ [d5,d6]@2 ~@2 b5@2 ~@2, d6 ~@11 b4 ~@3", // Eb C D
  D: "[a4,a5]@4 g4@2 ~@2 [a4,a5]@4 [bb4,bb5]@3 ~, ~@4 g5 ~@11", // A Bb
  E: "[c5,c6]@2 d5@2 [eb5,eb6]@3 ~@5 [d5,d6] ~ eb6 ~, ~@2 d6 ~@13", F: "[f5,f6]@4 ~@2 [eb5,eb6]@2 [f5,f6]@4 g6 ~@3",
  G: "[g5,g6]@2 [eb5,eb6] ~@3 f5@2 [d5,d6] ~@3 [eb5,eb6]@2 [c5,c6] ~, ~@6 f6 ~@9", // G Eb D Eb C
  H: "~@2 d5@2 [b4,b5]@11 ~, ~@2 d6 ~@13", I: "d6", J: "[c5,c6]", K: "g4/2", L: "c6", M: "[g4@29 ~@3]/2",
  N: "[g3,eb4,c5] ~ [eb5,eb6] ~ d6 ~ [c5,c6] ~ d6 ~@3 bb4@2 ~@2, ~@12 bb5 ~@3", // Cm Eb C
  O: "[g3@16 ab3@16 a3@15 ~ ab3@15 ~, [eb4,c5]@63 ~]/4", P: "[g3@15 ~ ab3@15 ~ a3@15 ~@17, c5@31 ~]/4",
  Q: "[g3@15 ~ ab3@16 a3@15 ~ ab3@15 ~, [eb4,c5]@63 ~]/4", R: "[g3@15 ~ ab3@16 a3@15 ~@17, c5@31 ~]/4",
  S: "[a3,a4]@2 [bb3,bb4] ~@9 [bb3,bb4]@2 ~@2", T: "[c4,c5] ~@5 bb4 ~, ~@12 bb3 ~@3", U: "[d5,d6]", V: "[g4,g5]/2",
  W: "[[g4,g5]@15 ~]/2", // G
})).s("gm_string_ensemble_1").gain(0.1).pan(0.3)

// other · string ensemble 1 · "tk6" · soft notes
const string_ensemble_1_soft = note(`<
  ~@9 A B C ~ D E ~@2 A B C ~ D E ~@10 F ~ G@3 H I@2 ~@18 F ~ G@3 H I@2 A B C ~ D E ~@2 A B C ~ D E ~@6 J@4 ~@4 J@4 ~@26
  A B C ~ D E ~@10 A B C ~ D E ~@10
>`.pickRestart({
  A: "~@4 d5 ~@3 d5 ~@7", B: "~ bb4 ~@2", C: "~@2 d5 ~@5", D: "~@14 eb5 ~", E: "~@6 g5 ~", F: "d5", G: "[g5@2 d5]/3",
  H: "c5", I: "[g5@15 ~]/2", J: "[~@24 ab3@7 ~, eb4@63 ~]/4",
})).s("gm_string_ensemble_1").gain(0.07).pan(0.3)

// other · acoustic guitar nylon · "tk7"
const acoustic_guitar_nylon = note("<~@101 A B C D A B C D E F G H E F G H ~@40>".pickRestart({
  A: "g2 a2 bb2@3 g2 a2 bb2", B: "c3@6 a2@2 bb2@2 c3@2 d3@2 eb3!2", C: "eb3@2 c3@2 d3@8 ~@2 eb3!2",
  D: "eb3@2 c3@2 d3@2 bb2@2 c3@2 a2@2 bb2@3 ~", E: "g3 a3 bb3@3 g3 a3 bb3", F: "c4@6 a3@2 bb3@2 c4@2 d4@2 eb4!2",
  G: "eb4@2 c4@2 d4@8 ~@2 eb4!2", H: "eb4@2 c4@2 d4@2 bb3@2 c4@2 a3@2 bb3@3 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

// chords · acoustic guitar nylon · "tk8"
const acoustic_guitar_nylon_2 = note("<~@101 A B C D A B C D E F G H I F G J ~@40>".pickRestart({
  A: "[g2,bb3,d4,g4] ~@2 [g2,bb3,d4] [g2,bb3,d4,g4]@2 g2 [g2,bb3,d4,g4]!2 [g2,bb3,d4] [g2,bb3,d4,g4]@2 [g2,bb3,d4,g4] [g2,bb3,d4]!2 [g2,d4]", // Gm G5
  B: "[g2,c4,eb4,g4] ~ [g2,c4,eb4,g4] [g2,c4,eb4] [g2,c4,eb4,g4]@2 [g2,c4,eb4,g4] ~ [g2,c4,eb4,g4]!2 [g2,c4,eb4,g4]@2 [g2,c4,eb4,g4]!4", // Cm
  C: "[g2,bb3,g4] [g2,bb3,d4,g4]!2 [g2,bb3,d4] [g2,bb3,d4,g4]@2 [g2,bb3,d4,g4]!3 [g2,bb3,d4] [g2,bb3,d4,g4]@2 [g2,bb3,d4,g4] ~ [g2,bb3,d4]!2", // Gm
  D: "[g2,c4,eb4,g4] ~@2 [g2,c4,eb4,g4] [g2,c4,eb4,g4]@2 [g2,c4,eb4,g4] ~ [g2,c4,eb4,g4]!2 [g2,c4,eb4,g4]@2 [g2,c4,eb4,g4]!4", // Cm
  E: "bb3 ~@2 [bb3,d4] ~@4 [bb3,d4,g4] [bb3,d4] [bb3,d4,g4]@2 [bb3,d4,g4] ~ [bb3,d4] d4", // Bb Gm Bb Gm Bb
  F: "[c4,eb4,g4] ~@2 [c4,eb4] [c4,eb4,g4]@2 [c4,eb4,g4] ~@2 [c4,eb4,g4] [c4,eb4,g4]@2 [c4,eb4,g4] ~ [c4,eb4,g4] [eb4,g4]", // Cm Eb
  G: "~@3 [bb3,d4] ~@2 [bb3,d4] ~@3 [bb3,d4,g4]@2 [bb3,d4,g4] ~ [bb3,d4]!2", // Bb Gm Bb
  H: "[c4,eb4,g4] ~@5 [c4,eb4,g4] ~@5 [c4,eb4,g4]!4", I: "bb3 ~@2 [bb3,d4] ~@4 [bb3,d4,g4] [bb3,d4] ~@4 [bb3,d4] d4",
  J: "[c4,eb4,g4] ~@5 [c4,eb4,g4] ~@6 [c4,eb4,g4]!3", // Cm
})).s("gm_acoustic_guitar_nylon").gain(0.1)

// chords · acoustic guitar nylon · "tk8" · soft notes
const acoustic_guitar_nylon_3 = note("<~@101 A B C D A B C D E F G H E F G H ~@40>".pickRestart({
  A: "~ [g2,bb3,d4] [g2,bb3,d4,g4] ~@12 bb3", B: "~ [g2,c4,eb4,g4] ~@5 [g2,c4,eb4,g4] ~@8",
  C: "d4 ~@12 [g2,bb3,d4,g4] ~@2", D: "~ [g2,c4,eb4,g4]!2 ~@4 [g2,c4,eb4,g4] ~@8",
  E: "[d4,g4] [bb3,d4] [bb3,d4,g4] ~@4 [bb3,d4,g4] ~@5 [bb3,d4] ~ bb3", // G5 Bb Gm Bb
  F: "~ [c4,eb4,g4]!2 ~@4 [c4,eb4,g4]!2 ~@4 [c4,eb4,g4] ~ c4", // Cm
  G: "~ [bb3,d4,g4]!2 ~@3 g4 [bb3,d4,g4]!2 [bb3,d4] ~@3 [bb3,d4,g4] ~@2", H: "~ [c4,eb4,g4]!3 ~@3 [c4,eb4,g4]!3 ~@6",
})).s("gm_acoustic_guitar_nylon").gain(0.05)

// chords · pad metallic · "tk9"
const pad_metallic = note("<~@25 A@6 B@2 A@6 B@2 ~@10 A@6 B@2 A@6 B@2 ~@42 A@6 B@2 A@6 B@2 ~@32>".pickRestart({
  A: "[[d5,g5]@31 ~]/2", B: "[d5@15 ~]/2",
})).s("gm_pad_metallic").gain(0.1)

// chords · pad metallic · "tk9" · soft notes
const pad_metallic_soft = note("<~@31 A@2 ~@6 A@2 ~@16 A@2 ~@6 A@2 ~@48 A@2 ~@6 A@2 ~@32>".pickRestart({
  A: "[g5@15 ~]/2",
})).s("gm_pad_metallic").gain(0.05)

// other · orchestra hit · "tk11"
const orchestra_hit = note(`<
  ~@25 A ~ A B A ~ A B A ~ A B A ~ A B ~@8 A ~ A ~ A B A ~ A B A ~ A B A ~ A B ~@24 C ~ D ~ C ~ E ~ F ~ A ~ A B A ~ A B
  A ~ A B A ~ A B A ~ A B A ~ A B ~@32
>`.pickRestart({
  A: "~@2 g6 ~@13", B: "~@2 g6 ~@7 g6 ~@5", C: "eb6 ~@3 eb6 ~@3 eb6 ~@3 eb6 ~ c6 ~",
  D: "eb6 ~@3 eb6 ~@3 eb6 ~@3 eb6 ~@3", E: "eb6 ~@3 eb6 ~@3 eb6 ~ c6 ~ eb6 ~@3", F: "c6 ~@3 c6 ~@3 c6 ~@7",
})).s("gm_orchestra_hit").gain(0.3)

// other · orchestra hit · "tk11" · soft notes
const orchestra_hit_soft = note("<~@91 A ~ A ~ A ~@3 B C ~@56>".pickRestart({
  A: "~@10 c6 ~@5", B: "~@12 c6 ~@3", C: "c6 ~@3 c6 ~@3 c6 ~@3 c6 ~@3",
})).s("gm_orchestra_hit").gain(0.1)

// drums · kick
const kick = s("bd").struct("<~@9 [x!4]!92 ~@4 [x!4]!43 [x!3 ~] ~@8>").gain(0.3)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@14 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@13 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@10
>`.pickRestart({
  A: "~@9 x ~@6",
})).gain(0.15)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@9 [~ x ~@3 x ~@3 x ~@3 x ~@2]!139 [~ x ~@3 x ~@3 x ~@6] ~@8>").gain(0.15)

// drums · open hat
const open_hat = s("oh").struct("<~@9 [~ x ~ x ~ x ~ x]!139 [~ x ~ x ~ x ~@2] ~@8>").gain(0.2)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@9
  [~ x!3 ~ x!3 ~ x!3 ~ x!3]!96
  ~@4
  [~ x!3 ~ x!3 ~ x!3 ~ x!3]!39
  [~ x!3 ~ x!3 ~ x!2 ~@5]
  ~@8
>`).gain(0.1)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@9 [x!4]!96 ~@4 [x!4]!39 [x!3 ~] ~@8>").gain(0.05)

// drums · congas
const congas = s("conga:13").struct("<~@9 A@16 ~@8 A@16 ~@10 A@42 B@16 A@32 ~@8>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "~ x ~@2",
})).gain(0.79)

// drums · congas
const congas_2 = s("conga:18").struct("<~@9 A@16 ~@8 A@16 ~@10 A@42 ~@16 A@31 B ~@8>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@3 x ~@4",
})).gain(0.79)

// drums · congas
const congas_3 = s("conga:33").struct("<~@9 A@16 ~@8 A@16 ~@10 A@42 B@16 A@31 C ~@8>".pickRestart({
  A: "~@7 x ~@7 x", B: "~@7 x ~ x ~@6", C: "~@7 x ~@8",
})).gain(0.79)

stack(
  bass, piano, synth_brass_1, string_ensemble_1, string_ensemble_1_soft, acoustic_guitar_nylon, acoustic_guitar_nylon_2,
  acoustic_guitar_nylon_3, pad_metallic, pad_metallic_soft, orchestra_hit, orchestra_hit_soft, kick, snare, snare_soft,
  hihat, hihat_soft, open_hat, tambourine, tambourine_soft, congas, congas_2, congas_3
)

More by Madonna