Strudelify

por una cabeza

C.Gardel

KeyG majorTempo120 bpm
0:00/0:00
// por una cabeza — C.Gardel
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 2) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5983807; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 97 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// chords · violin
const violin = note(`<
  A B C D E F G H I B J K L M N O P Q R S T U V W X Y Z AA AB U AC AD AE AF AG AH AI@3 AJ AK AL AM AN AO AP AQ AR AS AT
  AU AV AW AX AY AZ BA AT AU AV AW AX AY BB BC BD BE BF BG BH BI BJ BK BD BL BM BN BO BP BQ P BR BS BT BU BV BW BX BY BZ
  CA CB CC CD CE CF CG
>`.pickRestart({
  A: "~@4 b4 c5 c#5 d5", B: "e5 d5 ~@2 c#5 d5 e5 f#5", C: "a5 g5 ~@2 b5 c6 a5 b5",
  D: "g5@2 a5@2 f#5@2 g5@2 f#5 f#5@5 d5@2, ~@9 g5 ~@6", E: "c5@2 ~@2 c6 b5 d6 c6", F: "a5@2 ~@2 a5 g#5 b5 a5",
  G: "f#5@2 ~@2 f#5 g5 g#5 a5", H: "b5 a5 f#5 d5 d#5 f#5 e5 c5", I: "b4@2 ~@2 b4 c5 c#5 d5", J: "a5 g5 ~@2 g5 a5 b5 g5",
  K: "a5@2 g5@2 a5@2 b5@2 a5 a5@5 g5@2, ~@9 b5 ~@6", L: "e6@2 ~@2 a5 g5 e5 c5", M: "b4 a4 b4 c5 d#5 g5 f#5 d#5, g4 d#4",
  N: "g5 d5 ~@2 g5 a5 b5 g5, d4 ~", O: "a5@2 a5@2 f#5 g5 a5 f#5, a4 d4", P: "[d4,g5]@3 ~",
  Q: "~@4 a#5@4 a#5@3 c6@2 d6@3, g4 a#4", R: "[f4,d6] [d4,a5]", S: "~@4 g5@4 g5@3 a5@2 a#5@3, g4 a#3",
  T: "[d4,a#5] [a#3,f5]", U: "d#4@4 [c4,d#5]@4 d#5@3 f5@2 g5@3, ~ c5", V: "g5@4 g5 a5 a#5 g5, a#4",
  W: "a5@2 a5@2 g5 a5 a#5 g5, g4 a4", X: "[g4,a#5] [f#4,a5]", Y: "~@4 a#5@4 a#5@3 c6@2 d6@3, g3", Z: "[a4,d6] [d4,a5]",
  AA: "~@4 g5@4 g5@3 a5@2 a#5@3, a#3", AB: "[f4,a#5] [a#3,f5]", AC: "g5@4 g5 a5 a#5 g5, d4",
  AD: "a5@2 a5@2 f#5 g5 a5 f#5, g4 f#4", AE: "[d4,g5]@2 ~@2 [b3,g5] [c4,f#5] [c#4,e5] [d4,d5]",
  AF: "e4 d4 ~@2 [c#4,e5] [d4,d5] [e4,b4] [f#4,g4], b4 ~@3", AG: "a4 g4 ~@2 [b4,d5] [c5,e5] [a4,c5] [b4,d5], d4 ~@3",
  AH: "[g4,b5]@2 [a4,f#5]@2 [f#4,a5]@2 [g4,g5]@2 d5 d5@5 [d4,b4]@2, ~@4 f#4@3 ~, ~@9 e5 ~@6", // G D F#m G
  AI: "[c5 b4 c5 d5 c5 b4 d5 c5 ~ d#5 f#5 e5 a4 g#4 b4 a4 ~ b4 d5 c5 [f#4,a4] [g4,a#4] [g#4,b4] [a4,c5], c4@2 ~@2 e5@5 ~@7 f#4@2 ~@6, ~@8 a4@2 ~@2 c5@5 ~@7]/3", // F#m Gm G#m Am
  AJ: "b4 a4 f#4 [d4,e5] d#4 f#4 e4 [c4,b4], f#5@3 ~ c5@3 ~", AK: "d5 c#5 c5 b4 b3 c4 c#4 d4, b3@2 ~@2 d5@3 ~",
  AL: "[e4,b5] [d4,d6] c#6 d6 [c#4,e6] [d4,d6] [e4,b5] [f#4,a5]", // E5 D C#m D E5 F#m
  AM: "[a4,g5] [g4,b4] c5 c#5 [g4,d5] [a4,d5] [b4,d#5] [g4,e5]", // A7 G G5 D5 B C
  AN: "a4 g4 a4 b4 ~ e6 c#6 [g4,d6], f5@2 f6@3 ~@3, ~@4 a4@3 ~", AO: "e6 b5 c6 d6 a4 g4 e4 [c4,f#6], e5@2 ~@2 e6@3 ~",
  AP: "b3 a3 b3 c4 [d#4,c6] [g4,d#6] [f4,d6] [d#4,c6], g6 ~", AQ: "[g4,b5] d6@2 b5 g4 a4 b4 g4, ~ d4 ~@2 d6@2 d5@2",
  AR: "a4@2 a4@2 f#4 g4 a4 f#4, e5 a5", AS: "[g4,b4,g5]@3 ~", AT: "~@4 a#5@4 a#5@3 c6@2 d6@3, g4", AU: "d6 a5, f4",
  AV: "~@4 g5@4 g5@3 a5@2 a#5@3, d#4", AW: "a#5 f5, d4", AX: "~@4 d#5@4 d#5@3 f5@2 g5@3, c4",
  AY: "g5@4 g5 a5 a#5 g5, a#3", AZ: "a5@2 a5@2 g5 a5 a#5 g5, a3", BA: "[a3,a#5] [d4,a5]",
  BB: "a5@2 a5@2 f#5 g5 a5 f#5, e4 d4", BC: "[d4,g5]@2 ~@2 b4 c5 c#5 d5",
  BD: "e5@2 g3 b3 d4@2 d4@2 c#5@2 [b3,d4,d5]@2 e5@2 [b3,d4,f#5]@2, ~ d5 ~@6", // Bm
  BE: "a5@2 g3 b3 d4@2 d4@2 b5@2 [b3,d4,c6]@2 a5@2 [b3,d4,b5]@2, ~ g5 ~@6", // Bm
  BF: "g5@2 g3 b3 [d4,f#5]@2 [d4,g5]@2 f#5 g5 [b3,d4]@2 ~@2 [b3,d4,d5]@2, ~@2 a5@2 ~@5 f#5@5 ~@2", // D G5 Bm
  BG: "~@2 a3 c4 e4@2 e4@2 c6@2 [c4,e4,b5]@2 d6@2 [c4,e4,c6]@2, c5 ~@3", // Cmaj7 C
  BH: "~@2 a3 c4 e4@2 e4@2 a5@2 [c4,e4,g#5]@2 b5@2 [c4,e4,a5]@2, a5 ~@3", // Caug Am
  BI: "~@2 a3 c4 d4@2 d4@2 f#5@2 [c4,d4,g5]@2 g#5@2 [c4,d4,a5]@2, f#5 ~@3", // Csus2 D7
  BJ: "b5@2 a3 c4 [d4,f#5]@2 [d4,d5]@2 d#5@2 [c4,d4,f#5]@2 e5@2 [c4,d4,c5]@2, ~ a5 ~@6", // D D7 Csus2
  BK: "~@2 g3 b3 d4@2 d4@2 b4@2 [b3,d4,c5]@2 c#5@2 [b3,d4,d5]@2, b4 ~@3", // Bm
  BL: "a5@2 g3 b3 d4@2 d4@2 g5@2 [b3,d4,a5]@2 b5@2 [b3,d4,g5]@2, ~ g5 ~@6", // Bm7 G
  BM: "a5@2 g3 b3 [f4,a5]@2 [f4,b5]@2 a5 b5 [b3,f4]@2 ~@2 [b3,f4,g5]@2, ~@2 g5@2 ~@5 a5@5 ~@2", // F Fdim Bdim G7
  BN: "~@2 g3 c4 e4@2 e4@2 a5@2 [g3,e4,g5]@2 e5@2 [g3,e4,c5]@2, e6 ~@3", // C
  BO: "b4@2 g3 c4 [e4,b4]@2 [e4,c5]@2 d#5@2 [g3,d#4,g5]@2 f#5@2 [g3,d#4,d#5]@2, ~ a4 ~@6", // E5 C Cm
  BP: "g5@2 g3 b3 d4@2 d4@2 g5@2 [b3,d4,a5]@2 b5@2 [b3,d4,g5]@2, ~ d5 ~@6", // Bm7 G
  BQ: "~@2 a3 c#4 e4@2 e4@2 f#5@2 [c4,d4,g5]@2 a5@2 [c4,d4,f#5]@2, a5!2 ~@2", BR: "~@4 d4@4 d4@3 g4@2 a#4@3",
  BS: "~@4 a5@4 a5@3 g5@2 f5@3, a4 d5", BT: "~@4 d#5@4 d#5@3 d#5@2 d#5@3, g5!2", BU: "f5@4 f5@4 f5@3 d#5@2 d5@3, ~ a#4",
  BV: "~@4 g4@4 g4@3 c5@2 d#5@3, d#5@8 d#5@5 ~@3", BW: "d5@4 d5@4 d5@3 c5@2 a#4@3", BX: "[c#5,e5]",
  BY: "[c#5,e5] [c5,f#5]", BZ: "g5@4 a#4@4 a#4@3 c5@2 d5@3", CA: "a5@4 a6@4 a6@3 g6@2 f6@3, d5 a4",
  CB: "~@4 g4@4 g4@3 a4@2 a#4@3, g6!2", CC: "~@4 f6@4 f6@3 d#6@2 d6@3, a#4 f4", CD: "~@4 d#4@4 d#4@3 f4@2 g4@3, d#6!2",
  CE: "d6@4 d5@4 [g4,d5]@2 ~@2 a#4 ~ g4@2, g4@8 ~@2 a4@2 ~ a#4@3, ~@11 c5@3 ~@2", CF: "[c#5,e5] [c5,d5]",
  CG: "[b4,d5] ~@3", // Bm
})).s("gm_violin").gain(0.25)

