( name: 'fft_freeze', func: { var sig = 0; var in = In.ar(\in.kr(0), 1); 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 ); // 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; }, inChannels: 1, outChannels: 2, requiresBuffer: true, usePan: true, panning: \pan, useSaturation: false, 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], ), )