Strudelify

Mambo No. 5 (A Little Bit Of...)

Lou Bega

KeyF minorTempo173 bpm
0:00/0:00
// Mambo No. 5 (A Little Bit Of...) — Lou Bega
// 173 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 153 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(173/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.

// other · lead 1 square
const lead_1_square = note("<~@110 f3 ~@42>").s("gm_lead_1_square").gain(0.13)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@14 A@2 ~@96 A@2 ~@39>".pickRestart({
  A: "f4/2",
})).s("gm_lead_2_sawtooth").gain(0.38)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~@16 A@2 B@2 A@2 B ~ A@2 B@2 A@2 B ~@17 C@14 ~@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@16 C@20 ~@18 A@2 B@2 A@2 B@2 C@14 ~
>`.pickRestart({
  A: "[ab3,c4,f4]@3 ~ [ab3,c4,f4]@2 [ab3,c4,f4] ~@3 [ab3,c4,f4]@2 [ab3,c4,d4]@3 ~ [ab3,c4,d4]@2 [ab3,c4,d4] ~@3 [ab3,c4,d4]@2", // Fm Dm7b5
  B: "[g3,bb3,eb4]@3 ~ [g3,bb3,eb4]@2 [g3,bb3,eb4] ~@3 [g3,bb3,eb4]@2 [g3,bb3,eb4]@3 ~ [g3,bb3,eb4]@2 [g3,bb3,eb4] ~@3 [g3,bb3,eb4]@2", // Eb
  C: "[ab3,c4,f4]@3 ~ [ab3,c4,f4]@2 [ab3,c4,f4] ~@3 [ab3,c4,f4]@2 [ab3,c4,f4]@3 ~ [ab3,c4,f4]@2 [ab3,c4,f4] ~@3 [ab3,c4,f4]@2", // Fm
})).s("gm_acoustic_guitar_nylon").gain(0.05).pan(0.3)

// other · brass section · F
const brass_section = note("<~@24 [[f2,f3] ~] ~@3 [[f2,f3] ~] ~@43 [[f2,f3] ~] ~@80>")
  .s("gm_brass_section").gain(0.15).pan(0.8)

// other · trombone
const trombone = note(`<
  ~@32 A B C D A B C D A B C D A B C D E F G F E F E F G F E F G F ~@14 A B C D A B C D A B C D A B C D E F E F G F E F
  H ~ I@2 H ~ J ~ H ~ J ~@11 A B C D A B C D A B C D A B C D E F G F E F E F G F E F G F ~
>`.pickRestart({
  A: "f2@2 ~@8 ab2@2 c3@3 bb2@4 ~@3 c3@2", B: "f2@2 ~@4 ab2@3 c3@2 ~@4 bb2@2 g2@2 ~@3 c3@2",
  C: "eb2@3 ~@7 g2 c3@4 ~ bb2@2 ~@4 c3@2", D: "eb2@2 ~@4 g2@3 ~ c3@2 ~@4 bb2@2 g2@2 ~@2 bb2@2",
  E: "f2@2 ~@4 bb2@2 ~ e2@2 f2@4 bb2 ~@6 f2@2", F: "~@4 bb2@2 ~@4 bb2 ~ ab2@7 ~@5",
  G: "f2@2 ~@4 bb2@2 ~ e2@2 f2@3 ~ bb2 ~@6 f2@2", H: "bb2", I: "[bb1@7 bb1@24 ~@17]/2", J: "bb1",
})).s("gm_trombone").gain(0.2).pan(0.1)

// other · trumpet
const trumpet = note(`<
  ~@24 A B C ~ A B C ~ D E F G D E F G D E F G D E F G H I H I H I H I H I H I H I J ~@9 A B C ~ D E F G D E F G D E F G
  D E F G H I H I H I H I K ~@3 K ~@3 K ~@3 J ~@9 D E F G D E F G D E F G D E F G H I H I H I H I H I H I H I J
