Strudelify

Lick It

20 Fingers

KeyB♭ majorTempo126 bpm
0:00/0:00
// Lick It — 20 Fingers
// 126 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@21 A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A ~ A B A@3 B A@3 B A@3 B A@3 B A@3 B
  A@2 ~@16
>`.pickRestart({
  A: "eb2@3 ~@3 [bb1,bb2]@3 ~@3 [bb1,bb2]@2 ~@2", B: "eb2@2 ~@4 [bb1,bb2]@3 ~@3 [bb1,bb2]@2 ~@2",
})).s("gm_acoustic_bass").gain(0.5)

// other · muted trumpet · "MT TRUMPET"
const muted_trumpet = note("<A B@2 C@2 B@2 D@2 E@2 F G E@2 F ~@97>".pickRestart({
  A: "~@12 db4!2 eb4@2", B: "[g4@3 ~@9 f4@2 ~ eb4@2 ~@11 db4!2 eb4 ~]/2",
  C: "[g4@3 ~@9 f4@2 ~ eb4@2 ~@11 db4!2 eb4@2]/2", D: "[g4@3 ~@9 f4@2 ~ eb4@2 ~@11 eb4 ~ db4 ~]/2",
  E: "eb4 ~@3 eb4 ~ db4 ~ eb4 ~@3 eb4 ~ db4 ~", F: "eb4 ~@15", G: "~@12 eb4 ~ db4 ~",
})).s("gm_muted_trumpet").gain(0.32).pan(0.2)

// other · synth bass 1 · "SYN BASS 1"
const synth_bass_1 = note("<~@17 A@24 B A@31 B A@23 ~@8 C D C D C D C ~>".pickRestart({
  A: "gb4 ~@2 eb4 ~@2 bb4 ~ f4 ~@2 f4 ~@2 f4 ~", B: "~@3 eb4 ~@2 bb4 ~ f4 ~@2 f4 ~@2 f4 ~",
  C: "a3 ~ [a2,a3] a3!3 [a2,a3] a3!3 [a2,a3] a3!3 [a2,a3] a3", // A
  D: "g3 ~ [g2,g3] g3!3 [g2,g3] g3!3 [g2,g3] g3!3 [g2,g3] g3", // G
})).s("gm_synth_bass_1").gain(0.15).pan(0.7)

// other · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note(`<
  ~@17 A B@3 A B@7 A B@7 A B@7 A B@7 A B@7 A B@3 A B@3 A B@7 A B@7 A B@7 A B@3 ~@16
>`.pickRestart({
  A: "gb4 ~ gb4 eb4 ~ eb4 bb4 ~ [f4,bb4] ~ f4!2 ~ f4!2 ~", B: "[f4,gb4] ~ gb4 eb4 ~ eb4 bb4 ~ [f4,bb4] ~ f4!2 ~ f4!2 ~",
})).s("gm_lead_8_bass_lead").gain(0.25).pan(0.3)

// other · lead 1 square · "SQUAREWAVE"
const lead_1_square = note("<~@17 A@23 ~@9 A@15 ~ A@7 ~@9 A@15 ~@17>".pickRestart({
  A: "[f5,f6]@5 ~ [f5,f6]@7 ~ [f5,f6] ~", // F
})).s("gm_lead_1_square").gain(0.12)

// other · recorder
const recorder = note(`<
  ~@17 A B C D A B C D A B C D A B C D E F C D E F C ~@9 A B C D A B C D E F C D E F C ~ A B C D A B C ~@9 A B C D A B C
  D E F C D E F C ~@17
>`.pickRestart({
  A: "c4@5 f5 c4@6 ~ f5 c4 f5, f5 ~@15", B: "c4@4 ~ f5 c4@6 ~ f5 c4 ~", C: "c4@4 ~ f5 c4@6 ~ [c4,f5] ~ f5, f5 ~@15",
  D: "c4@5 f5 c4@6 ~ f5 c4 ~", E: "c4@5 f5 c4@6 ~ f5 c4 ~, f5 ~@15", F: "c4@4 ~ f5 c4@6 ~ f5 c4 ~, f5 ~@15",
})).s("gm_recorder").gain(0.05)

// chords · piano · "A.PIANO 3"
const piano = note("<~@105 A B A B A B A ~>".pickRestart({
  A: "~@2 [a3,c4,e4] ~@3 [a3,c4,e4] ~@3 [a3,d4,f4] ~@3 [a3,d4,f4] ~", // Am Dm
  B: "~@2 [g3,b3,d4] ~@3 [g3,b3,d4] ~@3 [g3,c4,e4] ~@3 [g3,c4,e4] ~", // G C
})).s("gm_piano").gain(0.28)

// drums · kick
const kick = s("bd").struct(`<
  ~@5 A@4 B@7 C A ~@3 A ~@3 B@7 A B@7 C B@7 A B@7 A B@7 C A ~@3 A ~@3 B@7 A B@7 A B@7 C B@7 C B@7 D
>`.pickRestart({
  A: "x", B: "x ~ x ~ x ~ x!2", C: "x ~@2 x!5", D: "x ~@2 x!4 ~",
})).gain(0.63)

// drums · snare
const snare = s("sd").struct("<~@7 A B ~@16 C@7 ~@9 C@7 ~ C@7 ~ C@7 ~@9 C@7 ~ C@7 ~ C@7 ~@17>".pickRestart({
  A: "~@12 x!4", B: "x", C: "~ x ~ x",
})).gain(0.49)

// drums · clap
const clap = s("cp").struct("<~@5 [~ x!3]!4 [~ x ~ x]!88 ~@8 [~ x ~ x]!8>").gain(0.49)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A@7 ~@9 A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~@9 A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.21)

// drums · crash
const crash = s("cr").struct(`<
  ~@5 A@5 ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@15 A ~@7
>`.pickRestart({
  A: "x",
})).gain(0.35)

// drums · bongos
const bongos = s("bongo:4").struct("<~@9 A@8 ~@8 A@7 ~ A@7 ~ A@7 ~ A@7 ~ A@7 ~@9 A@7 ~ A@7 ~ A@7 ~@17>".pickRestart({
  A: "~@3 x ~@6 x ~@5",
})).gain(1.11)

// drums · congas
const congas = s("conga:33").struct(`<
  ~ A@8 B@2 A@2 B@2 A@2 ~@8 B@7 A B@2 A@2 B@2 A@2 B@7 A B@7 A B@2 A@2 B@2 A@2 ~@8 B@7 A B@7 A B@2 A@2 B@2 A@9 ~ A@7 ~
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@2 x ~@2 x ~@2 x ~@3",
})).gain(0.9)

stack(
  bass, muted_trumpet, synth_bass_1, lead_8_bass_lead, lead_1_square, recorder, piano, kick, snare, clap, hihat,
  open_hat, crash, bongos, congas
)

More by 20 Fingers