Strudelify

Contigo En La Distancia

Autor: Cesar Portillo De la Luz. Cuba

KeyG majorTempo70 bpm
0:00/0:00
// Contigo En La Distancia — Autor: Cesar Portillo De la Luz. Cuba
// 70 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5959927; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(70/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · electric bass finger · "Bajo eléctrico"
const bass = note(`<
  ~ A@8 B@2 C@8 D E F G H I@2 J H I K L M N O P H N O P Q N O P H R K L M N O P H N O P Q N O P S T@4
>`.pickRestart({
  A: "[~@5 g1@12 c2@6 f1@6 g1@12 c2@12 f#1@6 a#1@6 f1@6 e1@6 a1@12 d2@7]/8", B: "[~@5 g1@12 g1@6 b1]/2",
  C: "[~@4 a#1@6 a1@12 d2@12 g1@21 ~@3 a1@12 d2@12 g1@24 f#1@12 b1@12 e1@24 a1@38]/8", D: "a1 d#2", E: "d2",
  F: "d2 ~ a#1@2", G: "a1@3 a1@4 e2, ~@21 d#2 ~@2", H: "d2@3 d2 d2@4", I: "g1@3 g1 g1@4", J: "a1@3 a1@4 e2",
  K: "b1@6 b1@3 b1 b1@2", L: "e1@3 e1@5", M: "f#1@3 f#1 f#1@4", N: "b1@3 b1@5", O: "e1@3 e1 e1@4", P: "a1@3 a1@5",
  Q: "f1@3 f1 d2@4", R: "g1@3 g1@5", S: "d2@3 d2 f#1@4", T: "[~ g1@28 g1@24 g1@42 ~]/4",
})).s("gm_electric_bass_finger").gain(0.1).pan(0.4)

// other · soprano sax · "Violín2"
const soprano_sax = note(`<
  ~ A@4 B C D@4 E@8 F G@2 H I J@2 K L M N O P M@2 I Q O M R S O R T U V M O P M@2 I Q O M R S O R T W X@4
>`.pickRestart({
  A: "[~@5 d5@12 d5@6 b4@6 f#4@12 b4@6 g4]/4", B: "~ g4!2 g#4 a4!2 a#4 b4!2 c5 d5 e5 f#5@4 f#5@8",
  C: "~ g5@3 f#5@3 e5@3 e5@2 f5@4 f5@8", D: "[~ e5@3 d5@2 c5@2 b4@2 b4@24 b4@24 d5@36 f#4@2]/4",
  E: "[~@4 f4@6 c5@12 d5@12 d5@21 ~@3 e5@12 a4@12 d5@24 c5@12 b4@12 e4@21 ~@3 f#5@38]/8", F: "e5 a#4",
  G: "[a4@5 ~ e4@2]/2", H: "e5", I: "c5", J: "[g4@7 ~]/2", K: "e5@7 ~", L: "a4", M: "b4", N: "f#4@6 d#5@3 e5 f#5@2",
  O: "d5", P: "a#4", Q: "f#4", R: "g4", S: "d#5 f#4", T: "e4", U: "f#4 e4", V: "d4@7 ~", W: "f#4!2",
  X: "[~ d5@28 d5@24 d5@42 ~]/4",
})).s("gm_soprano_sax").gain(0.25)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~ A@8 B@2 C@8 D E@2 F G H@2 I J@3 K L M N O P Q R L S T U F V W J K L M N O P Q R L S T U F X Y@4
>`.pickRestart({
  A: "[~@5 b3@12 b4@6 g4@6 d4@12 g4@12 c#4@6 a#3@6 e4@6 b4@6 g4@12 g4@7]/8", B: "[~@5 b3@18 d4]/2",
  C: "[~@4 c#4@6 g4@12 a4@12 b4@21 ~@3 c4@12 f#3@12 b3@24 a4@12 d#4@12 b3@21 ~@3 c#4@38]/8", D: "c4 d#4",
  E: "[f#4@5 ~ c#4@2]/2", F: "c4", G: "e4 g4", H: "[b4@7 ~]/2", I: "c4@7 ~", J: "f#4", K: "b3", L: "e4",
  M: "~@5 d4 e4 f#4", N: "g#3", O: "~@5 c5 d5 e5", P: "f#4@3 ~@5", Q: "~@5 b4 c5 d5", R: "g#4@3 g#4 g#4@4", S: "c4 d4",
  T: "a3", U: "d4", V: "d4 e4", W: "b3@7 ~", X: "d4 d#4", Y: "[~ b3@28 b3@24 b3@42 ~]/4",
})).s("gm_tenor_sax").gain(0.25)

// other · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  ~ A@8 B@8 C@2 D E@2 F G H I J G K L K M G N K F@2 O F P Q R F S T L K M G N K F@2 O F P Q R F U V@4
>`.pickRestart({
  A: "[~@5 f#3@12 e3@6 d#3@6 b3@12 e3@12 e3@6 f#3@6 a3@6 g#3@6 a3@12 e3@7]/8",
  B: "[~@10 a3@36 a3@6 g#3@6 e3@12 f#3@12 g3@21 ~@3 a3@12 d3@12 g3@24 f#3@12 b3@12 b2@6 ~@3 e2@3 f#2@2]/8",
  C: "[~ g2@3 a2@3 b2@3 e3@4 ~ f#3@4 e3@3 f#3@6 ~@14 g#2@3 a2@3]/2", D: "a3!2", E: "[d3@5 ~ a#3@2]/2", F: "a3", G: "d3",
  H: "~@7 d3, ~@21 c#3 ~@2", I: "e3@3 b2 d3@4", J: "a3@7 ~", K: "g3", L: "d#3", M: "c#3", N: "g#3", O: "e3", P: "f3 a3",
  Q: "f#3", R: "b3", S: "a2 c3", T: "g3@7 ~", U: "a2 d#3", V: "[~ a3@28 f#3@24 a3@42 ~]/4",
})).s("gm_clarinet").gain(0.25)