>`.pickRestart({
  A: "f4@2 ~@8 ab4@2 c5@3 bb4@4 ~@5", B: "~@11 c5", C: "eb4@4 ~@6 g4@2 c5@3 bb4@4 ~@5",
  D: "f4@2 ~@8 ab4@2 c5@3 bb4@4 ~@3 c5@2", E: "f4@2 ~@4 ab4@3 c5@2 ~@4 bb4@2 g4@2 ~@3 c5@2",
  F: "eb4@3 ~@7 g4 ~ c5@4 bb4@2 ~@4 c5@2", G: "eb4@2 ~@4 g4@3 ~ c5@2 ~@4 bb4@2 g4@2 ~@2 bb4@2",
  H: "f4@2 ~@4 bb4@2 ~ e4@2 ~ f4@3 bb4 ~@6 f4@2", I: "~@4 bb4@2 ~@4 bb4 ~ ab4@7 ~@5",
  J: "[g5,bb5,eb6] ~@5 [g5,bb5,eb6] ~", K: "bb4",
})).s("gm_trumpet").gain(0.18).pan(0.1)

// other · trombone
const trombone_2 = note(`<
  ~@8 A B C D E F G H I J K L M N O P Q R S T U V W X Y@2 Z@2 AA@2 AB@2 AC@2 AD@2 AE@2 AF@2 ~@15 AG AH AI AJ AK AL AM AN
  AO AP AQ AR AS Y@2 Z@2 AA@2 AB@2 AC@2 AD@2 AT@2 AF@2 ~@21 AU Y@2 Z@2 AA@2 AB@2 AC@2 AD@2 AT@2 AV@2 AW AX AY AZ BA BB
  BC BD ~@15
