Strudelify
Corazonado cover art

1998 · Vuelve

Corazonado

Ricky Martin

KeyA minorTempo67 bpm
0:00/0:00
// Corazonado — Ricky Martin
// 67 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 5/4 at bar 2, 4/4 at bar 4, 5/4 at bar 83, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 86 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/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 · "Bass"
const bass = note(`<
  ~@2 A B C D E F G H I E J K L M N O P Q P R P Q P S A B T U V W X Y Z AA AB AC AD AE AF AG P AH P AI P AH P R AD AE AF
  AG AJ AK AJ AL AJ AK AJ AM AJ AK AJ AL AJ AK AJ AM AJ AK AJ AN AJ AK AJ AO AP ~@3 AQ@3 ~
>`.pickRestart({
  A: "a1", B: "d2@10 ~ d2@2 g2@3", C: "a2", D: "d2", E: "g1@13 ~ g1@2", F: "e2@13 ~ e2@2", G: "a1@13 ~ e1@2",
  H: "a1@8 d2@6 a1 ~", I: "d1", J: "d2@13 ~ d2@2", K: "e1@13 ~ e2@2", L: "a2 e2", M: "a1@5 ~ a1@2 d2@8",
  N: "f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~ f1 ~", O: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~",
  P: "a1 ~ a1@5 ~ g1 ~ g1@5 ~", Q: "f1 ~ f1@4 f1@2 d1@4 e1@4", R: "d2 ~ d2@4 d2@2 e1@4 e1@4", S: "d2@5 ~ f2 ~ e2@8",
  T: "a2@7 c3@5 f3@4", U: "d3@9 ~ c2@2 b1@2 a1@2", V: "g1@9 ~ a2@2 g2 d2 g1@2", W: "e1@10 ~ d2 e2@2 g2 b2",
  X: "a2@4 e2@3 e2", Y: "a2@5 ~ e2@2 d2@8", Z: "d2@7 d2", AA: "g1@7 g1", AB: "d2@12 d2 f2@3", AC: "e2@3 e2",
  AD: "a1@3 a1 e2@4", AE: "a1 ~ a1@6 d2 ~ d2@6", AF: "f1!8", AG: "g1!8", AH: "f1 ~ f1@4 f1 ~ d1@4 e1@4",
  AI: "d2 ~ d2@4 d2@2 e1@4 e1!2 ~ e1", AJ: "a#1 ~ a#1@5 ~ g#1 ~ g#1@5 ~", AK: "f#1 ~ f#1@4 f#1@2 d#1@4 f1@4",
  AL: "d#2 ~ d#2@4 d#2@2 f1@4 f1!2 ~ f1", AM: "d#2 ~ d#2@4 d#2@2 f1@4 f1@4", AN: "d#2 ~ d#2@4 d#2 ~ f1@4 f1!2 ~ f1",
  AO: "d#2 ~ d#2@4 d#2 ~ f1@4 f1@4", AP: "a#2", AQ: "[~@3 a#1@7 ~@2]/3",
})).s("gm_fretless_bass").gain(0.45).pan(0.4)

// chords · piano · "Piano Chords"
const piano = note(`<
  ~@4 A B C D E F G C G D H F G C I J I K I J I K L B M B C N E F G C G O H F G C I J I K I J I K H F G C P Q P R P Q P
  R P Q P R P Q P R P Q P R P Q P R S@3 ~@5
>`.pickRestart({
  A: "[a3,c4,e4]!4", B: "[a3,d4,f4]!4", C: "[b3,d4,g4]!4", D: "[g#3,b3,d4]!4",
  E: "[a3,c4,e4] [a3,b3,c4,e4] [g#3,b3,c4,e4]!2", F: "[g3,b3,c4,e4]!2 [f#3,a3,c4]!2", G: "[a3,c4,d4,f4]!4",
  H: "[a3,b3,c4,e4]!2 [g#3,b3,c4,e4]!2", I: "[a3,c4,e4]!2 [g3,c4,e4]!2", J: "[a3,c4,e4]!2 [a3,c4,d4,f4] [g#3,b3,d4]",
  K: "[a3,c4,d4,f4]!2 [g#3,b3,d4]!2", L: "[a3,b3,c4,e4]!2 [a3,c4,e4]!2", M: "[a3,b3,c4,e4]!4", N: "[g3,b3,d4]!4",
  O: "[g#3,b3,d4]", P: "[a#3,c#4,f4]!2 [g#3,c#4,f4]!2", Q: "[a#3,c#4,f4]!2 [a#3,c#4,d#4,f#4] [a3,c4,d#4]",
  R: "[a#3,c#4,d#4,f#4]!2 [a3,c4,d#4]!2", // D#m7 Adim
  S: "[c#3@2 a#2@2 c3@2 c#3@2 c#3@2 a#2@2 ~ c3@2 ~@9 c3@2 ~@6 a#2@3 c3@13, ~@5 c#3@7 ~@4, ~@17 a3@9 ~ [c3,a3]@9 ~@12, ~@17 c3@5 a#2@10 ~@16, ~@19 a2@10 a2@6 ~@13]/3", // F
})).s("gm_piano").gain(0.22)

