Strudelify

Donde Estas Yolanda

La Sonora Santanera

KeyE majorTempo132 bpm
0:00/0:00
// Donde Estas Yolanda — La Sonora Santanera
// 132 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (1/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: duplicate parts dropped: ch 6 "Trombone" trombone (copy of ch 2 "Tenor Saxophone" tenor sax)
// note: Transcription provider: pdmx. https://musescore.com/score/5952308; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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.

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@16 A B C D E B C D F G H I J G H K L B C D E B C D E B C D E B C D M ~@15 A B C D E B C D F G H I J G H K L B C D E
  B C D E B C D E B C D E B C D E B C D M ~@4
>`.pickRestart({
  A: "~@6 b4!2", B: "e5@2 b4!2 e5@3 b4", C: "a4@2 f#4@2 ~@2 b4!2", D: "d#5@2 b4!2 d#5@3 a4", E: "g4@2 e4@2 ~@2 b4!2",
  F: "g4 e4 ~ a4", G: "c5!2 a4!2 c5 c5@2 c5", H: "b4!2 g4!2 b4 b4@2 b4", I: "a4!2 f#4!2 a4 a4@2 a4",
  J: "g4 f#4 g4 a4 b4 b4@2 a4", K: "a4!3 b4 a4!3 e5", L: "e5 c5 b4 a4 b4@2 b4!2", M: "g4 e4 ~@2",
})).s("gm_alto_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B C D E B C D F G H@2 G@2 H@2 I G H@2 G@2 H@2 G J K L K J K L ~ G H@2 G@2 H@2 G@2 H@2 G@2 H@2 M B C D E B C D F G
  H@2 G@2 H@2 I G H@2 G@2 H@2 G J K L K J K L ~ G H@2 G@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 N O K P I
>`.pickRestart({
  A: "~@14 d2 d#2", B: "e2 ~ b2 ~ g2 e2 ~ d#2", C: "~ f#2 ~ c3 b2 ~@3", D: "f#2 ~ b2 ~ a2 f#2 ~ e2",
  E: "~ g2 ~ c3 b2 ~@3", F: "~ b2!7", G: "e2@2 b2 b2@2 b2@2 ~", H: "f#2@2 b2 b2@2 b2@2 ~", I: "e2@3 e2 ~@4",
  J: "a2@3 c3 e3@2 g2@2", K: "e2@3 g2 b2@2 b2@2", L: "f#2@3 a2 b2@2 f#2@2", M: "e2@4 b2@2 b2@4 b2@4 d2 d#2",
  N: "e2 f#2", O: "a2@3 c3 e3@2 a2@2", P: "f#2!2 ~@2 b2!2 ~@2",
})).s("gm_baritone_sax").gain(0.25)

// other · trumpet · "B♭ Trumpet"
const trumpet = note(`<
  ~@9 A B C D A B C E ~ F ~ G ~ F ~@6 H I J K ~ F ~ G ~ F ~@2 L M N O L M N O ~@8 A B C D A B C E ~ F ~ G ~ F ~@6 H I J
  K ~ F ~ G ~ F ~@2 L M N O L M N O ~ F ~ G ~ F ~@2 P Q R S
>`.pickRestart({
  A: "b4@2 e5 ~ e5 ~ g5 ~ g5@2 b5 ~ b5 ~ g5 ~", B: "g5@2 f#5 ~ f#5 ~ g5 ~ a5@4 ~@4",
  C: "b4@2 d#5 ~ d#5 ~ f#5 ~ f#5@2 a5 ~ a5 ~ f#5 ~", D: "f#5@2 e5 ~ e5 ~ f#5 ~ g5@4 ~@4", E: "e5@3 e5 ~@4",
  F: "~@2 f#4 ~ f#4 ~ b4 ~ b4 ~ d#5 ~ d#5@2 ~@2", G: "~@4 b4 a4 g4 a4 b4@2 ~@6", H: "a4@8 ~@2 c5 ~@3 b4 ~",
  I: "~ g4 a4 b4@4 ~", J: "a4 ~ c5@12 ~@2", K: "~ d#5 b4 d#5 e5@2 ~@2", L: "b4 e5 ~@2 b4 e5 ~@2",
  M: "~ f#4 ~ b4 ~ d#5 ~@2", N: "b4 d#5 ~@2 b4 d#5 ~@2", O: "~ e4 ~ b4 ~ e5 ~@2", P: "a4@2 c5 ~ c5 ~ a4 ~ e5@8",
  Q: "g4@2 b4 ~ b4 ~ g4 ~ e5@8", R: "c#5@2 c#5 ~@5 d#5@2 d#5 ~@5", S: "e5@6 e5 ~@9",
})).s("gm_trumpet").gain(0.3)

// other · trumpet · "B♭ Trumpet"
const trumpet_2 = note(`<
  ~@9 A B C D A B C E ~ F ~ G ~ F ~@6 H I J K ~ F ~ G ~ F ~@2 L M N O L M N O ~@8 A B C D A B C E ~ F ~ G ~ F ~@6 H I J
  K ~ F ~ G ~ F ~@2 L M N O L M N O ~ F ~ G ~ F ~@2 P@2 Q R
>`.pickRestart({
  A: "g4@2 b4 ~ b4 ~ e5 ~ e5@2 g5 ~ g5 ~ e5 ~", B: "e5@2 d#5 ~ d#5 ~ e5 ~ f#5@4 ~@4",
  C: "f#4@2 b4 ~ b4 ~ d#5 ~ d#5@2 f#5 ~ f#5 ~ d#5 ~", D: "d#5@2 b4 ~ b4 ~ d#5 ~ e5@4 ~@4", E: "b4@3 b4 ~@4",
  F: "~@2 d#4 ~ d#4 ~ f#4 ~ f#4 ~ b4 ~ b4@2 ~@2", G: "~@4 g4 f#4 e4 f#4 g4@2 ~@6", H: "c4@8 ~@2 e4 ~@3 e4 ~",
  I: "~ b3 d#4 e4@4 ~", J: "a4 ~ c5@12 ~@2", K: "~ d#4 b3 d#4 e4@2 ~@2", L: "e4 g4 ~@2 e4 g4 ~@2",
  M: "~ d#4 ~ f#4 ~ b4 ~@2", N: "f#4 b4 ~@2 f#4 b4 ~@2", O: "~ b3 ~ g4 ~ e4 ~@2", P: "e4@2 g4 ~ g4 ~ e4 ~ b4@8",
  Q: "e4@2 e4 ~@5 f#4@2 f#4 ~@5", R: "e4@6 e4 ~@9",
})).s("gm_trumpet").gain(0.3)

