Strudelify
Livin La Vida Loca cover art

1999 · Ricky Martin

Livin La Vida Loca

Ricky Martin

KeyC minorTempo185 bpm
0:00/0:00
// Livin La Vida Loca — Ricky Martin
// 185 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 179 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(185/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 · fretless bass
const bass = note(`<
  ~ A@28 B C D E F G H@2 I J K@2 L M K@2 L M K@2 L M K@2 L M L M L M A@8 ~@2 A@6 B C D E F G H@2 I J K@2 L M K@2 L M K@2
  L M K@2 L M L M L M A@6 N A B C D E F G H@2 I J K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M K@2 L M L M L
  M A@2 N A@3 N A@3 N A@3 N A N A O@2
>`.pickRestart({
  A: "c2@3 g2@3 f2 g2", B: "f1@6 c2@7 ~ c2@2", C: "f1@3 c2@2 c2 bb1 c2", D: "g1@3 d2 d2@2 c2 d2",
  E: "g1@3 d2@2 d2 c2 d2", F: "ab1@6 eb2 ~ eb2@4 d2@2 eb2@2", G: "ab1@3 eb2@2 eb2 d2 eb2",
  H: "bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~ bb1 ~", I: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", J: "g1 ~@7",
  K: "[c2@5 ~ g1@5 ~ bb1@7 ~ c2@4 f2 ~ eb2 ~ c2@4]/2", L: "bb1@5 ~ f2 ~ f2@4 g2@4", M: "c2@5 ~ c2@4 c2 ~ c2@4",
  N: "bb1@3 f2@3 eb2 f2", O: "[bb1@3 f2@3 eb2 c2@2 ~@7]/2",
})).s("gm_fretless_bass").gain(0.54).pan(0.4)

// chords · harpsichord
const harpsichord = note(`<
  ~ A@28 B@2 C@2 D@2 E@2 F ~@21 A@16 B@2 C@2 D@2 E@2 F ~@21 A@6 G A B@2 C@2 D@2 E@2 F ~@37 A@2 G A@3 G A@3 G A@3 G A G A
  H ~
>`.pickRestart({
  A: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", // Cm
  B: "~@2 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~", // Fm
  C: "~@2 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~", // Gm
  D: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~", // Ab
  E: "~@2 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~@3 [d4,f4,bb4] ~", // Bb
  F: "~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  G: "~@2 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~", // Bb
  H: "~@2 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [c4,eb4,g4] ~", // Bb Cm
})).s("gm_harpsichord").gain(0.4).pan(0)

