Strudelify

Jumpin Jumpin

Destiny's Child

KeyA♭ majorTempo180 bpm
0:00/0:00
// Jumpin Jumpin — Destiny's Child
// 180 bpm, 4/4, key G# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 13 pan flute (copy of ch 12 pan flute); ch 15 "Alex Legaree" fretless bass (copy of ch 14 "Tout droits réservées" fretless bass)
// note: Full arrangement: all 175 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · pan flute
const pan_flute = note(`<
  A B C D E B F G H I J K L M L M N O P Q R S T S P M P M U V W@2 A B C D E B F G A B C D E B F G H I J K L M L M N O P
  Q R S T S P M P M U V W@2 A B C D E B F G A B C D E B F G A B C D E B F G U V W@2 X@2 Y@2 Z@2 AA@2 X@2 Y@2 Z@2 AA@2 U
  V W@2 A B C D E B F G A B C D E B F G A B C D E B F G AB AC AD AE AF AG AH AI ~@3 AJ A B C D E B F G A B C D E B F G
  AK ~@2
>`.pickRestart({
  A: "db4@2 db4@2 db4@2 db4@2 ab3@3 ~ ab3@2 a3@2", B: "~@6 ab3@2 a3@3 ~ b3@3 ~",
  C: "ab3@2 ab3@2 ab3@2 ab3@2 ab3@2 ab3@2 ab3@3 ~", D: "a3@3 ~@7 ab3@2 ab3@2 ab3@2", E: "db4!4 ab3!3 a3",
  F: "ab3@3 ~ ab3@2 ab3@2 ab3@2 ab3@2 ab3@3 ~", G: "ab3@3 ~ gb3@3 ~ e3@3 ~ eb3@3 ~",
  H: "db4@3 ~ db4@2 db4@2 db4@2 db4@2 db4@4", I: "e4@2 e4@2 e4@2 e4@2 e4@2 e4@2 e4@3 ~",
  J: "[c4,ab4]@2 [c4,ab4]@2 [c4,ab4]@2 [c4,ab4]@2 [c4,ab4]@2 [c4,ab4]@2 [c4,ab4]@3 ~", // Fm
  K: "[c4,ab4]@2 [c4,ab4]@2 [c4,ab4]@2 [c4,ab4]@2 [c4,ab4]@3 ~ [c4,ab4]@3 ~", L: "~@4 eb4@2 eb4@2 eb4@2 eb4@2 eb4@3 ~",
  M: "eb4!2 gb4 eb4 gb4 eb4 gb4 eb4", N: "~@4 eb4@3 ~ eb4@3 ~ eb4@2 eb4@2", O: "eb4@3 ~ eb4@2 eb4@5 ~ eb4@2 eb4@2",
  P: "~@4 eb4@2 eb4@2 eb4@3 ~ eb4@2 eb4@2", Q: "eb4@3 ~ eb4@2 eb4@2 ~@8", R: "~@4 eb4@3 ~ ab3@3 ~ ab3@2 ab3@2",
  S: "eb4@3 ~ eb4@3 ~ ab3@3 ~ ab3@2 ab3@2", T: "~@4 eb4@2 eb4@2 ab3@3 ~ ab3@2 ab3@2",
  U: "db4@3 ~ db4@2 db4@2 db4@2 db4@2 db4@3 ~", V: "e4@3 ~ e4@2 e4@2 e4@2 e4@2 e4@3 ~",
  W: "ab4@2 ab4@2 ab4@2 ab4@2 ab4@3 ~ ab4@3 ~", X: "[c4@4 c4@2 c4@2 c4@3 ~ c4@2 c4@4 c4@2 c4@4 c4@2 c4@2 eb4@2 c4@2]/2",
  Y: "[db4@4 db4@2 db4@2 db4@3 ~ db4@2 db4@4 db4@2 db4@4 db4@2 db4@2 eb4@4]/2",
  Z: "[c4@4 c4@2 c4@2 c4@3 ~ c4@2 c4@4 c4@2 c4@2 c4@2 c4@3 ~ eb4@3 ~]/2", AA: "[db4@31 ~]/2",
  AB: "[db4,ab4]@2 [db4,ab4]@2 [db4,ab4]@2 [db4,ab4]@2 [ab3,eb4]@3 ~ [ab3,eb4]@2 [a3,e4]@2", // Db5 Ab5 A5
  AC: "~@6 [ab3,eb4]@2 [a3,e4]@3 ~ [b3,gb4]@3 ~", // Ab5 A5 B5
  AD: "[ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@3 ~", // Ab5
  AE: "[a3,e4]@3 ~@7 [ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@2", AF: "[db4,ab4]!4 [ab3,eb4]!3 [a3,e4]",
  AG: "~@3 [ab3,eb4] [a3,e4]!2 [b3,gb4]!2", // Ab5 A5 B5
  AH: "[ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@2 [ab3,eb4]@3 ~ [ab3,eb4]@3 ~", // Ab5
  AI: "[ab3,eb4]@3 ~ [gb3,eb4]@3 ~ [e3,eb4]@3 ~ [eb3,eb4]@3 ~", AJ: "~@8 ab3@3 ~ ab3@3 ~", AK: "db3@3 ~@13",
})).s("gm_pan_flute").gain(0.8)

