Strudelify
Dancando Lambada cover art

1989 · Lambada - Les originaux No. 1 de l'été (Original 1989)

Dancando Lambada

Kaoma

KeyC minorTempo120 bpm
0:00/0:00
// Dancando Lambada — Kaoma
// 120 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): JAZZ GTR.
setcpm(120/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@2 A B A B A C D E F E D E G C D E F H I C D E F E D E G C D E F H I C D E F E D E G C D E F E D E G C D E F E D E J
  C D E F H I C D E F E D E G C D E F E D E G C D E F E D E G C D E F E D K ~
>`.pickRestart({
  A: "c2 ~@2 c2 g1@2 g1 ~ c2 ~@2 c2 g1@2 g1 ~", B: "g1 ~@2 g1 d2@2 d2 ~ g1 ~@2 g1 d2@2 d2 ~", C: "g1@2 d2@2 g1@2 d2 g1",
  D: "c2@2 g1@2 c2@2 g1 c2", E: "g1 d2 g1 d2", F: "c2@4 g1@4 c2@3 c2 g1@2 c2@2", G: "c2@3 c2 g1@4 c2@3 c2 g1@2 c2@2",
  H: "f1@4 c2@4 g1@3 g1 d2@2 g1@2", I: "c2 ~@7", J: "c2 ~@2 c2!2 ~@11", K: "g1@4 d2@4 g1@4 d2@3 c2",
})).s("gm_acoustic_bass").gain(0.48)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~@4 A B A B A B A B A B A B A B C D E F G F G F G F G B A B C D E F G F G F G F G B A B A B A B A F G F G F G F H B A
  B C D E F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G I@2
>`.pickRestart({
  A: "~@2 [eb5,g5] [eb5,g5,c6]@3 ~@4 [eb5,g5] [eb5,g5,c6]@3 ~@2", // Eb Cm Eb Cm
  B: "~@2 [d5,g5] [b4,d5,g5]@3 ~@4 [d5,g5] [b4,d5,g5]@3 ~@2", // G5 G G5 G
  C: "~@2 [eb5,g5] [eb5,g5,c6]@3 ~@4 [e5,g5] [e5,g5,c6]@3 ~@2", // Eb Cm Em C
  D: "~@2 [f5,ab5] [f5,ab5,c6]@3 ~@4 [d5,g5] [b4,g5,b5]@3 ~@2", E: "[eb5,g5,c6] ~@15",
  F: "[d5,g5]!2 [d5,g5,b5]!2 [d5,g5]!2 [d5,g5,b5]!2 [d5,g5]!2 [d5,g5,b5]!2 [d5,g5]!2 [d5,g5,b5]!2", // G5 G G5 G G5 G G5 G
  G: "[eb5,g5]!2 [eb5,g5,c6]!2 [eb5,g5]!2 [eb5,g5,c6]!2 [eb5,g5]!2 [eb5,g5,c6]!2 [eb5,g5]!2 [eb5,g5,c6]!2", // Eb Cm Eb Cm Eb Cm Eb Cm
  H: "[eb5,g5,c6] ~@2 [eb5,g5,c6]!2 ~@11", // Cm
  I: "[[d5,g5]!2 [d5,g5,b5]!2 [d5,g5]!2 [d5,g5,b5]!2 [d5,g5]!2 [d5,g5,b5]!5 [eb5,g5,c6]@2 ~@15]/2", // G5 G G5 G G5 G Cm
})).s("gm_electric_guitar_muted").gain(0.2)

