Strudelify

Nasty Girl

Destiny's Child

KeyE minorTempo131 bpm
0:00/0:00
// Nasty Girl — Destiny's Child
// 131 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 141 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(131/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(`<
  ~@4 A B C D A E F G A B C D A E F G A B C D A E F G A B C D A E F G A B C D A E F G A B C D A E F G A B C D ~@4 A B C
  D ~@4 A B C D A E F G A B C D A E F G A B C D A E F G A B C D A E F G A B C D A E F G A B C D A E F G A B C D A E F G
  A B C D A E F G A B C D A E F G H
>`.pickRestart({
  A: "e2@2 ~ e2 ~@2 e2 ~@9", B: "b1 ~ b1 ~@4 b1", C: "c2@2 ~ c2 ~@2 c2@2 ~@8", D: "a1@2 ~@2 a1@2 ~@6 b1@3 ~",
  E: "b1 ~ b1 ~@3 b1@2", F: "c2@2 ~ c2 ~@2 c2@2 ~@6 g1@2", G: "a1@2 ~@2 a1@2 ~@2 b1@3 ~ b1@2 ~@2", H: "e2 ~@7",
})).s("gm_synth_bass_2").gain(0.22)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@4 A B C D A B C E A B C D A B C E F G H I F J K L F G H I F J K L A B C D A B C E A B C D A B C E F G H I ~@4 F G H
  I ~@4 F G H I F J K L F G H I F J K L A B C D A B C E A B C D A B C E A B C D A B C E A B C D A B C E A B C D A B C E
  A B C D A B C E M N O P Q R S T U
>`.pickRestart({
  A: "[b3,e4]@2 ~ [b3,e4] ~@2 [b3,e4] ~@9", B: "[b3,d4] ~ [b3,d4] ~@5", C: "[c4,e4]@2 ~ [c4,e4] ~@2 [c4,e4] ~@9",
  D: "[a3,c4]@2 ~@2 [a3,c4]@2 ~@6 [a3,d4] ~@3", E: "[a3,c4] ~@3 [a3,c4] ~@7 [b3,d4] ~@3", F: "e2@2 ~ e2 ~@2 e2 ~@9",
  G: "b1 ~ b1 ~@4 b1", H: "c2@2 ~ c2 ~@2 c2@2 ~@8", I: "a1@2 ~@2 a1@2 ~@6 b1@3 ~", J: "b1 ~ b1 ~@3 b1@2",
  K: "c2@2 ~ c2 ~@2 c2@2 ~@6 g1@2", L: "a1@2 ~@2 a1@2 ~@2 b1@3 ~ b1@2 ~@2", M: "~@2 e4@5 ~, b3@7 ~",
  N: "~@4 d4@11 ~, a3@7 ~", O: "~@4 e4@11 ~, g3@7 ~", P: "~@4 f#3@3 ~, a3@15 ~", Q: "~@2 b3@3 ~@3, e3@3 ~",
  R: "f#3 [a3,d4]@3", S: "~ g3@2 ~, e3@7 ~", T: "~@2 e3@2 g3@4 a3@5 ~@3, d3@13 ~@3", U: "[e2,e3] ~@7",
})).s("gm_electric_guitar_clean").gain(0.1).pan(0.4)

