Strudelify

siboney

Ruben Gonzalez

KeyE♭ majorTempo110 bpm
0:00/0:00
// siboney — Ruben Gonzalez
// 110 bpm, 4/4, key Eb 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/5494441; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/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.

// other · piano
const piano = note(`<
  A B C D E F G H I J@2 K L M N O@2 P Q@2 R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT
  AH AU AV AW AX AY AZ BA BB Z BC BD B C BE BF
>`.pickRestart({
  A: "~@2 [c4,c5,c6] [d4,d5,d6]", // C D
  B: "[eb5,eb6]@2 [d4,d5,d6] [c4,c5,c6] ~ [bb3,bb4,bb5] [ab3,ab4,ab5] ~ [g3,g4,g5] ~ [d3,d4,d5] [f3,f4,f5] ~ [eb3,eb4,eb5] [d3,d4,d5] ~, eb4 ~@15", // Eb D C Bb Ab G D F …
  C: "[c3,c4,c5] ~ [d3,d4,d5] [c3,c4,c5] ~ [bb2,bb3,bb4] [ab2,ab3,ab4] ~ [g2,g3,g4] ~ [d2,d4] [f2,f4] ~ [eb2,eb4] [d2,d4] ~", // C D C Bb Ab G D F …
  D: "[c2,c4]@4 [eb3,g3,c4] ~@7 [eb3,g3,c4] ~@3", E: "~@2 [c3,c4] [eb3,eb4]", F: "[g3,g4] [bb3,c5,eb5,bb5], gb4 ~@15",
  G: "~ a5@7 [f4,ab4,c5,ab5]@4 [ab4,ab5] [bb4,bb5] ~ [ab4,ab5], [a3,c5,eb5] ~", // Fm Ab Bb Ab Adim
  H: "[g4,g5] ~@2 [eb4,eb5] ~@4 [f4,ab4,c5,ab5]@4 [ab4,ab5] [bb4,bb5] ~ [ab4,ab5]", // G Eb Fm Ab Bb Ab
  I: "[g4,g5] ~@2 [eb4,eb5] ~@4 [ab3,c4,f4,f5]@2 ~@2 [ab3,d4,f4,d5]@4", // G Eb Fm Ddim
  J: "[c2@4 [c4,c5,eb5,c6]@8 [bb3,c5,eb5,bb5]@8 ~ g5@5 ~@2 [c3,c4,c5]@2 [eb3,eb4,eb5]@2, ~@10 [g3,c5,eb5]@3 ~@3]/2", // Cm Cm7 C Eb Cm
  K: "[g3,g4]@15 ~, gb4 ~@15", L: "~@8 [bb4,b4] [c4,c5]@5 ab4 bb4", M: "g4@2 ~ eb4 ~@4 [c4,c5,c6]@4 ab4 bb4 ~ ab4",
  N: "g4 ~@2 eb4 ~@4 f4@4 d4@4", O: "[eb4@19 ~@5 [e4,f4] g4@3 [b3,b4]@4]/2", P: "[g3,b3,d4,g4,b4,d5]",
  Q: "[~@2 [ab3,f4,ab4,c5]@9 ~ [c5,c6]@2 [d5,d6]@2 [c5,c6]@4 [g4,d5,g5,b5]@8 [g4,d5,g5]@4, ~@3 [f4,ab4]@2 ~@3]/2", // Fm C D C G G5 Fm
  R: "~@2 [c4,f4,ab4]@4 [c4,f4,bb4]@2 [f4,ab4,c5,c6]@2 [f4,ab4,d5,d6]@2 [f4,ab4,c5,c6] [f4,ab4,d5,d6] [f4,ab4,c5,c6] [f4,ab4,d5,d6]", // Fm Fsus4 Fm Ddim Fm Ddim Fm Ddim
  S: "[f4,ab4,c5,c6] [g4,d5,b5]@2 [g4,g5]", // Fm G
  T: "[ab4,ab5]@6 [f4,f5] [g4,g5] [ab4,ab5] ~ [bb4,bb5] [ab4,ab5] [bb4,bb5] ~ [ab4,ab5] [bb4,bb5]", // Ab F G Ab Bb Ab Bb Ab …
  U: "[g4,g5]@6 c5 [ab4,bb4] f4@6 bb4 [g4,ab4], ~@8 g4 ~@7", // G Absus2 Abmaj7
  V: "eb4@6 f4 eb4 d4@2 ~@2 [c3,c4,c5]@2 [eb3,eb4,eb5]@2, f4 ~@15", W: "[g3,g4]@2 eb4 b3@3 eb4@2, gb4 ~@15",
  X: "bb3@2 ~@2 [f4,ab4,c5,ab5] ~ [c4,f4,ab4,c5,ab5] ~", // Fm
  Y: "[g4,g5] ~@2 [eb4,eb5]@2 ~@3 [f4,ab4,c5,ab5]@2 ~@2 [c4,f4,ab4,c5,ab5]@2 ~@2", // G Eb Fm
  Z: "[g4,g5] ~@2 [eb4,eb5]@2 ~@3 [f4,f5]@4 [d4,d5]@4", // G Eb F D
  AA: "[c4,c5]@4 ~@2 [b2,b4] [c3,c5] [db3,db5]@2 [e3,e5]@2 [g3,g5]@2 [gb3,gb5]@2", // C B C Db E G Gb
  AB: "[f3,f5]@2 ~@8 [e3,e4,e5]@3 [g3,g4,g5]@3", // F E G
  AC: "[c2,c3,e5,e6]@6 [g4,g5] ~ [ab3,ab4,ab5]@6 [e3,e4,e5] [bb3,bb4,bb5], ~@3 g3 ~@4", // C G Ab E Bb
  AD: "[a3,a4,a5]@3 ~ [d5,d6]@3 [e5,e6], ~@2 d4 ~", AE: "[d5,d6]@2 ~ [c5,c6] ~@10 g4 [a4,b4], [c3,c4]@3 ~@5",
  AF: "[d5,d6]@2 ~ [c5,c6] ~@2 [b4,b5] ~ [a4,a5]@4 ~@2 [e4,e5] ~, [e3,g3,b3] [eb3,gb3,c4], c5 ~@15", // D C B A E Em Cdim
  AG: "[g3,d4]@2 [g4,g5] ~@3 [g3,d4,b4,b5]@2 ~@4 [b2,d3,b4,d5] ~ [e3,e5]@2, [f4,f5] ~@15", // G5 G Bm E F
  AH: "[f3,f5] [g3,g5] [f3,f5] [e3,e5] [d3,d5] [e3,e5] [d3,d5] [c3,c5] [b2,b4] [c3,c5] [b2,b4] [a2,a4] [g2,g4] [a2,a4] [g2,g4] [gb2,gb4]", // F G F E D E D C …
  AI: "[f2,f4] ~@7 db4 d4 e4 f4 g4 a4 b4 c5", AJ: "d5@2 ~@2 d6 a5 f5 d5 db6@6 db6 [f5,a5], ~ [a2,d3]@3 db3@4",
  AK: "[c3,c5]@4 [c4,c5,a5,c6]@3 [d4,d5,b5,d6], d5 ~@15", // C F G
  AL: "[a5,c6]@4 [b3,b4,g5,b5]@9 [a3,a4,f5,a5] ~ [b3,b4,g5,b5], [c4,c5] ~@7", // Am Em Dm Em C
  AM: "[a3,a4,f5,a5]@3 [g3,g4,e5,g5]@3 [a3,a4,f5,a5] ~ [g3,g4,e5,g5]@2 [gb3,gb4,eb5,gb5]@4 [f3,f4,d5,f5]@2", // Dm C Dm C Ebm Dm
  AN: "[c3,c4,c5,e5]@6 [c4,c5,c6] [b3,b4,b5] [c4,c5,c6]@6 [g3,g4,g5] [gb3,gb4,gb5]", // C B C G Gb
  AO: "[g3,g4,g5]@6 [e3,e4,e5] [eb3,eb4,eb5] [e3,e4,e5]@6 [g4,g5]@2", // G E Eb E G
  AP: "[c2,c3,e5,e6]@6 [g4,g5] ~ [ab3,ab4,ab5]@6 [b3,b4,b5]@2, ~@3 g3 ~@4", // C G Ab B
  AQ: "[bb3,bb4,bb5] [a3,a4,a5]@6 ~ [f3,f4,f5,f6]@6 [e5,e6]@2", AR: "[c3,c4]@6 [c5,c6] ~@7 g4 [a4,b4], [d5,d6] ~@3",
  AS: "[d5,d6]@2 ~ [c5,c6] ~@2 [b4,b5] ~ [a4,a5]@4 ~@2 [e4,e5]@2, [e3,g3,b3] [eb3,gb3,c4], c5 ~@15", // D C B A E Em Cdim
  AT: "[f4,f5]@2 [g4,g5] ~@3 [g3,d4,b4,b5]@2 ~@4 [b2,d3,b4,d5] ~ [e3,e5]@2, [g3,d4] ~@3", // F G Bm E G5
  AU: "[f2,f4] ~@5 f4 [eb4,e4] [db4,d4] d4 e4 f4 g4 a4 b4 c5", // F Emaj7 Dmaj7
  AV: "d5@2 ~@2 d6 a5 f5 d5 db6@6 db6 [f5,a5], ~ [a2,d3]@2 ~ db3@4", // F D5
  AW: "[c3,c5]@2 [c4,c5,a5,c6] [d4,d5,b5,d6], d5 ~@15", // C F G
  AX: "~ c6@5 ~ b5@6 [a3,a4,f5,a5] ~ [b3,b4,g5,b5], [c4,c5,f5,a5]@6 [b3,b4,d5,g5]@7 ~@3", // Dm Em F G
  AY: "[a3,a4,f5,a5]@3 [g3,g4,e5,g5]@2 [a3,a4,f5,a5] ~ [g3,g4,e5,g5] [gb3,gb4,eb5,gb5]@4 [f3,f4,d5,f5]@4", // Dm C Dm C Ebm Dm
  AZ: "~ e5@7 ~@8, [c3,c4,g4,c5] ~", BA: "~@2 [f4,ab4,c5,ab5] [c4,f4,ab4,c5,ab5]",
  BB: "[g4,g5] ~@2 [eb4,eb5]@2 ~@3 [f4,ab4,c5,ab5]@4 [c4,f4,ab4,c5,ab5]@4", BC: "[eb4,eb5] ~ eb4 g3 a3 eb4 g3 g2",
  BD: "c2 ~ [c4,c5,c6] [d4,d5,d6]", BE: "[c2,c4]", BF: "[c2,c3,d5,eb5,g5,d6]",
})).s("gm_piano").gain(0.3)

