@Mighty23 said in FreezeMode Functionality:
If that's the case, the idea would be to start with a tap delay set to 100% wet and feedback just slightly below 1.0. Each tap would play back the sound "stored" in the buffer a defined number of times.
Mm yeah, something like that could work I think.
I was trying to modify (with Claude) your reverb to implement only the freeze function, and I was able to get this:
import("stdfaust.lib");
// User controls
freeze = checkbox("Freeze[style:knob]") : si.smoo;
freezeTime = hslider("Freeze Time[unit:s]", 1, 0.1, 2, 0.1);
freezeInputMix = hslider("Freeze Input Mix[style:knob]", 0.5, 0, 1, 0.01) : si.smoo;
// Maximum delay time in samples (2 seconds)
maxDelay = int(2 * ma.SR);
freezeEffect(x) = x <: (freezeLoop, _) : mixer
with {
// Create a feedback loop for continuous playback when frozen
freezeLoop = (+ : de.delay(maxDelay, int(freezeTime * ma.SR))) ~ (*((freeze)));
// Mix between frozen and live input
mixer(frozen, live) = (frozen * freeze * freezeInputMix) +
(live * (1.0 - (freeze * freezeInputMix)));
};
// Stereo processing - apply freeze effect to both channels
process = par(i, 2, freezeEffect);
It's functional but the loop is not perfect