Strudelify

Don't Tell Me

Madonna

KeyD majorTempo100 bpm
0:00/0:00
// Don't Tell Me — Madonna
// 100 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 117 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.

// bass · synth bass 2
const bass = note(`<
  ~@5 A B A C D C D C D C D C D C D B ~@4 D C D C D C D B D C D C D C D B D C D C D C D B ~@7 E D C D C D C D C F C D C
  F C D B D C D C D C D B D C D C D C D C D C D C D C D C D C D C D C D B ~@12
>`.pickRestart({
  A: "d2 ~@6 d2 a1 ~@6 a1", B: "c2 ~@6 c2 g1 ~@7", C: "c2 ~@6 c2 g1 ~@6 a1", D: "d2 ~@6 d2 a1 ~ a1 ~@4 a1",
  E: "~@15 a1", F: "d2 ~@7 a1 ~ a1 ~@4 a1",
})).s("gm_synth_bass_2").gain(0.45)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B A C A B A D A B E F A G E F A G E F ~@4 A G A D A G A D A G A D A G A D A G A D A G A D ~@8 A G E F A G E F H G
  E F H G E F A G A D A G A D A G A D A G A D A G A D A G A D A G A D A G A D ~@12
>`.pickRestart({
  A: "~@2 d4 e4 ~@2 a3@2 a2@2 e3 b3 ~@4, d3 ~, ~ f#4 ~@2, ~@5 d4@3 ~@8",
  B: "~@5 g3 c3 ~@4 a2 ~@2 g2@2, ~ c3 e3 ~@3 b2@2, ~@3 d3@3 ~@4 g2@3 d3@3",
  C: "[c3,g3]@2 [c3,g3]@2 ~ g3 [c3,d3] e3 ~@2 a2!4 ~ a2, ~@2 [c3,d3] ~ g2@4", // C5 Csus2
  D: "[c3,g3]@2 [c3,g3]@2 ~ g3 [c3,d3] e3 g2@2 ~ a2 ~@4, ~@2 [c3,d3] ~@2 g2 ~@2", // C5 Csus2
  E: "~@2 d4 e4 ~@2 a3@2 a2 ~@7, d3 ~, ~ f#4 ~@2, ~@5 d4@3 ~@8", F: "[c3,g3]@2 ~ [d3,g3] ~@4 g2@2 g2 a2 ~@4, ~@2 d3 ~",
  G: "~@5 g3 ~@5 a2 ~ d3 ~@2, ~ c3 e3 ~@3 b2@2, ~@3 d3@3 ~@4 g2@3 ~@3", H: "~@2 d4 e4 ~@4 a2@2 e3 b3 ~@4, d3 ~@3",
})).s("gm_acoustic_guitar_steel").gain(0.38)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@20 A B C D E ~@28 F@2 G@2 ~@28 F@2 G@2 B H B H B H B H B H B H B H B H ~@12
>`.pickRestart({
  A: "~ [g3,a3,d4]", B: "d4 c4, a3", C: "c4@6 b3@9 ~, g3@15 ~", D: "d3 c4, a3", E: "d4@6 c4@4 b3@5 ~, g3@15 ~",
  F: "[d4 ~@2 b3, a3 g3, ~ c4@2 ~]/2", G: "[d4 ~@2 b3, a3 [g3,d4], ~ c4@2 ~]/2", H: "c4 [b3,d4], g3@15 ~",
})).s("gm_string_ensemble_2").gain(0.22).pan(0.6)

// other · string ensemble 1
const string_ensemble_1 = note("<~@33 A B A C A@5 B A C A@4 ~@24 A B A C A@4 ~@26 D E@2 ~@2 D E@2 ~@2>".pickRestart({
  A: "d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5", B: "d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5!4",
  C: "d5 c#5 d5 c#5 d5 c#5 d5 c#5 d5 c#5 ~@6", D: "~@15 d4", E: "[g4@6 ~ f#4 d4@4 a3@12 ~@8]/2",
})).s("gm_string_ensemble_1").gain(0.11).pan(0.4)

// other · electric guitar clean
const electric_guitar_clean = note("<~@41 A B A C D E F G ~@24 A B A C D E F G ~@36>".pickRestart({
  A: "~@4 f#4@4 ~@4 c4@3 ~, d3 a2, ~@2 a3@6 ~@2 e3@5 ~", B: "c3 ~@3 c4@2 [g3,b3]@9 ~, ~ c3@2 ~@5, ~@3 g3@3 ~@10",
  C: "c4@2 c4 d4 e4@4 g3@2 g3 a3 b3 d4@3", D: "f#4@3 ~ f#4@2 d4@2 d4@2 c4 b3 c4@3 ~",
  E: "c4@2 c4 b3 c4@3 ~ b3@2 b3 a3 b3@3 ~", F: "~@2 d4 e4 f#4@4 c4 ~ c4 b3 c4@3 ~, a3@7 ~@9", G: "c4@6 d4 e4 d4@6 ~@2",
})).s("gm_electric_guitar_clean").gain(0.22)

// other · viola
const viola = note("<~@55 A@2 ~@34 B C B D B E B D B E B D B E ~@12>".pickRestart({
  A: "[d4@8 ~@16 b3@7 ~, a3 [g3,d4], ~ c4@2 ~]/2", B: "~@2 f#4@3 d4@3", C: "g4@6 d4@9 ~", D: "c4@6 b3@9 ~",
  E: "g4@8 d4@7 ~",
})).s("gm_viola").gain(0.23)

