Strudelify

GUANTANAMERA

Guitarichy

KeyG majorTempo120 bpm
0:00/0:00
// GUANTANAMERA — Guitarichy
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5835027; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 129 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.
// 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 A C A C A B A C A C A B A B A C A B A B A C A B A B A C A B A B A C A C A B A C A C A B A B A C A B A B A C A B A
  B A C A B A B A C A C A B A C A C A B A B A C A B A B A C A B A B A C A B A B A C A C A B A C A C A B A B A C A B A B
  A C A B A B A C A B D
>`.pickRestart({
  A: "~ [d3,d4] [e3,e4] [f#3,f#4] g4@2 b4 d5, ~ g3", B: "~ e4 g4 ~ f#4 d4!2 f#4, c4@3 d4@2 ~@3",
  C: "~ e4 ~@2 f#4 d4!2 f#4, c4@3 d4@2 ~@3", D: "~ [d3,d4] [e3,e4] [f#3,f#4] [g3,g4]@4",
})).s("gm_piano").gain(0.3)

// other · soprano sax · "Soprano Saxophone"
const soprano_sax = note("<A B C D E F G H ~@121>".pickRestart({
  A: "~@4 e4@2 e4!2", B: "e4 e4@3 ~@4", C: "~ c4 e4 c4 d4@2 e4 c4", D: "d4 d4@3 ~@4", E: "~@4 b3@2 c4 d4",
  F: "e4@3 d4@4 ~", G: "~ e4 b3 a3 g3@2 g3 f#3", H: "e4@3 d4@3 ~@2",
})).s("gm_soprano_sax").gain(0.3)

// other · trumpet · "C Trumpet"
const trumpet = note(`<
  ~@2
  [~ c4 e4 c4 d4@2 e4 c4]
  [d4 d4@3 ~@4]
  [~@4 b3@2 c4 d4]
  [e4@3 d4@4 ~]
  [~ e4 b3 a3 g3@2 g3 f#3]
  [e4@3 d4@3 ~@2]
  ~@121
>`).s("gm_trumpet").gain(0.3)

// bass · contrabass
const bass = note(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B A B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B A B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B ~
>`.pickRestart({
  A: "~ g2", B: "c3@3 d3@4 ~", C: "~ d2 e2 f#2 g2@4",
})).s("gm_contrabass").gain(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  A B C D E F G H ~@28 A B C D E F G H ~@20 I J K L M N O H ~@12 A B C D E F G H ~@20 A B C D E F G H A B C D E F G H ~
>`.pickRestart({
  A: "~@4 e4@2 e4!2", B: "e4 e4@3 ~@4", C: "~ c4 e4 c4 d4@2 e4 c4", D: "d4 d4@3 ~@4", E: "~@4 b3@2 c4 d4",
  F: "e4@3 d4@4 ~", G: "~ e4 b3 a3 g3@2 g3 f#3", H: "e4@3 d4@3 ~@2", I: "~@4 e5@2 e5!2", J: "e5 e5@3 ~@4",
  K: "~ c5 e5 c5 d5@2 e5 c5", L: "d5 d5@3 ~@4", M: "~@4 b4@2 c5 d5", N: "e5@3 d5@4 ~", O: "~ e5 c5 a4 g4@2 g4 f#4",
})).s("gm_alto_sax").gain(0.3)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B A B C B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B A B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B A B C B C B C B C B C B C B C B C B C B C B
  C B C B C B C B C B ~
>`.pickRestart({
  A: "~@7 x", B: "x ~@2 x", C: "~ x!2 ~@5",
})).gain(0.78)

// drums · bongos
const bongos_2 = s("bongo:18").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~ x!2 ~",
})).gain(0.78)

// drums · congas
const congas = s("conga:13").struct(`<
  ~ 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 ~ 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 ~ 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 ~ 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 ~
>`.pickRestart({
  A: "x ~ x ~ x!2 ~ x", B: "x ~ x!2 ~ x!3",
})).gain(0.95)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~ 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 ~ 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 ~ 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 ~ 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 ~
>`.pickRestart({
  A: "~ x!2 ~", B: "x ~@2 x ~@3 x",
})).gain(0.95)

// drums · guiro
const guiro = s("guiro:0").struct("<A B@31 A B@31 A B@31 A B@31 ~>".pickRestart({
  A: "~@4 x ~ x!2", B: "x ~ x!3 ~ x!2",
})).gain(6.29)

// drums · claves
const claves = s("clave:2").struct(`<
  ~ 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 ~ 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 ~ 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 ~ 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 ~
>`.pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "~ x!2 ~",
})).gain(1.46)

stack(piano, soprano_sax, trumpet, bass, alto_sax, bongos, bongos_2, congas, congas_2, guiro, claves)