Strudelify

La engañadora

Ruben Gonzalez

KeyE majorTempo105 bpm
0:00/0:00
// La engañadora — Ruben Gonzalez
// 105 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Transcription provider: pdmx. https://musescore.com/score/5725480; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 67 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(105/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · trumpet · "Trompeta"
const trumpet = note(`<
  A B A B C D E F A B A B C D G H ~@6 I J ~@17 K ~@9 L@2 M N O P Q R S T@2 U V W X ~
>`.pickRestart({
  A: "a4@2 b4 ~@4 a4", B: "a#4 ~ a#4 ~@5", C: "f#4@4 e4@4 d4@20 c#5 d5@3", D: "b4@2 d5@2 ~@2 c#5 b4",
  E: "a4@2 d5@2 ~@2 c#5 b4", F: "a4 g4 f#4 e4 d4@2 c#4 b3", G: "a4 b4 g4 a4 f#4 g4 e4 f#4", H: "d4 ~@7",
  I: "a4 ~@5 b4 ~ a4 ~@5 b4 ~", J: "a4 ~@3 a3@8 ~@4", K: "a3@3 ~",
  L: "[a4@2 ~@2 a4@2 ~@4 b4@2 ~ b4@2 ~@6 c#5@2 ~@2 c#5@2 a4@2 ~@2 b4@2 ~@28 a4@2 ~]/2",
  M: "~ a4@2 ~@4 b4@2 ~ b4@2 ~@6 c#5@2 ~@2 f#5@6 e5@4",
  N: "~ d5@2 c#5@2 b4@2 ~@2 a4@2 ~@2 g4@2 ~@2 f#4@2 ~ e4@2 ~@4 a4@2 ~@2 a4@2",
  O: "~@4 b4@2 ~@2 b4@2 ~@5 c#5@2 ~@2 c#5@2 a4@2 ~@2 b4@2 ~@5", P: "~@23 a4@2 ~@2 a4@2 ~@3",
  Q: "~ b4@2 ~@2 b4@2 ~@5 c#5@2 ~@2 f#5@6 d5@4 ~@6", R: "~ d5@2 d5@2 d5@4 ~@11 d5@2 ~@2 d5@2 ~@4 e5@2",
  S: "~@2 e5@2 ~@5 d5@2 ~@2 d5@4 ~@2 d5@2 ~@2 d5@2 ~@3 e5@2 ~@2",
  T: "[e5@2 ~@6 d5@2 ~@2 d5@4 ~ d5@2 ~@2 d5@2 ~@4 e5@2 ~@2 e5@2 ~@5 d5@2 ~@2 f#5@6 e5@2 ~@14]/2",
  U: "~@15 a4@2 ~ a4@2 ~@4 b4@2 ~@2 b4@2 ~@2", V: "~@4 c#5@2 ~ c#5@2 a4@2 ~@2 b4@2 ~@17",
  W: "~@12 a4@2 ~ a4@2 ~@4 b4@2 ~@2 b4@2 ~@5", X: "~ c#5@2 ~ f#5@6 d5@4 ~@8 d5@2 d5 d5@4 ~@3",
})).s("gm_trumpet").gain(0.24)

// bass · acoustic bass · "Contrabajo"
const bass = note(`<
  A B C B D E F G A B C B H I J K L M N O I P Q R L M N S T U V K W X Y Z AA AB AC ~@2 AD L M N O AE P AF AG J AH AI
  AJ@2 AK AL@2 AM AN@2 AO AP AQ AR AS ~
>`.pickRestart({
  A: "d2 d2@2 a2 d2@2 a2@2", B: "g2@3 a#2 e2@2 a#2@2", C: "d2@3 a2 d2@2 a2@2", D: "d2 a2 f#2 d2", E: "g2@3 g2 f2@3 f2",
  F: "f#2@3 f#2 f2@3 f2", G: "e2 c#2 a2 f#2", H: "f#2 a2 f#2 d2", I: "g2@3 g2 g#2@3 g#2", J: "a2 g2 f#2 e2",
  K: "d2 ~@3", L: "e2@3 a2 a2@2 a2@2", M: "e2@2 a2 f#2", N: "d2@3 a2 a2@2 f#2@2", O: "d2!2 f#2 d2",
  P: "a2@3 a2 b2@2 a#2@2", Q: "a2 g#2", R: "g2 d2 ~@2", S: "d2@3 a2 f#2@4 d2@4 d3@4", T: "g2 g#2", U: "a2 f#2 c#2 a1",
  V: "d2 b2 a2 f#2", W: "a2@3 d3 a2@2 d3@2", X: "a2 ~ d3 d2", Y: "g2@2 d3 d2", Z: "g2 ~ g2 a#2",
  AA: "b2@2 ~ e3 e2@3 e3", AB: "b2 ~ e3 e2", AC: "a2 ~@3", AD: "a1 ~", AE: "g2@3 g2 f#2@3 f#2", AF: "d2 a2!2 ~",
  AG: "a2!2 ~ a2", AH: "~@8 a2@3 d2@4 ~@8 a2@4 d2@4 ~", AI: "~@6 a2@4 d2@4 ~@7 a2@4 d2@4 ~@3",
  AJ: "[~@5 a2@4 d2@4 ~@7 a2@8 g2@7 f#2@8 e2@8 d2@8 ~@5]/2", AK: "~@2 a2@4 d2@4 ~@7 a2@4 d2@4 ~@7",
  AL: "[e3@4 ~@2 e3@4 ~@21 a2@4 d2@4 ~@7 a2@4 d2@4 ~@10]/2", AM: "~@10 g2@4 d3 ~",
  AN: "[g2@6 ~@5 d3@2 ~@2 a2@4 ~@8 d3@2 ~ a2@4 ~@8 d3@2 ~@2 b2@4 ~@7 d3@2 ~@2 b2@3]/2", AO: "~@2 d3@2 d3 ~@3",
  AP: "~@11 a2@2 d2@2 ~", AQ: "~@5 a2@4 d2@4 ~@8 a2@4 d2@4 ~@3", AR: "~@4 a2@4 d2@4 ~@7 a2@4 d2@4 ~@5",
  AS: "~@3 a2@3 d2@4 ~@12 d3@2 d3 d3@4 ~@3",
})).s("gm_acoustic_bass").gain(0.48)