// other · pad metallic
const pad_metallic = note("<~@57 A ~ B C A ~ B C ~@20 A ~ B C A ~ B C A ~ B C A ~ B C A ~ B C ~@12>".pickRestart({
  A: "~@2 a1 ~", B: "~@8 a1@5 ~@3", C: "~@3 a1@2 ~@3",
})).s("gm_pad_metallic").gain(0.29)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@57 A B A B A B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B ~@12
>`.pickRestart({
  A: "~@2 d4!2 ~@2 d4 ~@3 b3!2 ~@2 f4 ~", B: "~@4 d4!2 ~ d4 ~ f4 ~ f4 ~ f4 ~ f4", C: "~@2 d4!2 ~@6 b3!2 ~@2 f4 ~",
})).s("gm_lead_2_sawtooth").gain(0.23).pan(0.4)

// other · string ensemble 2
const string_ensemble_2_2 = note("<~@91 A@2 B C B D C E F@2 G@2 B D ~@12>".pickRestart({
  A: "[~@2 f#6@13 ~]/2", B: "~ f#6@3", C: "d6", D: "c6@6 d6@9 ~", E: "f#6@4 c6 d6@3", F: "[d6@14 f#6@8 d6@9 ~]/2",
  G: "[~@2 f#6@9 d6@5]/2",
})).s("gm_string_ensemble_2").gain(0.23).pan(0.4)

// chords · pad sweep
const pad_sweep = note("<~@52 A@2 ~@30 A@2 ~@19 B C@8 D@3>".pickRestart({
  A: "[~ [a3,d4]@11 ~@4]/2", B: "~@7 b4, b5@4 e5 d5 c#5@2, ~ a5@7, ~ g5@3, ~@3 f#5@5",
  C: "[~@63 b4, b5@4 e5@4 b5@4 e5@4 b5@4 e5@4 b5@4 e5@4 b5@4 e5@4 b5@4 e5@4 b5@4 e5@4 b5@4 e5 d5 c#5@2, ~ a5@4 d5@4 a5@4 d5@4 a5@4 d5@4 a5@4 d5@4 a5@4 d5@4 a5@4 d5@4 a5@4 d5@4 a5@7, ~ g5@2 c#5@2 g5@2 c#5@2 g5@2 c#5@2 g5@2 c#5@2 g5@2 c#5@2 g5@2 c#5@2 g5@2 c#5@2 g5@3, ~@3 f#5@4 b4@4 f#5@4 b4@4 f#5@4 b4@4 f#5@4 b4@4 f#5@4 b4@4 f#5@4 b4@4 f#5@4 b4@4 f#5@5]/8",
  D: "[~@42 d5@2 c#5@2 b4 ~, b5 e5 b5 e5 b5@2, ~ a5@4 d5@4 a5@4 d5@4 a5@7, ~ g5@2 c#5@2 g5@2 c#5@2 g5@3, ~@6 f#5@8 b4@8 f#5@8 b4@8 f#5@2 e5@7 ~]/3",
})).s("gm_pad_sweep").gain(0.05)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B C B C B D E C B C F G F@3 B@2 C B H B C B I B J B K B K L M B J B K B K L M ~@7 A B D E C B D E C B D E C B D
  E N B J B K B K L M B J B K B K L M B K L M B K L M B K L M B K L M ~@12
>`.pickRestart({
  A: "~@15 x", B: "x ~@3 x!2 ~@2", C: "x ~@7 x ~@6 x", D: "x ~@7 x ~ x ~@4 x", E: "x ~@7 x ~@4 x ~@2",
  F: "x ~@3 x!2 ~ x", G: "x ~@6 x!2 ~@5 x!2", H: "x!2 ~@6 x ~@6 x", I: "x ~@14 x", J: "x ~@6 x!2 ~@3 x!4",
  K: "x ~@6 x!2 ~@6 x", L: "x ~@7 x!2 ~@2 x!2 ~ x", M: "x ~ x ~@3 x!3 ~ x!3 ~@2 x", N: "x!2",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@9 A@15 B A@15 C A@7 C ~@8 A@23 C A@7 C A@3 C A@3 C A@3 C A@3 C ~@12>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@2 x ~@4 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@8 B@4 C@2 D C@3 D C@3 D E B@3 F B@3 F G B H@5 I G B H@2 G B H@2 ~@8 C@2 D C@3 D C J C D C J C D C G B H@2 G B H@2
  G B H@2 G B H@2 G B H@2 G B H@2 G B H@2 G B H@2 ~@12
>`.pickRestart({
  A: "x!4", B: "~@2 x ~@3 x ~@2 x ~@4 x ~", C: "~@2 x!5 ~ x!2 ~@4 x ~", D: "~@2 x!5 ~ x ~ x ~@3 x ~",
  E: "~@2 x!5 ~ x ~ x ~@5", F: "~ x ~ x ~@3 x", G: "~@2 x ~@3 x ~@2 x ~@6", H: "~@2 x ~@3 x ~@2 x!2 ~@5",
  I: "~ x ~ x ~ x ~ x", J: "~@2 x!2 ~@4 x!2 ~@4 x ~",
})).gain(0.45)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@13 [x!2 ~@14]!12 ~@32 [x!2 ~@14]!16 ~@44>").gain(0.25)

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

stack(
  bass, acoustic_guitar_steel, string_ensemble_2, string_ensemble_1, electric_guitar_clean, viola, pad_metallic,
  lead_2_sawtooth, string_ensemble_2_2, pad_sweep, kick, snare, hihat, hihat_soft, open_hat
)

More by Madonna