// chords · pizzicato strings
const pizzicato_strings = note("<~ A@2 B C@2 D@2 A@3 E F ~@83 G>".pickRestart({
  A: "g4 [b4,d5] ~ d4", B: "g4 [b4,d5] ~ g#4", C: "a4 [c5,e5] ~ e4", D: "d4 [c5,d5] ~ a4", E: "g4 [g4,f5] ~ [g4,f5]",
  F: "[g4,e5]!2 ~@2", G: "~ [b4,d5,g5,b5]",
})).s("gm_pizzicato_strings").gain(0.25)

// other · viola
const viola = note(`<
  ~@13 A B C D E F G H I J K L M C N O I P L Q ~@16 R S T P U N V W R S T P U N X Q Y@3 Z@2 AA@2 Y@3 AB AC AD Y AE D AF
  W AG O AH P AI AJ AK AL AM AN AO AP AQ AR
>`.pickRestart({
  A: "g4 d#4", B: "d4 ~", C: "a4 d4", D: "d4@3 ~", E: "g4 a#4", F: "f4 d4", G: "g4 a#3", H: "d4 a#3", I: "d#4 c4 c5@2",
  J: "a#4", K: "g4 a4", L: "g4 f#4", M: "g3", N: "a#3", O: "f4 a#3", P: "d4", Q: "d4 ~@3", R: "g4", S: "f4", T: "d#4",
  U: "c4", V: "a3", W: "a3 d4", X: "e4 d4", Y: "~@2 g3 b3 d4@2 d4@2 ~@2 [b3,d4]@2 ~@2 [b3,d4]@2",
  Z: "~@2 a3 c4 e4@2 e4@2 ~@2 [c4,e4]@2 ~@2 [c4,e4]@2", AA: "~@2 a3 c4 d4@2 d4@2 ~@2 [c4,d4]@2 ~@2 [c4,d4]@2",
  AB: "~@2 g3 b3 f4@2 f4@2 ~@2 [b3,f4]@2 ~@2 [b3,f4]@2", AC: "~@2 g3 c4 e4@2 e4@2 ~@2 [g3,e4]@2 ~@2 [g3,e4]@2",
  AD: "~@2 g3 c4 e4@2 e4@2 ~@2 [g3,d#4]@2 ~@2 [g3,d#4]@2", AE: "~@2 a3 c#4 e4@2 e4@2 ~@2 [c4,d4]@2 ~@2 [c4,d4]@2",
  AF: "~@4 d3@4 d3@3 g3@2 a#3@3", AG: "~@4 d#4@4 d#4@3 d#4@2 d#4@3", AH: "~@4 g3@4 g3@3 c4@2 d#4@3", AI: "e4",
  AJ: "e4 f#4", AK: "g5@4 a#4@4 a#4@3 c5@2 d5@3", AL: "d5 a4", AM: "~@4 g4@4 g4@3 a4@2 a#4@3", AN: "a#4 f4",
  AO: "~@4 d#4@4 d#4@3 f4@2 g4@3", AP: "g4@4 g4 a4 a#4 g4", AQ: "c#5 c5", AR: "b4 ~@3",
})).s("gm_viola").gain(0.25)

