Hi, List, Hi Dan!
Some notes;
When the length of the loop accidentally becomes 0 I got a extreme CPU load, one different from a loop that doesn't advance time, it seems, in that quiting ChucK wasn't easily done (it started "cleaning up", then got stuck) and required a kill through the task manager. I think I would suggest ignoring the command that creates this situation (either .loopStart(), or .loopEnd(), I suppose .loop() itself could also be the final straw ) and printing a warning about the situation as this situation results in a de-facto end of the VM.
When using the .rampDown() command, but then starting .play() again on the same voice before the rampDown has finished the rampDown will cut the new "note" off. This may be intended behavior? Giving a .rampUp(0::ms) when starting the new note avoids this situation so it's no real issue, just unexpected to me.
I'm not sure whether this is on "the list" already but I'd also appreciate "get" method for the .rate(), that way we could get the rate, multiply it by some fraction and set it again, like we can with all other pitched Ugens. (of course this can already be done by defining a extra float that keeps track of it but this isn't so elegant).
Yours,
Kas.