Strudelify

el cumbanchero

Cuban

KeyC♯ minorTempo72 bpm
0:00/0:00
// el cumbanchero — Cuban
// 72 bpm, 2/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5876919; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 126 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/2)

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

// other · flute · "Flauto"
const flute = note(`<
  ~@8 A B C D E F G H G I ~ J ~ J ~@2 K ~@2 L@4 ~@17 M N M N O P ~@5 J ~ J ~@2 K ~@2 L@4 ~@21 Q R@4 ~@2 K ~@2 R@4 ~@6 S
  ~@3 S ~@9
>`.pickRestart({
  A: "c#5!2", B: "d#5@15 ~", C: "g#5@13 ~ f#5 e5", D: "d#5 c5",
  E: "[e4,c#5] [f#4,d#5] [e4,c#5] [f#4,d#5] [e4,c#5] [f#4,d#5] [e4,c#5] [f#4,d#5] [e4,c#5] [f#4,d#5] [e4,c#5] [f#4,d#5] [e4,c#5] [f#4,d#5] [e4,c#5] [f#4,d#5]", // C#m D#m C#m D#m C#m D#m C#m D#m …
  F: "[e4,c#5] [f#4,d#5] [g#4,e5] [a#4,f#5] [b4,g#5]@8 ~@4", G: "g#5@15 ~", H: "e5@15 ~", I: "c6@15 ~",
  J: "~@4 c#5 e5 g#5 b5 a#5@4 g#5@2 e5@2", K: "g#4 a4 g#4 a4 g#4 a4 g#4 a4 g#4@2 ~@6",
  L: "g#5@2 b5 a#5 ~@5 g#5 b5 a#5@2 g#5@2 ~", M: "g#4 a4", N: "a#4 a4", O: "c5@2 b4@9 ~ g#4@2 f#4@2", P: "g#4 ~",
  Q: "~@5 g4 ~ g4", R: "a5@2 c6 b5 ~@5 a5 c6 b5@2 a5@2 ~", S: "f5 e5",
})).s("gm_flute").gain(0.17)

// other · clarinet · "Clarinetto basso"
const clarinet = note(`<
  ~@6 A ~@2 B A ~@2 C ~@5 D ~ D E F ~@20 G H I J K L K M N O ~@5 D ~ D E F ~@28 P ~@4 Q R ~@7 Q R ~@2 S T U ~ S T U V W
  X Y Z ~@4
>`.pickRestart({
  A: "d#4 ~@7", B: "c#4", C: "~@7 c#4", D: "~@4 c#4 e4 g#4 b4 a#4@4 g#4@2 e4@2", E: "e4 d#4 c#4 b3", F: "a3 g#3 f#3 e3",
  G: "g#3", H: "a#3", I: "b3", J: "c4", K: "c#4@3 d#4 d#4@2 d#4@4 c#4@2 c#4@2 c#4@2",
  L: "c#4@3 e4 e4@2 e4@4 d#4@2 d#4@2 d#4@2", M: "c#4@3 e4 e4@2 e4@4 d#4@2 d4@2 c#4@2", N: "c5 b4@5 g#4 f#4", O: "g#4 ~",
  P: "~@5 c#4 ~ c#4", Q: "f4 e4 d4 c4", R: "a#3 a3 g3 f3", S: "f3 a3", T: "g3", U: "a3 g3", V: "d4@2 ~ c4",
  W: "d4@2 ~ e4", X: "f4@2 ~ c4", Y: "a3@2 ~ b3", Z: "e4 ~",
})).s("gm_clarinet").gain(0.17)

// other · alto sax · "Sassofono contralto"
const alto_sax = note(`<
  ~@5 A B ~@2 A B ~@2 C D E F E F G ~ G H I J K ~ F ~ F ~ H I J K ~@17 L M ~@4 F G F G H I J K ~ F ~ F ~ H I J K ~@17 N
  O ~ O ~ P Q R S ~ O ~ O ~ P Q R S ~@2 T ~@3 T U V W X Y ~@4
>`.pickRestart({
  A: "c#4", B: "c4 ~@7", C: "~@7 e4", D: "g#3", E: "c4", F: "g#4", G: "~@4 c#4 e4 g#4 b4 a#4@4 g#4@2 e4@2",
  H: "c#4 b3 a3 g#3", I: "f#3 e3 d#3 c#3", J: "c4 ~ c4 d#4", K: "c#4 ~@3", L: "c5 b4@5 g#4 f#4", M: "g#4 ~",
  N: "~@5 e4 ~ e4", O: "a4", P: "d4 c4 a#3 a3", Q: "g3 f3 e3 d3", R: "c#4 ~ c#4 e4", S: "d4 ~@3", T: "a3 g3",
  U: "a3@2 ~ g3", V: "a3@2 ~ c4", W: "d4@2 ~ a3", X: "f3@2 ~ g3", Y: "c#4 ~",
})).s("gm_alto_sax").gain(0.17)