// chords · accordion · "PRG.CHANGE"
const accordion = note("<~@6 A B C D@2 B C E@2 ~@27 A B C D@2 B C E@2 ~@37 A B C F@2 B C G ~>".pickRestart({
  A: "~@6 g4 ~ c5 ~ eb5 ~ [eb5,g5]@3 [eb5,g5]", B: "~ f5 ~ d5 ~ b4 g4 ~ b4 ~ d5 ~ [f5,ab5]@3 [f5,ab5]",
  C: "~ g5 ~ eb5 ~ c5 g4 ~ c5 ~ eb5 ~ [eb5,g5]@3 [eb5,g5]", // Eb
  D: "[~ f5 ~ d5 ~ b4 g4 ~ [d5,f5]@2 [c5,eb5]@2 [b4,d5]@3 [c5,eb5]@5 ~@2 g4 ~ c5 ~ eb5 ~ [eb5,g5]@3 [eb5,g5]]/2", // Dm Cm Bm Cm Eb
  E: "[~ f5 ~ d5 ~ b4 g4 ~ [d5,f5]@2 [c5,eb5]@2 [b4,d5]@3 [c5,eb5]@5 ~@12]/2", // Dm Cm Bm Cm
  F: "[~ f5 ~ d5 ~ b4 g4@2 [d5,f5]@2 [c5,eb5]@2 [b4,d5]@3 [c5,eb5]@5 ~@2 g4 ~ c5 ~ eb5 ~ [eb5,g5]@3 [eb5,g5]]/2", // Dm Cm Bm Cm Eb
  G: "~ f5 ~ d5 ~ b4 g4@2 [d5,f5]@2 [f5,ab5]@2 [g5,b5]@3 [c5,g5,c6]", // Dm Fm G C5
})).s("gm_accordion").gain(0.48)