// bass · acoustic bass · "Bajo acústico"
const bass = note(`<
  ~@3 A B A C@2 D A@3 C@2 D A E F G F G H I J K A C@2 L M N O P Q R S T U V W X@2 B@3 Y Z R S T U V AA AB AC B AD AE AF
  AG AH AG ~@2 AI
>`.pickRestart({
  A: "c2@3 g2 c3@3 g2", B: "c2@3 g2 c3@2 g2@2", C: "c2@3 g2 f2@2 f2@2", D: "c2@3 g2 f2@2 g2@2", E: "c2@3 g2 f2@2 b2@2",
  F: "d3@3 d3 d2@2 g2@2", G: "ab2@3 ab2 f2@2 b2@2", H: "d3@3 d3 d2@3 ab2", I: "ab2@2 ab2 d2", J: "g2 f2", K: "eb2 d2",
  L: "c2@3 ~ f2@2 g2@2", M: "c2@4 ~@2 b1 c2 db2@2 e2@6", N: "d3 d2 g2 g3", O: "c2@3 g3 ab2@2 g3@2",
  P: "c3@2 g3@2 ~ c3@3", Q: "c2@3 ~ d2@2 g2@2", R: "b2@3 b2@3 b2@2 c2@6 d2@2", S: "g2@3 g2@3 ~@2",
  T: "g2@2 d2 d2@3 g3@2", U: "g2 ~ f2!2", V: "d2@3 a2 a2@3 a2", W: "d2@2 ~ g2@2 f2@3",
  X: "[d2@2 ~ g2@2 d3@2 d2@3 ~@2 g2@2 e2@2]/2", Y: "c2 ~", Z: "c2@3 ~ c3@2 g2@2", AA: "d2 ~ a2 d2",
  AB: "g2@2 ~ d3 d3@2 ~ d2", AC: "d2 g2!3", AD: "c2 ~ f2@2", AE: "c2 ~ f2 eb2", AF: "c2@3 f2 d2@4", AG: "c2 ~@3",
  AH: "~@2 c3 g2", AI: "c2 c2@7",
})).s("gm_acoustic_bass").gain(0.48)

// drums · bongos
const bongos = s("bongo:4").struct("<~@3 [~@3 x!2 ~ x ~@5 x ~@3]!27 ~ [x!2]!29 x ~@4>").gain(0.23)

// drums · bongos
const bongos_2 = s("bongo:18").struct("<~@3 [x ~@3 x!2 ~ x]!27 x [~ x!3 ~ x!3]!29 ~@5>").gain(0.23)

stack(piano, bass, bongos, bongos_2)

More by Ruben Gonzalez