This is an extension of sc3-plugins’ PV_Freeze, but:
Instead of a binary on/off freeze behavior, it uses coefficients that crossfade between the input FFT frames and the previous frame of output. 0.0 = input, unchanged; 1.0 = 100% feedback, no new energy from the input.
There are two coefficients: one for bins that are increasing in energy, and another for bins that are decreasing. (Like LagUD or Decay2.) This is because high feedback tends just to resonate at the FFT bin frequencies; it’s helpful to let new energy into the system faster than it decays (atkCoeff < dcyCoeff).
As of today, I haven’t set up binary releases, but it builds and runs in Linux at least.
I can’t claim this is fully original work – much of the code is cribbed directly from PV_Freeze (full credit to Josh P @josh ) so it’s really a “derivative work” in GPL terms, shared back to the community as GPL. (If there are any objections to this, then I can withdraw the repository – but I doubt it would come to that.)
Also thanks to Sam Pluta’s BufFFT project, whose cmake script was invaluable in setting up the build system.
(
a = {
var sig = PlayBuf.ar(1, b, BufRateScale.ir(b), loop: 1);
var fft = FFT(LocalBuf(512, 1), sig);
fft = PV_Freezish.lag(fft,
atkTime: 0.003,
dcyTime: LFTri.kr(0.05, iphase: -1).lincurve(-1, 1, 0.5, 12, 2.5),
hop: 0.5
);
(IFFT(fft) * 0.2).dup
}.play;
)
I have this error :
PV_Freezish arg: '1' has bad input: nil
ARGS:
0: a FFT FFT
1: nil Nil
2: a Select Select
SynthDef temp__22 build failed
ERROR: PV_Freezish arg: '1' has bad input: nil
PROTECTED CALL STACK:
SynthDef:checkInputs 0x17d01a440
arg this = SynthDef:temp__22
var firstErr = PV_Freezish arg: '1' has bad input: nil
SynthDef:finishBuild 0x17d014240
arg this = SynthDef:temp__22
a FunctionDef 0x17d007fc0
sourceCode = "<an open Function>"
Function:prTry 0x2887cac40
arg this = a Function
var result = nil
var thread = a Thread
var next = nil
var wasInProtectedFunc = false
...