Strudelify
Te Extrano, Te Olvido, Te Amo cover art

17

Te Extrano, Te Olvido, Te Amo

Ricky Martin

KeyA majorTempo65 bpm
0:00/0:00
// Te Extrano, Te Olvido, Te Amo — Ricky Martin
// 65 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 66 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(65/4)

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

// bass · electric bass finger · "Fingered Bass"
const bass = note(`<
  ~ A B C D A E F D G H I J K L C D M N O P Q E F R S T U V A E F D G H I J K L C D M N O P Q E F W M N O P Q E F W M N
  O P Q E F W ~
>`.pickRestart({
  A: "d2@3 e1 f#1@3 a1", B: "b1@6 e1 f#1 a1@6 e1 f#1", C: "g1@3 g1 e1@3 g1", D: "a1@7 c#2", E: "b1@3 f#1 a1@3 e1",
  F: "g1@3 g1 f#1@3 f#1", G: "d2@3 a1 f#1@3 a1", H: "b1@3 f#1 a1@3 f#1", I: "g1@6 b1 g1 f#1@6 f#1@2", J: "a1@7 e1",
  K: "g1@3 e1 f#1@3 a1", L: "b1@6 b1 f#1 a1@6 e1@2", M: "d2@3 f#1 a1@3 a1", N: "b1@6 e1 f#1 a1@6 e1@2",
  O: "g1@3 e1 f#1@3 f#1", P: "g1@6 b1 g1 a1@6 b1 c#2", Q: "d2@6 e1 f#1 a1@6 a1@2", R: "g1@3 g1 a1@3 f#1",
  S: "g1@3 g1 a1@3 a1", T: "b1@3 e1 f#1@3 f#1", U: "e1@3 e1 g1@3 g1", V: "a1", W: "g1@3 g1 a1@3 ~",
})).s("gm_electric_bass_finger").gain(0.28)

// chords · acoustic guitar steel · "Steel String"
const acoustic_guitar_steel = note(`<
  ~ A B C D A E F G H I J K L E M K N O F P Q R L S T U V D A E F G H I J K L E M K N O F P Q R L S N O F P Q R L S N O
  F P Q R L S ~
>`.pickRestart({
  A: "a3@3 a3 a3@3 a3, [f#3,d4] [f#3,c#4]", B: "f#3@3 f#3 ~@3 e3, [b3,d4] [a3,c#4,e4]", C: "[g3,b3,d4] [e3,g3,b3]",
  D: "[e3,a3,c#4]", E: "b3@3 b3 a3@3 a3, [f#3,d4] [c#4,e4]", F: "g3@3 g3 f#3@3 f#3, [b3,d4] [a3,c#4]",
  G: "~@7 e3, [a3,c#4,e4]", H: "[f#3,a3,d4]@4 c#4@2 ~ a3, ~ f#3, ~@4 a3@3 ~, ~@3 c#4",
  I: "f#3@3 f#3 e3@3 e3, [b3,d4] [a3,c#4]", J: "g3@3 g3 [f#3,a3,c#4]@4, [b3,d4] ~", K: "e3@7 e3, [a3,c#4]",
  L: "g3@3 g3 a3@3 a3, [b3,d4] [f#3,c#4]", M: "[g3,b3,d4]@4 g3@3 g3, ~ [b3,e4]",
  N: "d4@3 d4 a3@3 a3, [f#3,a3] [c#4,e4]", O: "[f#3,b3,d4]@4 a3@3 a3, ~ [c#4,e4]",
  P: "g3@3 g3 c#4@2 ~ a3, [b3,d4] e3, ~@4 a3@3 ~, ~@3 c#4", Q: "f#3@3 f#3 a3@3 a3, [a3,d4] [c#4,e4]",
  R: "f#3@3 f#3 a3@3 a3, [b3,d4] [e3,c#4]", S: "g3@3 g3 a3@3 a3, [b3,d4] [e3,c#4]",
  T: "g3@3 g3 e3@3 e3, [b3,d4] [a3,c#4]", U: "[f#3,b3,d4]@4 f#3@3 f#3, ~ [a3,c#4]",
  V: "e3@3 e3 g3@3 g3, [g3,b3] [b3,d4]", // G Bm
})).s("gm_acoustic_guitar_steel").gain(0.59).pan(0.2)

