Strudelify

Limbo Rock

Chubby Checker

KeyA majorTempo184 bpm
0:00/0:00
// Limbo Rock — Checker Chubby
// 184 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 3 "A.PIANO 1" piano (copy of ch 4 "MUTED GTR" electric guitar muted)
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(184/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A@2 B A@3 B C A@2 B A@3 B C D E F G H G I ~@9 A@2 B A@3 B C D E F G H G I ~ A@2 B A@3 B C D E F G H G I ~ A@2 B A@3
  B C D E F G H G I ~@9 A@2 B A@3 B C D E F G H G I
>`.pickRestart({
  A: "a1 ~@3 e1 ~@3", B: "e1 ~@3 a1 ~@3", C: "a1 ~@3 e1 ~ a1 ~", D: "d1@2 ~@6 a1@2 ~@4 a1 ~",
  E: "a1@2 ~@6 d1@2 ~@4 a1 ~", F: "a1@2 ~@6 a1@2 ~@4 a1 ~", G: "e1 ~@3 e1 ~@3", H: "e1@2 ~@6 b1@2 ~@4 b1 ~",
  I: "a1@2 ~@2 a1 ~ e1@2 ~@2 e1 ~ a1@2 ~@2",
})).s("gm_acoustic_bass").gain(0.8)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~ A@2 B A@3 B A@3 B A@3 B A C@2 A D@3 E ~@9 A@2 B A@3 B A C@2 A D@3 E ~ A@2 B A@3 B A C@2 A D@3 E ~ A@2 B A@3 B A C@2
  A D@3 E ~@9 A@2 B A@3 B A C@2 A D@3 E
>`.pickRestart({
  A: "~@2 [c#4,e4,a4] ~@3 [c#4,e4,a4] ~", B: "~@2 [b3,e4,g#4] ~@3 [c#4,e4,a4] ~",
  C: "~@2 [a3,d4,f#4] ~@3 [a3,d4,f#4] ~", D: "~@2 [b3,e4,g#4] ~@3 [b3,e4,g#4] ~",
  E: "[c#4,e4,a4]@2 ~@2 [c#4,e4,a4] ~ [a3,d4,f#4]@2 ~@2 [a3,d4,f#4] ~ [c#4,e4,a4]@2 ~@2", // A D A
})).s("gm_electric_guitar_muted").gain(0.33)

// other · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note("<A B A C A B A C ~@96>".pickRestart({
  A: "~@6 a4 ~ a4@2 ~@2 c#5@2 ~@2", B: "e5@2 ~@2 e5 ~ e5@2 ~@2 c#5 ~ e5@2 ~@2",
  C: "b4@2 ~@2 b4 ~ e5@2 ~@2 c#5 ~ c#5@3 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.69)

// chords · vibraphone
const vibraphone = note(`<
  ~ A@2 B A@3 B A@3 B A@3 B A C@2 A D@3 E ~@9 A@2 B A@3 B A C@2 A D@3 E ~ A@2 B A@3 B A C@2 A D@3 E ~ A@2 B A@3 B A C@2
  A D@3 E ~@9 A@2 B A@3 B A C@2 A D@3 E
>`.pickRestart({
  A: "~@2 [c#5,e5,a5] ~@3 [c#5,e5,a5] ~", B: "~@2 [b4,e5,g#5] ~@3 [c#5,e5,a5] ~",
  C: "~@2 [a4,d5,f#5] ~@3 [a4,d5,f#5] ~", D: "~@2 [b4,e5,g#5] ~@3 [b4,e5,g#5] ~",
  E: "[c#5,e5,a5]@2 ~@2 [c#5,e5,a5] ~ [a4,d5,f#5]@2 ~@2 [a4,d5,f#5] ~ [c#5,e5,a5]@2 ~@2", // A D A
})).s("gm_vibraphone").gain(0.26)

// drums · kick
const kick = s("bd").struct("<~@8 A@16 ~ A@23 ~ A@15 ~ A@15 ~ A@22 B>".pickRestart({
  A: "x!2", B: "x ~ x!2",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct("<~@8 A@16 ~ A@23 ~ A@15 ~ A@15 ~ A@23>".pickRestart({
  A: "~@3 x",
})).gain(0.6)

// drums · clap
const clap = s("cp").struct("<~@9 A@14 ~@10 A@14 ~@2 A@14 ~@2 A@14 ~@10 A@14 ~>".pickRestart({
  A: "~ x ~@2",
})).gain(0.6)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~
  A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@2 x!2 ~@4",
})).gain(0.6)

// drums · hihat
const hihat = s("hh").struct("<~@8 A B@15 ~ A@9 B@13 C ~ A B@14 ~ A B@14 ~ A B A B A B A B A B@13 C>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!7 ~",
})).gain(0.42)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@8 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 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: "~@2 x!2 ~@4",
})).gain(0.6)

// drums · crash
const crash = s("cr").struct("<~@8 A ~@16 A@9 ~@15 A ~@15 A ~@15 A ~ A ~ A ~ A ~ A ~@13 B>".pickRestart({
  A: "x", B: "~@3 x",
})).gain(0.6)

// drums · cowbell
const cowbell = s("cb").struct("<~ A@22 B ~ A@22 B ~ A@14 B ~ A@14 B ~ A@22 ~>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~ x!2 ~ x!2 ~",
})).gain(0.6)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@8 A B@14 C A D E B D B@3 F B@14 C G B@14 C H B@14 C A D E B D B@3 F B@14 C
>`.pickRestart({
  A: "~@2 x!3 ~ x ~ x ~ x ~ x ~@3", B: "~ x ~@2", C: "x!2 ~ x", D: "~@2 x!2 ~@4", E: "~ x!2 ~@5",
  F: "~@2 x!3 ~ x ~ x ~@7", G: "~@6 x!3 ~ x ~ x ~@3", H: "x!13 ~@3",
})).gain(1.92)

// drums · congas
const congas_2 = s("conga:18").struct("<~@9 A@14 ~@2 A@22 ~@2 A@14 ~@2 A@14 ~@2 A@22 ~>".pickRestart({
  A: "x!2",
})).gain(1.92)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@9 A@14 B ~ A@5 C A D A@14 B E A@14 B ~ A@14 B ~ A@5 C A D A@14 B
>`.pickRestart({
  A: "~@6 x!2", B: "~@3 x ~ x ~@2", C: "~@5 x!3", D: "~@5 x!2 ~", E: "~@7 x",
})).gain(1.92)

// drums · agogo bells
const agogo_bells = s("agogo:2").struct("<~@8 A@14 B C ~ A@21 B C A@14 B C ~ A@14 B ~ C A@22>".pickRestart({
  A: "x!4", B: "x ~ x!2 ~ x!2 ~", C: "~ x ~ x",
})).gain(3.06)

stack(
  bass, electric_guitar_muted, acoustic_guitar_nylon, vibraphone, kick, snare, clap, low_tom, hihat, mid_tom, crash,
  cowbell, congas, congas_2, congas_3, agogo_bells
)

More by Chubby Checker