#include "/twist/transform_api.udo" #include "/sample_level.udo" instr twst_tf_smphold $TWST_TRANSFORM aL, aR, ileft, iright twst_getinput kratio = twst_param:k("ratio") if (ileft == 1) then aL smp_hold aL, kratio endif if (iright == 1) then aR smp_hold aR, kratio endif outs aL, aR endin instr twst_tf_fftpitchscale $TWST_TRANSFORM fL, fR, aL, aR, ileft, iright twst_getfinput kscale = twst_tf_pitchscale() kformant = twst_param:k("formants") kcoefs = twst_param:k("formantcoefs") if (ileft == 1) then fL1 pvscale fL, kscale, kformant, 1, kcoefs aL twst_tf_fresynth fL1 endif if (iright == 1) then fR1 pvscale fR, kscale, kformant, 1, kcoefs aR twst_tf_fresynth fR1 endif outs aL, aR endin opcode _twst_tf_autotune, f, fkkk fsig, kthreshold, kformant, kcoefs xin kfreq, kamp pvspitch fsig, kthreshold if (kfreq > 20) then knote ftom kfreq kscale = cpsmidinn:k(int:k(knote)) / kfreq fsigo pvscale fsig, kscale, kformant, 1, kcoefs else fsigo = fsig endif xout fsigo endop instr twst_tf_autotune $TWST_TRANSFORM fL, fR, aL, aR, ileft, iright twst_getfinput kthreshold = twst_param:k("threshold") kformant = twst_param:k("formants") kcoefs = twst_param:k("formantcoefs") if (ileft == 1) then fL1 _twst_tf_autotune fL, kthreshold, kformant, kcoefs aL twst_tf_fresynth fL1 endif if (iright == 1) then fR1 _twst_tf_autotune fR, kthreshold, kformant, kcoefs aR twst_tf_fresynth fR1 endif outs aL, aR endin instr twst_tf_hilbertpitchscale $TWST_TRANSFORM aL, aR, ileft, iright twst_getinput ifftsize = twst_parami("fftsize") kscale = twst_tf_pitchscale() twst_setlatencysamples(ifftsize) if (ileft == 1) then ahL1, ahL2 hilbert2 aL, ifftsize, ifftsize / 4 amL, afmL fmanal ahL1, ahL2 aL oscil amL, afmL * kscale endif if (iright == 1) then ahR1, ahR2 hilbert2 aR, ifftsize, ifftsize / 4 amR, afmR fmanal ahR1, ahR2 aR oscil amR, afmR * kscale endif outs aL, aR endin instr twst_tf_waveset $TWST_TRANSFORM aL, aR, ileft, iright twst_getinput kreps = twst_param:k("reps") if (ileft == 1) then aL waveset aL, kreps endif if (iright == 1) then aR waveset aR, kreps endif outs aL, aR endin instr twst_tf_freeze $TWST_TRANSFORM fL, fR, aL, aR, ileft, iright twst_getfinput kfreezeamp = twst_param:k("freezeamp") kfreezefreq = twst_param:k("freezefreq") if (ileft == 1) then fL1 pvsfreeze fL, kfreezeamp, kfreezefreq aL twst_tf_fresynth fL1 endif if (iright == 1) then fR1 pvsfreeze fR, kfreezeamp, kfreezefreq aR twst_tf_fresynth fR1 endif outs aL, aR endin instr twst_tfi_sndwarp $TWST_TRANSFORM ileft, iright, istartsamp, iendsamp, idocut, ilength twst_tf_getstate ireadmode = twst_parami("readmode") kpitchscale = twst_tf_pitchscale() iwinsize = twst_parami("winsize") irandwin = twst_parami("randwin") ioverlap = twst_parami("overlap") ifnWindow = twst_tf_getwintype() p3 = ilength if (ireadmode == 0) then atime linseg 0, p3, ilength elseif (ireadmode == 1) then ktime = twst_param:k("readtime") twst_tf_setplayposition ktime atime = a(ktime * ilength) elseif (ireadmode == 2) then itimescale = twst_parami("timescale") p3 = ilength * itimescale atime linseg 0, p3, ilength elseif (ireadmode == 3) then atime linseg ilength, p3, 0 endif ifnL, ifnR twst_tfi_getfn kpitchscale *= ftsr(ifnL) / sr apitchscale = a(kpitchscale) if (ileft == 1) then aL sndwarp 1, atime, apitchscale, ifnL, 0, iwinsize, irandwin, ioverlap, ifnWindow, 1 endif if (iright == 1) then aR sndwarp 1, atime, apitchscale, ifnR, 0, iwinsize, irandwin, ioverlap, ifnWindow, 1 endif outs aL, aR endin instr twst_tfi_mincer $TWST_TRANSFORM ileft, iright, istartsamp, iendsamp, idocut, ilength twst_tf_getstate ifftsize = twst_parami("fftsize") kpitchscale = twst_tf_pitchscale() klock = twst_param:k("phaselock") ireadmode = twst_parami("readmode") idecimation = twst_parami("decimation") p3 = ilength if (ireadmode == 0) then atime linseg 0, p3, ilength elseif (ireadmode == 1) then ktime = twst_param:k("readtime") twst_tf_setplayposition ktime atime = a(ktime * ilength) elseif (ireadmode == 2) then itimescale = twst_parami("timescale") p3 = ilength * itimescale atime linseg 0, p3, ilength elseif (ireadmode == 3) then atime linseg ilength, p3, 0 endif twst_setlatencysamples(ifftsize) ifnL, ifnR twst_tfi_getfn if (ileft == 1) then aL mincer atime, 1, kpitchscale, ifnL, klock, ifftsize, idecimation endif if (iright == 1) then aR mincer atime, 1, kpitchscale, ifnR, klock, ifftsize, idecimation endif outs aL, aR endin instr twst_tfi_paulstretch $TWST_TRANSFORM ileft, iright, istartsamp, iendsamp, idocut, ilength twst_tf_getstate istretch = twst_parami("stretch") iwinsize = twst_parami("winsize") iduration = ilength * istretch p3 = iduration twst_setlatencyseconds iwinsize ifnL, ifnR twst_tfi_getfn if (ileft == 1) then aL paulstretch istretch, iwinsize, ifnL endif if (iright == 1) then aR paulstretch istretch, iwinsize, ifnR endif outs aL, aR endin