Strudelify

waka waka this time for africa

MBA

KeyB♭ majorTempo140 bpm
0:00/0:00
// waka waka this time for africa — MBA
// 140 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 7 "Trombone" trombone (copy of ch 5 "Saxophone Baryton" baritone sax); ch 8 "Tuba" tuba (copy of ch 5 "Saxophone Baryton" baritone sax)
// note: Transcription provider: pdmx. https://musescore.com/score/5925067; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/4)

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

// other · trumpet · "Trompette en Si♭"
const trumpet = note(`<
  A B C D E F C D G H G H I J K L M N K O M N P Q ~@3 Q ~@3 Q A B C D E F C D G H G H I J K L M N K O M N P Q ~@3 Q ~@3
  Q R S P Q R S P Q
>`.pickRestart({
  A: "~@3 bb4@3 bb4@2 c5@4 bb4@4", B: "~@3 a4@3 a4@2 bb4@4 a4@4", C: "g4@3 bb4 ~ bb4 a4@2 g4@3 bb4 ~ bb4 a4@2",
  D: "g4@3 bb4 ~ bb4 a4@2 g4@4 bb4@4", E: "~@3 bb4@3 bb4@2 c5@4 d5@4", F: "~@3 a4@3 a4@2 bb4@4 c5@4",
  G: "~@2 bb4 c5 ~ bb4 d5@2", H: "~@2 bb4 f5 ~ d5@3", I: "bb4@3 bb4@3 bb4@2 c5@4 bb4@4",
  J: "c5@2 c5!2 ~ c5 c5@2 d5@2 bb4@2 c5@2 ~@2", K: "d5@2 d5!2 ~ d5 bb4@2 g4@2 bb4@2 g4@2 f4@2",
  L: "~ d5 bb4 g4!2 bb4!2 ~", M: "bb4@2 bb4!2 ~ bb4 bb4@2 ~@2 c5@2 bb4@4", N: "c5@2 c5!2 ~ c5 c5@2 d5@2 bb4@2 c5@4",
  O: "~ d5 bb4!2 c5@2 bb4@2", P: "[d5,f5]@2 [d5,f5]!2 ~ [d5,f5] [bb4,f5]@2 [g4,d5]@2 [bb4,d5]@2 [g4,d5]@2 [f4,eb5]@2",
  Q: "~ [d5,f5] [bb4,d5]!2 [c5,eb5]@2 [bb4,d5]@2", R: "bb4 d5@3 c5@2 bb4@2", S: "c5 eb5@3 bb4@2 c5@2",
})).s("gm_trumpet").gain(0.3)

// other · tenor sax · "Saxophone Ténor"
const tenor_sax = note(`<
  A B C D E F C D G H G H I J K ~ L M K N L M K N ~@3 N ~@3 N A B C D E F C D G H G H I J K ~ L M K N L M K N ~@3 N ~@3
  N O P K N O P K N
>`.pickRestart({
  A: "~@3 bb3@3 bb3@2 c4@4 bb3@4", B: "~@3 a3@3 a3@2 bb3@4 a3@4", C: "g3@3 bb3 ~ bb3 a3@2 g3@3 bb3 ~ bb3 a3@2",
  D: "g3@3 bb3 ~ bb3 a3@2 g3@4 bb3@4", E: "~@3 bb3@3 bb3@2 c4@4 d4@4", F: "~@3 a3@3 a3@2 bb3@4 c4@4",
  G: "~@2 bb3 c4 ~ bb3 d4@2", H: "~@2 bb3 f4 ~ d4@3", I: "bb3@3 bb3@3 bb3@2 c4@4 bb3@4",
  J: "c4@2 c4!2 ~ c4 c4@2 d4@2 bb3@2 c4@2 ~@2", K: "d4@2 d4!2 ~ d4 bb3@2 g3@2 bb3@2 g3@2 f3@2",
  L: "bb3@2 bb3!2 ~ bb3 bb3@2 ~@2 c4@2 bb3@4", M: "c4@2 c4!2 ~ c4 c4@2 d4@2 bb3@2 c4@4", N: "~ d4 bb3!2 c4@2 bb3@2",
  O: "bb3 d4@3 c4@2 bb3@2", P: "c4 eb4@3 bb3@2 c4@2",
})).s("gm_tenor_sax").gain(0.3)