// drums · cowbell
const cowbell = s("cb").struct("<A@15 B A@7 B A@7 B A@6 B ~@3 A@6 ~@17 C ~>".pickRestart({
  A: "x!4", B: "x", C: "~@10 x ~@14 x ~@6",
})).gain(0.15)

// drums · congas
const congas = s("conga:13").struct("<~@15 A ~@15 A ~@6 A ~@12 B C D E F G H I J K L M N O P ~>".pickRestart({
  A: "x", B: "~@8 x ~@14 x ~@8", C: "~@6 x ~@14 x ~@10", D: "~@5 x ~@14 x ~@11", E: "~@3 x ~@15 x ~@12",
  F: "~@2 x ~@14 x ~@14", G: "x ~@15 x ~@14 x", H: "~@7 x ~@8", I: "~@17 x ~@10 x ~@3", J: "~@11 x ~@15 x ~@4",
  K: "~@10 x ~@14 x ~@6", L: "~ x ~@2", M: "~@11 x ~@10 x ~@9", N: "~@5 x ~@15 x ~@10", O: "~@4 x ~@14 x ~@12",
  P: "~@3 x ~@28",
})).gain(0.47)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@15 A B@7 C B@7 D B@7 ~@2 E B@6 ~@3 F G H I J K L M N O P Q R S T ~
>`.pickRestart({
  A: "x ~@23 x ~@2 x ~ x ~@2", B: "x", C: "~@8 x ~@15 x ~@2 x ~ x ~@2", D: "x ~@5 x!2", E: "~@24 x ~@2 x ~ x ~@2",
  F: "x ~@14 x ~@15 x", G: "~@14 x ~@14 x ~@2", H: "~@3 x ~@3 x", I: "~@11 x ~@14 x ~@5", J: "~@9 x ~@15 x ~@6",
  K: "~@8 x ~@14 x ~@8", L: "~@7 x ~@24", M: "~@5 x ~@2", N: "~@4 x ~@14 x ~@12", O: "~@2 x ~@14 x ~@14", P: "~ x ~@30",
  Q: "~@15 x ~@14 x ~", R: "~@13 x ~@14 x ~@3", S: "~@12 x ~@14 x ~@4", T: "~@22 x ~ x!2 ~@6",
})).gain(0.47)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  A@15 B A@7 C A@7 D A@6 ~@3 B A@6 ~@3 E F G H I J K L M N O P Q R S ~
>`.pickRestart({
  A: "~@6 x!2", B: "~@25 x ~@2 x ~@2 x", C: "x ~@3 x ~@20 x ~@2 x ~@2 x", D: "~ x", E: "~@4 x ~@6 x ~@7 x ~@7 x ~@4",
  F: "~@2 x ~@7 x ~@7 x ~@6 x ~@6", G: "~ x ~@7 x ~@6 x ~@7 x ~@6 x", H: "~@7 x ~@7 x ~@6 x ~@7 x ~",
  I: "~@6 x ~@6 x ~@7 x ~@7 x ~@2", J: "~@4 x ~@7 x ~@6 x ~@7 x ~@4", K: "~@3 x ~@6 x ~@7 x ~@3 x ~@9", L: "~@3 x",
  M: "x ~@6 x ~@7 x ~@7 x ~@6 x ~", N: "~@6 x ~@7 x ~@6 x ~@7 x ~@2", O: "~@5 x ~@6 x ~@3 x ~@15", P: "~@9 x ~@3 x ~@2",
  Q: "~@2 x ~@6 x ~@7 x ~@7 x ~@6", R: "x ~@7 x ~@6 x ~@7 x ~@7 x", S: "~@3 x ~ x ~@10",
})).gain(0.47)

