>From the `pvsanal' source code, the `anal_tick' function calls `generate_frame' every "overlap" samples, so fsig changes every "overlap" samples. Here is an idea starting from your example -odac -d sr = 44100 ksmps = 1 nchnls = 1 0dbfs = 1 #define NOT(x) # ($x == 0 ? 1 : 0) # #define INC_KSMPS(x) # $x = $x + ksmps # instr 1 ifftsize = 4096 ioverlap = ifftsize / 8 iwinsize = ifftsize * 2 iwinshape = 1 ; von-Hann window ain1 diskin2 "/Applications/Max5/examples/sounds/cherokee.aif", 1, 0, 1 fsig1 pvsanal ain1, ifftsize, ioverlap, iwinsize, iwinshape ;;; igap is the gap between 2 freezed pvs streams. ;;; `igap_expand = 0' means igap = ioverlap. ;;; ;;; ksmps is correct if it exists a positive integer N where ;;; ksmps*(2^N) = ioverlap, where N is an integer >=0 igap_expand = 5 igap = ioverlap * (1 << igap_expand) itwo_gap = 2*igap kcount init 0 kcount_gap init 0 kndx init 0 kfreez1 init 1 kfreez2 init 0 kfreez_switch init 1 interp_ftab ftgen 0, 0, itwo_gap, 7, 0, igap, 1, igap, 0 if kcount == ioverlap then if kcount_gap == igap then kfreez_switch = $NOT(kfreez_switch) kfreez1 = kfreez_switch kfreez2 = $NOT(kfreez1) kcount_gap = 0 else kfreez1 = 1 kfreez2 = 1 endif kcount = 0 endif if kndx == itwo_gap then kndx = 0 endif kinterp table kndx, interp_ftab $INC_KSMPS(kcount) $INC_KSMPS(kcount_gap) $INC_KSMPS(kndx) fsig1_freezed pvsfreeze fsig1, kfreez1, kfreez1 fsig2_freezed pvsfreeze fsig1, kfreez2, kfreez2 ffinal pvsmorph fsig1_freezed, fsig2_freezed, kinterp, kinterp aout pvsynth ffinal out aout endin i1 0 30 tito