// other · alto sax
const alto_sax = note(`<
  ~ A@2 B C D C D E F G H C D C D E F G H I J K L M N O P Q R S T U V W X C D C D E F G H C D C D E F G H Y Z AA AB AC
  AD AE@2 Y Z AA AB AC AD AE@2 AF@2 AG AH AI@2 AJ AK Q R S T U V W X C D C D E F G H C D C D E F G H AL AM AN AO AL AM
  AN AO AP@2 AQ AR AS AT AU AV C D C D E F G H C D C D E F G H AW@2 AX AY AZ BA BB@2 ~
>`.pickRestart({
  A: "[~@13 e4!2 e4@3 ~ e4 ~@2 e4 e4@3 ~@2 e4 ~@2 e4]/2", B: "e4@3 ~ e4 ~@2 e4 e4@3 ~ e4 ~@2 e4",
  C: "g4@2 f#4 ~ e4 ~ f#4 ~ g4@2 f#4 ~ e4 ~ d4 ~", D: "e4@2 ~ e4 ~@2 d4 ~ e4 ~ d4 ~ e4 ~ f#4 ~",
  E: "g4@2 f#4 ~ e4 ~ f#4 ~ g4 ~ f#4 ~ e4 ~ d4 ~", F: "e4@2 ~ e4@2 ~ d4 ~ e4@2 d4 ~ e4 ~ f#4 ~",
  G: "g4@2 f#4 ~ e4 ~ f#4 ~ g4 ~ f#4 ~ e4 ~ f#4 ~", H: "g4 ~ f#4 ~ e4 ~ d4 ~ e4@2 ~ e4 ~@4",
  I: "e4!3 ~ e4 ~@2 b3 f#4!2 ~ f#4!2 ~@3", J: "g4!3 ~ g4@2 ~ g4 f#4@3 ~ f#4@4",
  K: "e4!2 ~ e4 e4@2 ~ c4 f#4@2 ~ f#4@3 ~@2", L: "g4@2 f#4@2 e4@2 f#4 ~ g4@7 ~",
  M: "g4@2 f#4 ~ e4 ~ f#4 ~ g4@2 f#4@2 e4 ~ d4 ~, e4 ~@15", N: "e4@2 ~ e4@2 ~ d4 ~ e4 ~ d4 ~ e4 ~ f#4 ~",
  O: "g4@2 f#4 ~ e4 ~ f#4 ~ g4@2 f#4 ~ e4@2 d4 ~", P: "e4@2 ~ e4@2 ~ b4@2 a4@4 ~@4", Q: "a4@3 g4@2 ~ e4@7 ~ d4 e4",
  R: "a4@3 g4@2 ~ e4@7 ~ e4 ~", S: "a4@2 g4@2 e4 ~ a4@3 ~ g4 ~ e4@2 d4 ~", T: "e4@2 ~ e4@9 d4@2 e4@2",
  U: "a4@3 g4@2 ~ g4@7 ~ e4 ~", V: "a4@2 ~ a4@2 ~ f#4@8 e4 f#4", W: "g4@2 f#4 ~ e4 ~ f#4 ~ g4@2 f#4@2 e4@2 f#4 ~",
  X: "b4@3 d5@2 ~ a4@7 ~@3", Y: "e4!3 ~ e4@3 b3 f#4!2 ~ f#4 f#4@3 b3", Z: "g4!2 ~ g4 g4@3 b3 f#4!2 ~ f#4 f#4@3 ~",
  AA: "e4!3 ~ e4@3 c4 f#4!2 ~ f#4@4 d4", AB: "g4!2 ~ g4@4 d4 f#4!2 ~ f#4 f#4@2 ~@2",
  AC: "e4@2 ~@2 b4@2 a4@2 ~@2 g4 ~@2 f#4@3", AD: "~@2 d4@4 b3 ~ d4@2 b3 ~ d4@2 ~@2",
  AE: "[e4@2 ~@2 b4 ~ a4@2 ~@2 g4@2 ~@2 f#4@4 d4@3 ~ b3 ~ d4@2 b3 d4@2 ~ e4 ~]/2",
  AF: "[b4@2 a4 b4 a4 ~ g4 e4 g4 ~ e4 d4 e4 ~ d4 b3@9 ~@5 d4 ~ e4]/2", AG: "g4@2 g4@2 ~ e4@4 ~ d4 ~ e4@2 g4 ~",
  AH: "b4@3 d5@3 a4@8 ~@2", AI: "[b4 ~ a4 b4 a4 g4 ~ e4 g4 e4 ~ d4 e4 ~ d4 b3@9 ~@2 d4 e4 g4@2 a4 ~]/2",
  AJ: "b4@2 d5@4 [a4,b4] a4 g4@5 e4 ~ [g4,a4]", AK: "b4@6 a4 g4 e4 g4@2 e4@3 e4 ~",
  AL: "b3@2 e4 b3 ~ e4 b3 e4 b3@2 f#4@4 b3 ~", AM: "b3@3 e4@3 b3 ~ a3@3 ~ g3@2 a3@2",
  AN: "c4@2 e4 c4 e4 ~ c4 e4 c4@2 f#4@3 ~ c4 ~", AO: "c4@2 ~ g4@2 ~ c4 ~ d4@4 b3@2 ~@2",
  AP: "[a4@4 g4@2 ~ e4@11 ~@10 d4@2 e4@2]/2", AQ: "g4@3 ~ e4@12", AR: "b4@7 ~",
  AS: "b4@3 a#4 a4 ~ e4@8 d4 e4, ~@5 g4@2 ~@9", AT: "f#4@13 ~@2 [d4,e4]", AU: "g4@9 ~@3 e4@2 g4 ~",
  AV: "b4@2 ~ b4@2 ~ b4@4 a4@4 ~@2", AW: "[b4 a4 ~ g4 ~ a4 g4 ~ e4 g4 ~ e4 d4 ~ b3@11 ~@7]/2", AX: "~@12 e3@3 ~",
  AY: "g3 e3@4 ~ d3 e3", AZ: "~ g3@3 g3@10 ~@2", BA: "a3@3 ~ a3@11 ~", BB: "[b3@2 d4 ~@2 b3@2 ~ d4@17 ~@7]/2",
})).s("gm_alto_sax").gain(0.24)

