Strudelify

La Bamba BW (Done)

Huy Tran

KeyD majorTempo150 bpm
0:00/0:00
// La Bamba BW (Done) — Huy Tran
// 150 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5922992; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(150/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · clarinet · "B♭ Clarinet"
const clarinet = note(`<
  ~@5 A B C@2 A B D@2 A B C@2 E C@4 ~ F G H I H I ~@2 D@2 A B C@2 E ~@26 F G H I H I ~ J K L ~ M N O P
>`.pickRestart({
  A: "c5 a4", B: "b4 g4", C: "[c5@8 a4@2 ~@2 a4@2 b4@10 b4@3 a4@2 g4@3]/2", D: "[c5@4 a4 ~ a4 b4@5 g4@4]/2",
  E: "c5@8 a4@2 ~@2 a4@2 b4 ~", F: "c5@4 a4 ~ a4 b4", G: "~ b4@6 ~", H: "e5@4 c5 ~ c5 d5", I: "~ d5@6 ~",
  J: "g5 b4 d5 f5 a5!2 g5 f5", K: "e5@2 ~@4 e5!2", L: "e5 ~@7", M: "~ c5 e5 g5 a#5!2 a5 g5", N: "f5@2 a5 c6 a#5!2 d6@2",
  O: "c6 c5 e5 g5 a#5!2 a5 g5", P: "f5@2 ~@2 a5!2 a5@2",
})).s("gm_clarinet").gain(0.3)

// other · alto sax · "Alto Saxophone"
const alto_sax = note(`<
  ~@4 A B C D E B C D F B C D G H G H G H ~ I J I J I J ~@2 D F B C D G H K ~@11 K ~@13 I J I J I J ~ L M N O N P Q R
>`.pickRestart({
  A: "[b4,c5]!16", B: "c4 ~ c4 ~ a3!2 ~ b3", C: "~ g4 b4 d5 f5!2 e5 d5", D: "c4 ~ c4 ~ a3 ~ a3 b3",
  E: "~@2 g4@2 b4@2 d5@2 f5@3 e5@2 d5@3", F: "~ g4 b4 d5 f5 e5 d5 e5",
  G: "~@2 [g3,g4]@2 [b3,b4]@2 [d4,d5]@2 [f4,f5]@3 [e4,e5]@2 [d4,d5]@3", H: "c4@2 ~@2 c4@2 ~@2 a3@2 a3@2 ~@2 b3 ~",
  I: "c4@4 a3@2 a3 b3", J: "~ b3@6 ~", K: "c5 ~@7", L: "b4 b3 d4 f4 a4!2 g4 f4", M: "e4@2 ~@4 c4!2", N: "c4 ~@3",
  O: "f3@2 a3 c4 a#3!2 d4@2", P: "f4@2 a4 c5 a#4!2 d5@2", Q: "c5 c4 e4 g4 a#4!2 a4 g4", R: "f4@2 ~@2 f4!2 f4@2",
})).s("gm_alto_sax").gain(0.25)

// other · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  A B C B D B E F G B E F H B C F I J I J I J ~ K L K L K L F M F H B C F I J N ~@11 N ~@11 F O K L K L K L P Q R S T U
  T V W
>`.pickRestart({
  A: "~@5 g3 a3 b3", B: "c4@2 e4 c4 f4@2 a4@2", C: "g4 g3 b3 d4 f4!2 e4 d4", D: "g4 ~@7",
  E: "[g3,g4] g3 b3 d4 f4!2 e4 d4", F: "c4@2 e4 c4 f4 ~ a4@2", G: "g4@2 g3@2 b3@2 d4@2 f4@3 e4@2 d4@3",
  H: "[g3,g4] g3 b3 d4 ~@4", I: "[g3,g4]@2 g3@2 b3@2 d4@2 f4@3 e4@2 d4@3", J: "c4@2 e4 c4 f4@2 a4 ~", K: "c4@4 a3@3 g3",
  L: "~ g3 b3 d4 f4!2 e4 d4", M: "[g3,g4] ~@7", N: "c4 ~@7", O: "~ g3@7", P: "c4@2 e4 c4 f4 ~ a4 ~",
  Q: "g3!2 b3 d4 f4!2 e4 d4", R: "c4@2 ~@4 [e3,e4]!2", S: "[e3,e4] ~@3", T: "f3@2 a3 c4 a#3!2 d4@2", U: "c4 ~@3",
  V: "c4 c3 e3 g3 a#3!2 a3 g3", W: "f3@2 ~@2 a3!2 a3@2",
})).s("gm_tenor_sax").gain(0.4)

// other · baritone sax · "Baritone Saxophone"
const baritone_sax = note(`<
  A B C B D B C E F B C E G B C E F B F B F B ~ B C B C B C B D E G B C E F B H ~@11 H ~@11 B I B C B C B C J C K L M N
  M O P