>`.pickRestart({
  A: "c5@7 ~@5 c5@8 ~@4", B: "~ c5@2 ~@2 c5@3 ~@2 bb4@8 ~ c5@2 ~ bb4@2",
  C: "~ c5@3 bb4 ~ c5@3 ~ bb4 ~ c5@4 bb4 ~ c5@4 bb4 ~", D: "c5@3 ~ c5@2 ~@4 eb5@7 ~@2 c5@3 bb4 ~",
  E: "~@6 c5@4 bb4@2 c5@4 ~ bb4@2 c5@3 bb4 ~", F: "~ eb5@5 c5@4 bb4 ~ c5@4 ~@3 c5@3 bb4@2",
  G: "c5@4 bb4 ~ c5@4 bb4@2 c5@4 ~@2 c5@4 bb4@2", H: "c5@4 bb4@2 c5@3 ~@3 c5@6 bb4@3 ~@3",
  I: "~@6 c5@2 ~@4 c5@3 ~@3 c5@4 bb4 ~", J: "c5@3 ~ c5@2 ~@4 eb5@9 ~@3 bb4 ~",
  K: "c5@2 ~@4 c5@2 ~@4 bb4@5 ~ c5@3 ~ bb4 ~", L: "c5@2 ~@2 c5@2 ~@4 bb4@5 ~ c5 ~ c5@2 ~@4",
  M: "c5@4 bb4@2 f4@2 ~@4 c5@4 bb4 ~ f4@3 ~@3", N: "c5@4 ~ f4@2 ~@3 f4@2 eb5@4 c5@3 ~@4 bb4",
  O: "~ c5@2 ~@2 c5@2 ~@3 bb4 ~ c5@2 ~@2 c5@2 ~@4 bb4 ~", P: "c5@4 bb4 ~ c5@4 bb4 ~ eb5@3 ~ c5@2 ~@6",
  Q: "~@4 bb4 ~ c5@3 ~ bb4 ~ c5@3 ~ bb4 ~@2 eb5@3 ~ bb4", R: "~ c5@3 bb4 ~@2 c5@3 bb4 ~@2 c5@3 ~ bb4 ~@6",
  S: "~@4 bb4 ~ c5@2 ~@4 c5@2 ~@4 c5@4 bb4 ~", T: "c5@2 ~@4 c5@3 ~ bb4 ~ eb5@4 ~@7 bb4",
  U: "c5@2 ~@4 c5@2 ~@4 bb4@6 ~@4 bb4 ~", V: "c5@4 bb4 ~ c5@2 ~@4 eb5@3 ~@3 eb5@4 ~@2",
  W: "c5@3 ~@3 c5@4 bb4@2 c5@2 ~@4 c5@4 bb4@2", X: "f4@4 ~@2 eb4@3 ~ bb4 ~ bb4@2 ~@2 bb4 ~ bb4@2 ~@2 bb4@2",
  Y: "[c5@2 ~@2 c5@2 bb4 ~@5 bb4@3 ~ c5@2 ~@4 bb4@9 ~@3 bb4 ~ bb4@2 ~@2 bb4 ~ bb4@2 ~@2 bb4 ~]/2",
  Z: "[c5@2 ~@2 c5@2 bb4 ~@5 bb4@2 ~@2 c5 ~@5 bb4@9 ~@3 bb4@2 eb5@2 ~@2 eb5@2 d5@3 ~ d5@2]/2",
  AA: "[c5@2 ~@4 bb4@2 ~@4 bb4@2 ~@2 c5@2 ~@4 bb4@9 ~@3 bb4@2 ~ eb5@3 eb5@2 ~ d5@2 ~ d5@2]/2",
  AB: "[c5@2 ~@4 bb4 ~@5 bb4@2 ~@2 c5@2 ~@4 bb4@9 ~@3 bb4 ~ bb4@2 ~@2 bb4 ~ bb4@2 ~@2 bb4@2]/2",
  AC: "[~ c5@4 ~ bb4 ~@5 bb4@2 ~@2 c5@2 ~@4 bb4@9 ~@3 bb4 ~ bb4@2 ~@2 bb4 ~@2 bb4@2 ~ bb4@2]/2",
  AD: "[c5@3 ~@3 bb4 ~@5 bb4@2 ~@2 c5@2 ~@4 bb4@8 ~@4 bb4@2 eb5@2 ~@2 eb5@2 d5@3 ~ d5@2]/2",
  AE: "[c5@2 ~@2 c5@2 bb4@2 ~@4 bb4@3 ~ c5@2 ~@4 bb4@8 ~@4 bb4@2 eb5@2 ~@2 eb5@2 d5@2 ~@2 d5@2]/2",
  AF: "[c5@2 ~@4 g4 ~@5 g4@3 ~ f4 ~@5 eb4@4 ~@22]/2", AG: "~@18 c5 ~@5", AH: "c5@2 ~@4 c5 ~@5 f4@6 ~@4 c5 ~",
  AI: "c5@2 ~@2 c5 c5@2 ~@3 c5 ~ f4@2 ~@5 f4@2 ~ f4 ~", AJ: "g4@2 ~@4 g4 ~@5 bb4@6 bb4@2 ~@2 bb4 ~",
  AK: "eb5 ~@5 eb5 ~@3 eb5@2 c5 ~@5 f4@2 ~@4", AL: "g4@2 ~@4 g4@2 ~@4 bb4@6 ~@4 bb4 ~",
  AM: "c5@2 ~@5 c5@2 ~@4 bb4@3 ~@6 bb4 ~", AN: "g4 ~@5 g4@2 ~@2 g4 ~ bb4@2 ~@8 bb4 ~",
  AO: "c5@2 ~@4 c5@2 ~@2 c5 ~ bb4 ~@4 bb4 ~ c5@2 ~ bb4 ~", AP: "c5@2 ~@4 c5@2 ~@4 bb4@2 ~@3 bb4 c5@3 ~ bb4 ~",
  AQ: "c5@3 ~ bb4 ~ c5@2 ~@5 bb4@2 ~@3 c5@3 ~ bb4 ~", AR: "c5@2 ~@4 c5@2 ~@4 bb4@3 ~@3 c5@3 ~ bb4 ~",
  AS: "c5@3 ~@3 c5@2 ~@2 bb4 ~ [eb4,bb4]@2 ~@2 bb4 ~ bb4@2 ~@2 bb4@2", // Eb5
  AT: "[c5@2 ~@2 c5@2 bb4@2 ~@4 bb4@3 ~ c5@2 ~@4 bb4@8 ~@4 bb4@2 eb5@2 ~@2 eb5@2 d5@3 ~ d5@2]/2",
  AU: "~@10 bb4 ~ bb4@2 ~@2 bb4 ~ bb4@2 ~@2 bb4@2", AV: "[c5@2 ~@4 g4 ~@5 g4@2 ~@2 f4 ~@5 eb4@4 ~@22]/2",
  AW: "c5 ~@5 c5 ~@5", AX: "c5@2 ~@2 c5 ~@5 c5@2 bb4@4 ~@8", AY: "c5 ~@5 c5 ~@5 c5 ~@5 c5@4 bb4 ~",
  AZ: "~ c5@2 ~ c5 ~@5 c5@2 bb4@4 ~@6 bb4 ~", BA: "c5@2 ~@4 c5@2 ~@4 eb5@5 ~@5 bb4 ~",
  BB: "c5@2 ~@2 c5 ~@5 c5@2 bb4@3 ~@9", BC: "~ c5@2 ~@4 c5@2 ~@3 c5@2 ~@4 g4@2 ~@2 f4 ~",
  BD: "g4 ~@5 g4@2 ~@2 eb4@2 ~@12",
})).s("gm_trombone").gain(0.17)

// chords · trumpet
const trumpet_2 = note(`<
  ~@48 A B C ~ C D E ~ F D G ~ H I J ~@29 A B C ~ C K E ~@5 L ~@3 L ~@3 J ~@25 A B C ~ C D E ~ F D G ~ H I J