// chords · lead 8 bass lead
const lead_8_bass_lead = note(`<
  ~@4 A B C D E F G H A B C D E F G H ~@8 A B C D E F G H A B C D E F G H A B C D E F G H ~@16 A B C D E F G H A B C D E
  F G H A B C D E F G H A B C D E F G H ~@8 A B C D E F G H A B C D E F G H A B C D E F G H I J K L M N O P Q
>`.pickRestart({
  A: "b4@2 g5 [b4,e5] e5 ~ [b4,e5] ~ b4@2 [b4,e5,g5] ~ [b4,e5] ~ [b4,e5] ~, e5 ~@15", // E5 Em E5
  B: "b4@2 f#5 [b4,d5] d5 ~ [b4,d5] ~ b4@2 [b4,d5,f#5] ~ [b4,d5] ~ [b4,d5] ~, d5 ~@15", // Bm
  C: "[c5,e5] ~ g5 [c5,e5] e5 ~ [c5,e5] ~ c5 ~ [c5,e5,g5] ~ [c5,e5] ~ [c5,e5] ~", // C
  D: "[a4,c5] ~ e5 [a4,c5] c5 ~ a4 [a4,c5] a4 ~ [a4,b4,d5] ~ [b4,d5] ~ [b4,d5] ~", // Am Bm7 Bm
  E: "e5@2 g5 [b4,e5] e5 ~ [b4,e5] ~ b4 ~ [b4,e5,g5] ~ [b4,e5] ~ [b4,e5] ~, b4 ~@15", // E5 Em E5
  F: "d5@2 f#5 [b4,d5] d5 ~ [b4,d5] ~ b4 ~ [b4,d5] ~ [b4,d5] ~ [b4,d5] ~, b4 ~@9 f#5@2 ~@4", // Bm
  G: "[c5,e5]@2 g5 [c5,e5] e5@2 [c5,e5] ~ c5 ~ [c5,e5,g5] ~ [c5,e5] ~ [c5,e5] ~", // C
  H: "[a4,c5]@2 e5 [a4,c5] c5@2 [a4,c5] ~ b4@2 [b4,d5,f#5] ~ [b4,d5] ~ b4 ~", // Am Bm
  I: "[e4,g4] ~@3 [e4,g4] ~@3 [e4,g4] ~@3 [e4,g4] ~@3", J: "d4 ~ [d4,f#4] ~ d4 ~ [d4,f#4] ~, f#4 ~@7 f#4 ~@7",
  K: "g4 ~ [e4,g4] ~ g4 ~ g4 ~, e4 ~@7 e4 ~@3 e4 ~@3", L: "g4 ~ g4 ~ f#4 ~ [f#4,a4] ~, e4 ~@3 e4 ~@3 a4 ~@7",
  M: "[e4,g4] ~@3 [e4,g4] ~@3 [e4,g4] ~@3 [e4,g4]@2 ~@2", N: "[d4,f#4] ~ [d4,f#4] ~ [d4,f#4] ~ [d4,f#4] ~",
  O: "[c4,g4]@2 ~@2 [c4,g4]@2 ~@2 [c4,g4]@2 ~@2 [c4,g4] ~@3", P: "[a3,c4] ~@3 [a3,c4] ~@3 [a3,d4] ~@3 [a3,d4] ~@3",
  Q: "[b3,e4] ~@7, e3 ~@15", // E5
})).s("gm_lead_8_bass_lead").gain(0.07).pan(0.8)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@4 A@2 B@4 C@2 A@2 B@4 C@2 ~@16 A@2 B@4 C@2 A@2 B@4 C@2 ~@32 A@2 B@4 C@2 A@2 B@4 C@2 ~@16 A@2 B@4 C@2 A@2 B@4 C@2 ~@9
>`.pickRestart({
  A: "[[e4,g4]@15 ~ [d4,f#4]@16, b3@31 ~]/2", B: "[g3@4 a3@3 [d4,f#4] [e4,g4]@4 [d4,f#4]@4, [c4,e4]@28 b3@35 ~]/4",
  C: "[g3@2 a3 [b3,d4,f#4], [c4,e4]@3 ~]/2", // Bm C
})).s("gm_synth_strings_1").gain(0.06).pan(0.4)

// other · pad new age
const pad_new_age = note(`<
  ~@4 A B A C A B A D A B A C A B A D ~@16 A B A C A B A D A B A C A B A D ~@32 A B A C A B A D A B A C A B A D ~@16 A B
  A C A B A D A B A C A B A D ~@9
