diff options
Diffstat (limited to 'vocoder~.c')
-rw-r--r-- | vocoder~.c | 88 |
1 files changed, 44 insertions, 44 deletions
@@ -1,6 +1,6 @@ -/* vocoder~ -- vocoder effect inspired by xvox +/* vocoder~ -- vocoder effect inspired by xvox * written by Simon Morlat ( http://simon.morlat.free.fr ) - * + * * Copyleft 2001 Yves Degoyon. * Permission is granted to use this software for any purpose provided you * keep this copyright notice intact. @@ -37,11 +37,11 @@ static void vocoder_cutoff(t_vocoder *x, t_floatarg fcutoff ) { if ( fcutoff > 128.0 ) { - fcutoff = 128.0; + fcutoff = 128.0; } if ( fcutoff < 0.0 ) { - fcutoff = 0.0; + fcutoff = 0.0; } x->x_cutoff = fcutoff; } @@ -50,11 +50,11 @@ static void vocoder_vfeedback(t_vocoder *x, t_floatarg fvfeedback ) { if ( fvfeedback > 100.0 ) { - fvfeedback = 100.0; + fvfeedback = 100.0; } if ( fvfeedback < 0.0 ) { - fvfeedback = 0.0; + fvfeedback = 0.0; } x->x_vfeedback = fvfeedback; } @@ -71,53 +71,53 @@ static t_int *vocoder_perform(t_int *w) int n = (int)(w[5]), i; if ( !x->x_process ) return (w+6); - if ( x->x_blocksize != n ) + if ( x->x_blocksize != n ) { - if ( x->x_in1buf ) freebytes( x->x_in1buf, 3*x->x_blocksize/2*sizeof( double ) ); - if ( x->x_in2buf ) freebytes( x->x_in2buf, 3*x->x_blocksize/2*sizeof( double ) ); - if ( x->x_outbuf ) freebytes( x->x_outbuf, (x->x_blocksize+OUTPUT_DELAY)*sizeof( double ) ); - x->x_blocksize = n; - x->x_in1buf = (double*) getbytes( 3*x->x_blocksize/2*sizeof( double ) ); - x->x_in2buf = (double*) getbytes( 3*x->x_blocksize/2*sizeof( double ) ); - x->x_outbuf = (double*) getbytes( (x->x_blocksize+OUTPUT_DELAY)*sizeof( double ) ); - if ( !x->x_in1buf || !x->x_in2buf || !x->x_outbuf ) - { - post( "vocoder~ : allocations failed : stop processing" ); - x->x_process = 0; - } - } - - for(i=0;i<x->x_blocksize/2;i++) + if ( x->x_in1buf ) freebytes( x->x_in1buf, 3*x->x_blocksize/2*sizeof( double ) ); + if ( x->x_in2buf ) freebytes( x->x_in2buf, 3*x->x_blocksize/2*sizeof( double ) ); + if ( x->x_outbuf ) freebytes( x->x_outbuf, (x->x_blocksize+OUTPUT_DELAY)*sizeof( double ) ); + x->x_blocksize = n; + x->x_in1buf = (double*) getbytes( 3*x->x_blocksize/2*sizeof( double ) ); + x->x_in2buf = (double*) getbytes( 3*x->x_blocksize/2*sizeof( double ) ); + x->x_outbuf = (double*) getbytes( (x->x_blocksize+OUTPUT_DELAY)*sizeof( double ) ); + if ( !x->x_in1buf || !x->x_in2buf || !x->x_outbuf ) + { + post( "vocoder~ : allocations failed : stop processing" ); + x->x_process = 0; + } + } + + for(i=0; i<x->x_blocksize/2; i++) { - x->x_in1buf[i]=x->x_in1buf[i+x->x_blocksize]; + x->x_in1buf[i]=x->x_in1buf[i+x->x_blocksize]; }; - for(i=0;i<OUTPUT_DELAY;i++) x->x_outbuf[i]=x->x_outbuf[i+x->x_blocksize]; - for(i=0;i<x->x_blocksize;i++) + for(i=0; i<OUTPUT_DELAY; i++) x->x_outbuf[i]=x->x_outbuf[i+x->x_blocksize]; + for(i=0; i<x->x_blocksize; i++) { - x->x_in1buf[x->x_blocksize/2+i]=(double)(*(in1++)); - x->x_in2buf[x->x_blocksize/2+i]=(double)(*(in2++)); + x->x_in1buf[x->x_blocksize/2+i]=(double)(*(in1++)); + x->x_in2buf[x->x_blocksize/2+i]=(double)(*(in2++)); } hp_filter(x->x_in2buf,x->x_cutoff/128.,n); - for(i=0;i<4;i++) + for(i=0; i<4; i++) { - comp_lpc(x->x_in1buf+offset,correls,lpc_coef,x->x_blocksize/4); - if (lpc_coef[0]!=0) - { - lpc2lsp(lpc_coef,f1,f2,lsp_coef); - lsp2lpc(lsp_coef,lpc_coef); - }; - lpc_filter(x->x_in2buf+offset,lpc_coef,x->x_outbuf+OUTPUT_DELAY+offset,x->x_blocksize/4); - offset+=x->x_blocksize/4; + comp_lpc(x->x_in1buf+offset,correls,lpc_coef,x->x_blocksize/4); + if (lpc_coef[0]!=0) + { + lpc2lsp(lpc_coef,f1,f2,lsp_coef); + lsp2lpc(lsp_coef,lpc_coef); + }; + lpc_filter(x->x_in2buf+offset,lpc_coef,x->x_outbuf+OUTPUT_DELAY+offset,x->x_blocksize/4); + offset+=x->x_blocksize/4; }; - for(i=0;i<x->x_blocksize;i++) + for(i=0; i<x->x_blocksize; i++) { - if ( x->x_outbuf[OUTPUT_DELAY+i] > 1.0 ) x->x_outbuf[OUTPUT_DELAY+i]=1.0; - if ( x->x_outbuf[OUTPUT_DELAY+i] < -1.0 ) x->x_outbuf[OUTPUT_DELAY+i]=-1.0; - *(out1++)=(t_float)(((100-x->x_vfeedback)*x->x_outbuf[OUTPUT_DELAY+i] - + x->x_vfeedback*(*fin1++))/100.0); + if ( x->x_outbuf[OUTPUT_DELAY+i] > 1.0 ) x->x_outbuf[OUTPUT_DELAY+i]=1.0; + if ( x->x_outbuf[OUTPUT_DELAY+i] < -1.0 ) x->x_outbuf[OUTPUT_DELAY+i]=-1.0; + *(out1++)=(t_float)(((100-x->x_vfeedback)*x->x_outbuf[OUTPUT_DELAY+i] + + x->x_vfeedback*(*fin1++))/100.0); }; - + return (w+6); } @@ -143,7 +143,7 @@ static void *vocoder_new(void) return (x); } - /* clean up */ +/* clean up */ static void vocoder_free(t_vocoder *x) { if ( x->x_in1buf ) freebytes( x->x_in1buf, 3*x->x_blocksize/2*sizeof( double ) ); @@ -155,7 +155,7 @@ void vocoder_tilde_setup(void) { verbose(0, vocoder_version); vocoder_class = class_new(gensym("vocoder~"), (t_newmethod)vocoder_new, (t_method)vocoder_free, - sizeof(t_vocoder), 0, 0); + sizeof(t_vocoder), 0, 0); CLASS_MAINSIGNALIN( vocoder_class, t_vocoder, x_f ); class_addmethod(vocoder_class, (t_method)vocoder_dsp, gensym("dsp"), 0); class_addmethod(vocoder_class, (t_method)vocoder_cutoff, gensym("cutoff"), A_FLOAT, 0); |