// chords · piano · "Electric Piano"
const piano = note(`<
  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 Z AA AB AC F G H I J K L M N O P Q R S T U V W X Y R S T U V W X Y R
  S T U V W X Y ~
>`.pickRestart({
  A: "~@14 e5 a5, ~@3 a4, ~@13 d5@2 ~",
  B: "~@4 d5@2 e5 d5 c#5@4 ~@2 f#3@2, [d4,f#4]@2 ~ c#5, [a4,f#5]@5 ~@3 [f#4,a4,e5]@8, ~ d3@5 ~@2 f#2@6 ~@2", // D F#m7
  C: "~@4 e5 ~ b3 ~@3 a3@2 ~ e5 ~ e3, [b2,f#4,b4] [a2,e4,c#5], d5@3 f#3@3 ~@10, ~@2 b3@3 d5@3 a4@4 a4@4", // B5 A
  D: "~@2 g3@3 ~ d3 ~@5 e5@2 ~ g4, [g4,b4,d5]@9 e4@7, g2@7 ~ [e2,g4]@6 e3@2, ~@11 b4@5", // G Em
  E: "c#5@5 ~ a4@2, e4, a4@3 ~, a2@5 ~@5 c#5@6", F: "a4 ~@2 d4 a4@3 a4, d5 ~, f#4!2 [f#4,c#5]@2, ~ a4@3 ~@4",
  G: "f#4 ~ d4 f#4 a4@3 a4, [b4,d5] ~, ~ f#4@2 ~ [e4,c#5]@4", H: "g4@3 g4 a4@2 ~ f#4, [b4,d5] c#5, ~@4 f#4@3 ~, ~@3 a4",
  I: "c#5@6 ~ a4, e4, a4@7 ~, ~@3 c#5", J: "~@3 d4 a4@3 a4, [f#4,a4,d5] [f#4,c#5]",
  K: "f#4@2 ~ d4 a4 ~@2 e4, [b4,d5] c#5, ~@2 f#4@2 e4@3 ~, ~@5 a4@3", L: "g4@3 g4 f#4@3 f#4, [d4,b4] [a4,c#5]",
  M: "a4@6 ~ e4, c#5, e4@7 ~, ~@3 a4", N: "b4 ~@2 d4 a4 ~@2 a4, d5@2 c#5!2, g4!2 f#4@2, ~ b4@3 ~ a4@2 ~",
  O: "~@3 d4 c#5@2 ~ a4, [f#4,b4,d5] e4, ~@4 a4@3 ~, ~@3 c#5", P: "~@3 d4 b4@2 ~ g4, [g4,b4,d5] e4, ~@4 g4@3 ~, ~@3 b4",
  Q: "c#5@5 ~@2 e4, e4@7 ~, a4@3 a4, ~@5 c#5@3", R: "d4@2 d4@2 a4@2 ~ e4, [f#4,a4] c#5, ~@4 e4@3 ~, ~@3 a4",
  S: "~ d5 ~ f#4 [e4,a4,c#5]@4, d4 ~, f#4@3 ~@5, b4!2 ~@2", T: "d4@3 d4 c#5@2 ~ a4, [g4,b4] f#4, ~@4 a4@3 ~, ~@3 c#5",
  U: "g4@2 ~ d4 c#5@2 ~ a4, [b4,d5]@4 a4@3 ~, ~ g4 e4@2, ~@3 c#5", // Bm
  V: "a4@2 ~ f#4 c#5 ~@2 e4, d5@4 ~ c#5@3, f#4@3 ~ e4@3 ~, ~ a4!3",
  W: "f#4@2 ~ d4 e4@3 e4, b4 [a4,c#5], d4@3 ~@5, ~ f#4 ~@2", X: "g4 ~@2 d4 f#4@3 f#4, [b4,d5] [a4,c#5], ~ g4@3 ~@4",
  Y: "~ d5 ~ g4 e4 ~@2 e4, d4@4 ~ e4@2 ~, g4@3 ~ a4@2 a4@2, b4!2 c#5@2",
  Z: "~ d5 ~ g4 c#5 ~@2 e4, d4@4 e4@3 ~, g4@3 ~ a4@2 a4@2, b4@2 b4@2 ~ c#5@3",
  AA: "b4 ~ d5 b4 f#4@3 f#4, [d4,f#4] ~, ~ b4@2 ~ [a4,c#5]@4", AB: "b4@3 b4 g4@3 g4, [e4,g4] [b4,d5]",
  AC: "[e4,a4,c#5]", // A
})).s("gm_piano").gain(0.59).pan(0.7)

// chords · string ensemble 2 · D B D G A
const string_ensemble_2 = note(`<
  ~
  [[d4,f#4]@7 ~ f#4@6 ~@2, a4]
  [[b2,b3]@4 ~@3 c#5, [d4,f#4]@10 e4@5 ~, ~ a2, ~@3 a4]
  [[g2,g4]@7 ~@5 e5@4, b4@3 ~, ~@7 g4@6 ~@3, ~ e2, ~@4 e4@3 ~]
  [[a2,a4,c#5]@15 ~]
  ~@61
>`).s("gm_string_ensemble_2").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@14 A@6 B A@19 ~ A@3 B A@7 B A@7 B A@4 ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "~ x!2 ~ x!2 ~@2",
})).gain(0.8)

// drums · rim
const rim = s("rim").struct("<[x!3 ~] ~@13 [~ x ~ x]!3 ~@12 [~ x ~ x]!11 [~@3 x] ~@25>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@17 A@3 B A@8 ~@12 A@3 B A@7 B A@7 B A@4 ~>".pickRestart({
  A: "~ x ~ x", B: "x ~@2 x",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@40 [~@4 x ~@3 x!2 ~ x ~ x!2 ~] ~@25>").gain(0.8)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@40 [x!2 ~@2] ~@25>").gain(0.8)

// drums · open hat
const open_hat = s("oh").struct("<~@13 [~@7 x] ~@14 x ~@37>").gain(0.72)

// drums · high tom
const high_tom = s("ht").struct("<~@16 A ~@3 B ~@7 C ~@11 A ~@3 B ~@7 B ~@7 B ~@5>".pickRestart({
  A: "~@13 x ~ x", B: "x ~@2 x ~@4", C: "~@14 x!2",
})).gain(0.8)

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

stack(
  bass, acoustic_guitar_steel, piano, string_ensemble_2, kick, rim, snare, low_tom, hihat, mid_tom, open_hat, high_tom,
  splash
)

More by Ricky Martin