// drums · kick
const kick = s("bd").struct(`<
  ~@22 A B@3 A B A C 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 ~@4
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x!2 ~@3", C: "x ~@8 x ~@2 x ~@3 x ~@3 x ~@3",
})).gain(0.09).pan(0.4)

// drums · rim
const rim = s("rim").struct("<~@22 A@7 B A@7 B A@7 ~ A@7 B A@5 B ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.09).pan(0.4)

// drums · snare
const snare = s("sd").struct("<~@29 [~@3 x!2 ~] ~@15 [x ~@5 x!6 ~@12] ~@18>").gain(0.09).pan(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@37 [~@9 x!2 ~ x ~@11] ~@7 [~@19 x!3 ~@2] ~@7 [~@9 x!2 ~ x ~@11] ~@10>")
  .gain(0.09).pan(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@22 A@7 B C A@7 C A@6 ~ C A@7 C A@4 B ~@4>".pickRestart({
  A: "x!8", B: "x!4 ~@4", C: "~ x!7",
})).gain(0.09).pan(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@22 A@7 B A@7 C A@7 D A@7 C A@5 ~@5>".pickRestart({
  A: "~@5 x ~ x", B: "~@18 x!2 ~@4", C: "~@15 x ~@2 x!2 ~ x ~@2", D: "~@12 x!7 ~@5",
})).gain(0.09).pan(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@29 [~@5 x] ~@34>").gain(0.09).pan(0.4)

// drums · crash
const crash = s("cr").struct("<~@30 A ~@7 A ~@6 B A ~@7 A ~@4 C ~@4>".pickRestart({
  A: "x", B: "~ x ~@6", C: "~ x",
})).gain(0.09).pan(0.4)

stack(bass, soprano_sax, tenor_sax, clarinet, kick, rim, snare, low_tom, hihat, mid_tom, high_tom, crash)