Strudelify

Say My Name

Destiny's Child

KeyB♭ majorTempo70 bpm
0:00/0:00
// Say My Name — Destiny's Child
// 70 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 79 bars on a 32-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 · acoustic guitar steel · "Staff-1"
const acoustic_guitar_steel = note("<A@8 B@7 C@4 ~ A@8 B@7 C@4 ~ A@8 D@5 E@6 ~ A@8 F@8 G@3>".pickRestart({
  A: "[~@7 eb4@6 ~@2 c4@6 ~@2 c4@6 ~@2 eb4@2 ~@6 eb4@6 ~@2 c4@6 ~@2 c4@6 ~@2 eb4@2 ~@6 eb4@6 ~@2 c4@6 ~@2 c4@6 ~@2 eb4@2 ~@6 eb4@6 ~@2 c4@6 ~@2 c4@6 ~@2 eb4, ~@10 g3@16 ~@2 ab4@14 ~@2 f4@14 ~@2 c4@6 ~@2 b3@8 c4@14 c4@4 ~@13 c4@3 ~@13 bb3@7 ~ bb3@8 bb3 c4@14 c4@4 ~@13 c4@3 ~@13 bb3@7 ~ bb3@8 bb3 c4@14 c4@4 ~@13 c4@3 ~@13 bb3@5, ~@11 bb3@15 ~ eb4@15 ~ c4@3 ~@13 bb3@7 ~ bb3@8 bb3@15 ~@2 ab4@14 ~@28 d4@20 ~ eb4@15 ~@2 f4@14 ~@2 c4@6 ~@2 b3@22 ~@2 ab4@14 ~@22, ~@6 c4@7 c4@2 ~@6 ab3@8 g3@4 g3@4 g3@8 ~@8 ab3@8 g3@4 g3@4 g3@8 ~@8 ab3@8 g3@4 g3@4 g3@8 ~@8 ab3@8 g3@3, ~@70 d4@20 ~ eb4@15 ~@2 f4@14 ~@2 c4@6 ~@2 b3@22 ~@2 ab4@14 ~@28 d4@20 ~ eb4@15 ~@2 f4@14 ~@2 c4@4]/8",
  B: "[~@3 d4 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 ~@6 d4@2 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 ~@6 d4@2 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 ~@6 d4@2 c4@3 c4@3 c4@2 c4@3 c4, ~ g3@3 ~@28 b3@4 ~@28 b3@4 ~@28 b3@4 ~@12, ~@3 bb3@5 ~@52 eb4@12 ~@52 eb4@12 ~@52 eb4@12 ~@24, ~ b3 ~@12 c4@4 ~@12 c4@4 ~@12 c4@4 ~@6]/7",
  C: "[~@2 c4@2 c4@3 c4@3 c4@2 ~@6 d4@32 ~@14, ~@3 c4@8 ~@5, ~@7 eb4@16 ~@9, ~ b3@2 ~]/4",
  D: "[~@3 d4 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 ~@6 d4@2 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 c4@3 c4@3 c4@2 ~@6 d4@2 c4@3 c4@3 c4@2 c4@3 c4, ~ g3@3 ~@28 b3@4 ~@28 b3@4 ~@12, ~@3 bb3@5 ~@52 eb4@12 ~@52 eb4@12 ~@24, ~ b3 ~@12 c4@4 ~@12 c4@4 ~@6]/5",
  E: "[~@2 c4@2 c4@3 c4@3 c4@2 ~@6 d4@2 c4@3 c4@3 c4@10 c4@3 c4@3 c4@2 ~@6 d4@32 ~@14, ~@3 c4@2 ~@6 c4@8 ~@5, ~@7 eb4@3 ~@13 eb4@16 ~@9, ~@4 b3 ~@7 b3@8 ~@4]/6",
  F: "[~@7 eb4@6 ~@2 c4@6 ~@2 c4@6 ~@2 eb4@2 ~@6 eb4@6 ~@2 c4@6 ~@2 c4@6 ~@2 eb4@2 ~@6 eb4@6 ~@2 c4@6 ~@2 c4@6 ~@2 eb4@2 ~@6 eb4@6 ~@2 c4@6 ~@2 c4@6 ~@2 eb4, ~@2 g3@8 g3@2 c4@14 c4@4 ~@13 c4@3 ~@13 bb3@7 ~ bb3@8 bb3 c4@14 c4@4 ~@13 c4@3 ~@13 bb3@7 ~ bb3@8 bb3 c4@14 c4@4 ~@13 c4@3 ~@13 bb3@7 ~ bb3@8 bb3 c4@14 c4@4 ~@13 c4@3 ~@13 bb3@5, ~@3 bb3@8 bb3@15 ~@16 ab3@16 g3@8 g3@8 g3@16 ~@16 ab3@16 g3@8 g3@8 g3@16 ~@16 ab3@16 g3@8 g3@8 g3@16 ~@16 ab3@16 g3@6, ~@4 b3@22 ~@2 ab4@14 ~@28 d4@20 ~ eb4@15 ~@2 f4@14 ~@2 c4@6 ~@2 b3@22 ~@2 ab4@14 ~@28 d4@20 ~ eb4@15 ~@2 f4@14 ~@2 c4@4, ~@6 d4@20 ~ eb4@15 ~@2 f4@14 ~@2 c4@6 ~@2 b3@22 ~@2 ab4@14 ~@28 d4@20 ~ eb4@15 ~@2 f4@14 ~@2 c4@6 ~@2 b3@22 ~@2 ab4@14 ~@22]/8",
  G: "[~@3 d4@32 ~@13, ~ g3@32 ~@15, ~@3 bb3@64 ~@29, ~ b3@16 ~@7]/3",
})).s("gm_acoustic_guitar_steel").gain(0.72)

