Plugin: PV_Freezish

I just put up a repository with a new plug-in: GitHub - jamshark70/PV_Freezy: FFT-based partial freezing, based on sc3-plugins PV_Freeze

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.

hjh

11 Likes

This is rad! And what GPL and open source should be. Thanks James for the nod and I look forward to playing with it.
Josh

/*
Josh Parmenter
www.realizedsound.net/josh
*/

4 Likes

Thanks @jamshark70 !!

It sounds great!
But when I tried this exemple :

(
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
...

I’m on MacOs.

Best,

José

Do you have a Buffer object assigned to the var b?

Josh

/*
Josh Parmenter
www.realizedsound.net/josh
*/

Ah, you’re right, I forgot an else branch. (Made a change before publishing, and didn’t retest the examples.)

Fixed now in the repository.

hjh

1 Like