>`.pickRestart({
  A: "[c4,f4] ~@5 [c4,f4,ab4]@6 ~@3 f4 c4 ~@5 [c4,f4] ~", B: "~@9 f4 c4 ~ [c4,f4,ab4]@5 ~ [c4,f4,ab4]@4 ~@2",
  C: "[c4,f4] ~@5 [c4,f4,ab4]@6 ~@4 [c4,f4] ~@5 [c4,f4] ~", D: "~@10 [c4,f4] ~ [c4,f4,ab4]@4 ~@2 [c4,f4,ab4]@4 ~@2",
  E: "~ [c4,f4] ~@5 [c4,f4,ab4]@6 ~@3 [c4,f4] ~@5 [c4,f4] ~", F: "[c4,f4] ~@5 [c4,f4,ab4]@7 ~@3 [c4,f4] ~@5 [c4,f4] ~",
  G: "f4 c4 ~@5 [c4,ab4]@7 ~@3 [c4,f4] ~@4 [c4,f4] ~, ~@6 f4@7 ~@11", // Fm F5
  H: "[c4,f4] ~@5 [c4,f4,ab4]@6 ~@4 [c4,f4] ~@4 f4 c4 ~", I: "~@10 f4 c4 [c4,f4,ab4]@4 ~@2 [c4,f4,ab4]@4 ~@2",
  J: "[g4,bb4,eb5] ~@5 [g4,bb4,eb5] ~", K: "~@10 [c4,f4] ~ [c4,f4,ab4]@3 ~@3 [c4,f4,ab4]@4 ~@2", L: "[bb4,bb5]",
})).s("gm_trumpet").gain(0.59)

// bass · fretless bass
const bass = note(`<
  ~@16 A B C D A B C ~ A B C D A B C ~ A B C D A B C D A B C D A B C D A B A B A B A B A B A B A B ~@2 A B C D A B C D A
  B C D A B C D A B C D A B C D A B C D A B A B A B A B A B A B A B A B A B A B ~@2 A B C D A B C D A B C D A B C D A B
  C D A B C D A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "f2@6 ~@4 f2@2 c2@6 ~@4 c2 ~", B: "f2@3 ~@2 f2 c2@3 ~@3", C: "eb2@6 ~@4 eb2@2 bb1@6 ~@4 bb1 ~",
  D: "eb2@3 ~@2 eb2 bb1@3 ~@3",
})).s("gm_fretless_bass").gain(0.38)

