diff --git a/DSP/spectral/fft_freeze.scd b/DSP/spectral/fft_freeze.scd index bcbd7a1..703ef45 100644 --- a/DSP/spectral/fft_freeze.scd +++ b/DSP/spectral/fft_freeze.scd @@ -1,16 +1,26 @@ ( name: 'fft_freeze', func: { + var sig = 0; var in = In.ar(\in.kr(0), 1); - var isOn = \freezeGate.kr(0); + var gate = \freezeGate.kr(0); + var amp = Amplitude.kr(in, 0.01, 0.05); + var above = amp > \ampThresh.kr(0.02); var chain = FFT( LocalBuf(2048), in ); - var frozen = PV_Freeze(chain, isOn); - var jittered = PV_PhaseShift(frozen, \phaseJitter.kr(0) * TRand.kr(0, 2pi) * isOn); - var sig = IFFT(jittered); + // set: фронт «гейт взведён И амплитуда выше порога» (0 -> 1) + var set = HPZ1.kr(gate * above) > 0; + // reset: снятие гейта (1 -> 0) + var reset = HPZ1.kr(gate) < 0; + var isOn = SetResetFF.kr(set, reset); + + chain = PV_Freeze(chain, isOn); + chain = PV_RandComb(chain, \wipe.kr(0.7), \reshuffle.kr(0.5)); + chain = PV_BinShift(chain, \binShift.kr(0), \stretch.kr(1)); + sig = IFFT(chain) * isOn; sig; }, @@ -24,5 +34,6 @@ saturationSteps: 4, specs: ( freezeGate: [0, 1, \step, 1, 0], phaseJitter: [0, 1, \lin, 0.01, 0.1], + ampThresh: [0, 1, \lin, 0.001, 0.02], ), )