While possibly too late to be of use in this discussion, how about the Guto Pitch Tracker; in UDO form ? -David sr = 48000 kr = 4800 ksmps = 10 nchnls = 2 opcode GutoPitchTracker, kk, a /* Guto Caminhoto guto@sercomtel.com.br http://members.tripod.com/Guto001/index.html Guto 03/2000 -- UDOization by David Akbari - May 2006 */ ain xin ain dcblock ain ; adjust DC iocts = 8 iprd = 0.002 ifrqs = 24 iq = 32 ihann = 0 idbout = 3 idsprd = 0 idsines = 0 wsig spectrum ain, iprd, iocts, ifrqs , iq, ihann, idbout, idsprd, idsines krms rms ain, 20 ; find a monaural rms value kvar = 0.6 + krms/8000 ; & use to gate the pitch variance ilo = 7.0 ihi = 10.0 istrt = 8.0 idbthres = 10 inptls = 4 irolof = 0.75 iodd = 1 iconf = 12 intrp = 1 ifprd = 0 iwtflg = 0 koct, kamp specptrk wsig, kvar, ilo, ihi, istrt, idbthres, inptls, irolof, iodd, iconf, intrp, ifprd,iwtflg /* ; use extracted pitch and amplitude to control foscili kcps = cpsoct(koct) ; transpose kcar = 1 kmod = 1 kamp1 = kamp*120 ; scale amplitude kamp2 port kamp1, 0.001 ; declick kndx = kamp*0.12 ; changes kndx with amplitude ifn = 1 ; iphs = 0 afm1 foscili kamp2, kcps, kcar, kmod, kndx, ifn, iphs ; fm aind delay ain, 0.245 ; adjust to pitch tracker delay aenv linen 1, 0.01, p3, 0.246 aout1 = afm1*aenv aout2 = afm1*aenv outs aout1, aout2 */ xout koct, kamp endop /*--- ---*/ instr 1 ; pitch tracker ain in koct, kamp GutoPitchTracker ain /* replace code with whatever */ ; use extracted pitch and amplitude to control foscili kcps = cpsoct(koct) ; transpose kcar = 1 kmod = 1 kamp1 = kamp*120 ; scale amplitude kamp2 port kamp1, 0.001 ; declick kndx = kamp*0.12 ; changes kndx with amplitude ifn = 1 ; iphs = 0 afm1 foscili kamp2, kcps, kcar, kmod, kndx, ifn, iphs ; fm aind delay ain, 0.245 ; adjust to pitch tracker delay aenv linen 1, 0.01, p3, 0.246 aout1 = afm1*aenv aout2 = afm1*aenv /* --- */ outs aout1, aout2 endin /*--- ---*/ f1 0 8192 10 1 0.002 0.2 0.06 0.025 0.002 ;p1 p2 p3 ;i# ini dur i 1 0 30 e