Strudelify

sabor a mi BW (Done)

adriel flores

KeyG majorTempo88 bpm
0:00/0:00
// sabor a mi BW (Done) — adriel flores
// 88 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 63, 4/4 at bar 64) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/5923095; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 68 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(88/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 · baritone sax · "Baritone Saxophone"
const baritone_sax = note("<~@21 A B C@2 D E F G H I ~@18 J K ~@2 L M N@2 O P Q R S T U ~@4>".pickRestart({
  A: "~@6 g2 a2 a#2@2 a2@2 g2@2 f2@2", B: "g#2 a2@5 f2@2 c#3 ~ d3@2 d3@4", C: "[a#2@22 ~@6 c4 ~ a#3 ~]/2",
  D: "c4@2 g#3@2 ~@7 a#3 b3 c4 a#3@2", E: "d#4@2 g#3@2 ~@8 d4@2 a#3 ~",
  F: "c4 b3 c4 a#3 d#4@2 a#3 ~ c4@3 a#3 c#4 ~ d4 a#3", G: "c4@3 ~@3 g2 a2", H: "a#2@2 b2 c3@7 ~@2 g2@2 a2@2",
  I: "a#2 c3 c#3 d3 d3@8 ~@4", J: "~@11 a#2 b2 c3 a#2 ~", K: "c3@2 g#2 ~@13", L: "~@6 g2 a2",
  M: "a#2 c3 c#3 d3@8 ~ a2@2 a#2@2",
  N: "[c3@2 d3@3 c3@2 d3 d#3@3 d3 d#3 d3 d#3 c3@5 ~ c#3 d3 d#3 e3 f3@2 ~@2 d3@2 c3, ~@15 d3 ~@16]/2",
  O: "a#2 ~ c#3 d3@5 d3@2 g2@2 c3 c#3 d3!2", P: "d3@9 ~ c3 d3 d#3 [d3,d#3] d3 c3", Q: "a#2@2 b2 c3@3 g2@4 a#2 b2 c3@4",
  R: "d3 c3@8 a2@2 a#2 c3 a#2 a2 g2", S: "a#2@6 f2 g2 a2 a#2@3 a2 g2 f2@2", T: "a2 ~@2 f2", U: "d3 f2 a#3 ~",
})).s("gm_baritone_sax").gain(0.4)

// bass · electric bass finger · "Electric Bass"
const bass = note(`<
  ~ A B C D E F G H E B C D E I J K E B C D E L M N O P Q A R S T U E B C D E L M V E B C D E L M N W P Q X R S T Y E B
  C D E Z@6
>`.pickRestart({
  A: "d#2@3 d#2@3 ~ d#2", B: "g#1@3 g#1@3 ~ g#1", C: "a#1@3 a#1 c2@2 ~ c2", D: "d2@3 d2 c#2@2 ~ c#2",
  E: "c2@3 c2@3 ~ c2", F: "f1@3 f2@3 ~ f1", G: "d2@3 d2@3 ~ d2", H: "g1@3 g1@3 ~ g1", I: "f1@3 f1 c2@2 ~ f1",
  J: "a#1@3 a#1@3 ~ a#1", K: "d2@3 d2 g2@2 ~ g1", L: "f1@3 f1 f1@2 ~ f1", M: "a#1@3 d#2@3 ~ d#2",
  N: "a#1@3 a#1 a#1@2 ~@2", O: "f1@2 f2 a#1 ~@2 g1!2", P: "f1@2 f2 f1 ~@2 a#1!2", Q: "d#2@3 d#2 g#2@3 g#2",
  R: "g1@2 f2 c2 ~@2 c2!2", S: "g1@2 g2 c2 ~@2 c2!2", T: "c3 g1", U: "c2 g1", V: "a#1@2 d2 g1",
  W: "f1@2 f2 a#1 ~@2 a#1!2", X: "d#2@3 d#2@3 d#2!2", Y: "c2 c3",
  Z: "[f1@12 a#1@3 a#1@3 ~ a#1 d#2@3 d#2@3 ~ d#2 g#1@3 g#1@3 ~ g#1 a#1@3 a#1@3 a#1@2 ~@4]/6",
})).s("gm_electric_bass_finger").gain(0.3)

// other · piano
const piano = note("<A B C D E F G H I ~@31 J K L M ~@20 N O P@2>".pickRestart({
  A: "~@9 g4!2 a4 a#4 c5 d5 d#5", B: "f5@8 ~ d#5 d5 c5 f5 d#5 d5 c5", C: "f5 d#5 f5@2 f5@4 ~ d#5!2 d5!2 c5 a#4 a4",
  D: "c5 a4 ~ a#4 c5 a4 ~ a#4 c5 a4 ~ a#4 c5 a4 ~ a#4", E: "c5@8 ~ a#4 a4 g4 f#4 g4 a4 a#4",
  F: "d5 a#4 ~ c5 d5@4 ~@2 d#4 f4 g4 a4 a#4 c5", G: "d5@8 ~ c5!2 a#4!2 a4!2 g4",
  H: "a4 f4 ~ g4 a4@4 ~@2 a4@2 ~ f4 e4 f4", I: "g#4 g4", J: "~@6 d5 d#5 f5 ~ d#5 ~@2 d5@3", K: "d5@2 g4 d5 ~@4",
  L: "~@6 c5 d5 d#5 ~ d5 ~@2 c5@3", M: "c5@2 f4 c5 ~@4", N: "~ g4!2 a4 a#4 c5 d5 d#5 f5@8",
  O: "~ d#5 d5 c5 f5 d#5 d5 c5 f5 d#5 f5@2 f5@4", P: "[~ d#5!2 d5!2 c5 a#4 a4 c5@15 ~ c5@4 ~@4]/2",
})).s("gm_piano").gain(0.3)

// drums · congas
const congas = s("conga:13").struct(`<
  ~
  [~@2 x ~@4 x]!7
  [~@14 x!2]
  [~@2 x ~@4 x]!53
  [~ x ~@2]
  [~@3 x]
  [~@3 x ~@2 x ~]!3
  [~@3 x ~@4]
>`).gain(0.95)

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

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~ 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 B A B A B A B A B A B A B A B A B A B
  A B A C D E F E G
>`.pickRestart({
  A: "~@3 x!4 ~", B: "x ~@2 x!4 ~", C: "x ~@2 x ~@4", D: "~@4 x ~@2 x", E: "x!3 ~@4 x", F: "x!3 ~ x ~@2 x",
  G: "x!3 ~@5",
})).gain(0.95)

// drums · guiro
const guiro = s("guiro:0").struct(`<
  ~
  [x ~ x!2 ~@2 x ~]!7
  ~
  [x ~ x!2 ~@2 x ~]!53
  [x ~ x!2 ~@4]
  [~@4 x ~ x!2]
  [~@2 x ~ x ~ x!2]!3
  [~ x ~@2]
>`).gain(6.29)

// drums · triangle
const triangle = s("triangles:35").struct("<~ [~ x]!7 ~ [~ x]!54 ~ x!4>").gain(2.59)

// drums · shaker
const shaker = s("sh").struct("<~ [x!8]!7 ~ [x!8]!53 [x!4 ~@4] [~@4 x!4] [x!8]!3 [x!4 ~@4]>").gain(0.3)

stack(baritone_sax, bass, piano, congas, congas_2, congas_3, guiro, triangle, shaker)