Strudelify

guantanamera

Joseíto Fernández

KeyD♭ majorTempo120 bpm
0:00/0:00
// guantanamera — Joseíto Fernández
// 120 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 1 "Vibraphone" named as a mallet, played on vibraphone (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/5892345; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 103 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// chords · acoustic guitar nylon · "Balalaika"
const acoustic_guitar_nylon = note(`<
  A B C D E ~@2 F G H G H G ~@12 I G F G F G F G ~@12 I G F G F G F G ~@12 I G F G F G F G ~@12 I G F G F G F G H G H G
  H G J G K L
>`.pickRestart({
  A: "~ eb3 f3 gb3 ab3 bb3 eb4@2", B: "db4 f4 ab4@2 eb4 gb4 bb4@2, f3 ~ gb3 ~", C: "~ c5@2 db5 bb4 gb4 eb4 c4, ~@3 gb3",
  D: "db4 f4 ab4@2 ~ eb4 gb4 eb4, f3 ~ gb3 ~", E: "~@2 c5 db5 bb4 gb4 eb4@2",
  F: "[ab3,db4,f4]@4 [bb3,db4,gb4]@3 [c4,eb4,ab4]", // Db Gb Ab
  G: "~ [c4,eb4,ab4,c5] ~ [c4,eb4,ab4] [bb3,db4,gb4]@2 [c4,eb4,ab4] [c4,eb4,gb4]", // Ab Gb Ab Cdim
  H: "~ [db3,bb3] [eb3,c4] [f3,db4] [gb3,eb4] [ab3,f4] [bb3,gb4] [c4,ab4]", // Gb Cm Db Ebm Db Ebm Fm
  I: "[db4,gb4,bb4]@4 [bb3,db4,gb4]@3 [c4,eb4,ab4]", // Gb Ab
  J: "~ [db4,bb4] [eb4,c5] [f4,db5] [gb4,eb5] [ab4,f5] [bb4,gb5] [c5,ab5]", // Gb Cm Db Ebm Db Ebm Fm
  K: "[ab4,db5,f5] [db3,bb3] [eb3,c4] [f3,db4] [gb3,eb4] [ab3,f4] [bb3,gb4] [ab4,db5,f5]", L: "[db4,ab4,db5] ~",
})).s("gm_acoustic_guitar_nylon").gain(0.17)

// chords · marimba
const marimba = note(`<
  ~@5 A@7 B C@8 D E@2 F G@8 C@8 D E@2 F G@8 C@8 D E@2 F H@7 B C@8 I E@2 F G@8 C@8 J K
>`.pickRestart({
  A: "[db3@3 gb3 gb3@2 ab3 ~@2 [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [db3,c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [db3,c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [db3,c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [ab3,c4,eb4,ab4], ~@7 ab3@4 ~@4 db3@4 ~@12 db3@4 ~@12 db3@4 ~@5, ~@16 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ab3@4 ~@5 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ab3@4 ~@5 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ~]/7", // Ab Ab7 Gb Ab Cdim Ab Ab7 Gb …
  B: "~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [c4,eb4,ab4] [c4,eb4,gb4], ab3@3 ~@3 db3@2", // Ab Ab7 Gb Ab Cdim
  C: "[[db4,f4,ab4]!2 ~ gb3 [gb4,bb4,db5]!2 ab3 ~ [ab4,c5,eb5]!2 ~ gb3 [gb4,bb4,db5]!2 ~@2 [db4,f4,ab4]!2 ~ gb3 [gb4,bb4,db5]!2 ab3 ~ [ab4,c5,eb5]!2 ~ gb3 [gb4,bb4,db5]!2 ~@2 [db4,f4,ab4]!2 ~ gb3 [gb4,bb4,db5]!2 ab3 ~ [ab4,c5,eb5]!2 ~ gb3 [gb4,bb4,db5]!2 db3 ~ [db4,f4,ab4]!2 ~ gb3 [gb4,bb4,db5]!2 ab3 ~ [ab4,c5,eb5]!2 ~ gb3 [gb4,bb4,db5]!2 db3@2, db3@3 ~ gb3@2 ~ ab3@4 ~ gb3@2 db3@5 ~ gb3@2 ~ ab3@4 ~ gb3@2 db3@5 ~ gb3@2 ~ ab3@4 ~ gb3@2 ~ db3@4 ~ gb3@2 ~ ab3@4 ~ gb3@2 ~@2]/8", // Db Gb Ab Gb Db Gb Ab Gb …
  D: "~@3 eb3 eb3@3 ab3, [db4,f4,ab4] [eb4,gb4,bb4]", // Db Ebm
  E: "[ab3@3 gb3 gb3@3 ~@4 eb3 [eb3,eb4,gb4,bb4]@3 [gb3,eb4,gb4,bb4], [eb4,ab4,c5] [db4,gb4,bb4] [db4,f4,ab4] ~, ~@7 db3@4 ~@5]/2", // Ebm Ab Gb Db
  F: "~ ab3 c4 eb4 ab4 ~ [ab2,ab3,ab4]@2", // Ab
  G: "[db3@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [db3,c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [c4,eb4,ab4] [c4,eb4,gb4], [bb3,db4,gb4]@4 [bb3,db4,gb4]@3 ab3@4 ~@4 db3@4 ~@11 db3@5 ~@11 db3@5 ~@11 db3@2, ~@16 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ab3@4 ~@5 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ab3@4 ~@5 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ab3@4 ~@5]/8", // Ab Ab7 Gb Ab Cdim Ab Ab7 Gb …
  H: "[db3@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [db3,c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [c4,eb4,ab4] ~ [c4,eb4,ab4,c5] ~ [gb3,c4,eb4,ab4] [gb3,bb3,db4,gb4]@2 [c4,eb4,ab4] [c4,eb4,gb4] ~@3 gb3 gb3@2 ab3 [ab3,c4,eb4,ab4], [bb3,db4,gb4]@4 [bb3,db4,gb4]@3 ab3@4 ~@4 db3@4 ~@11 db3@5 ~@11 db3@5 ~@5, ~@16 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ab3@4 ~@5 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ab3@4 ~@5 [ab3,db4,f4]@4 [bb3,db4,gb4]@3 ~]/7", // Ab Ab7 Gb Ab Cdim Ab Ab7 Gb …
  I: "db3@3 eb3 eb3@3 ab3, [db4,f4,ab4] [eb4,gb4,bb4]", J: "~@6 db3!2, [db4,f4,ab4]", K: "[db4,f4,ab4] ~, db3@3 ~@5",
})).s("gm_marimba").gain(0.27)