>`.pickRestart({
  A: "e5", B: "d5", C: "g5@9 ~@7", D: "g5@7 ~@9",
})).s("gm_pad_new_age").gain(0.07)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C ~@4 A B A
  C ~@4 A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C A B A C
  A B A C A B A C ~@8 D
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~@9", B: "x!2 ~@2", C: "x!2 ~ x", D: "x",
})).gain(0.22)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@19 A ~@31 A ~@47 A ~@31 A ~@9>".pickRestart({
  A: "~@11 x ~ x ~@2",
})).gain(0.18)

// drums · clap
const clap = s("cp").struct("<~@56 [~ x ~ x]!4 ~@81>").gain(0.18)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~ A@26 B@2 C D B A E F A@20 ~@4 A@4 ~@4 B@2 C D B A E F B@2 C D B A E F A@56 ~
>`.pickRestart({
  A: "x!4", B: "x!5 ~ x ~ x ~@3 x ~@3", C: "x!5 ~ x ~ x ~@3 x ~ x!2", D: "x!3 ~ x ~ x ~", E: "x!5 ~ x!3 ~@3 x ~@3",
  F: "x ~@3 x ~@3 x ~ x ~ x!3 ~",
})).gain(0.25)

// drums · mid tom
const mid_tom = s("mt").struct("<~@43 A ~@47 A ~@23 A ~@7 A ~@17>".pickRestart({
  A: "~@7 x",
})).gain(0.22)

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

// drums · high tom
const high_tom = s("ht").struct("<~@35 [~@4 x ~@2 x] ~@39 [~@4 x ~@2 x] ~@7 [~@4 x ~@2 x] ~@57>").gain(0.29)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@15 A
>`.pickRestart({
  A: "x",
})).gain(0.22)

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

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@4 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 C B A B C B A B C B ~@4 A B C
  B ~@4 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 C B A B C B A B C B A B C B
  A B C B A B C B@9 ~
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "x!2 ~@2", C: "x ~ x ~@4 x",
})).gain(1.25)

// drums · triangle · soft notes
const triangle_soft = s("triangles:30").struct(`<
  ~@6 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 ~@7 A ~@7 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 ~@10
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.62)

// drums · triangle
const triangle_2 = s("triangles:35").struct("<~@4 [~ x]!52 ~@4 [~ x]!4 ~@4 [~ x]!72 ~>").gain(1.25)

stack(
  bass, electric_guitar_clean, alto_sax, lead_8_bass_lead, synth_strings_1, pad_new_age, kick, snare, snare_soft, clap,
  hihat, mid_tom, open_hat, high_tom, crash, shaker, triangle, triangle_soft, triangle_2
)

More by Destiny's Child