// chords · piano · "Piano Lead"
const piano_2 = note(`<
  A B C D@2 E@2 F ~@2 G ~@2 H ~@4 I@8 C J@2 K@2 F ~@2 G ~@2 H ~@4 I@8 ~@4 L@24 M@3 N O@4
>`.pickRestart({
  A: "~@9 a4 e5 a5 d5@2 g5@2", B: "~ f5@2 b4@2 e5@11, c5 ~@7",
  C: "~@15 c4, c5@7 d4, ~ e4@2 e4@3 f4@2, ~ a4@3, ~@8 f4@2 c4@3 e4@3",
  D: "[~@15 e4, ~ d4@2 a4@2 a4 a4@2, ~@3 e4@4 b4@4 ~@3 f4@2, ~@4 f4@4 ~@5 c4@3, ~@5 g4@4 ~@2 g4@5]/2",
  E: "[d4@2 ~@5 b4@9, ~ d4@2 a4 ~@4, ~@3 e4@5 ~@8, ~ f4 ~@2, ~@5 g4@3 ~@8]/2", F: "~@6 b4 d5", G: "~@4 [a4,c5]!4",
  H: "~@5 b4@3, b4@5 ~@3, ~ c5@2 c5@5, ~ d5@3", I: "[~@3 a5@3 ~ a5@3 ~ a5@3 ~ a5@3 ~ a5@3 ~ a5@3 ~ a5@3 ~@2]/4",
  J: "[~@15 e5, ~ d4@2 a4@2 a5 a5@2, ~@3 e4@4 b4@4 g5@5, ~@2 f4@2 ~@3 f5, ~@5 g4@4 ~@4 c5@3]/2",
  K: "[~@7 b4@9, d5@5 g4 a4@2 ~@8, ~ d4@3 ~@4, ~@3 e4@5 ~@8, ~ f4 ~@2]/2",
  L: "[~@3 a#5@3 ~ a#5@3 ~ a#5@3 ~ a#5@3 ~ a#5@3 ~ a#5@3 ~ a#5@3 ~@2]/4",
  M: "[~@6 c#4@2 ~@16 c4@2 ~@6 a#3@3 c4@13, c#4@6 ~@2 c#4@7 c#4@21 ~@12, ~@2 a#3@8 a#3@11 ~ a#3@10 ~@16, ~@4 c4@9 c4@4 c4@7 ~@3 c4@8 ~@13, ~@19 a3@10 a3@6 ~@13]/3",
  N: "a#4 f5 ~ a#5 d#5@2 ~ g#5@2 c#5@2 f#5@2 c5@3",
  O: "[~ f5@11 ~@14 [a#0,a#3]@32 ~@6, ~@7 d#3 a#3@2 a#3@3 ~@19, ~@15 f3@2 d#3@5 d#3@32 ~@10, ~@9 f3@3 f3@16 ~@4]/4", // A#
})).s("gm_piano").gain(0.25).pan(0.6)

// chords · string ensemble 2 · "Low Strings"
const string_ensemble_2 = note(`<
  ~ A B@2 C@2 D@2 E@2 F G F H E@2 ~ I J@2 K@2 J@2 K@2 C@4 L@2 E@2 F G F H M@2 ~ I J@2 K@2 J@2 K@2 M@2 ~ I N@2 O@2 N@2
  O@2 N@2 O@2 N@2 O@2 N@2 O@2 N@2 O@2 P@3 Q@4 ~
>`.pickRestart({
  A: "~@3 g3@13", B: "[e4 f4 [d2,d4,f4]@2, [a3,c4], a2 ~]/2", C: "[[a2,e4] [d2,d4,f4], [a3,c4]]/2",
  D: "[g4 g#3, [b3,d4]]/2", E: "[a3 g#3 g3 [a3,d4,f#4], [c4,e4]@3 ~]/2", F: "[a3,c4,d4,f4]", G: "[b3,d4,g4]",
  H: "[g#3,b3,d4]", I: "[b3,g4]", J: "[a3@2 g3@2 f3@2 [d3,f4] [e3,g#3,d4], c4@7 ~, e4@3 ~, ~@4 a3@3 ~]/2",
  K: "[a3@2 g3@2 [a3,d4,f4]@2 [g#3,b3,d4] [e3,g#3,e4], c4@3 ~, e4 ~]/2", L: "[g4 g3, [b3,d4]]/2",
  M: "[a3 g#3 g3 [a3,d4,f#4], [b3,c4,e4]@3 ~]/2", // D Cmaj7
  N: "[a#3@2 g#3@2 f#3@2 [d#3,f#4] [f3,a3,d#4], c#4@7 ~, f4@3 ~, ~@4 a#3@3 ~]/2", // D#m F7
  O: "[a#3@2 g#3@2 [a#3,d#4,f#4]@2 [a3,c4,d#4] [f3,a3,f4], c#4@3 ~, f4 ~]/2", P: "[f3@23 ~]/3",
  Q: "[~@13 g#3@15 a#3@28 ~@8]/4",
})).s("gm_string_ensemble_2").gain(0.09).pan(0.6)

