you could certainly try and hack something like that where you effectively using a softcut voice as an input delay. it will be a little clunky, using phase polls, maybe glitching on loop points, etc.
the lowest-hanging fruit would i think be an engine that just adds some delay to the ADC, and continue using the amplitude poll:
Engine_SimpleDelay : CroneEngine {
var synth;
*new { arg context, doneCallback;
^super.new(context, doneCallback);
}
alloc {
synth = { arg delay=0.01;
var input = SoundIn.ar([0, 1]);
DelayC.ar(input, maxDelayTime:0.1, delayTime:delay)
}.play(context.server);
this.addCommand("delay", "f", { arg msg; synth.set(\delay, msg[1]); });
}
}
and make sure engine->softcut level is up and adc->softcut is down.
this would just be a way to quickly test if that approach is enough to get the job done.
[ed] oh lastly, (this for @infinitedigits), i meant to say that i have looked at the volume pinch code, and this is a good opportunity to say:
usually its better to leave rec (the recording flag) enabled all the time for voices that will be using it, and just set rec_level and pre_level. these are affected by recpre_slew_time, which has the same intention as your volume-pinch parameter (smooths out discontinuities when toggling record), but can do the job more reliably and efficiently on the DSP side. rec=0 and pre=1 has exactly the same effect as setting the flag to zero.
(more control over the slew shape is on the softcut-major-update milestone.)