// chords · acoustic guitar steel · "Staff-2"
const acoustic_guitar_steel_2 = note("<A@8 B@7 C@3 ~@2 D@8 B@7 C@3 ~@2 D@8 E@7 C@3 ~@2 D@8 F@7 G@3 ~>".pickRestart({
  A: "[~ d3 c3@4 ab2@4 f2@4 ~@2 b2@2 c3@4 ab2@4 f2@4 ~@2 b2@2 c3@4 ab2@4 f2@4 ~@2 b2@2 c3@4 ab2@4 f2@4 bb2@2, eb3 ~@6 bb2@2 ~@6 bb2@2 ~@6 bb2@2 ~@7]/8",
  B: "[b2 [c3,g3]@2 [eb3,ab3]@2 [f2,ab2]@2 ~ [g2,b2] [c3,g3]@2 [eb3,ab3]@2 [f2,ab2]@2 ~ [g2,b2] [c3,g3]@2 [eb3,ab3]@2 [f2,ab2]@2 ~ [g2,b2] [c3,g3]@2 [eb3,ab3], ~@7 [f2,ab2]@2 ~@6 [f2,ab2]@2 ~@6 [f2,ab2]@2 ~@3]/7", // C5 Ab5 Fm G C5 Ab5 Fm G …
  C: "[~ [f2,ab2]@2 ~ [g2,b2]@8, ~@3 [f2,ab2]@8 ~]/3", // Fm G Fm
  D: "[~ c3@2 ab2@2 f2@2 ~ b2 c3@2 ab2@2 f2@2 ~ b2 c3@2 ab2@2 f2@2 ~ b2 c3@2 ab2@2 f2@2 bb2, ~@7 bb2@2 ~@6 bb2@2 ~@6 bb2@2 ~@7]/8",
  E: "[b2 [c3,g3]@2 [eb3,ab3]@2 [f2,ab2]@2 ~ [g2,b2] [c3,g3]@2 [eb3,ab3]@2 [f2,ab2]@2 ~ [g2,b2] [c3,g3]@2 [eb3,ab3]@2 [f2,ab2]@2 ~ [g2,b2] [c3,g3]@3, ~@7 [f2,ab2]@2 ~@6 [f2,ab2]@2 ~@6 [f2,ab2]@2 ~@3]/7", // C5 Ab5 Fm G C5 Ab5 Fm G …
  F: "[b2 c3@2 ab2@2 f2@2 ~ b2 c3@2 ab2@2 f2@2 ~ b2 c3@2 ab2@2 f2@2 ~ b2 c3@2 ab2, ~@7 bb2@2 ~@6 bb2@2 ~@6 bb2@2 ~@3]/7",
  G: "[~ f2@2 ~ b2@8, ~@3 bb2@8 ~]/3",
})).s("gm_acoustic_guitar_steel").gain(0.72)