// chords · pizzicato strings
const pizzicato_strings_2 = note("<~ A@2 B C@2 D@2 A@3 E F ~@83 G>".pickRestart({
  A: "g3 [b3,d4] ~ d3", B: "g3 [b3,d4] ~ g#3", C: "a3 [c4,e4] ~ e3", D: "d3 [c4,d4] ~ a3", E: "g3 [g3,f4] ~ [g3,f4]",
  F: "[g3,e4]!2 ~@2", G: "~ b4",
})).s("gm_pizzicato_strings").gain(0.25)

// bass · cello
const bass = note("<~@13 [c2!2 ~ c2] [d2 ~] [e2 a2] ~@81>").s("gm_cello").gain(0.25)

// other · pizzicato strings
const pizzicato_strings_3 = note(`<
  ~ A@2 B C@2 D@2 A@3 E F ~@3 G@2 H I J K L M N G H I J K L O P Q@2 R S@2 T@2 Q@3 U V@2 W X G@2 H I J K L M N G H I J K
  L O P Q@2 R S@2 T@2 Q@3 U V@2 W X G@2 H I J K L M N G H I J K L Y Z
>`.pickRestart({
  A: "g2 g3 ~ d2", B: "g2 g3 ~ g#2", C: "a2 a3 ~ e2", D: "d2 f#3 ~ a2", E: "g2 b3 ~ b2", F: "c3!2 ~@2",
  G: "g2@3 d3 g3@2 d3@2", H: "f2@3 d3 a3@2 d3@2", I: "d#2@3 a#2 g3@2 a#2@2", J: "d2@3 a#2 f3@2 a#2@2",
  K: "c2@3 g2 d#3@2 g2@2", L: "d2@3 a#2 g3@2 a#2@2", M: "e2@3 a2 g3@2 c#3@2", N: "e3@2 d#3@2 d3 c3 a#2 a2",
  O: "a2@3 e3 d3@2 d2@2", P: "g2 ~@3", Q: "g2@2 ~@2 d2 ~ d2 ~", R: "g2@2 ~@2 g2 ~ g#2 ~", S: "a2@2 ~@2 e2 ~ e2 ~",
  T: "d2@2 ~@2 a2 ~ a2 ~", U: "g2@2 ~@2 g2 ~ b2 ~", V: "c3@2 ~@2 c2 ~ c2 ~", W: "d2@2 ~@2 d2 ~ d2 ~",
  X: "e2@2 ~@2 f#2 ~ f#2 ~", Y: "a2 d3", Z: "g2 d3 g3@2",
})).s("gm_pizzicato_strings").gain(0.4)

