Strudelify
You Can't Deny It cover art

Affection

You Can't Deny It

Stansfield Lisa

KeyC minorTempo102 bpm
0:00/0:00
// You Can't Deny It — Stansfield Lisa
// 102 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 7 "SYN BASS 1" synth bass 1 (copy of ch 2 "FRETLESS" fretless bass)
// note: Full arrangement: all 108 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(102/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, A@4 for four bars: edit a riff to change every repeat.

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  ~@2 A B C B D B A B A B A B A B C B C E A B F G H G I G J K J L J G J G M G A B C B D B A B A B A B A B C B C E A B F
  G H G I G J K J L J G J G M G N O N O N P N O ~@8 F G H G I G J K J L J G J G M G ~@2
>`.pickRestart({
  A: "[f4,a4] ~@4 [a4,c5,e5] ~@3 [f4,c5] ~@14, d5@2 ~@7 a4@2 ~@13", // F Am F5
  B: "[g4,b4] ~@4 [g4,c5,e5] ~@3 [e4,g4,b4] ~@14, d5 ~@11", // G C Em
  C: "[f4,a4] ~@4 [a4,c5,e5] ~@3 [f4,a4] ~@14, d5@2 ~@7 c5@2 ~@13", // F Am F
  D: "[f4,d5]@2 ~@3 [a4,e5]@2 ~@2 [a4,c5]@2 ~@13, a4 ~@4 c5 ~@3 f4 ~@14", // Dm A5 Am
  E: "[g4,b4] ~@4 [g4,c5] ~@3 [e4,g4,b4] ~@14, d5@2 ~@3 e5@2 ~@17", // G C5 Em
  F: "[ab4,f5]@2 ~@3 [eb5,g5]@2 ~@2 [ab4,c5,eb5]@2 ~@13, c5 ~@23", // Db Eb Ab
  G: "[bb4,d5] ~@4 [bb4,eb5,g5] ~@3 [g4,d5] ~@14, f5@2 ~@7 bb4@2 ~@13", // Bb Eb G5
  H: "[ab4,c5,f5]@2 ~@3 [c5,eb5,g5]@2 ~@2 [ab4,c5,eb5]@2 ~@13", // Fm Cm Ab
  I: "[ab4,c5] f5@2 ~@2 [c5,eb5,g5] ~@3 [ab4,c5] ~@14, ~@9 eb5@2 ~@13", // Ab Cm Ab
  J: "[ab4,c5] ~@4 [c5,eb5,g5] ~@3 [ab4,c5] ~@14, f5@2 ~@7 eb5@2 ~@13", // Ab Cm Ab
  K: "[bb4,d5] ~@3 eb5 [bb4,g5] ~@3 [g4,d5] ~@14, f5@2 ~@7 bb4@2 ~@13", // Bb Eb G5
  L: "[bb4,d5,f5] ~@4 [bb4,eb5] ~@3 [g4,d5] ~@14, ~@5 g5@2 ~@2 bb4@2 ~@13", // Bb Eb5 G5
  M: "[c5,f5] ~@4 [c5,eb5,g5] ~@3 [ab4,c5] ~@14, ab4@2 ~@7 eb5@2 ~@13", // F5 Cm Ab
  N: "[f4,a4] ~@4 [f4,a4] ~@3 [f4,a4,c5] ~@14, d5@2 ~@3 e5@2 ~@17", // F
  O: "[e4,g4,d5] ~@4 [e4,g4,e5] ~@3 [e4,g4] ~@14, ~@9 b4@2 ~@13", P: "[e4,g4,d5]@2 ~@3 [e4,g4,e5] ~@3 [e4,g4,b4] ~@14",
})).s("gm_epiano2").gain(0.38)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@2 A B C D E D C D E D F G E D F D E D H I J K L M N K O P N K L P N K L P A B C D E D C D E D F G E D F D E D H I J
  K L M N K O P N K L P N K L P Q ~@15 J K L M N K O P N K L P N K L P R@2
>`.pickRestart({
  A: "d1@10 ~@5 f1@2 ~@3 a1@2 ~@2", B: "g1@3 ~", C: "a1@12 ~@3 f1@3 ~@2 a1@3 ~", D: "g1@19 ~@5",
  E: "d1@12 ~@3 f1@2 ~@3 a1@2 ~@2", F: "a1@11 ~@4 f1@2 ~@3 a1@2 ~@2", G: "g1@5 ~", H: "a1@12 ~@3 f1@2 ~@3 a1@2 ~@2",
  I: "g1@23 ~", J: "f1@6 ~@9 ab1@3 ~@2 c2@4", K: "bb1@3 ~", L: "ab1@11 ~@4 ab1@3 ~@2 c2@4",
  M: "bb1@7 ~@3 bb1@2 c2@2 ~ c2@3 ~@2 g1@4", N: "f1@11 ~@4 ab1@3 ~@2 c2@4", O: "ab1@11 ~@4 ab1@2 ~@2 c2@5",
  P: "bb1@7 ~@4 bb1 c2@2 ~ c2@3 ~@2 c2 g1@3", Q: "f1 ~@23", R: "[bb1@3 ~]/2",
})).s("gm_fretless_bass").gain(0.27)