// other · synth strings 2 · "Staff-6"
const synth_strings_2 = note(`<
  ~@14 A ~ B C D E F@2 G@2 H@2 G@2 I ~ A ~@3 A ~ B C D E F@2 G@2 H@2 G@2 I ~ A ~@3 A ~ B C D E F@2 G@2 H@2 G@2 H@2 G@2
  H@2 G@2 I ~@2
>`.pickRestart({
  A: "~@4 [c4,c5]@2 [c4,c5] [d4,d5] [eb4,eb5] [c4,f4,c5,f5] [c4,eb4,c5,eb5] [bb3,c4,bb4,c5] [ab3,c4,ab4,c5] ~@3", // C D Eb F5 Cm Bbsus2 Ab
  B: "~@8 c5@2 c5 eb5@2 eb5 g5@2 c5@4 ~@4 [c5,eb5,ab5]@2 ~@2 [c5,eb5,ab5]@2 ~@2", // Ab
  C: "~@4 g5 ab5 bb5 ab5 f5@2 f5 ab5@2 c6 ab5@2 f5@4 ~@4 [c5,eb5,ab5]@2 bb5@2 [c5,eb5,ab5]@2 ~@2", // Ab
  D: "[d5,g5,b5]@2 b5@2 [d5,g5,b5]@2 ~@2 c6@2 g5 eb5@2 g5 eb5@2 c5@4 ~@4 [c5,eb5,ab5]@2 ~@2 [c5,eb5,ab5]@2 ~@2", // G Ab
  E: "~@8 c5@2 f5 ab4@2 c5@2 f5 c5@2 f5 ab4@2 c5@2 f5 c5@2 f5 ab5@2 c6 ~ ab5",
  F: "[d5@2 f5 g5@2 b5 g5@2 [g4,g5]@16 [ab4,ab5]@14 [ab4,ab5] [g4,g5] [f4,f5]@16 [g4,g5]@7 ~]/2", // G Ab G F G
  G: "[[f4,f5]@7 ~ [g4,g5]@16 [ab4,ab5]@12 [bb4,bb5]@2 [ab4,ab5] [g4,g5] [f4,f5]@16 [bb4,bb5]@4 [c5,c6]@4]/2", // F G Ab Bb Ab G F Bb …
  H: "[[b4,b5]@4 [d5,d6]@4 [g4,g5]@16 [ab4,ab5]@14 [ab4,ab5] [g4,g5] [f4,f5]@16 [g4,g5]@7 ~]/2", // B D G Ab G F G
  I: "[b4,b5] [d5,d6] ~@6", // B D
})).s("gm_synth_strings_2").gain(0.72)

// other · brass section · "Staff-6" · C
const brass_section = note("<~@52 [~@8 [c4,c5,c6]@7 ~@17] ~@26>").s("gm_brass_section").gain(0.72)