// other · distortion guitar
const distortion_guitar = note("<A B C D A B C D A B C D A B C ~@99 A E C F A E C F ~@31>".pickRestart({
  A: "f2 ~@5 f2 ~@4 f2", B: "~@4 f2@2 ~@4 f2@2 ~ f2@2 ~ f2 ~ f2@3 ~@2 f2", C: "eb2 ~@5 eb2 ~@4 eb2",
  D: "~@4 eb2@2 ~@4 eb2@2 ~ eb2@2 ~ eb2 ~ eb2@3 ~@2 eb2", E: "~@4 f2@2 ~@5 f2@2 f2@2 ~ f2 ~ f2@3 ~@2 f2",
  F: "~@4 eb2@2 ~@5 eb2@2 eb2@2 ~ eb2 ~ eb2@3 ~@2 eb2",
})).s("gm_distortion_guitar").gain(0.33)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@16 A B A B A B A ~ A B A B A B A ~ 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 ~@2 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 ~@10 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 ~
>`.pickRestart({
  A: "~@5 x ~@5 x", B: "~@5 x ~@6",
})).gain(0.26)

// drums · snare
const snare = s("sd").struct(`<
  ~@16 A@7 ~ A@7 ~ A@15 B A@14 ~@2 A@11 C A@15 B A@20 ~@10 A@7 B A@7 B A@14 ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "x!2 ~ x!2 ~ x!2 ~ x ~ x ~@6 x ~@5",
})).gain(0.33)

// drums · clap
const clap = s("cp").struct(`<
  A@15 ~ A@7 ~ A@7 ~ A@15 B A@7 C D A@5 ~@2 A@27 B A@7 C D A@11 ~@2 A@15 B A@7 B A@7 C D A@5 ~
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2", C: "~@3 x ~@5 x!3", D: "x!2 ~ x",
})).gain(0.46)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@32 A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B ~@13 D A B A B A B A B A B A B A B A C A B A B A B A
  B A B A B A B A B A B A B ~@10 A B A B A B A C ~@8 A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "x ~@4 x!2 ~@4 x", B: "x ~ x ~@2 x!2 ~@5", C: "~@5 x ~ x!2 ~ x ~ x ~@3 x ~ x ~@3 x ~",
  D: "~@13 x ~ x!2 ~ x ~ x ~ x ~",
})).gain(0.2)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@11 ~ B C@3 D C@2 E D C@3 D C@2 ~ B C@15 B C@6 F C@6 G ~ B C@7 D C@3 B C@15 B C@6 F C@4 B C@3 B C@3 ~@10 C@16 B
  C@6 F C@6 G
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~ x ~@2 x", C: "x ~ x ~@2 x!2 ~ x ~@2 x", D: "x ~@4 x ~@4 x ~ x ~@3 x ~@5 x ~",
  E: "x!12", F: "x ~ x ~@2 x!2 ~ x!4", G: "x",
})).gain(0.26)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A@7 ~ A@7 ~ A@30 ~@2 A@48 ~@10 A@30 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.33)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@16 A B C D@4 ~ D@7 ~ A B C D E B C D E B C D E B C F A B C D E B C D A B C D E B ~@2 A B C D E B C D@5 A B C D E B C
  D E B C D E B C F A B C D E B C D A B C D E B C D E B C D ~@10 E B C D E B C F E B C D E B C F A B C D E B C D A B C D
  E B ~
>`.pickRestart({
  A: "~@6 x ~@4 x!2 ~@5 x ~@5", B: "x ~@5 x ~@6 x ~@4 x ~@5", C: "x!4", D: "x ~@2 x ~ x!2 ~@2 x ~@2",
  E: "x ~@5 x ~@4 x!2 ~@5 x ~@5", F: "x ~@2 x ~ x!2 ~@5",
})).gain(0.26)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@17 A B ~@14 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A ~@3 A B ~@2 A B ~@6 A B ~@2 A B ~@2 A B ~@2 A
  B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@12 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A B ~@2 A ~
>`.pickRestart({
  A: "~@11 x ~@12", B: "~@5 x ~@6",
})).gain(0.13)

// drums · crash
const crash = s("cr").struct(`<
  ~@16 A ~@15 A ~@15 A ~@7 A ~@7 A ~@11 A ~@15 A ~@7 A ~@13 A ~@7 A ~@7 A ~@7 A ~@7 A ~@6
>`.pickRestart({
  A: "x",
})).gain(0.33)
// … 5 more lines

More by Lou Bega