Strudelify

All Woman

Stansfield Lisa

KeyG minorTempo70 bpm
0:00/0:00
// All Woman — Stansfield Lisa
// 70 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/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.

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B A C A B A C A B A D E A F G H I B J H K B J L M N O P B A C A B A D E A F G H I B J H K B J L M N O L M N O P B A
  C A B A D E A F G H I B J H K B J L M N O L M N O L M N O Q ~
>`.pickRestart({
  A: "[g2,a3,bb3,d4,f4]", B: "[c3,bb3,d4,eb4,g4]", C: "g4@10 ~@3 d4@3, [c3,bb3,eb4], d4@13 ~@3, ~@5 g4@3",
  D: "[g3,c4,e4]@13 [g3,c4,e4]@3, e3", E: "[eb2,g3,bb3,d4,f4]", F: "[c3,g3,c4,e4]",
  G: "[d3,c4,e4,g4]@3 [d3,c4,e4,g4,c5]@5", H: "[eb3,g3,bb3,d4,f4]", I: "[d3,f3,a3,c4,f4] [d3,gb3,bb3,d4]",
  J: "[g2,f3,a3,c4,f4] [g2,g3,b3,d4,g4]", K: "[d3,f3,a3,c4,f4] [g2,f3,bb3,d4,f4]", L: "[eb3,g3,bb3,d4,g4]",
  M: "[a3,d4,f4]@10 a3@3 a3@3, bb2, ~@5 [d4,f4]@3", N: "[eb3,bb3,d4,g4]",
  O: "[a3,d4,f4]@10 ~@3 c4@3, bb2, ~@5 [a3,d4,f4]@3", P: "[g2,bb3,d4,f4], a3 ~@15", Q: "[eb3,g3,bb3,d4,g4]@7 ~",
})).s("gm_epiano2").gain(0.27)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~@16 A B C D E F G H I J K L M N M O M N M P Q R S T A B C D E F G H I J K L I J K L M N M O M N M P Q R S T A B C D E
  F G H I J K L I J K L I J K L I ~
>`.pickRestart({
  A: "eb1@2 ~ eb1 ~@2 eb1@3 ~@7", B: "d1@2 ~ d1 ~@2 d1 ~@9", C: "c2@2 ~ c2 ~@2 c2@2 ~@8",
  D: "g1@2 ~ g1 ~@2 g1@2 ~ g1@7", E: "eb1@2 ~ eb1 ~@2 eb1@2 ~ eb1 ~@6", F: "d1@2 ~ d1 ~@2 d1@2 ~@8",
  G: "c2@2 ~ c2 ~@2 c2@2 ~ c2 ~@6", H: "g1@2 ~ g1 ~@2 g1@2 ~ g1 ~@2 g1@4", I: "eb1@2 ~ eb1 ~@2 eb1 ~@9",
  J: "bb1@2 ~ bb1 ~@2 bb1 ~@8 bb1", K: "eb1@2 ~ eb1 ~@2 eb1 ~@5 eb1@4", L: "bb1@2 ~ bb1 ~@2 bb1 ~@2 d2@3 c2@2 bb1@2",
  M: "g1@2 ~ g1 ~@2 g1 ~@8 g1", N: "c2@2 ~ c2 ~@2 c2 ~@4 g2 g2@2 d2@2", O: "c2@2 ~ c2 ~@2 c2 ~@5 c2 d2@3",
  P: "e1@2 ~ e1 ~@2 e1 ~@5 e2@2 b1 e1", Q: "eb1@2 ~ eb1 ~@2 eb1 ~@8 eb1", R: "g1@2 ~ g1 ~@2 g1 ~@6 g1@3",
  S: "c2@2 ~ c2 ~@2 c2 ~@8 c2", T: "d2@2 ~ d2 ~@2 d2 ~@2 d2@7",
})).s("gm_fretless_bass").gain(0.48)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@11 A B C D@2 E F@2 G E F@2 G ~@11 A B C D@2 E F@2 G E F@2 G ~@15 A ~@4 E F@2 G E F@2 G ~@14
>`.pickRestart({
  A: "~@4 bb3!2 c4 d4", B: "g3@10 d3@3 bb3@3", C: "a3@5 bb3 c4 d4", D: "g3/2", E: "g4", F: "[a4 bb4@3]/2", G: "a4 f4",
})).s("gm_string_ensemble_1").gain(0.22)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@3 A B ~@9 C D E F G H I J K H L M L M N ~@7 L M O P I F G H I J K H L M L M Q M L M R ~@7 S@2 T@2 E F G H I J K H L
  M L M Q M L M Q M L M U ~
>`.pickRestart({
  A: "~@3 [c3,bb3,d4,eb4,g4]@12 c2", B: "[g2,g3,a3,bb3,d4,f4]", C: "[c4,e4,g4]", D: "[d2,d3,c4,e4,g4,c5]",
  E: "[eb3,bb3,d4], g4 ~@15", F: "[d3,a3,c4,f4] [gb3,a3,d4]", G: "[g3,bb3,eb4]", H: "[g2,a3,c4,f4] [g2,b3,d4,g4]",
  I: "[eb3,bb3,d4,g4]", J: "[d3,a3,c4,f4] [g3,bb3,d4]", K: "[c3,g3,bb3,eb4]", L: "[bb3,d4,g4]", M: "[a3,d4,f4]",
  N: "[g2,g3,a3,bb3,f4], d4 ~@15", O: "[g3,c4,e4]", P: "[c4,e4,g4]@3 [c4,e4,g4,c5]@5", Q: "[bb3,g4], d4 ~@15",
  R: "[g2,g3,a3,bb3,f4], d4@3 ~@13", S: "[f4,f5]/2", T: "[g4,g5]/2", U: "[bb3,g4]@7 ~, d4 ~@15",
})).s("gm_string_ensemble_2").gain(0.18).pan(0.3)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note(`<
  A@2 B C ~@20 D@2 E@2 ~@11 F G H I J G H K L D@2 E@2 D@2 E@2 ~@5 M N O P Q R S T H I J G H K L D@2 E@2 D@2 E@2 D@2 E@2
  U ~
>`.pickRestart({
  A: "[d6@26 c6@3 bb5@3]/2", B: "a5@13 bb5@3", C: "d5@8 g4@7 ~",
  D: "[~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] [f4,f5]@3 [g4,g5] ~@13]/2", // G F G
  E: "[~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] [f4,f5]@3 [g4,g5] [d4,d5] ~@12]/2", // G F G D
  F: "g5@5 a5 bb5 c6", G: "d6@10 g5@3 d6@3", H: "c6@2 d6 f6", I: "bb5@5 a5 f5 c5", J: "d5@8 g5@6 a5 [bb5,c6]",
  K: "bb5@10 a5@3 g5@3", L: "a5 g5", M: "~@3 d5 eb5@2 bb5@2", N: "a5@5 bb5 c6 d6", O: "g5",
  P: "~@10 [bb3,bb4] [c4,c5] [bb4,bb5] [c5,c6] ~@2", Q: "~@8 [a4,a5] [bb4,bb5] [bb3,bb4] [c4,c5] [bb4,bb5] [c5,c6] ~@2",
  R: "~@7 [c3,c4]", // C
  S: "~ [f3,f4] ~ [d3,d4] [g3,g4] [f3,f4] ~ [bb3,bb4] [g3,g4] [c4,c5]@2 [bb3,bb4] [c4,c5] [d4,eb4,d5,eb5] [f4,g4,a4,f5,g5,a5] [bb4,bb5], [d3,d4] ~@7", // F D G F Bb G C Bb …
  T: "[c5,c6] ~@9 g5@3 d6@3, d6@5 ~@3", U: "~@2 [g4,g5] ~@2 [g4,g5] ~@2 [g4,g5] ~@7",
})).s("gm_string_ensemble_1").gain(0.26).pan(0.6)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  A B A B C B A B A B A D E A D F ~@12 C B A B A B A D E A D F ~@24 E A D F ~@22
>`.pickRestart({
  A: "[a3,bb3,d4,f4]", B: "[bb3,d4,eb4,g4]", C: "~ [a3,bb3,d4,f4]@15", D: "[g3,c4,e4]", E: "[g3,bb3,d4,f4]",
  F: "[c4,e4,g4]@3 [c4,e4,g4,c5]@5", // C
})).s("gm_synth_strings_1").gain(0.12)

// chords · tremolo strings · "TREMOLOSTR"
const tremolo_strings = note("<~@56 A B C B C B C D ~@26>".pickRestart({
  A: "~ [bb3,d4,f4]@15", B: "[bb3,eb4,g4]", C: "[bb3,d4,f4]", D: "[c4,e4,g4]",
})).s("gm_tremolo_strings").gain(0.14).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x ~@5 x ~ x ~@4]!16 [x ~@2 x ~@2 x ~@2 x ~ x ~@4]!72 [x ~@2 x ~@2 x ~@9] ~>")
  .gain(0.42)

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

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

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

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@17 A ~@3 A ~ B ~ A ~@3 A ~@3 A ~ B ~ A ~@3 A ~@3 A ~ B ~ A ~@3 A ~@3 A ~@3 A ~ B ~ A ~@3 A ~@3 A ~ B ~ A ~@3 A ~@3 A
  ~@4
>`.pickRestart({
  A: "~@15 x", B: "~@13 x ~@2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [~@9 x ~@6]!72 ~@2>").gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<A B A B A B A B A B A B A B A B ~@74>".pickRestart({
  A: "~@5 x ~@2 x ~@7", B: "~@5 x!2 ~ x ~@7",
})).gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~ x]!88 [~ x ~@2] ~>").gain(0.42)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "x",
})).gain(0.3)

// drums · shaker
const shaker = s("sh").struct("<[x!8]!16 [x!16]!72 [x!8 ~@8] ~>").gain(0.18)

// drums · triangle
const triangle = s("triangles:30").struct("<~@76 [x!2 ~@6 x!2 ~@2 x!2 ~@2]!12 [x!2 ~@14] ~>").gain(2.61)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@76 [~@3 x ~@10 x ~]!12 [~@3 x ~@12] ~>").gain(2.61)

stack(
  epiano2, bass, string_ensemble_1, string_ensemble_2, string_ensemble_1_2, synth_strings_1, tremolo_strings, kick, rim,
  snare, low_tom, hihat, mid_tom, open_hat, high_tom, tambourine, crash, shaker, triangle, triangle_2
)

More by Stansfield Lisa