// other · alto sax · "Staff-8"
const alto_sax = note(`<
  ~@8 A B C D E B C F G H I J K ~@7 A B C D E B C F G H I J K ~@8 L M N O N P ~ Q H I J K ~@18
>`.pickRestart({
  A: "~@8 bb3@2 c4@2 eb4@2 c4@2 eb4@4 ~@2 bb3 c4 eb4@4 ~@2 bb3 c4",
  B: "eb4@4 ~@4 bb3@2 c4@2 eb4@2 c4@2 eb4@4 ~@2 bb3 c4 eb4@4 ~@2 bb3 c4",
  C: "f4@4 ~@4 bb3@2 c4@2 eb4@2 c4@2 eb4@4 ~@2 bb3 c4 eb4@4 ~@2 bb3 c4",
  D: "eb4@4 ~@4 bb3@2 c4@2 eb4@2 c4@2 eb4@4 ~ bb3!2 c4 eb4@2 eb4!4 f4@2",
  E: "c4@4 ~@4 bb3@2 c4@2 eb4@2 c4@2 eb4@4 ~@2 bb3 c4 eb4@4 ~@2 bb3 c4",
  F: "eb4@4 ~@2 bb3@2 bb3@2 c4@2 eb4@2 c4@2 eb4@4 ~@2 bb3 c4 eb4!2 eb4@2 eb4@2 f4@2",
  G: "c4@4 ~@20 c4!2 eb4!2 eb4@2 eb4!2", H: "f4@2 eb4 eb4@4 ~@17 c4@2 eb4!2 eb4@2 eb4!2",
  I: "f4@2 eb4 eb4@4 ~@15 eb4!2 g4@2 g4!2 g4@2 f4@2", J: "f4@2 eb4@2 eb4@4 ~@14 eb4@2 c4@2 eb4!2 eb4@2 eb4@2",
  K: "f4 eb4 g4@2 ~@12", L: "~@3 eb4 f4 eb4 eb4@2 eb4@6 ~@2", M: "~@3 eb4 f4 eb4 eb4@2 ~@3 eb4 f4 eb4 eb4@2",
  N: "~@3 eb4 f4 eb4 g4@2 ~@3 eb4 f4 eb4!3", O: "f4 eb4!3 f4 eb4 eb4@2 ~@3 eb4 f4 eb4 eb4@2",
  P: "f4 eb4!3 ~@2 g4 d5 c5 bb4 g4 bb4 ab4@4", Q: "~@24 c4!2 eb4!2 eb4@2 eb4!2",
})).s("gm_alto_sax").gain(0.72)