// chords · acoustic guitar steel · "and FoxMusic"
const acoustic_guitar_steel = note(`<
  ~ A@28 B@2 C@2 D@2 E@2 F ~@21 A@16 B@2 C@2 D@2 E@2 F ~@21 A@6 G A B@2 C@2 D@2 E@2 F ~@37 A@2 G A@3 G A@3 G A@3 G A G A
  H ~
>`.pickRestart({
  A: "~@2 [c5,eb5,g5] ~@3 [c5,eb5,g5] ~@3 [c5,eb5,g5] ~@3 [c5,eb5,g5] ~", // Cm
  B: "~@2 [c5,f5,ab5] ~@3 [c5,f5,ab5] ~@3 [c5,f5,ab5] ~@3 [c5,f5,ab5] ~", // Fm
  C: "~@2 [bb4,d5,g5] ~@3 [bb4,d5,g5] ~@3 [bb4,d5,g5] ~@3 [bb4,d5,g5] ~", // Gm
  D: "~@2 [c5,eb5,ab5] ~@3 [c5,eb5,ab5] ~@3 [c5,eb5,ab5] ~@3 [c5,eb5,ab5] ~", // Ab
  E: "~@2 [d5,f5,bb5] ~@3 [d5,f5,bb5] ~@3 [d5,f5,bb5] ~@3 [d5,f5,bb5] ~", // Bb
  F: "~@2 [d5,g5,b5] ~@3 [d5,g5,b5] ~@3 [d5,g5,b5] ~@3 [d5,g5,b5] ~", // G
  G: "~@2 [bb4,d5,f5] ~@3 [bb4,d5,f5] ~@3 [bb4,d5,f5] ~@3 [bb4,d5,f5] ~", // Bb
  H: "~@2 [bb4,d5,f5] ~@3 [bb4,d5,f5] ~@3 [bb4,d5,f5] ~@3 [c5,eb5,g5] ~", // Bb Cm
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(1)

// other · brass section
const brass_section = note(`<
  ~ A B C D A B C D ~@10 E@2 ~@8 F@2 G@2 H@2 I@2 J K ~@20 A B C D A B C D ~@8 L@2 G@2 H@2 I@2 J K ~@28 L@2 G@2 H@2 I@2 J
  ~@57
>`.pickRestart({
  A: "~@4 [g3,g4,g5]@2 ~@2 [g3,g4,g5]@2 ~@4 [eb3,eb4,eb5] ~", // G Eb
  B: "[f3,f4,f5]@2 [g3,g4,g5] ~@3 [ab3,ab4,ab5] ~@3 [g3,g4,g5]@6", // F G Ab G
  C: "~@4 [g3,g4,g5]@2 ~@2 [g3,g4,g5]@2 ~@4 [d3,d4,d5] ~", // G D
  D: "[d3,d4,d5]@2 [f3,f4,f5] ~@3 [f3,f4,f5] ~@3 [eb3,eb4,eb5]@6", E: "[~@7 [c3,c4,c5]@9]/2",
  F: "[[f4,ab4,f5]@7 [ab4,ab5]]/2", G: "[[bb4,bb5]@7 [g4,g5]]/2", H: "[c4,c5,c6]/2", I: "[d4,d5,d6]/2",
  J: "~@2 [g4,g5] ~ [g4,g5]@2 ~@8 [g4,g5] ~", K: "~@2 [g4,g5] ~ [g4,g5] ~@3 [g4,g5] ~@7", L: "[[f4,f5]@7 [ab4,ab5]]/2",
})).s("gm_brass_section").gain(0.45)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@17 A@2 B C@2 ~@17 D@2 E D@3 E D@3 E D@3 E D E D E D ~@26 D@2 E D@3 E D@3 E D@3 E D E D E D F@4 G@2 ~@11 H@2 D E D@3
  E D@3 E D@3 E D@3 E D@3 E D@3 E D@3 E D E D E D I@4 J@4 K@4 L@2 M N ~ O P ~
>`.pickRestart({
  A: "[c3@2 c3@2 eb3 f3 ~ eb3@3 eb3 f3@2 eb3 f3 eb3]/2", B: "c3@4 eb3 c3@2 c3",
  C: "[~@2 [g2,g3]!13 g2@8 ~@9, ~@15 g3@4 ~@13]/2", // G
  D: "[c3,g3,c4,eb4] ~ [g3,c4,eb4] ~ [c3,g3,c4,eb4] ~ [g3,c4,eb4] ~ [c3,g3,c4,eb4] ~ [g3,c4,eb4] ~ [c3,g3,c4,eb4] ~ [g3,c4,eb4] ~", // Cm
  E: "[bb2,f3,bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~ [bb3,d4,f4] ~ [bb2,f3,bb3,d4,f4] ~ [bb3,d4,f4] ~", // Bb
  F: "[c3@2 c3!2 eb3 f3 ~ f3@3 eb3 f3 ~ eb3 ~ f3@2 f3 g3 f3 g3 eb4 ~ c4@5 eb3@2 eb3@2]/4",
  G: "[c3@2 c3!2 eb3 f3 ~ f3@3 eb3@2 c4@4]/2",
  H: "[~@2 [g2,g3]!13 g3 [c3,g3,c4,eb4] ~ [g3,c4,eb4] ~ [c3,g3,c4,eb4] ~ [g3,c4,eb4] ~ [c3,g3,c4,eb4] ~ [g3,c4,eb4] ~ [c3,g3,c4,eb4] ~ [g3,c4,eb4] ~, ~@15 g2@8 ~@9]/2", // G Cm
  I: "[c3@2 c3!2 eb3 f3 ~ f3@3 eb3 f3 ~ eb3 ~ f3@2 f3 g3 f3 g3 eb4 ~ c4@3 ~ bb3 eb3 d3 eb3 d3, ~@13 c4 ~@2]/4",
  J: "[c3@2 c3!2 eb3 f3 ~ f3@3 eb3 f3 ~ eb3 ~ f3@2 f3 g3 f3 g3 eb4 ~ c4@3 ~ bb3 eb3 c3 c4@2, ~@13 c4 ~@2]/4",
  K: "[c3@2 c3!2 eb3 f3 ~ f3@3 eb3 f3 ~ eb3 ~ f3@2 f3 g3 f3 g3 bb3 ~ c4@3 ~ bb3 eb3 d3 eb3 d3, ~@13 c4 ~@2]/4",
  L: "[c3@2 c3!2 eb3 f3 ~ f3@3 eb3 f3 ~ eb3 ~ f3]/2", M: "[f3,f4]!5 [bb3,bb4]@2 [c4,c5]", N: "~@2 c4 bb3 eb3 c3 ~@2",
  O: "~ g3 bb3 c4 eb4 g4 eb4 c4", P: "bb3@3 ~",
})).s("gm_electric_guitar_clean").gain(0.48)

// chords · string ensemble 2 · "Join the TopList Team"
const string_ensemble_2 = note(`<
  ~ A@8 ~@20 B@2 C@2 D@2 E@2 F ~ G@2 H I G@2 H I G@2 H I G@2 H I H I H I J@4 K@4 ~@8 B@2 C@2 D@2 E@2 F ~ G@2 H I G@2 H I
  G@2 H I G@2 H I H I H I ~@8 B@2 C@2 D@2 E@2 F ~ G@2 H I G@2 H I G@2 H I G@2 H I G@2 H I G@2 H I G@2 H I G@2 H I H I H
  I G@2 H I G@2 H I G@2 H I G@2 H I H I L ~
>`.pickRestart({
  A: "[~ [c5,g5], [c4,eb4,g4]]/8", B: "[ab3,c4,f4]/2", C: "[d4,g4,bb4]/2", D: "[eb4,ab4,c5]/2", E: "[f4,bb4,d5]/2",
  F: "[f4,g4,b4,d5]", G: "[c4,eb4,g4]/2", H: "[d4,f4,bb4]", I: "[c4,eb4,g4]", J: "[c4,eb4,g4]/4",
  K: "[c4,eb4,g4,c5,g5]/4", L: "[d4,f4,bb4]@7 [c4,eb4,g4]",
})).s("gm_string_ensemble_2").gain(0.11)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@39 A B ~ C A B ~ C A B ~ C A B ~ C ~ B ~ B ~@26 A B ~ C A B ~ C A B ~ C A B ~ C ~ B ~ B ~@3 D A E F G@2 ~@9 A B ~ C
  A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C ~ B H B I J K L I J K L I J K L I J K L M L N@2
>`.pickRestart({
  A: "[c3,g3]", B: "~@2 [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3]@8", C: "[c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3]@8 ~@2",
  D: "~@2 [c3,g3] ~@3 [c3,g3] ~@3 [c3,g3] ~@3 [c3,g3] ~", E: "~@2 [c3,g3] ~@3 [c3,g3]@10", F: "[f3,bb3]!8",
  G: "[~@2 [c3,g3] ~@3 [c3,g3] ~@3 [c3,g3] ~ c3@6 ~@14, ~@3 g3 ~@4]/2", H: "~@7 [g2,g3,g4]",
  I: "[c3,g3]@4 [c3,g3]!2 ~ [c3,g3]", J: "~ [c3,g3]!2 ~@2 [c3,g3] ~ [c3,g3]",
  K: "[f3,bb3]@5 ~ [f3,bb3]@2 ~@2 [f3,bb3]@2 ~@2 [c3,g3]@2", L: "~ [c3,g3] ~ [c3,g3] ~ [c3,g3] ~ [c3,g3]",
  M: "[f3,bb3]!7 [c3,g3]", N: "[[f3,bb3]!7 [c3,g3]@2 ~@7, ~@7 c2 ~@8]/2",
})).s("gm_distortion_guitar").gain(0.29).pan(0)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@40 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ C ~ C ~@27 A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ C ~ C ~@3 D E F G@2 ~@11 A ~ B ~ A ~ B
  ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ A ~ B ~ C ~ C ~@4 H@3 ~ I@2 J K ~@4 L@2 M@2
>`.pickRestart({
  A: "~@4 f4 eb4 c4@2", B: "~ c4 [eb4,eb5] d4 c4@4", C: "~@3 [c4,c5]!3 [c4,c5]@2",
  D: "~@2 [c3,g3] ~@3 [c3,g3] ~@3 [c3,g3] ~@3 [c3,g3] ~", E: "[c3,g3]", F: "~@2 [c3,g3] ~@3 [c3,g3]@8 [g2,g3]@2",
  G: "[[bb2,bb3]@2 [bb2,bb3]@2 [bb2,bb3]@2 [bb2,bb3]@2 [bb2,bb3]@2 [g2,g3]@2 [bb2,bb3]@2 [c3,c4]@7 ~ [c3,c4]@10]/2", // Bb G Bb C
  H: "[~ bb5@4 ~]/3", I: "[~@5 g4 ~ c5@6 c5 ~ c5]/2", J: "~ c5 ~ c5 ~ c5 ~ c5", K: "d5", L: "[bb4!5 g4 bb4 c5@4 ~@5]/2",
  M: "[bb4!5 g4 bb4 [c3,c4]@2 ~@7]/2", // C
})).s("gm_overdriven_guitar").gain(0.29).pan(1)

// drums · rim
const rim = s("rim").struct("<[~ x!3] ~@178>").gain(0.4)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@38 A ~@19 B ~ C ~@3 C ~@4 D ~@14 A ~@19 B ~@53 B ~@20>".pickRestart({
  A: "~ x!3", B: "~ x ~ x ~ x!2 ~", C: "~@3 x", D: "x",
})).gain(0.72)

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

// drums · crash
const crash = s("cr").struct(`<
  A B C D E F G H ~ I ~ I ~ I ~ I ~ I ~ I ~ I ~ I ~ I ~@3 I ~@3 I ~@4 J I ~@3 I ~@3 I ~@3 I ~@3 I ~ I ~ I ~@3 I ~@5 I ~
  I ~@3 I ~@3 I ~@4 J I ~@3 I ~@3 I ~@3 I ~@3 I ~ I ~ I ~@7 I ~@3 I ~@5 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3 I ~@3
  I ~ I ~ I ~@3 I ~@3 I ~@3 I ~@3 I ~ K ~
>`.pickRestart({
  A: "~@2 x!2 ~@2 x ~@2 x!2 ~@2 x!3", B: "x!4 ~ x ~@2 x!2 ~ x ~ x ~ x", C: "x!2 ~@2 x!3 ~ x!3 ~ x!2 ~@2",
  D: "x!3 ~ x ~@2 x ~ x!3 ~@2 x!2", E: "x ~ x!3 ~ x!3 ~ x!5 ~", F: "~ x!3 ~@2 x ~@2 x!3 ~@2 x!2",
  G: "x ~@2 x ~@2 x ~ x ~ x!5 ~", H: "x!3 ~@2 x ~ x ~ x!3 ~@4", I: "x", J: "~@3 x", K: "x ~@6 x",
})).gain(0.08)

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

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  [~@9 x ~@6]!2
  [~@3 x]
  [~@3 x ~@4]
  [~ x ~ x!3 ~ x]
  [~ x ~@12 x ~]
  [~@5 x ~ x]
  [~ x ~@2]
  ~@171
>`).gain(0.94)

// drums · ride
const ride = s("rd").struct("<~ [~@7 x!2 ~@7] ~@2 [~@3 x!2 ~@11] ~@174>").gain(0.08)

// drums · bongos
const bongos = s("bongo:4").struct("<~ A@37 ~ A@28 ~@2 A@15 ~ A@37 ~ A@55 ~>".pickRestart({
  A: "~ x ~@2",
})).gain(1.68)

// drums · congas
const congas = s("conga:18").struct("<~ A@37 ~ A@27 ~@3 A@15 ~ A@37 ~ A@55 ~>".pickRestart({
  A: "~@6 x!2",
})).gain(2.05)

// drums · ht
const ht = s("ht").struct("<~@38 [~ x] ~@45 [~ x] ~@94>").gain(0.8)
// … 8 more lines

More by Ricky Martin