// bass · electric bass finger · "Basso elettrico senza tasti (Fretless)"
const bass = note("<~@5 A@7 B C@8 D E@2 F G@8 C@8 D E@2 F G@8 C@8 D E@2 F H@7 B C@8 I E@2 F G@8 C@8 J K>".pickRestart({
  A: "[db2@3 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2 db2@4 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2 db2@4 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2 db2@4 gb2 gb2@2 ab2!2]/7",
  B: "ab2@3 gb2 gb2@2 db2@2",
  C: "[db2@3 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2@5 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2@5 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2 db2@4 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2@2]/8",
  D: "~@3 eb2 eb2@3 ab2", E: "[ab2@3 gb2 gb2@3 db2@4 eb2 eb2@3 gb2]/2", F: "~ ab2 c3 eb3 ab3 ~ [ab1,ab2]@2",
  G: "[db2@3 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2 db2@4 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2@5 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2@5 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2@2]/8",
  H: "[db2@3 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2 db2@4 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2@5 gb2 gb2@2 ab2 ab2@4 gb2 gb2@2 db2@5 gb2 gb2@2 ab2!2]/7",
  I: "db2@3 eb2 eb2@3 ab2", J: "~@6 db2!2", K: "db2@3 ~@5",
})).s("gm_electric_bass_finger").gain(0.04)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@5 ~@4 B@15 ~ B@19 ~ B@19 ~ B@19 ~ B@16 ~@2>".pickRestart({
  A: "x!4", B: "~ x ~ x",
})).gain(1.51)

// drums · shaker
const shaker = s("sh").struct("<A@5 ~@4 A@15 ~ A@19 ~ A@19 ~ A@19 ~ A@16 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.3)

// drums · guiro
const guiro = s("guiro:0").struct(`<
  ~@6 A B@6 C@11 B@3 C B C@2 B@2 C@11 B@3 C B C@2 B@2 C@11 B@3 C B C@2 B@2 C@11 B@3 C B C@2 B@4 C B C@2 B@2 D E
>`.pickRestart({
  A: "~@6 x!2", B: "~@2 x!2 ~@2 x!2", C: "x ~ x!3 ~ x!2", D: "x ~@5 x!2", E: "x",
})).gain(6.29)

// drums · guiro
const guiro_2 = s("guiro:4").struct(`<
  ~@7 A@6 ~@12 A@2 ~ A ~@2 A@2 ~@12 A@2 ~ A ~@2 A@2 ~@12 A@2 ~ A ~@2 A@2 ~@12 A@2 ~ A ~@2 A@4 ~ A ~@2 A@2 ~@2
>`.pickRestart({
  A: "x!2",
})).gain(6.29)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C D
>`.pickRestart({
  A: "~ x!2 ~", B: "x ~@2 x ~@2 x ~", C: "x ~@5 x!2", D: "x",
})).gain(1.46)

stack(acoustic_guitar_nylon, marimba, bass, cabasa, shaker, guiro, guiro_2, claves)