// other · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@14 A@3 ~@5 B@3 ~ B@3 C@2 D@2 C@2 D@2 ~@13 A@3 ~@5 B@3 ~ B@3 C@2 D@2 E@2 D@2 ~@9 A@3 ~@5 B@3 ~ F@2 ~ C@2 D@2 C@2 D@2
  ~@3
>`.pickRestart({
  A: "[~@2 e4@12 c4@3 d4@3 e4@12 c4@4 f4@6 e4@18 ~@12]/3", B: "[~@2 g4@39 ab4@3 bb4@6 g4@21 ~]/3",
  C: "[~@12 c5@6 d5@3 bb4@26 ~]/2", D: "[~@4 c5@2 d5 bb4@4 ab4@5]/2", E: "[~@4 c5@2 eb5 bb4@9]/2",
  F: "[~@2 g4@27 ~@19]/2",
})).s("gm_epiano1").gain(0.32)

// chords · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note(`<
  ~@2 A B C B D B C B A B E B A B C B A B C B ~@16 A B C B D B C B A B E B A B C B A B C B ~@24 F G H I D G H G ~@18
>`.pickRestart({
  A: "[f3,a3,c4]@7 ~", B: "[g3,b3,d4]@7 ~", C: "[a3,c4,e4]@5 ~", D: "[f3,a3,c4]", E: "[c4,e4]@7 ~, a3@23 ~",
  F: "[f3,a3,c4]@5 ~", G: "[g3,b3,d4]", H: "[a3,c4,e4]", I: "[b3,d4]@23 ~, g3@19 ~@5",
})).s("gm_synth_brass_2").gain(0.22)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@22 A B C D@2 E F G@2 B C H A I C J ~@20 A B C D@2 E F G@2 B C H A I C J ~@16 A B C D@2 E F G@2 B C H A I C K@3
>`.pickRestart({
  A: "[ab3,c4,eb4]", B: "[bb3,d4,f4]", C: "[c4,eb4,g4]", D: "[[bb3,d4,f4] [e4,g4,bb4] [ab3,eb4]@2, ~ c4@3]/2",
  E: "f4 bb4, [bb3,d4]", F: "[c4,g4], eb4@3 ~", G: "[[bb3,d4,f4] [e4,g4,c5] [ab3,eb4]@2, ~ c4@3]/2",
  H: "[bb3,f4] [e4,g4,bb4], d4 ~ c4 ~", I: "~ bb4, [bb3,d4,f4]", J: "[bb3,d4,f4] [c4,e4]",
  K: "[[bb3,d4,f4] e4 [ab3,eb4,g4]@3 ~, ~ c4@4 ~]/3", // Bb Abmaj7
})).s("gm_string_ensemble_1").gain(0.33)

// other · synth strings 2 · "SYN STR 2"
const synth_strings_2 = note(`<
  ~@22 A B C D A D C E A B C D A D C F ~@12 G@2 H@2 I@2 J K@2 L M N O P O Q R@2 S@2 T@4 ~@16 A L M N O P O Q R@2 S@2 U@6
>`.pickRestart({
  A: "eb5", B: "f5", C: "g5", D: "f5 bb5", E: "f5 c6", F: "f5 e5", G: "[g4@7 d5]/2", H: "[c5@5 b4 c5 d5]/2",
  I: "[e5@3 g5]/2", J: "c5", K: "[b4 g4 ~@2 eb5@4, ~ g5@3]/2", L: "f5 bb5, d5", M: "[c5,eb5]", N: "[d5,f5] [e5,c6]",
  O: "[eb5,g5]", P: "[d5,f5]@2 eb5 d5", Q: "[d5,f5] [c5,e5]", R: "[[c5,c6]@3 [bb4,bb5]]/2",
  S: "[[c5,c6]@6 [bb4,bb5] [eb5,eb6]]/2", T: "[[c5,c6]@14 [bb4,bb5] [c5,c6]]/4",
  U: "[[c5,c6]@14 [bb4,bb5] [c5,c6]@7 ~@2]/6", // C Bb C
})).s("gm_synth_strings_2").gain(0.33)

// drums · kick
const kick = s("bd").struct("<[x ~@4 x ~@3 x ~@5 x ~@4 x ~@3]!106 ~@2>").gain(0.44)

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

// drums · hihat
const hihat = s("hh").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 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@2 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 ~@2
>`.pickRestart({
  A: "x!5 ~ x!2", B: "x!5 ~ x ~",
})).gain(0.27)

// drums · open hat
const open_hat = s("oh").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 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@2 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 ~@2
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x ~ x",
})).gain(0.33)

// drums · crash
const crash = s("cr").struct("<~@22 x ~@85>").gain(0.33)

// drums · ride
const ride = s("rd").struct("<~@106 [x ~@10 x!3 ~@10] ~>").gain(0.33)

// drums · bongos
const bongos = s("bongo:4").struct("<[~@11 x ~@2 x ~@9]!106 ~@2>").gain(0.86)

// drums · congas
const congas = s("conga:13").struct("<[~@11 x ~@2 x ~@9]!106 ~@2>").gain(1.22)

// drums · shaker
const shaker = s("sh").struct("<[x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!106 ~@2>").gain(0.27)

stack(
  epiano2, bass, epiano1, synth_brass_2, string_ensemble_1, synth_strings_2, kick, snare, hihat, open_hat, crash, ride,
  bongos, congas, shaker
)

More by Stansfield Lisa