// chords · french horn · "Corno in Fa"
const french_horn = note(`<
  ~@4 A B C ~ A B C D E F G H G I G@4 J K L M ~ G@4 J K L M ~ N O P ~ Q R S ~ T U V W X Y X Z ~@2 E AA AB AC G@4 J K L M
  ~ G@4 J K L M ~ N O P ~ Q R S T AD AE AF I H AG AH ~ AI AJ@4 AK AL AM AN ~ AJ@4 AK AL AM AO AP AQ AR AO AP AQ AR AS AT
  AU AV AW ~@4
>`.pickRestart({
  A: "f#3", B: "a3", C: "g#3 ~@7", D: "g#3!2", E: "[e3,g#3]", F: "~@7 [e3,g#3]", G: "[c#4,e4]", H: "[g#3,c4]",
  I: "[g#3,d#4]", J: "[c#4,e4] [b3,d#4] [a3,c#4] [g#3,b3]", K: "[f#3,a3] [e3,g#3] [d#3,f#3] [c#3,e3]",
  L: "[g#3,d#4] ~ [g#3,c4] [g#3,d#4]", M: "[c#3,e3,g#3] ~", N: "[c#3,f3]", O: "[f3,c#4,f4]", P: "[a3,c#4] ~@3",
  Q: "[d#3,g3]", R: "[d#3,c#4,d#4]", S: "[f#3,c4] ~@7", T: "g#3", U: "a#3", V: "b3", W: "c4",
  X: "c#4@3 d#4 d#4@2 d#4@4 c#4@2 c#4@2 c#4@2", Y: "c#4@3 e4 e4@2 e4@4 d#4@2 d#4@2 d#4@2",
  Z: "c#4@3 e4 e4@2 e4@4 d#4@2 d4@2 c#4@2", AA: "[g#3,b3]", AB: "[a3,c#4]", AC: "[f#3,c4]", AD: "[f#3,g#3]",
  AE: "[d#3,g#3]", AF: "[c3,g#3]", AG: "[g#3,f#4]", AH: "[g#3,g#4]", AI: "~@5 a3 ~ a3", AJ: "[d4,f4]",
  AK: "[d4,f4] [c4,e4] [a#3,d4] [a3,c4]", AL: "[g3,a#3] [f3,a3] [e3,g3] [d3,f3]", AM: "[a3,e4] ~ [a3,c#4] [a3,e4]",
  AN: "[d3,f3,a3] ~", AO: "[d3,f3,a3]", AP: "f3 a3", AQ: "[a#2,e3,g3]", AR: "[c#3,f3,a3,f4]", AS: "f3@2 ~ e3",
  AT: "f3@2 ~ g3", AU: "a3@2 ~ e3", AV: "d3@2 ~ e3", AW: "a3 ~",
})).s("gm_french_horn").gain(0.17)

// drums · kick
const kick = s("bd").struct("<x!3 ~@9 x!42 ~@4 x!34 ~ x!24 ~@9>").gain(0.29)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@12 A@7 ~ A@2 ~ A@2 ~@2 A ~ A@2 ~ A@2 ~@2 A@18 B@4 A ~ A@2 ~ A@2 ~@2 A ~ A@2 ~ A@2 ~@2 A@13 ~@4 A ~ A@2 ~ A@2 ~@2 A ~
  A@2 ~ A@2 ~ A ~ A@5 C@3 ~@2 D@3 ~