// chords · piano
const piano = note(`<
  A B C D E B C D F G H I J G H I K G H I J G H I J L M N O ~@4 G H I J G H I J G H I J G H I A B C D E B C D F G H I J
  G H I K G H I J G H I J L M N O ~@4 G H I J G H I J G H I J G H I J G H I J G H I P Q R S T
>`.pickRestart({
  A: "~@14 [d2,d4] [d#2,d#4]", B: "[e2,e4] ~ [b2,b4] ~ [g2,g4] [e2,e4] ~ [d#2,d#4]",
  C: "~ [f#2,f#4] ~ [c3,c5] [b2,b4] ~@3", D: "[f#2,f#4] ~ [b2,b4] ~ [a2,a4] [f#2,f#4] ~ [e2,e4]",
  E: "~@2 [g2,g4]@2 ~@2 [c3,c5]@2 [b2,b4]@2 ~@4 [d2,d4] [d#2,d#4]", F: "~ [b1,b3]!7",
  G: "[b3,b4]@2 [e4,g4,e5,g5] [c4,c5] ~ [e4,g4,e5,g5] ~ [b3,b4]", // B Em C Em B
  H: "~ [d#4,f#4,d#5,f#5,a5] ~ [c4,c5] [b3,b4]@2 [d#4,f#4,d#5,f#5,a5]@2", // D#dim C B D#dim
  I: "[b3,b4]@2 [d#4,f#4,d#5,f#5,a5] [c4,c5] ~ [d#4,f#4,d#5,f#5,a5] ~ [b3,b4]", // B D#dim C D#dim B
  J: "~ [e4,g4,e5,g5] ~ [c4,c5] [b3,b4]@2 [e4,g4,e5,g5]@2", K: "[b2,e3,e4,b4,e5]@3 [b2,e3,e4,b4,e5] ~@4",
  L: "[e4,a4,c5]@8 ~@2 [g3,b3,e4]@3 [b3,e4,g4]@3, [a2,a3]@15 ~", // Am Em A
  M: "[e4,g4,b4]@8 ~@2 [a3,c4,e4]@3 [b3,e4,g4]@3, [g2,g3]@15 ~", // Em Am Em G
  N: "[d#4,f#4,a4]@8 ~@2 [g3,b3,e4]@3 [a3,c4,f#4]@3, [f#2,f#3]@15 ~", // D#dim Em F#dim F#
  O: "[g3,b3,g4]@8 [c5,c#5] d5 b4@2 g#4@2 e4@2, [e2,e3]@15 ~", P: "[e3,f#3,a3,e4,f#4,a4] [d#3,f#3,b3,d#4,f#4,b4]",
  Q: "[e3,c4,e4,c5,e5]@3 [e3,a3,e4,a4,e5] [e3,b3,e4,g4,b4,g5]@2 [e3,b3,e4,g4,b4,g5]@2", // C A5 Em
  R: "[e3,g3,b3,e4,g4,b4]@3 [b2,f#3,b3,f#4,b4] [e3,b3,e4,b4,e5]@2 [e3,b3,e4,b4,e5]@2", // Em B5 E5
  S: "[f#3,c#4,f#4,c#5]!2 ~@2 [f#3,d#4,f#4,d#5]!2 ~@2", T: "[e3,e4,e5]@3 [e3,e4,e5] ~@4",
})).s("gm_piano").gain(0.3)

// drums · congas
const congas = s("conga:18").struct(`<
  A B C B D B C B ~ B@7 ~ B@8 ~@8 B@17 C B D B C B ~ B@7 ~ B@8 ~@8 B@26 E F
>`.pickRestart({
  A: "~@12 x!4", B: "~@4 x ~ x!2", C: "x ~ x!2 ~@4", D: "~@3 x ~ x ~@2 x ~@7", E: "x!2 ~@2 x!2 ~@2", F: "x ~@2 x ~@4",
})).gain(0.95)

// drums · congas
const congas_2 = s("conga:33").struct(`<
  ~ A B A C A B A D A@7 E A@8 ~@8 A@17 B A C A B A D A@7 E A@8 ~@8 A@26 ~@2
>`.pickRestart({
  A: "x ~ x!2 ~@4", B: "~@9 x!7", C: "~@11 x ~ x ~@2", D: "~ x!7", E: "x ~@2 x ~@4",
})).gain(0.95)

// drums · guiro
const guiro = s("guiro:0").struct("<~ A@7 B A@7 C A@15 ~ A@23 B A@7 C A@15 ~ A@24 ~@2 D C>".pickRestart({
  A: "x ~ x!3 ~ x!2", B: "~ x!7", C: "x ~@2 x ~@4", D: "x!2 ~@2 x!2 ~@2",
})).gain(6.29)

stack(alto_sax, baritone_sax, trumpet, trumpet_2, piano, congas, congas_2, guiro)