// chords · acoustic guitar nylon · "Acoustic Guitar"
const acoustic_guitar_nylon = note("<~@2 A B C D ~@20 A B C D ~@52 E@3 ~>".pickRestart({
  A: "~@6 c4@2 c4@3 c4 f4 e4 d4 c4", B: "e4 d4@7", C: "~@3 c4@5, a2, ~ e3@7, ~ a3@3", D: "~ d4@3, d3, ~ a3@7",
  E: "[~@13 f5@28 ~@7, ~@3 [a#3,f4]@7 ~@2]/3", // A#5
})).s("gm_acoustic_guitar_nylon").gain(0.19).pan(0.2)

// chords · electric guitar clean · "Electric Guitars"
const electric_guitar_clean = note("<~@14 A@2 ~@70>".pickRestart({
  A: "[~@3 c4@2 ~@2 c4@2 ~@3 a3@4, a2@4 ~@7 c4@2 ~@3, ~ e3@3 ~ e3@3 ~ e3@3 ~@4, ~ b3 ~ b3 ~ b3 ~@2]/2",
})).s("gm_electric_guitar_clean").gain(0.25).pan(0.8)

// chords · electric guitar jazz · "Electric AutoWah Guitar" · Dm
const electric_guitar_jazz = note("<~@34 [[d3,a3,d4,f4]] b5 ~@50>").s("gm_electric_guitar_jazz").gain(0.28)

// chords · drawbar organ · "Organ and Pads"
const drawbar_organ = note("<~@30 A@2 B@2 C D C E B@2 ~@46>".pickRestart({
  A: "[b4,d5]/2", B: "[[c5,e5]@3 [d5,f#5]]/2", C: "[d5,f5]", D: "[d5,g5]", E: "[b4,d5]",
})).s("gm_drawbar_organ").gain(0.11)

// drums · kick
const kick = s("bd").struct(`<
  ~@7 A@4 B@2 A C D E F G@3 H G@3 I A ~@2 J K@2 L M N K@2 B O C P@2 G@3 Q G@3 I G@2 P@2 G@3 Q G@3 R G@3 Q G@3 H G@3 Q
  G@3 H A ~@7
>`.pickRestart({
  A: "x", B: "x ~@6 x", C: "x!2 ~@2 x!2 ~@2", D: "x!2 ~ x!3 ~@2", E: "x ~@2 x!5", F: "x!2 ~@6",
  G: "x ~ x!2 ~@4 x ~ x!2 ~@4", H: "x ~ x!2 ~@4 x ~@7", I: "x ~ x!2 ~@4 x ~@2 x ~@4", J: "~@5 x!3",
  K: "x ~@2 x ~@7 x ~@4", L: "x ~ x ~@8 x ~@4", M: "x ~@2 x ~@4 x ~ x ~@5", N: "x ~@2 x ~@6 x ~@5",
  O: "x ~@2 x ~@2 x ~ x ~ x ~@5", P: "x!8", Q: "x ~@2 x ~@4 x ~@7", R: "x ~ x!2 ~@4 x ~@4 x ~@2",
})).gain(0.56)

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

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

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

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@16 A ~@4 B ~@15 C ~@7 B ~@3 B ~@3 D ~@3 B ~@3 D ~@3 E ~@3 D ~@3 B ~@3 F ~@8
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@13 x ~@2", C: "~@3 x", D: "~@7 x", E: "~@12 x!2 ~@2", F: "~@10 x ~@2 x ~@2",
})).gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@53 [~@7 x] ~@11 [~@11 x ~@4] ~@3 [~@9 x ~ x ~@4] ~@16>").gain(0.8)

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

// drums · ride
const ride = s("rd").struct("<~@54 A B A C A B@2 D E F E G E F E H E F E I E F E H ~@8>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!5 ~@3", D: "x!4 ~@4", E: "~ x ~ x!3 ~ x", F: "x!2 ~ x!3 ~ x", G: "x!2 ~ x!2 ~@3",
  H: "x!2 ~ x ~@4", I: "x!2 ~ x!3 ~@2",
})).gain(0.56)

stack(
  bass, piano, piano_2, string_ensemble_2, acoustic_guitar_nylon, electric_guitar_clean, electric_guitar_jazz,
  drawbar_organ, kick, snare, low_tom, hihat, mid_tom, high_tom, crash, ride
)

More by Ricky Martin