Strudelify

Survivor

Destiny's Child

KeyG♯ minorTempo165 bpm
0:00/0:00
// Survivor — Destiny's Child
// 165 bpm, 4/4, key G# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 170 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(165/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass finger
const bass = note(`<
  ~@18 A B C D A B E F A B C D A B E F A B C D A B E F A B C D A B E F A B C D A B E F A B C D A B E F A B C D A B E F A
  B C D A B E F A B C D A B E F A B C D A B E F A B C D A B E F A B C D A B E F A B C D A B E F A B C D A B E F A B C D
  A B E F A B C D A B E F A B C D A B E F A B C D A B E F A B C D ~@4
>`.pickRestart({
  A: "g#1@3 ~@11 b0@2", B: "c#1@2 c#1@3 ~@7 e1@3 ~", C: "d#1@2 ~@5 g1", D: "g#1@4 ~@8 d#1@3 ~", E: "d#1@3 ~@9 g1@3 ~",
  F: "g#1@2 ~@4 g#1 ~ g#1@3 ~ d#1@2 f#1@2",
})).s("gm_electric_bass_finger").gain(0.8)

// chords · epiano1
const epiano1 = note("<~@42 A B C D E F G H ~@24 A B C D E F G H ~@32 A B C D E F G H ~@40 A B C D ~@4>".pickRestart({
  A: "g#3@2 ~@2 g#4@2 d#5@9 ~, ~@2 d#4@13 ~", B: "c#4@2 ~@2 g#4@2 d#5@5 ~ c#5@3 ~, ~@2 e4@11 ~@3",
  C: "a#3 ~ a#4 d#5@4 ~, ~@2 d#4@11 ~@3", D: "g#3@2 ~@2 g#4@2 b4@2 [d#4,a#4]@7 ~, ~@2 d#4@5 ~@9",
  E: "g#3@2 ~@2 g#4@2 b4@2 d#5@7 ~, ~@2 d#4@13 ~", F: "c#4@2 ~@2 g#4@2 c#5@9 ~, ~@2 e4@13 ~",
  G: "~@2 g4@2 a#4@2 c#5@9 ~, d#4@15 ~", H: "g#3 ~ g#4 b4@2 ~@3, ~ d#4@4 ~@3",
})).s("gm_epiano1").gain(0.72)

// other · french horn
const french_horn = note(`<
  ~@42 A B C A@2 B C A ~@24 A B C A@2 B C A ~@40 D E F G H I J K ~@32 A B C A@2 B C A
>`.pickRestart({
  A: "~@4 b4@3 ~@9", B: "~ b4 ~@2", C: "~@4 a#4@3 ~@9", D: "~@8 d#4@2 c#4@2 b3@3 ~", E: "~@8 e4@2 d#4@2 c#4@3 ~",
  F: "~@3 g#4 g4@3 ~", G: "~@6 b4 a#4 b4 a#4 g#4@2 ~@4", H: "~@4 b4@2 a#4 ~ b4@2 a#4@2 g#4 f#4 d#4@2",
  I: "~@8 b4@2 a#4@2 g#4 f#4 d#4@2", J: "~@8 g4@2 g#4 a#4 b4 a#4 g#4 g4", K: "g#4 a#4 b4 a#4 g#4@2 g4@2 g#4@7 ~",
})).s("gm_french_horn").gain(0.72)

