LispyLoops [bobbicodes.codeberg.page] now includes a built-in arpeggio function, which takes a length, an arp sequence and an optional map of run-length encoded volume/duty pairs. This might sound complicated but it's just this (see reply below for visualization):
{:volume [[1 14] [1 13] [1 12] [1 11] [2 7]
[3 6] [3 5] [3 4] [3 3] [3 2] [3 1]]
:duty [[1 0] [2 3] [1 2] [5 0] [6 3] [6 2] [3 1]]}
This allows making arps that cycle duties, as used famously in The Smurfs for the NES by Alberto José González: