Strudelify

El Diablo Suelto

Omar Acosta Hernandez

KeyC majorTempo228 bpm
0:00/0:00
// El Diablo Suelto — Omar Acosta Hernandez
// 228 bpm, 3/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 2/4 at bar 50, 3/4 at bar 52, 2/4 at bar 54, ...) are rendered on a constant 3/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4393901; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 161 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(228/3)

// 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.

// other · flute · "Flauta 2"
const flute = note(`<
  A B C D E F G H I J K L M N O P ~ Q R S T U V W X Y Z AA R AB AC AD AE AF@2 AG@2 AH@2 AI AJ AK@2 AL AM AN AO AP AQ AR
  AS AT AU AV AW AX AY AZ BA BB ~@5 BC BD X BE BF BG BH BI BJ BK BL BM Y BN BO BP ~@2 BQ BR BS BT@2 ~ BU BV BW BX BY BZ
  CA CB CC@2 CD@2 CE@2 CF X CG CH CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV CW CX CY CZ DA AO AP DB DC DD DE DF DG DH DI
  DJ DK DL DM DN DO X DP DQ ~@8 DR DS DT DU AP DV DW DQ
>`.pickRestart({
  A: "~@3 g5@2 g5@3 g5@3 g5@2 f#5@3", B: "f5@3 f5@5 e5@3 e5@5", C: "d5@3 d5@5 g5@3 g5@5", D: "e5@5 ~@6 e5@2 d5@3",
  E: "c#5@15 ~", F: "d5@15 ~", G: "f5@15 ~", H: "e5@5 ~@6 a4@2 g4@3", I: "c5 ~@2 e5@2 f5@3 e5@3 d#5@2 e5@3",
  J: "g#5 ~@2 e5@2 d#5@3 e5@3 b5 ~ e5@3", K: "d#5@3 e5@2 g#5 ~@2 b5 ~@2 e6 ~ b5 ~@2",
  L: "d6 d6@4 c6@3 b5@3 c6@5, ~ e6 ~@14", M: "~@3 b5@2 a5@3 g#5@3 a5@2 b5@3", N: "c6@5 b5@3 a5@3 c6@5",
  O: "b5@3 a5@2 c6@5 ~ b5@2 a5@3", P: "e6@5 ~@3 e6 ~@2 e6@3 ~@2", Q: "b4@5 g5@10 ~", R: "a4@5 f5@10 ~",
  S: "g4@5 e5@10 ~", T: "f#4@5 d#5@10 ~", U: "f4@5 d5@10 ~", V: "b4@3 d5@3 ~@2 a5@5 g5@3",
  W: "d#5 ~@2 g5@2 f#5@3 a5@3 g5@2 e5@3", X: "c5@5 ~@11", Y: "a#4@5 g5@10 ~", Z: "a4@5 g5@10 ~", AA: "a4@5 f#5@10 ~",
  AB: "b4@3 c5@2 e5@5 ~ a5@5", AC: "g5 g5@4 ~@11, ~ a5 ~@14", AD: "~@3 c5@2 b4@3 c5@3 g4@5",
  AE: "~@3 g5 ~ g5 ~@2 g5 ~@2 g5 ~ g5 ~@2", AF: "f5@3 g5@2 e6@3 ~@5 d6@3", AG: "e5@3 g5@2 d6@3 ~@5 c6@3",
  AH: "d5@3 f5@2 c6@3 ~@5 b5@3", AI: "a5@5 ~@11", AJ: "g5@3 a5@2 a5 ~@2 a5 ~@2 a5 ~ a5 ~@2",
  AK: "g#5@3 a5@2 f6@3 ~@5 e6@3", AL: "f#5@3 a5@2 e6@3 ~@5 d6@3", AM: "f5@3 a5@2 e6@3 ~@5 d6@3",
  AN: "e5@3 g5@2 d6 ~@7 c6@3", AO: "b5 [b5,c6] ~ a5@2 g5 ~@2 f5 ~@2 e5 ~ d5 ~@2", AP: "c5@15 ~",
  AQ: "~@3 c5@2 b4@3 c5@3 a#4 ~ g4 ~@2", AR: "f4@5 ~@6 e5@5", AS: "~@5 d5@5 ~@6", AT: "e5@5 ~@11",
  AU: "a#4@3 g4@5 e4@5 c#4@3", AV: "d4@5 ~@6 c#5@5", AW: "~@5 c5@5 ~@6", AX: "a#4@5 ~@11", AY: "c#4@3 g4@5 e4@5 a4@3",
  AZ: "a#4", BA: "b4", BB: "c5", BC: "~@11 f4@5", BD: "a4@3 c5@2 f5@5 ~ a5@2 c6@3", BE: "~@3 a#4@2 g4@3 f4@3 e4@2 a4@3",
  BF: "d4@5 ~@6 d4@5", BG: "f4@3 a4@2 d5@5 ~ f5@2 a5@3", BH: "a#5@5 ~@11", BI: "a5@3 g5@5 e5@5 c#5@3",
  BJ: "d5 ~@2 f5@2 d5@3 a#4@3 f4@2 f5@3", BK: "d5@3 a#4@2 g4@3 f5@3 d5@2 a#4@3", BL: "f4@3 f5@2 c5@3 a#4@3 a4@2 f5@3",
  BM: "d5@3 c5@2 d5@3 f#5@3 d5@2 c5@3", BN: "g5@5 e5@5 ~ c5@5", BO: "c5@3 [f5,g5] f5 e5@3 f5@3 a5 ~ c6 ~@2",
  BP: "f6@3 ~@8 g5@2 f#5@3", BQ: "g5@3 g4@2 g4@5 ~ g5@2 g4@3", BR: "g4@5 g5@3 g4@3 g4@5",
  BS: "a5@3 f5@2 d5@3 f5@3 d5@2 b4@3", BT: "[d5@3 b4@2 g4@3 b4@3 d5@2 g5 a5 g5@4 e5@2 c5@3 g4@3 e4@5]/2",
  BU: "~@3 e4@2 f4@3 e4@3 d#4@2 e4@3", BV: "g#4@3 e4@2 d#4@3 e4@3 b4@2 e4@3", BW: "d#4@3 e4@2 a4@3 e4@3 d#4@2 e4@3",
  BX: "c5@3 e4@2 d#4@3 e4@3 a4 ~ g4 ~@2", BY: "f4@3 a4@2 c5@3 f5@3 c6 ~ b5 ~@2", BZ: "a#5 ~@2 a5 ~ d4@3 a4@3 c5@2 f5@3",
  CA: "~@3 e5 ~ e5@5 ~@3 e4 ~@2", CB: "e4@3 ~@13", CC: "f4@3 g4@2 e5@3 f4@3 g4@2 d5@3",
  CD: "e4@3 g4@2 d5@3 e4@3 g4@2 c5@3", CE: "d4@3 f4@2 c5@3 d4@3 f4@2 b4@3",
  CF: "a4 [a4,b4] ~ g4@2 f#4 ~@2 a4 ~@2 g4 ~ e4 ~@2", CG: "c#5@3 e5@2 g5@5 ~ c#5@2 e5@3", CH: "g5@5 ~@11",
  CI: "~@3 d4@2 c#4@3 d4@3 d#4@2 d4@3", CJ: "d4@3 e4@2 f4@5 ~ a4@2 b4@3", CK: "c5@3 d5@2 e5@5 ~ [d5,e5] d5 c5@3",
  CL: "d5@5 ~@3 g4@8", CM: "~@3 c5@2 b4@3 c5@3 g4 ~ e4 ~@2", CN: "c4@5 ~@11", CO: "g4@5 f5@2 g5@2 c6@2 g4@5",
  CP: "e5@2 g5@2 ~ g4@5 ~@2 g5@2 c6@2, ~@4 c6@2 ~@5 d5@2 ~@3", CQ: "g4@5 e5@2 g5@2 c6@2 g4@5",
  CR: "d5@2 g5@2 ~ g4@5 ~@2 g5@2 c6@2, ~@4 c6@2 ~@5 c5@2 ~@3", CS: "d5@5 f5@2 a5@2 c6@2 a5@5",
  CT: "d6@2 f6@2 ~ g6@5 ~@6, ~@2 f#6 ~@5", CU: "d5 d#5", CV: "e5@3 a5@2 a5 ~@2 a5 ~@2 a5 ~ a5 ~@2",
  CW: "a#5 [a#5,c6] ~ a5@2 a5@3 a5@3 c#6@2 a5@3", CX: "a5@3 c#6@2 e6 ~@2 a6 ~@2 g6@2 e6@3",
  CY: "g6@3 f#6@2 f6@5 ~ e6@2 d#6@3", CZ: "d6@3 c6@2 b5 ~@2 a#5 ~@2 a5 ~ g#5 ~@2", DA: "g5@5 ~@3 e5@3 g5@2 c6 ~@2",
  DB: "~@3 c5@2 b4@3 c5@3 d5@2 e5@3", DC: "f5@5 a5@3 c6@3 f5@5", DD: "a5@3 c6@2 f5@5 ~ a5@2 c6@3",
  DE: "c6@3 a#5@5 g5@5 e5@3", DF: "a4@5 ~@11", DG: "d5@2 c#5@2 ~ e5@2 d5@2 e5@2 ~ e5@2 f5@2, ~@4 d5@2 ~@5 f5@2 ~@3",
  DH: "g5@2 f5@2 ~ a5@2 g5@2 a5@2 ~ a5@2 a#5@2, ~@4 g5@2 ~@5 a#5@2 ~@3", DI: "a#4@5 ~@6 g4@5", DJ: "~@5 a4@5 ~@6",
  DK: "f6@3 f6@2 a#5@5 ~ f6@2 f6@3", DL: "a#5@5 f6@3 f6@3 b5@5", DM: "a5@3 f5@5 c5@5 a4@3", DN: "f#5@3 c5@5 a4@5 f4@3",
  DO: "g4@3 d5@2 a4@3 d5@3 a#4@2 d5@3", DP: "~@3 f5@2 e5@3 f5@3 c5 ~ a4 ~@2", DQ: "f4@5 ~@11",
  DR: "~@5 a#6@3 a#5@3 a#5@5", DS: "a#6@3 a#5@2 b5@5 ~ b6@2 b5@3", DT: "c6@5 ~@11", DU: "a4@5 a#4@5 ~ b4@5",
  DV: "a#4 a#4@4 a4@5 ~ g4@5, ~ c5 ~@14", DW: "f4@5 e5@3 f5@3 c5 ~ a4 ~@2",
})).s("gm_flute").gain(0.4)

// other · flute · "Flauta 2" · soft notes
const flute_soft = note("<~@60 A B C D ~@17 E F ~@62 G H I J K L M N ~@8>".pickRestart({
  A: "d4@10 ~ f#4@5", B: "f4@5 g4@5 ~@6", C: "~@5 e5@5 ~ c5@5", D: "c5@5 ~@3", E: "f5@3 g4@2 g4@5 ~ f5@2 g4@3",
  F: "g4@5 f5@3 g4@3 g4@5", G: "a4@5 c5@3 f5@3 a4@5", H: "c5@3 f5@2 a4@5 ~ c5@2 f5@3", I: "e5@15 ~",
  J: "a4@3 a#4@5 g4@5 e4 ~@2", K: "f4@3 e4@2 d4@5 ~ g4@2 f4@3", L: "e4@5 a4@3 g4@3 f4@5",
  M: "a#4@3 a4@2 g4@5 ~ c#5@2 a#4@3", N: "a4@5 e5@3 d5@3 c#5@5",
})).s("gm_flute").gain(0.2)

stack(flute, flute_soft)