// chords · pad bowed
const pad_bowed = note(`<
  ~@34 A B C D E F C G A B C D E F C G ~@16 A B C D E F C G A B C D E F C G A B C D E F C G A B C D E F C G A B C D E F
  C G A B C D E F C G A B C D E F C G ~@16 A B C D E F C G A B C D E F C G A B C D E F C G A B C D ~@4
>`.pickRestart({
  A: "~@8 [d#4,g#4,b4]@5 ~@3", B: "~@8 [e4,g#4,b4]@7 ~", C: "~@8 [c#4,g4,a#4]@5 ~@3",
  D: "[b3,d#4,g#4]@6 ~@2 [a#3,d#4,g4]@5 ~@3", E: "~@4 [b3,d#4,g#4]@3 ~", F: "~@4 [c#4,e4,g#4]@3 ~",
  G: "[d#4,g#4,b4]@5 ~@3", // G#m
})).s("gm_pad_bowed").gain(0.72)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@2 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 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 F G H I F G H I F G H I F G H I F G H I F G H I 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 A B C D A B C E A B C D ~@4
>`.pickRestart({
  A: "g#4 ~ d#4 ~ g#4 ~ a#4@2 b4@2 a#4@2 g#4@2 d#4@2", B: "e4@2 g#4 ~ c#5@2 e5@2 c#5 ~ g#4@2 e4 ~ g#4@2",
  C: "d#4@2 g4 ~ a#4 ~ c#5@2 a#4 ~ g4 ~ d#4 ~ a#4@2", D: "g#4 ~ d#4@2 g#4 ~ a#4@2 g4 ~ d#4 ~ g4 ~ d#5@2",
  E: "g#4 ~ d#4@2 g#4 ~ a#4@2 b4 ~ d#4 ~ g#4 ~ b4@2",
  F: "g#2@2 [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ g#2 ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ g#2 ~ [g#3,b3,d#4] ~", // G#m
  G: "[c#3,e3] ~ [g#3,c#4] ~ [g#3,d#4] ~ [c#3,e3] ~ [g#3,d#4] ~ [c#3,e3] ~ [g#3,c#4] ~ [g#3,c#4] ~", // C#m C#5 G#5 C#m G#5 C#m C#5
  H: "[d#3,g3] ~ [d#3,g3] ~ [a#3,c#4] ~ [d#3,g3] ~ [d#3,g3] ~ [a#3,c#4] ~ [a#3,c#4] ~ [d#3,g3] ~", // D# A#m D# A#m D#
  I: "[g#2,d#3] ~ [g#3,b3,d#4] ~ [g#3,b3,d#4] ~ [g#2,d#3] ~ [a#3,c#4] ~ [b3,c#4,d#4] ~ [b3,d#4] ~ [b3,d#4] ~", // G#5 G#m G#5 A#m B
})).s("gm_string_ensemble_1").gain(0.56)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@2 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 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 A B C D E F G H A B C D E F G H ~@24 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 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 ~@4
>`.pickRestart({
  A: "g#2 [d#3,b3]", B: "c#2 [e3,b3]", C: "d#2@7 ~ [c#3,a#3]@7 ~", D: "g#2@7 ~ [d#2,c#3,a#3]@7 ~",
  E: "g#2@8 [g#3,b3,d#4]@7 ~", F: "c#2@7 ~ [g#3,c#4,e4]@7 ~", G: "d#2@7 ~ [g3,a#3,d#4]@5 ~@3",
  H: "g#2@7 ~ [g#2,g#3,b3,d#4]@5 ~@3", // G#m
})).s("gm_string_ensemble_2").gain(0.48)

// other · orchestra hit
const orchestra_hit = note(`<
  ~@17
  [g#3 ~@3 g#3 ~@3 d#3 ~@3 d#3 ~@3]
  ~@47
  [g#3 ~@3 g#3 ~@3 d#3 ~@3 d#3 ~@3]
  ~@71
  [g#3 ~@3 g#3 ~@3 d#3 ~@3 d#3 ~@3]
  ~@32
>`).s("gm_orchestra_hit").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  ~@18 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 A B A B A B A B A B A B A B A
  B A B A B A B C D C E C D C E C D C E C D C E C D C E C D C E 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 A B A B A B A B A B A B A B A B A B ~@4
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "~@3 x!2 ~@3", C: "x ~@3 x!2 ~ x", D: "~@3 x ~@4 x ~ x ~@3 x ~", E: "~ x!2 ~@4 x",
})).gain(0.48)

// drums · rim
const rim = s("rim").struct("<~@82 A B C D A B C D A B C D A B C D A B C D A B C D ~@64>".pickRestart({
  A: "~@4 x ~@2 x ~ x ~@2 x ~@3", B: "~@3 x", C: "~@4 x ~@4 x ~@2 x ~@3", D: "~@4 x!2 ~@2",
})).gain(0.48)

// drums · clap
const clap = s("cp").struct(`<
  ~@18 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~@24 A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B ~@4
>`.pickRestart({
  A: "~ x", B: "~ x ~@2 x ~@3",
})).gain(0.48)

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

// drums · hihat
const hihat = s("hh").struct("<A ~ B@6 C A D@72 E F@2 A G A@2 F A@2 G A@4 H A@3 F A@3 H D@60 ~@4>".pickRestart({
  A: "x!4", B: "x", C: "x!2", D: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x", E: "~ x!3", F: "x!2 ~ x", G: "x!3 ~", H: "x ~ x!2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@83 A@2 ~ B ~@2 A ~@2 B ~@4 C ~@3 A ~@3 C ~@64>".pickRestart({
  A: "~ x", B: "~@3 x", C: "~ x ~@2",
})).gain(0.48)

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

// drums · shaker
const shaker = s("sh").struct(`<
  ~@18 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 ~@24 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 ~@4
>`.pickRestart({
  A: "x ~@2 x!2 ~@3", B: "~ x ~ x!2 ~ x ~", C: "~ x ~ x!2 ~ x!2",
})).gain(0.72)

// drums · triangle
const triangle = s("triangles:35").struct(`<
  ~@18 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~@25 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~@5
>`.pickRestart({
  A: "~@3 x",
})).gain(6.27)

stack(
  bass, epiano1, french_horn, pad_bowed, string_ensemble_1, string_ensemble_2, orchestra_hit, kick, rim, clap, snare,
  hihat, open_hat, crash, shaker, triangle
)

More by Destiny's Child