// bass · acoustic bass · "Contrabass"
const bass_2 = note(`<
  ~ A@3 B@2 C@2 A@4 D E F G A H I J K L K M N H I J K L K O A P@2 Q R@2 S@2 P@3 T U@2 V W A H I J K L K M N H I J K L K
  O A P@2 Q R@2 S@2 P@3 T U@2 V W A H I J K L K M N H I J K L K X Y
>`.pickRestart({
  A: "g1 ~@3", B: "a1 ~@3", C: "d2 ~@3", D: "c2!2 ~@2", E: "c2!2 ~ c2", F: "d2 ~", G: "e1 a1", H: "g1@3 ~@5",
  I: "f1@3 ~@5", J: "d#2@3 ~@5", K: "d2@3 ~@5", L: "c2@3 ~@5", M: "e1@3 ~@5", N: "e2@2 d#2@2 d2 c2 a#1 a1",
  O: "a1@3 ~@5", P: "g2@2 ~@2 d2 ~ d2 ~", Q: "g2@2 ~@2 g2 ~ g#2 ~", R: "a2@2 ~@2 e2 ~ e2 ~", S: "d2@2 ~@2 a2 ~ a2 ~",
  T: "g2@2 ~@2 g2 ~ b2 ~", U: "c3@2 ~@2 c2 ~ c2 ~", V: "d2@2 ~@2 d2 ~ d2 ~", W: "e2@2 ~@2 f#2 ~ f#2 ~", X: "a1 d2",
  Y: "g1 d2 g1@2",
})).s("gm_acoustic_bass").gain(0.25)

stack(violin, pizzicato_strings, viola, pizzicato_strings_2, bass, pizzicato_strings_3, bass_2)