// other · baritone sax · "Saxophone Baryton"
const baritone_sax = note(`<
  A B C D E B C D F G H I A B C J K L M N K L M J ~@8 A B C D E B C D F G H I A B C J K L M N K L M J ~@8 K L M N K L M
  J
>`.pickRestart({
  A: "bb2", B: "f2", C: "g2", D: "eb2", E: "bb2 bb2@7", F: "bb2 ~@2 bb2 ~@2 bb2 ~@3 bb2@2 ~@2 bb2@2",
  G: "f2 ~@2 f2 ~@2 f2 ~@3 f2@2 ~@2 f2@2", H: "g2 ~@2 g2 ~@2 g2 ~@3 g2@2 ~@2 g2@2",
  I: "eb2 ~@2 eb2 ~@2 eb2 ~@3 eb2@2 ~@2 eb2@2", J: "eb2 ~@3", K: "bb2 ~@2 bb2 ~@2 bb2 ~@3 bb2@2 c3@2 d3@2",
  L: "f2 ~@2 f2 ~@2 f2 ~@3 f2@2 bb2@2 a2@2", M: "g2 ~@2 g2 ~@2 g2 ~@3 g2@2 a2@2 bb2@2",
  N: "~@3 eb3@3 eb3@2 f3@2 ~@2 f3@2 ~@2",
})).s("gm_baritone_sax").gain(0.3)

// other · trombone
const trombone = note(`<
  A B C D E B F G H I J K A B C L M N O P Q R S L ~@8 A B C D E B F G H I J K A B C L M N O P Q R S L ~@8 Q R S P Q R S
  L
>`.pickRestart({
  A: "bb3", B: "f3", C: "g3", D: "eb3", E: "bb3 bb3@7", F: "[g3,g4]", G: "[eb3,eb4]",
  H: "bb2 ~@2 bb2 ~@2 bb2 ~@3 bb2@2 ~@2 bb2@2", I: "f2 ~@2 f2 ~@2 f2 ~@3 f2@2 ~@2 f2@2",
  J: "g2 ~@2 g2 ~@2 g2 ~@3 g2@2 ~@2 g2@2", K: "eb2 ~@2 eb2 ~@2 eb2 ~@3 eb2@2 ~@2 eb2@2", L: "eb3 ~@3",
  M: "bb2@4 ~ bb2 c3 d3", N: "f2@4 ~ f2 bb2 a2", O: "g2@4 ~ g2 a2 bb2", P: "~@3 eb3@3 eb3@2 f3@2 ~@2 f3@2 ~@2",
  Q: "[bb2,d3]@4 ~ [bb2,d3] [c3,eb3] [d3,f3]", R: "[f2,f3]@4 ~ [f2,eb3] [bb2,d3] [a2,c3]", S: "[g2,bb2]@4 ~ g2 a2 bb2",
})).s("gm_trombone").gain(0.3)

// drums · kick
const kick = s("bd").struct(`<
  A@4 B A@3 C@4 D@2 E A C@7 A D F G A D F G A@5 B A@3 C@4 D@2 E A C@7 A D F G A D F G A C@7 A
>`.pickRestart({
  A: "x", B: "x!2 ~@6", C: "x!4", D: "x ~@2 x ~@2 x ~@3 x ~ x ~ x ~", E: "x ~ x ~ x ~ x ~ x ~ x ~ x!4", F: "x!2 ~ x!5",
  G: "x!8",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  A@4 B A@3 C@4 D@2 E A C@7 A D E F A D E G A@5 B A@3 C@4 D@2 E A C@7 A D E F A D E G A C@7 A
>`.pickRestart({
  A: "x", B: "x!2 ~@6", C: "~@3 x ~@2 x ~@4 x ~@2 x ~", D: "x ~@2 x ~@2 x ~@3 x ~ x ~ x ~",
  E: "x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!4", F: "x!2 ~ x!13", G: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
})).gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@15 A ~@7 A ~@3 A ~@3 A ~@15 A ~@7 A ~@3 A ~@3 A ~@7 A>".pickRestart({
  A: "x",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@4 B@2 ~@2 A@7 ~ B ~@3 B ~@11 A@4 B@2 ~@2 A@7 ~ B ~@3 B ~@3 A@7 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x ~@2 x ~@2 x ~@3 x ~ x ~ x ~",
})).gain(0.3)

// drums · crash
const crash = s("cr").struct("<A@4 B A@4 ~@7 A ~@3 A ~@11 A@4 B A@4 ~@7 A ~@3 A ~@11 A ~@3 A ~@3>".pickRestart({
  A: "x", B: "x!2 ~@6",
})).gain(0.3)

stack(trumpet, tenor_sax, baritone_sax, trombone, kick, snare, hihat, open_hat, crash)