// chords · piano · "PRG.CHANGE"
const piano = note("<~@24 A B C D@2 ~@9 A B C E@2 ~@7 F G H I J K L M N@8 ~@2 O@2 P@8 Q@8 R@3 ~@8>".pickRestart({
  A: "~@6 [g2,g4] ~ c3@2 [eb3,eb5]@2 [g3,g5]@2 ~ [g3,g5], ~@8 c5 ~@7", // G Eb G
  B: "~ [f3,f5] ~ [d3,d5] ~@2 g2@2 [b2,b4]@2 [d3,d5]@2 [ab3,ab5]@2 ~ [ab3,ab5], ~@6 g4 ~@9", // F D B D Ab
  C: "~ [g3,g5] ~ [eb3,eb5] ~@2 [g2,g4] ~ c3@2 [eb3,eb5] ~ [g3,g5]@2 ~ [g3,g5], ~@8 c5 ~@7", // G Eb G Eb G
  D: "[~ [f3,f5] ~ [d3,d5] ~@2 [d3,d5] ~ [eb3,eb5] ~ eb5@2 [d3,d5]@2 ~ [d3,d5]@3 [c3,c5] ~@13, ~@10 eb3 ~@21]/2", // F D Eb D C
  E: "[~ [f3,f5] ~ [d3,d5] ~@2 d3@2 [eb3,eb5] ~ [eb3,eb5] ~ [d3,d5]@2 ~ [d3,d5]@3 [c3,c5] ~@13, ~@6 d5 ~@25]/2", // F D Eb D C
  F: "~@12 [bb2,bb4] [a2,a4] ~ [ab2,ab4]", // Bb A Ab
  G: "g2@2 [b2,b4] [d3,d5] ~ f5@2 g2@2 [b2,b4] ~ [d3,d5] ~ [f3,f5] [d3,d5] ~, g4 ~@4 f3 ~ g4 ~@8", // B D B D F D
  H: "[a2,a4] ~ [c3,c5] [eb3,eb5] ~ [g3,g5] ~ a2@2 [c3,c5] ~ [eb3,eb5] ~ [g3,g5] [eb3,eb5] ~, ~@7 a4 ~@8", // A C Eb G C Eb G Eb
  I: "b2@2 [d3,d5] [f3,f5] ~ [ab3,ab5] ~ b2@2 d3@2 [f3,f5] ~ [ab3,ab5] [f3,f5] ~, b4 ~@6 b4 ~ d5 ~@6", // D F Ab F Ab F
  J: "[c3,c5] ~ [eb3,eb5] [g3,g5] ~ [a3,a5] ~ [c3,c5] ~ [eb3,eb5] ~ g3@2 [a3,a5] [g3,g5] ~, ~@11 g5 ~@4", // C Eb G A C Eb A G
  K: "g2@2 [b2,d5] f5@2 g5@2 g2@2 [b2,d5] ~ [d3,f5] ~ [f3,g5] [d3,f5] ~, b4 ~@2 d3 ~ f3 ~ b4 ~@8", // Bm Dm Fsus2 Dm
  L: "[a2,c5] ~ [c3,eb5] [eb3,g5] ~ [g3,a5] ~ a2@2 c3@2 [eb3,g5] ~ [g3,a5] [eb3,g5] ~, ~@7 c5 ~ eb5 ~@6", // Am Cm Eb Gsus2 Eb Gsus2 Eb
  M: "b2@2 [d3,f5] [f3,ab5] ~ [ab3,b5] ~ b2@2 d3@2 f3@2 [ab3,b5] [f3,ab5] ~, d5 ~@6 d5 ~ f5 ~ ab5 ~@4", // Dm Fm Abm Fm
  N: "[[c3,eb3,g3,a3,eb5,g5,a5,c6] ~@2 [c3,eb3,g3,a3,eb5,g5,a5,c6] [c3,eb3,g3,eb5,g5]@124]/8", // Am7b5 Cm
  O: "[~@6 [g2,g4] ~ c5@2 ~@2 [g3,g5]@3 ~@2 [f3,f5] ~ [d3,d5] ~@2 g2@2 [b2,b4]@2 [d3,d5] ~ [ab3,ab5]@2 ~ [ab3,ab5], ~ c3@3, ~@5 [eb3,eb5]@11, ~@15 [g3,g5]@17, ~@22 g4 ~@9]/2", // G F D B D Ab Eb G
  P: "[~@6 [g2,g4] ~ c5 ~@3 [g3,g5]@3 ~@2 [f3,f5] ~ [d3,d5] ~@2 [d3,d5] ~ [eb3,eb5]@2 ~@2 [d3,d5]@2 ~ [d3,d5]@3 c5 ~@3 [g2,g4]@2 c5@2 ~@2 [g3,g5]@3 ~@3 [f3,f5]@2 [d3,d5]@2 [f3,f5] ~@5 [ab3,ab5]@2 ~ [ab3,ab5]@3 ~@4 [g3,g5]@6 [g3,g5]@3 ~@3 [f3,f5]@2 [d3,d5]@2 f5@2 ~@7 [d3,d5]@3 c5 ~@3 [g2,g4]@2 c5@2 ~@2 [g3,g5]@3 ~@3 [f3,f5]@2 [d3,d5]@2 f3@2 ~@4 [ab3,ab5]@2 ~ [ab3,ab5], ~ [g3,g5]@11 ~@3 [g3,g5]@29 ~@3 [g3,g5]@19 [g3,g5]@4 ~@9 [g3,g5]@29 ~@3 [g3,g5]@17, ~@3 [eb3,eb5]@7 [eb3,eb5]@14 ~@2 [eb3,eb5]@16 [eb3,eb5]@26 [eb3,eb5]@24 [eb3,eb5]@14 [eb3,eb5]@22, ~@4 c3@13 c3@3 c3@29 c3@3 c3@12, ~@86 f3 ~@31 f5 ~@9]/8", // G F D Eb D G F D …
  Q: "[~@6 [g3,g5]@6 [g3,g5]@3 ~@3 [f3,f5]@2 [d3,d5]@2 [f3,f5]@2 ~@7 [d3,d5]@3 c5 ~@3 [g2,g4] ~ c5 ~@3 [g3,g5]@3 ~@2 [f3,f5] ~ [d3,d5] ~@2 g2@2 [b2,b4]@2 [d3,d5] ~ [ab3,ab5]@2 ~ [ab3,ab5] ~@6 [g2,g4] ~ c5 ~@3 [g3,g5]@3 ~@2 [f3,f5] ~ [d3,d5] ~@2 [d3,d5] ~ [eb3,eb5]@2 ~@2 [d3,d5]@2 ~ [d3,d5]@3 c5 ~@3 [g2,g4] ~ c5 ~@3 [g3,g5]@3 ~@2 [f3,f5] ~ [d3,d5] ~@2 g2@2 [b2,b4]@2 [d3,d5]@2 [ab3,ab5]@2 ~ [ab3,ab5], ~@2 [g3,g5]@4 ~@9 [g3,g5]@29 ~@3 [g3,g5]@18 [g3,g5]@11 ~@3 [g3,g5]@29 ~@3 [g3,g5]@17, ~@4 [eb3,eb5]@24 [eb3,eb5]@14 [eb3,eb5]@25 [eb3,eb5]@7 [eb3,eb5]@14 ~@2 [eb3,eb5]@16 [eb3,eb5]@22, ~@17 c3@3 c3@16 c3@13 c3@3 c3@12, ~@54 g4 ~@63 g4 ~@9]/8", // G F D F D G F D …
  R: "[~@6 [g2,g4] ~ c5 ~@3 [g3,g5]@4 ~ [f3,f5] ~ [d3,d5] ~@2 [d3,d5] ~ [eb3,eb5]@3 ~ [d3,d5]@2 ~ [d3,d5]@3 c5 ~@13, ~ [g3,g5]@11 ~@36, ~@3 [eb3,eb5]@7 [eb3,eb5]@14 ~@24, ~@8 c3@27 ~@13]/3", // G F D Eb D G Eb
})).s("gm_piano").gain(0.72)

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