// drums · shaker
const shaker = s("sh").struct("<A@15 B A@7 B A@7 B A@6 B ~@3 A@6 C ~@2 D E F G H I J K L M N O P Q R ~>".pickRestart({
  A: "x ~@3 x!3 ~ x ~@3 x ~@3 x ~@3 x!3 ~ x ~@3 x ~@3", B: "x", C: "x ~@3 x!3 ~ x ~@3 x ~@3 x ~@3 x!3 ~ x ~@7",
  D: "x ~ x ~ x!3 ~ x ~ x!4 ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x",
  E: "x ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x ~ x!4 ~ x ~ x!3 ~ x ~ x",
  F: "~ x!3 ~ x ~ x ~ x!2 ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x!2",
  G: "x!2 ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x!2 ~ x!3 ~ x ~ x ~ x!2",
  H: "x ~ x ~ x ~ x!4 ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x ~ x!2 ~",
  I: "x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x!4 ~ x ~ x ~ x!3 ~ x", J: "~ x ~ x!3 ~ x!2 ~ x!3 ~ x ~ x ~ x!3 ~ x ~@9",
  K: "~@20 x ~ x ~ x!3 ~ x ~ x ~", L: "x!3 ~ x ~ x!4 ~ x ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x!2 ~ x!2",
  M: "x ~ x ~ x ~ x!3 ~ x ~ x ~ x!4 ~ x ~ x!3 ~ x ~ x ~ x!3", N: "~ x ~ x ~ x!2 ~ x ~ x ~ x!3 ~ x ~@15",
  O: "~@15 x!2 ~ x!3 ~ x ~ x ~ x!3 ~ x ~", P: "x ~ x!4 ~ x ~ x!3 ~ x ~ x ~ x!3 ~ x ~ x ~ x!2 ~ x ~ x ~",
  Q: "x!3 ~ x ~ x ~ x!3 ~ x ~ x!4 ~ x ~ x ~ x!3 ~ x ~ x ~ x", R: "x!2 ~ x!2 ~ x!3 ~ x ~@11 x ~ x!2 ~@6",
})).gain(0.15)

// drums · guiro
const guiro = s("guiro:0").struct("<A@15 B A@7 B A@7 B A@6 B ~@3 A@6 ~@3 C D E F G H I J K L M N O P Q ~>".pickRestart({
  A: "~@2 x!2 ~@2 x!2", B: "x", C: "~@4 x ~ x ~@4 x ~ x ~@5 x ~ x ~@5 x ~ x ~@2",
  D: "~@2 x ~ x ~@5 x ~ x ~@5 x ~ x ~@4 x ~ x ~@4", E: "~ x ~ x ~@5 x!2 ~@5 x ~ x ~@5 x ~ x ~@4 x",
  F: "~ x ~@5 x ~ x ~@5 x ~ x ~@4 x ~ x ~@5 x ~", G: "x ~@5 x ~ x ~@4 x ~ x ~@5 x ~ x ~@5 x!2 ~",
  H: "~@4 x ~ x ~@5 x ~ x ~@4 x ~ x ~@5 x ~ x ~@2", I: "~@3 x ~ x ~@4 x ~ x ~@5 x ~ x ~ x ~@9", J: "~@12 x!2 ~@2",
  K: "x ~ x ~@4 x ~ x ~@5 x ~ x ~@5 x ~ x ~@4 x ~", L: "x ~@5 x ~ x ~@5 x ~ x ~@4 x ~ x ~@5 x ~ x",
  M: "~@5 x!2 ~@5 x ~ x ~ x ~@15", N: "~@9 x!2 ~@2 x!2 ~", O: "~@2 x ~ x ~@4 x ~ x ~@5 x ~ x ~@5 x!2 ~@5",
  P: "x ~ x ~@5 x ~ x ~@4 x ~ x ~@5 x ~ x ~@5 x", Q: "~ x ~@4 x ~ x ~ x ~@11 x ~ x!2 ~@6",
})).gain(3.08)

// drums · guiro
const guiro_2 = s("guiro:4").struct("<A@15 ~ A@7 ~ A@7 ~ A@6 ~@4 A@6 ~@3 B C D E F G H I J K L M N O P ~>".pickRestart({
  A: "x!2", B: "x ~@7 x ~@6 x ~@7 x ~@7 x", C: "~@6 x ~@7 x ~@6 x ~@7 x ~@2", D: "~@5 x ~@6 x ~@7 x ~@7 x ~@3",
  E: "~@3 x ~@7 x ~@7 x ~@6 x ~@5", F: "~@2 x ~@6 x ~@7 x ~@7 x ~@6", G: "x ~@7 x ~@7 x ~@6 x ~@7 x",
  H: "~@7 x ~@6 x ~@17", I: "~@5 x ~ x", J: "~@4 x ~@6 x ~@7 x ~@7 x ~@4", K: "~@2 x ~@7 x ~@6 x ~@7 x ~@6",
  L: "~ x ~@6 x ~@23", M: "~@15 x ~@6 x ~@7 x ~", N: "~@5 x ~@7 x ~@7 x ~@6 x ~@3", O: "~@4 x ~@7 x ~@6 x ~@7 x ~@4",
  P: "~@3 x ~@28",
})).gain(3.08)

stack(trumpet, bass, cowbell, congas, congas_2, congas_3, shaker, guiro, guiro_2)

More by Ruben Gonzalez