// bass · electric bass finger · "Staff-9"
const bass = note(`<
  ~@8 A@2 B@2 C@2 D E F G H G I J I J I J I J K@2 B@2 C@2 D E F G H G I J I J I J I J L ~@7 M G H G I J I J I J I J I J
  I J I J I J L ~@2
>`.pickRestart({
  A: "[~@8 c2@14 ~@2 ab1@14 ~@2 f1@14 ~@2 bb1@7 ~]/2",
  B: "[b1@7 ~ c2@14 ~@2 ab1@14 ~@2 f1@14 ~@2 bb1@2 ~@2 bb1@2 ~@2]/2",
  C: "[bb1@2 ~@2 bb1@2 ~@2 c2@14 ~@2 ab1@14 ~@2 f1@14 ~@2 bb1@7 ~]/2",
  D: "b1@7 ~ c2@4 c2@2 d2@2 eb2@2 d2@2 c2@2 bb1@2 ab1@2 ~@6", E: "~@4 f1@7 ~ bb1 ~ bb1 ~",
  F: "bb1@2 ~@2 bb1@2 ~@2 c2@2 c2 eb2@2 eb2 g2@2 c2@4 c2@2 bb1@2 ab1@4 ab1@2 ~@2",
  G: "~@4 ab1@2 g1@2 f1@3 ab1@2 c2 ab1@2 f1@4 g1@2 ab1@2 bb1@4 bb1@4",
  H: "b1@4 b1@4 c2@2 c2 eb2@2 eb2 g2@2 c2@4 c2@2 bb1@2 ab1@4 ab1@2 ~@2", I: "b1!2 c2 ~ c2 ~ ab1 ~",
  J: "ab1 ~ f1 ~ f1 ~ bb1!2", K: "[b1@4 b1@4 c2@14 ~@2 ab1@14 ~@2 f1@14 ~@2 bb1@7 ~]/2", L: "b1!2 ~@6",
  M: "~@8 c2@2 c2 eb2@2 eb2 g2@2 c2@4 c2@2 bb1@2 ab1@4 ab1@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.72)

// chords · distortion guitar · "Staff-10"
const distortion_guitar = note(`<
  ~@19 A B C D E F C D G H ~@10 A B C D E F C D G H ~@10 A B C D E F C D G B C D E F C D G H ~@2
>`.pickRestart({
  A: "~@8 g4!2 ~@2 g4!2 ~@2 g4!2 ~@2 g4!2 ~@2 g4!2 ~@2 g4!2 ~@2",
  B: "g4!2 ~@2 g4!2 ~@5 [c4,eb4,g4]@2 ~@6 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4]@2 ~@3", // Cm
  C: "~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4]@2 ~@6 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@8", // Cm
  D: "~@11 [c4,eb4,g4]@2 ~@6 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4]@2 ~@3", // Cm
  E: "~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4]@2 ~@6 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@2 g4!6", // Cm
  F: "~@2 g4!6 ~@3 [c4,eb4,g4]@2 ~@6 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4]@2 ~@3", // Cm
  G: "~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4]@2 ~@6 [c4,eb4,g4] ~@3 [c4,eb4,g4] g4!2 ~@2 g4!2 ~@2", // Cm
  H: "g4!2 ~@2 g4!2 ~@26",
})).s("gm_distortion_guitar").gain(0.72)

// other · orchestra hit · "Staff-11"
const orchestra_hit = note("<~@48 A@2 ~@29>".pickRestart({
  A: "[~@4 [c3,c4,c5]@15 ~@13]/2", // C
})).s("gm_orchestra_hit").gain(0.72)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A@3 B C A D A E F E G H A@2 I H A@2 I H A@2 B C A D A E F E G H A@2 I H A@2 I H A J B C A D A E F E G H A@2 I H
  A@2 I H A@2 I H A@2 I K ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "x!3 ~@3 x ~", D: "x ~@3 x ~@2 x ~ x ~ x!2 ~@3",
  E: "x ~@7 x ~@2 x ~@2 x ~ x ~@7 x ~@3 x ~@3", F: "~@8 x ~@2 x ~@2 x ~ x ~@7 x ~@7",
  G: "~@8 x ~@2 x ~@2 x ~@3 x ~@2 x ~@2 x ~@2 x ~@2 x ~", H: "x ~@2 x ~@2 x ~ x ~@15 x ~@7",
  I: "~@8 x ~@15 x ~@2 x ~@2 x ~", J: "x!2 ~ x", K: "x ~@2 x ~@2 x ~@25",
})).gain(0.72)

// drums · low tom
const low_tom = s("lt").struct("<~@16 A B C ~@17 A B C ~@17 A B C ~@20>".pickRestart({
  A: "x!8 ~@24", B: "~@26 x!3 ~@3", C: "~@2 x!3 ~@27",
})).gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@17 A ~@19 A ~@12 B C D E F ~@2 A ~@21>".pickRestart({
  A: "~@2 x!6 ~@24", B: "~ x!3", C: "x ~ x ~ x ~ x!2", D: "x ~ x ~ x ~@3 x ~@2 x!2 ~@3",
  E: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", F: "x",
})).gain(0.72)

stack(
  acoustic_guitar_steel, acoustic_guitar_steel_2, synth_strings_2, brass_section, alto_sax, bass, distortion_guitar,
  orchestra_hit, kick, low_tom, hihat
)

More by Destiny's Child