// drums · snare
const snare = s("sd").struct("<~@7 A@8 ~@5 B A@8 ~@5 C A@22 D E ~@5 F A@30 G ~>".pickRestart({
  A: "~@3 x ~@7 x ~@4", B: "~@14 x!2", C: "x!3 ~@2 x ~@5 x!2 ~@3", D: "~@3 x ~@7 x!4 ~", E: "x ~@2 x!2 ~@11",
  F: "~@5 x ~@2 x ~@7", G: "~@3 x ~@4 x ~@3 x ~@3",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@6 A B@8 ~@5 C B@8 ~@5 D B@15 ~ B@6 ~ E ~@5 F B@31 ~>".pickRestart({
  A: "~@10 x ~@2 x ~@2", B: "~@7 x", C: "~@11 x!2 ~@3", D: "~@7 x!2 ~@7", E: "~@3 x", F: "~ x ~ x",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<~@7 A@13 B A@13 C A@22 D E A@5 F A@30 G ~>".pickRestart({
  A: "x!16", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2", D: "x!12 ~@4", E: "~@3 x ~ x ~ x", F: "~ x ~ x ~@3 x",
  G: "x!8 ~@8",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 A B@8 ~@5 A B@8 ~@5 C B@15 D B@3 E B@3 F ~@5 G B@23 H B@6 I ~>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~@3 x ~@4", C: "~@2 x!2 ~@4", D: "~@6 x ~@4 x ~@2 x ~", E: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x ~",
  F: "x ~@2 x!2 ~@7 x ~@3", G: "~@3 x ~@7 x ~@4", H: "~@3 x ~@3 x", I: "~@6 x ~@6 x ~@2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@34 [~@7 x] ~@29 [~ x] ~@32>").gain(0.16)

// drums · high tom
const high_tom = s("ht").struct("<~@6 A ~@13 B ~@13 C ~@15 D ~@3 E ~@3 F ~@5 C ~@23 G ~@6 H ~>".pickRestart({
  A: "x!2 ~ x!2 ~@11", B: "~ x ~ x!2 ~@11", C: "~@3 x ~@12", D: "~@2 x ~@2 x ~@2 x!2 ~@2 x ~@2 x",
  E: "~@6 x!2 ~@2 x!2 ~@2 x!2", F: "x ~@2 x!2 ~@11", G: "~@8 x ~ x ~ x!2 ~ x", H: "~@5 x ~@2",
})).gain(0.4)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@50 [~@6 x!2 ~@8] ~@3 [~@2 x!2 ~@12] ~@33 [~@7 x ~@8] ~@8>").gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@7 x ~@13 x ~@73 [~@15 x] ~>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@29 A@5 B A@23 C A@5 B A@31 ~>".pickRestart({
  A: "x!8", B: "x", C: "x ~@2 x!2 ~@11",
})).gain(0.24)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@29 A@5 ~ A@23 ~ A@5 ~ A@31 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x",
})).gain(0.08)