>`.pickRestart({
  A: "~@15 x", B: "x ~@2 x ~@4", C: "x ~@5 x ~@8 x", D: "x",
})).gain(0.18)

// drums · snare
const snare = s("sd").struct("<~@54 [~@3 x!2 ~@4 x!2 ~ x ~ x ~]!4 ~@59 [~@3 x!2 ~@4 x!2 ~ x ~@3]!3 ~@6>").gain(0.18)

// drums · hihat
const hihat = s("hh").struct("<~@12 A@26 B ~ A@14 ~@4 A@20 B ~ A@9 ~@4 A@20 B ~ A@2 ~@9>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", B: "x",
})).gain(0.18)

// drums · open hat
const open_hat = s("oh").struct("<~@12 A@26 ~@2 A@14 ~@4 A@20 ~@2 A@9 ~@4 A@20 ~@2 A@2 B@3 ~@6>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@7 x",
})).gain(0.18)

// drums · tambourine
const tambourine = s("tb").struct("<~@10 A ~ A@26 B ~ A@14 ~@4 A@20 B ~ A@9 ~@4 A@20 B ~ A@2 C@2 D ~@6>".pickRestart({
  A: "x ~@2 x!2 ~@3 x ~@2 x!2 ~@3", B: "x", C: "~@14 x!2", D: "~@7 x",
})).gain(0.18)

// drums · splash
const splash = s("cr").struct("<~@123 [~ x] ~@2>").gain(0.18)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct("<~@54 x ~ x ~@65 [~ x] ~@3>").gain(2.07)

// drums · ride
const ride = s("rd").struct("<~@55 A ~ A ~@59 A@3 ~@2 A@3 ~>".pickRestart({
  A: "x",
})).gain(0.29)

// drums · bongos
const bongos = s("bongo:4").struct("<~@12 A@26 B A@39 B A@12 ~@2 A@20 B A@6 ~@6>".pickRestart({
  A: "~ x ~@2", B: "~@4 x!3 ~@9",
})).gain(0.46)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@12 A@26 B C A@38 B C A@11 ~@2 A@20 B C A@5 ~@6>".pickRestart({
  A: "~ x!2 ~@6 x ~ x ~@4", B: "~ x!2 ~@6 x ~ x!3 ~@2", C: "~ x!2 ~@3 x ~@9",
})).gain(0.46)

// drums · congas
const congas = s("conga:13").struct("<~@4 A@2 ~@2 B C ~ D E@27 F E@39 G E@11 ~@2 E@21 G E@5 ~@6>".pickRestart({
  A: "~@8 x!2 ~@2 x ~@3", B: "x!7 ~ x!2 ~@2 x ~@3", C: "~@9 x!2 ~ x!3 ~", D: "~@4 x!3 ~", E: "~ x ~ x",
  F: "~@4 x ~@6 x!2 ~ x!2", G: "~@4 x ~@5 x!3 ~@3",
})).gain(0.56)

// drums · congas
const congas_2 = s("conga:18").struct("<~@4 A B ~@2 C D ~ E F@26 G H F@38 G H F@11 ~@2 F@20 G H F@5 ~@6>".pickRestart({
  A: "x!7 ~@3 x ~@2 x!2 ~", B: "~@4 x!3 ~@3 x ~@2 x!2 ~", C: "~@10 x ~@2 x!2 ~", D: "~@4 x!3 ~ x ~@7",
  E: "x ~@2 x!2 ~@2 x ~@8", F: "~ x ~@3 x ~@2", G: "~@2 x ~@7 x!2 ~@4", H: "~ x ~@6",
})).gain(0.56)

// drums · congas
const congas_3 = s("conga:33").struct("<~@5 A ~@3 A ~ B C@26 D E C@38 D C@12 ~@2 C@20 D C@6 ~@6>".pickRestart({
  A: "x!4 ~@12", B: "~ x ~@3 x ~@10", C: "x ~@5 x!3 ~@5 x!2", D: "x!2 ~@4 x!3 ~@5 x!2", E: "x ~@5 x!3 ~ x ~@5",
})).gain(0.56)

// drums · ht
const ht = s("ht").struct("<~@3 A ~@2 A B ~@18 C ~@8 D ~@7 D ~@22 D ~@8 D ~@16 A ~@8 C ~@18 E ~@5>".pickRestart({
  A: "x ~ x!2 ~@4", B: "x ~@5 x!2", C: "x ~ x!3 ~@3", D: "x ~@3 x ~@2 x!3 ~@6", E: "x!2 ~@2 x ~@2 x!3 ~@6",
})).gain(0.18)

// drums · mt
const mt = s("mt").struct("<~@3 A ~@2 B C ~@18 D ~@8 E ~@7 E ~@22 E ~@8 E ~@16 A ~@8 D ~@18 F G ~@4>".pickRestart({
  A: "~ x ~ x ~@4 x!5 ~ x ~", B: "~ x ~ x ~@4 x ~@3 x ~@3", C: "~ x ~ x!2 ~@4 x!2 ~@5", D: "~ x ~ x ~@7 x!2 ~ x ~",
  E: "~ x ~ x ~@6 x ~ x ~ x ~", F: "~ x ~ x ~@6 x ~ x ~@2 x", G: "x",
})).gain(0.18)

// drums · triangle
const triangle = s("triangles:35").struct(`<
  A@3 ~@9 B@26 C ~ B@14 ~@4 B@20 C ~ B@9 A@3 ~ B@20 C ~ B@2 D@3 ~@6
>`.pickRestart({
  A: "x ~ x ~ x ~@2 x!2 ~@3 x ~@2 x", B: "x ~ x!3 ~ x!2", C: "x", D: "~@7 x",
})).gain(1.54)

stack(
  flute, clarinet, alto_sax, french_horn, kick, kick_soft, snare, hihat, open_hat, tambourine, splash, vibraslap, ride,
  bongos, bongos_2, congas, congas_2, congas_3, ht, mt, triangle
)