>`.pickRestart({
  A: "~@5 g2 a2 b2", B: "c3@2 e3 c3 f3@2 a3@2", C: "g3 g2 b2 d3 f3!2 e3 d3", D: "g3 ~@7", E: "c3@2 e3 c3 f3 ~ a3@2",
  F: "g3@2 g2@2 b2@2 d3@2 f3@3 e3@2 d3@3", G: "g3 g2 b2 d3 ~@4", H: "c3 ~@7", I: "~ g3!7", J: "c3@2 e3 c3 f3@2 a3 ~",
  K: "c3@2 ~@4 c3!2", L: "c3 ~@3", M: "f3@2 a3 c4 a#3!2 d4@2", N: "c4 ~@3", O: "c4 c3 e3 g3 a#3!2 a3 g3",
  P: "f3@2 ~@2 f3!2 f3@2",
})).s("gm_baritone_sax").gain(0.4)

// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
  A B C B D E F E D G F E D H F E D H F E D H@2 F E F ~@5 E D H F E D H@2 F E I H F E I H F E I H F E I H F E I H F E I
  B D B D B D B D B D B J B C B D K
>`.pickRestart({
  A: "~@5 c2 d2 e2", B: "f2@2 a2 c3 a#2!2 d3@2", C: "c3 ~@3", D: "c3 c2 e2 g2 a#2!2 a2 g2", E: "c2@4 f2!2 ~ g2",
  F: "~ g2 ~ g2 g2@2 g2@2", G: "f2@2 ~ g2 g2@2 g2@2", H: "f2@2 c2@2 f2!2 ~ g2", I: "~ c2 e2 g2 a#2!2 a2 g2",
  J: "c3 c2 e2 g2 a#2!2 a2 ~", K: "f2@2 ~@2 f2!2 f2@2",
})).s("gm_electric_bass_pick").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@3 A@19 B A@7 C A@6 C ~@24 A@17>".pickRestart({
  A: "x ~@3 x!3 ~", B: "x!2", C: "x",
})).gain(0.3)

// drums · rim
const rim = s("rim").struct(`<
  ~@3
  [x!4 ~@4 x!4 ~@4]!19
  ~
  [x!4 ~@4 x!4 ~@4]!7
  x
  [x!4 ~@4 x!4 ~@4]!6
  ~@25
  [x!4 ~@4 x!4 ~@4]!17
>`).gain(0.3)

// drums · snare
const snare = s("sd").struct("<~@3 A@19 B A@7 ~ A@6 C D@24 A@17>".pickRestart({
  A: "~ x ~ x", B: "~@3 x!2 ~ x ~@4 x!2 ~ x ~", C: "x ~@3 x!2 ~ x!3 ~ x!3 ~ x", D: "~ x ~@2",
})).gain(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@22 A ~@15 B C B C B C B C B C B C B C B C B C B C B C B C ~@17>".pickRestart({
  A: "x!2", B: "x ~@4 x ~@2", C: "x ~@2 x",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@3 [x!3 ~]!19 ~ [x!3 ~]!7 x [x!3 ~]!6 ~@25 [x!3 ~]!17>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@3 [~@3 x]!19 ~ [~@3 x]!7 ~ [~@3 x]!6 ~@25 [~@3 x]!17>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@38 x!24 ~@17>").gain(0.4)

stack(clarinet, alto_sax, tenor_sax, baritone_sax, bass, kick, rim, snare, low_tom, hihat, open_hat, crash)