So I've been thinking about an API that wraps your code and makes it configurable via the X16's ABI pseudo-registers.
I haven't thought deeply enough about it, so it might be ridiculous/overkill, but here's what I'm thinking of doing:
R1a. voice
R1b. waveform
R2 a + b. frequency (16 bits)
R3a. pulse width
R4a. channel
R4b. volume
(R5a. attack)
R5b. decay
(R6. sustain & release)
Then two API calls:
$9000 (or wherever): SSND - sets up and plays a voice, using all of the pseudo-registers above.
$9003 (or wherever): PLAY - plays a previously set-up voice, using the first three pseudo-registers.
Obviously it's not designed for playing music. But maybe it would be useful for configuring the voices initially (generally useful for sound effects in other words). I know you've addressed the music angle in your other library on your blog.
Presumably, the API calls would copy the register values into memory. The voice, waveform, frequency, pulse width, channel, and volume would go into VERA. ADSR would take up 64 bytes (4 bytes per voice) in somewhere convenient in main RAM (maybe $200?).