Strudelify

LA BAMBA TWIST AND SHOUT

Valens Ritchie

KeyC majorTempo120 bpm
0:00/0:00
// LA BAMBA TWIST AND SHOUT — RITCHIE VALENS
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5835036; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 131 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 · piano
const piano = note(`<
  ~ 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@4 D A B A B A B A B A B A B C@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 C@4 D A B A B A B A B A B A B
  C@5 E@2
>`.pickRestart({
  A: "[c4,e4,g4,c5]@2 [c4,e4,g4,c5]!2 [f4,a4,c5]@2 [f4,a4,c5]!2, c3 f3", // C F
  B: "[g4,b4,d5] [g4,b4,d5]@2 [g4,b4,d5] [g3,g4,b4,d5]@2 [g4,b4,d5] ~, g3 ~", C: "[g4,b4,d5]!8, g3!4",
  D: "[g3,g4,b4,d5]!4", E: "[[g3,g4] [a3,a4] [b3,b4] c4 [c4,e4,g4]@4, ~@3 c5@5]/2",
})).s("gm_piano").gain(0.3)

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

// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
  ~ 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@5 A B A B A B A B A B A B C@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 C@5 A B A B A B A B A B A B C@5 D
  E
>`.pickRestart({
  A: "c3@3 c3 f2@3 f2", B: "g2@3 g2 f2@2 g2@2", C: "g2!8", D: "g2 a2 b2 c3", E: "c3",
})).s("gm_electric_bass_pick").gain(0.3)

// other · trombone
const trombone = note(`<
  A B@2 C D E@4 F@2 G@2 H@2 C ~ I ~ I ~ I ~ I ~ I ~@5 J K L M L N H@2 C ~ I ~ I ~ I ~ I ~ I ~@5 O P L M L M Q R S T ~ I
  ~ I ~ I ~ I ~ I ~ I ~ Q R S T U H@2 C ~ I ~ I ~ I ~ I ~ I ~@5 O P L M L M Q R S T ~ I ~ I ~ I ~ I ~ I ~ I ~ Q R S T U
  V@2
>`.pickRestart({
  A: "~@5 g2 a2 b2", B: "[c2@2 e4 d4 f3@2 a3 g3@2 g2 b2 d3 f3!2 e3 d3]/2", C: "c3@2 e3 d3 f3 a3!2 g3",
  D: "~ g3!2 ~@2 g3!2 ~", E: "[c4@4 a3@3 b3@2 g3@6 ~]/2", F: "[e4@4 c4@3 d4@2 b3@4 ~@3]/2",
  G: "[e4@4 c4@3 d4@2 b3@4 g2 a2 b2]/2", H: "[c3@2 e3 d3 f3@2 a3 g3@2 g2 b2 d3 f3!2 e3 d3]/2", I: "~@4 c3!3 d3",
  J: "c3@4 a2@3 b2", K: "~ b2@4 ~@3", L: "e3@4 c3@3 d3", M: "~ d3@4 ~@3", N: "~ d3@4 g2 a2 b2", O: "c4@4 a3@3 b3",
  P: "~ b3@4 ~@3", Q: "g3", R: "b3", S: "d4", T: "g4", U: "~@5 g3 a3 b3", V: "[g3 a3 b3 c4@5]/2",
})).s("gm_trombone").gain(0.3)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note(`<
  A B@2 C D E@4 F@2 G@2 B@2 C H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H I H
  J@4 K I H I H I H I H I H I H J@5 I H I H I H I H I H I H I H I H I H I H I H I H J@4 K I H I H I H I H I H I H J@5
  L@2
>`.pickRestart({
  A: "~@5 g3 a3 b3", B: "[c4@2 e4 d4 f4@2 a4 g4@2 g3 b3 d4 f4!2 e4 d4]/2", C: "c4@2 e4 d4 f4 a4!2 g4",
  D: "~ g4!2 ~@2 g4!2 ~", E: "[c5@4 a4@3 b4@2 g4@6 ~]/2", F: "[e5@4 c5@3 d5@2 b4@4 ~@3]/2",
  G: "[e5@4 c5@3 d5@2 b4@4 g3 a3 b3]/2", H: "[g3,b3,d4] [g3,b3,d4]@2 [g3,b3,d4] [g3,b3,d4]@2 [g3,b3,d4] ~",
  I: "[c3,e3,g3,c4]@2 [c3,e3,g3,c4]!2 [f3,a3,c4]@2 [f3,a3,c4]!2", J: "[g3,b3,d4]!8", K: "[g3,b3,d4]!4",
  L: "[g3 a3 b3 ~ [c3,e3,g3]@4, ~@3 c4@5]/2", // C
})).s("gm_electric_guitar_clean").gain(0.3)

// drums · snare
const snare = s("sd").struct("<~ [x ~ x ~ x ~ x!2]!129 ~>").gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~ [x!8]!129 ~>").gain(0.3)

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

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

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

// drums · claves
const claves = s("clave:2").struct("<~ [~ x ~ x]!129 ~>").gain(1.46)

stack(
  piano, alto_sax, bass, trombone, electric_guitar_clean, snare, pedal_hat, bongos, bongos_2, congas, congas_2, shaker,
  guiro, claves
)

More by Valens Ritchie