User-Defined Opcode Database

Vocoder

channel vocoder with user-specified number of bands

Download UDO File

Description

Vocoder is a channel vocoder using 4th order butteworth filters. It takes an input signal and analyses it with a user-specified number of log-spaced (constant-Q) filter bands (between a min and max) and frequency) and then applies the analysed spectral envelope to an excitation signal.

Syntax

asig Vocoder aexc, ain, kminf, kmaxf, kq, ibands

Initialization

ibands - number of filter bands between kminf and kmaxf

Performance

asig - output
aexc - excitation signal, generally a broadband source (ie. lots of spectral components)
ain - input signal, generally a signal with a strong spectral envelope or contour, formants, etc. (such as vocal sound)
kminf - lowest analysis frequency
kmaxf - highest analysis frequency
kq - filter Q

Code

opcode Vocoder, a, aakkkpp

as1,as2,kmin,kmax,kq,ibnd,icnt  xin

if kmax < kmin then
ktmp = kmin
kmin = kmax
kmax = ktmp
endif

if kmin == 0 then 
kmin = 1
endif

if (icnt >= ibnd) goto bank
abnd   Vocoder as1,as2,kmin,kmax,kq,ibnd,icnt+1

bank:
kfreq = kmin*(kmax/kmin)^((icnt-1)/(ibnd-1))
kbw = kfreq/kq
an  butterbp  as2, kfreq, kbw
an  butterbp  an, kfreq, kbw
as  butterbp  as1, kfreq, kbw
as  butterbp  as, kfreq, kbw
ao balance as, an

amix = ao + abnd

     xout amix

endop

Examples

instr 1
	asig inch 1
        imax = 7000
        imin = 300
        ifun = imin/2
        kra  randh  .05, 2
        kfun = abs(1-kra)*ifun 
        anoi buzz 1000, kfun, imax/ifun, 1
	aout Vocoder anoi, asig,imin,imax,25,32
	outs aout,aout

endin

Credits

Victor Lazzarini, 2005


Previous Home Next
Residual   SigReverse