From c7d0702130862b24e522b558d8dba634636b5066 Mon Sep 17 00:00:00 2001 From: lambda Date: Sat, 19 Sep 2026 23:07:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D1=80=D0=B8=D0=B7=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B8?= =?UTF-8?q?=20=D0=B0=D0=BC=D0=BF=D0=BB=D0=B8=D1=82=D1=83=D0=B4=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DSP/spectral/fft_freeze.scd | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) 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], ), )