// drums · cowbell
const cowbell = s("cb").struct("<~@51 A B A C D E F G ~@14 H@22 I ~>".pickRestart({
  A: "x ~ x ~ x ~@2 x ~ x ~ x ~ x ~@2", B: "x ~ x ~ x!2 ~ x ~ x ~ x ~ x ~@2", C: "x ~ x ~ x ~@2 x ~ x ~ x ~@4",
  D: "x!2 ~ x ~ x ~ x", E: "~ x ~ x ~ x ~ x", F: "~@2 x ~@3 x ~@3 x ~@2 x ~@2", G: "x!2 ~@2", H: "x!4",
  I: "x ~@3 x ~@3 x ~@3 x ~@2 x",
})).gain(0.32)

// drums · cowbell · soft notes
const cowbell_soft = s("cb").struct("<~@51 A B A C D@2 E F ~@38>".pickRestart({
  A: "~@5 x ~@8 x ~", B: "~@7 x", C: "~@5 x ~@7 x!2 ~", D: "~@3 x ~@3 x ~@3 x ~@3 x", E: "~@3 x ~@3 x ~@3 x ~@2 x ~",
  F: "~@3 x ~@12",
})).gain(0.08)

// drums · bongos
const bongos = s("bongo:4").struct("<~@7 A@8 ~@6 B@8 ~@6 B@8 A@8 B@7 C B@5 D B@8 A@8 B@8 A@7 ~>".pickRestart({
  A: "x!4", B: "~@3 x ~@2 x ~@4 x ~@2 x ~", C: "x!2 ~@2", D: "x",
})).gain(0.63)

// drums · bongos · soft notes
const bongos_soft = s("bongo:4").struct("<~@21 A@8 ~@6 A@8 ~@8 A@7 B A@5 ~ A@8 ~@8 A@8 ~@8>".pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@3 x ~@12",
})).gain(0.21)

// drums · congas
const congas = s("conga:18").struct("<~@51 [~ x ~@3 x ~@2]!7 ~@23 [~ x ~@3 x ~@2]!14 [~ x ~@6] ~>").gain(0.77)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~@58 [~ x ~ x!2 ~@11] ~@36 [~@8 x!3 ~ x!2 ~ x] ~>").gain(0.51)

// drums · congas
const congas_2 = s("conga:33").struct("<~@51 [~@3 x ~@3 x]!7 [x!2 ~@2] ~@22 [~@3 x ~@3 x]!14 [~@6 x ~@4 x ~@2 x!2] ~>")
  .gain(0.77)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct("<~@51 [~@7 x ~@7 x]!7 [~@3 x ~@12] ~@22 [~@7 x ~@7 x]!14 [~@7 x ~@8] ~>")
  .gain(0.51)

// drums · shaker
const shaker = s("sh").struct("<A@20 B A@13 B A@23 C A@5 B A@31 ~>".pickRestart({
  A: "x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~", B: "x", C: "x ~@2 x!2 ~@11",
})).gain(0.24)

// drums · guiro
const guiro = s("guiro:0").struct("<~@50 A ~ A ~ A ~ A ~@40>".pickRestart({
  A: "~@7 x",
})).gain(10.14)

// drums · claves
const claves = s("clave:2").struct("<~@7 A@13 B A@13 B A@23 ~ A@5 B A@31 ~>".pickRestart({
  A: "x ~@2 x ~@3 x ~@2 x ~ x ~@3", B: "x",
})).gain(1.57)

stack(
  bass, electric_guitar_muted, accordion, piano, kick, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  high_tom_soft, crash, tambourine, tambourine_soft, cowbell, cowbell_soft, bongos, bongos_soft, congas, congas_soft,
  congas_2, congas_soft_2, shaker, guiro, claves
)

More by Kaoma