// bass · fretless bass · "Tout droits réservées"
const bass = note(`<
  ~@8 A@2 B C D ~ D E D E F ~ D ~ D ~ D ~ D E G@2 H I F J K L F M K N F M K O F M K N A@2 B C D ~ D E D E F ~ D ~ D ~ D
  ~ D E G@2 H I F J K L F M K N F J K L F M K N F J K L F M K N G@2 H I F ~ J E D E F P D ~ D ~ D ~ D E G@2 H P F J K L
  F M K N F J K L F M K N F J K L F M K N F J K L F M K N F J K L F J K L F M K N F J K L F M K N F ~@2
>`.pickRestart({
  A: "db2@3 ~@3 b1@2 db2@3 ~@3 b1@2", B: "ab1!8", C: "ab1@2 ab1@2 gb1@2 gb1@2 f1@3 ~ eb1@3 ~", D: "db2@2 ~@4 c2@7 ~@3",
  E: "~@12 ab1@3 ~", F: "db2@3 ~@13", G: "db2@3 ~@5 db2@3 ~@5", H: "ab1@3 ~ ab1@3 ~ ab1@3 ~ ab1@3 ~",
  I: "ab2@3 ~ gb2@3 ~ e2@3 ~ eb2@3 ~", J: "~@4 db2@3 ~ db2@3 ~ db2@3 ~", K: "ab1@3 ~@13",
  L: "~@4 ab1@2 ab2@3 ~ ab1@2 ab2@3 ~", M: "~@4 db2@3 ~@5 db2@3 ~", N: "ab1 ab2 ab1 ab2 ab1 ab2 ab1 ab2",
  O: "~@4 ab1@3 ~ ab2@3 ~ ab2@3 ~", P: "ab1 ab2 gb1 gb2 e1 e2 eb1 eb2",
})).s("gm_fretless_bass").gain(0.8)

