Strudelify

Amor que viene cantando

Francisco Codoñer Pascual

KeyG majorTempo120 bpm
0:00/0:00
// Amor que viene cantando — Francisco Codoñer Pascual
// 120 bpm, 2/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/41996; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 114 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/2)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D E F G H@2 B C D E I J K@7 L M@2 N O P@2 Q R S T U V W X Y Z AA AB AC AD AE AF@3 B AG AH AI AJ AK AL AM AN AO
  AP AQ AR AS AT AU B AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU B AG AH AI AJ AK AL AM AN AO AP AQ AR AS AV@2 AW AX
  AY AZ BA BB BC@2 BD BE BF BG BH AQ AR AS BI BJ BK
>`.pickRestart({
  A: "~@2 b4 c#5 d#5 e5 f#5 g5", B: "a5@3 g#5", C: "a5@2 b5 a5 g5@2 f#5@2", D: "g5@3 f#5", E: "g5@2 a5 g5 f#5@2 e5@2",
  F: "f#5@3 d#5", G: "f#5@2 g5 f#5 e5@2 d#5@2", H: "[e5@2 d5 c5 b4@6 b4 c#5 d#5 e5 f#5 g5]/2", I: "f#5@8 c6 b5@7",
  J: "~@4 a5 b5 ~ a5 g5@4 f#5@4", K: "[e5@25 ~ g#5 a5]/7", L: "b5 g#5 a5 b5", M: "[a5 b5 c6@14]/2", N: "~@2 a5 c6",
  O: "b5 a5 g5 f5", P: "[f5 g5 ~ f5 e5@28]/2", Q: "~@2 a5 b5", R: "c6 e6!3", S: "d6@2 b5@2 ~@2 g5 a5", T: "b5 d6!3",
  U: "c6@2 a5@2 ~@2 f5 g5", V: "a5 c6 b5 a5", W: "g#5 a5 b5@6", X: "~@2 a5 g5", Y: "a5 g5 a5 g5", Z: "a5 g5@2 g5",
  AA: "c6@2 b5 a5 g5@2 f5@2", AB: "e5 ~ f5 e5", AC: "f5 e5 f5 e5", AD: "f5 e5@2 e5", AE: "a5@2 b5 a5 g#5@2 a5@2",
  AF: "[b5@10 ~ e5]/3", AG: "f#5 f#5@2 e5", AH: "c#5!2 a4 c#5", AI: "e5 f#5!3", AJ: "f#5 e5@2 g#5",
  AK: "f#5@12 g#5 f#5 ~ e5", AL: "d5@4 b4 a#4 b4 c#5", AM: "d5 e5 c#5 d5 b4@2 e5@2", AN: "g#5@3 f#5", AO: "e5 e5@2 d5",
  AP: "b4!3 c#5", AQ: "d5 e5!3", AR: "e5 d5@2 f#5", AS: "e5@12 f#5 e5 ~ d5", AT: "c#5@4 c#5 b4 c#5 d5",
  AU: "e5 f#5 d5 e5 c#5@2 e5@2", AV: "[c#5@12 a5!4]/2", AW: "a5@2 g#5!2 g#5@2 f#5!2", AX: "f#5 e5 f#5 a5",
  AY: "g#5 a5 ~ g#5 f#5@2 e5@2 d5@8", AZ: "~@4 g#5!4", BA: "g#5@2 f#5!2 f#5@2 e5!2", BB: "e5 d5 e5 g#5",
  BC: "[a5@20 c6@4 b5 c6 ~ b5 a5 g5 ~ f5]/2", BD: "e5 g#5", BE: "a5 c6", BF: "b5@2 g#5 a5", BG: "b4!2 ~@2",
  BH: "~@2 b4 c#5", BI: "c#5", BJ: "~@4 [a4,c#5,e5,a5]!4", BK: "[a4,c#5,e5,a5] ~",
})).s("gm_acoustic_guitar_steel").gain(0.3)

// chords · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note(`<
  ~ A@2 B@2 C@2 B D A@2 B@2 E ~ F G F G F@2 H F G@4 F@2 I J K@2 L@2 F I M@2 G I N@2 O F P Q R@6 S@8 R@8 S@8 R@8 S@8 R T
  R@2 S@4 R U F G H V ~ W@3 X@2 U
>`.pickRestart({
  A: "a2 [a3,c4,e4] e2 [a3,c4,e4]", B: "e2 [g3,b3,e4] b2 [g3,b3,e4]", C: "b2 [a3,b3,f#4] f#2 [a3,b3,f#4]",
  D: "[e2,b2,g3,b3,e4] ~", E: "b2 [a3,b3,f#4]", F: "e2 [g#3,b3,e4] b2 [g#3,b3,e4]", G: "f2 [a3,c4,f4] a2 [a3,c4,f4]",
  H: "[e2,b2,g#3,b3,e4] ~", I: "[e2,b2,e3,g#3,b3,e4] ~", J: "[a2,e3,a3,c4,e4] ~", K: "[g2,b2,d3,g3,b3,g4] ~",
  L: "[a2,c3,f3,a3,c4,f4] ~", M: "d3 [g3,b3,f4] g2 [g3,b3,f4]", N: "d3 [a3,d4,f4] a2 [a3,d4,f4]",
  O: "f3 [a3,c4,f4] f2 [a3,c4,f4]", P: "[e2,b2,e3,g#3,b3,e4] b2", Q: "e2 ~ e2@2 f#2@2 g#2@2",
  R: "a2 [a3,c#4,e4] e2 [a3,c#4,e4]", S: "e2 [g#3,d4,e4] b2 [g#3,d4,e4]", T: "a2 ~", U: "[a2,e3,a3,c#4,e4] ~",
  V: "[e2,b2,g#3,b3,e4]!2 ~@2", W: "[e2,b2,g#3,b3,e4]/3", X: "[[a2,e3,a3,c#4,e4]@12 [a2,e3,a3,c#4,e4]!4]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.3)

stack(acoustic_guitar_steel, acoustic_guitar_nylon)