// other · string ensemble 1 · "œcœ 2000 MM3000"
const string_ensemble_1 = note(`<
  ~@8 A@2 B C D E D F D F D G D H I H D H I H A J B@2 K ~ L ~ M ~ L ~ N ~ L ~ N ~ L ~ O@2 B@2 D F D F D F D G D H I H D
  H D H A@2 B@2 P ~ L ~ N ~ L ~ N ~ L ~ N ~ L ~ N ~ L ~ N ~ L ~ A@2 B@2 ~@16 A@2 B@2 Q@2 R@2 Q@2 S@2 T@2 U@2 Q@2 R@2
  ~@20 N ~ L ~ N ~ L ~ N ~ L ~ N ~ L ~@2 V W
>`.pickRestart({
  A: "db4@3 ~@3 c4@2 db4@3 ~@3 c4@2", B: "ab3!8", C: "ab3@2 ab3@2 ab3@3 ~ ab3@3 ~ ab3@3 ~", D: "db4@3 ~@3 c4@2 ~@8",
  E: "~@8 ab3@3 ~ ab3@2 ab3@2", F: "~@4 ab3!4", G: "~@4 ab3 bb3 b3 c4", H: "~@12 ab3@3 ~", I: "db4@3 ~@3 c4@5 ~@5",
  J: "db4@3 ~@3 c4@2 db4@3 ~@3 db4@2", K: "[ab3,db4]@3 ~@13", L: "c4@3 ~@13", M: "db4@7 ~@9", N: "db4@3 ~@13",
  O: "db4@3 ~@3 db4@2 db4@3 ~@3 db4@2", P: "ab3@2 db4@3 ~@11", Q: "[db6@31 ~]/2", R: "[c6@31 ~]/2",
  S: "[eb6@23 ~ e6@3 ~ gb6@3 ~]/2", T: "[ab6@31 ~]/2", U: "[eb6@31 ~]/2", V: "db3@3 ~@13",
  W: "ab4@3 ~ gb4@3 ~ e4@3 eb4@4 ~",
})).s("gm_string_ensemble_1").gain(0.72)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  ~@8 A@2 B C D E D F D F D G D H I H D H I H A J B K L ~@15 M@2 B K L F D F D F D G D H I H D H D H A@2 B K L ~@23 A@2
  B K L ~@15 A@2 B K L ~@54
>`.pickRestart({
  A: "db4@3 ~@3 c4@2 db4@3 ~@3 c4@2", B: "ab3!8", C: "ab3@2 ab3@2 ab3@3 ~ ab3@3 ~ ab3@3 ~", D: "db4@3 ~@3 c4@2 ~@8",
  E: "~@8 ab3@3 ~ ab3@2 ab3@2", F: "~@4 ab3!4", G: "~@4 ab3 bb3 b3 c4", H: "~@12 ab3@3 ~", I: "db4@3 ~@3 c4@5 ~@5",
  J: "db4@3 ~@3 c4@2 db4@3 ~@3 db4@2", K: "ab3@3 ~ gb3@3 ~ e3@3 ~ eb3@3 ~", L: "db3@3 ~@13",
  M: "db4@3 ~@3 db4@2 db4@3 ~@3 db4@2",
})).s("gm_string_ensemble_1").gain(0.72)

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

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

// drums · hihat
const hihat = s("hh").struct("<~@8 A@4 B@16 A@4 ~@16 A@4 B@16 A@4 ~@24 A@4 B@16 A@4 ~@55>".pickRestart({
  A: "x!4", B: "x!8",
})).gain(0.72)

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

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4 B C@3 B C@2 D B C@3 B C@2 D ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4 B C@3 B C@2 D
  B C@3 B C@2 D B C@3 B C@2 D ~@5 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@4 B C@3 B C@2 D B C@3 B C@2 D B C@3 B C@2 D B C@3 B
  C@2 D ~@4 B C@3 B C@2 D B C@3 B C@2 D ~@7
>`.pickRestart({
  A: "x!3 ~@5", B: "x!2 ~@2 x ~@3 x ~@3 x ~@3", C: "x!4", D: "x!3 ~ x ~ x ~",
})).gain(3.65)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@6 A B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 A B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 A B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~
  C ~@2 A B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 A B ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@2 A B ~ C ~ C ~ C
  ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@5 C ~ C ~ C ~ C ~ C ~ C ~ C ~ C ~@7
>`.pickRestart({
  A: "x!3 ~ x!3 ~", B: "x!8", C: "x!3 ~@5",
})).gain(0.72)

stack(pan_flute, bass, string_ensemble_1, string_ensemble_1_2, kick, snare, hihat, tambourine, cabasa, shaker)

More by Destiny's Child