From d145fa6f792d6c44da2feec90507adb94e40323e Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Sun, 31 Jul 2011 03:59:16 +0000 Subject: got everything building using the template Makefile svn path=/trunk/externals/unauthorized/; revision=15173 --- vocoder~/INSTALL | 15 --- vocoder~/filters.c | 49 -------- vocoder~/lpc.c | 252 ------------------------------------- vocoder~/rs-vocoder~.pd | 13 -- vocoder~/tables.c | 311 ---------------------------------------------- vocoder~/vocoder~-help.pd | 55 -------- vocoder~/vocoder~.c | 163 ------------------------ 7 files changed, 858 deletions(-) delete mode 100644 vocoder~/INSTALL delete mode 100644 vocoder~/filters.c delete mode 100644 vocoder~/lpc.c delete mode 100644 vocoder~/rs-vocoder~.pd delete mode 100644 vocoder~/tables.c delete mode 100644 vocoder~/vocoder~-help.pd delete mode 100644 vocoder~/vocoder~.c (limited to 'vocoder~') diff --git a/vocoder~/INSTALL b/vocoder~/INSTALL deleted file mode 100644 index 37c9567..0000000 --- a/vocoder~/INSTALL +++ /dev/null @@ -1,15 +0,0 @@ -untar in /my/pd/dir/externs - -cd /my/pd/dir/externs/vocoder~ - -make clean - -make - -make install - -open help-vocoder~.pd - -Thanx for getting here. -Yves/ -comments and bugs @ ydegoyon@free.fr diff --git a/vocoder~/filters.c b/vocoder~/filters.c deleted file mode 100644 index 2bf9253..0000000 --- a/vocoder~/filters.c +++ /dev/null @@ -1,49 +0,0 @@ -/* -vox - a musical real-time vocoder. version 1.0 -Copyright (C) 2000 Simon MORLAT (simon.morlat@free.fr) - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - - - -void lpc_filter(double *buf_ppf, double *lpc_coef, double *buf_sy, int n) -{ - int i,j; - double acc; - - for(i=0;iTHRES) - { - for(i=0;i<3*n;i++) - { - buffer[i]=buf_x[i-n]*HammingWindowTable[i]; - }; - /* autocorrelation computation*/ - for(i=0;i<11;i++) - { - acc=0; - for(j=i;j0;k--) - { - b[k]=2*x*b[k+1]-b[k+2]+fonc[5-k]; - }; - res=x*b[1]-b[2]+fonc[5]/2; - return(res); -} - - - -/* converts LPC vector into LSP frequency vector */ -/* all LSP frenquencies are in [0;PI] but are normalized to be in [0;1] */ -void lpc2lsp(double lpc_coef[],double *f1,double *f2,double lsp_coef[]) -{ - - int i,k=1; - double *fonc,*prev_f,*f_exch; - double prev_sign1,sign,prev_sign2; - double *s, *prev_s,*s_exch; - double lpc_exp[11]; - - /* first computes an additional bandwidth expansion on LPC coeffs*/ - for(i=1;i<11;i++) - { - lpc_exp[i]=lpc_coef[i]*BandExpTable[i]; - }; - /* computes the F1 and F2 coeffs*/ - f1[0]=f2[0]=1; - for(i=0;i<5;i++) - { - f1[i+1]=lpc_exp[i+1]+lpc_exp[10-i]-f1[i]; - f2[i+1]=lpc_exp[i+1]-lpc_exp[10-i]+f2[i]; - }; - - /*find the roots of C(x) alternatively for F1 and F2*/ - fonc=f1; - prev_f=f2; - prev_sign1=evalc(1.0,f1); - prev_sign2=evalc(1.0,f2); - s=&prev_sign1; - prev_s=&prev_sign2; - for(i=1;i<256;i++) - { - sign=evalc(CosineTable[i],fonc); - if ((sign)*(*s)<0) - { - /* interpolate to find root*/ - lsp_coef[k]=((double)i-(*s)/(sign-(*s)))/256.0; - k++; - /* chek if all roots are found */ - if (k==11) i=257; - (*s)=sign; - /* pointers exchange */ - s_exch=s; - s=prev_s; - prev_s=s_exch; - f_exch=fonc; - fonc=prev_f; - prev_f=f_exch; - } - else (*s)=sign; - } - /* if here all roots are not found , use lspDC vector */ - if (k!=11) - { - for(i=1;i<11;i++) - { - lsp_coef[i]=LspDcTable[i]; - }; - }; -} - - -/* converts lsp frequencies to lpc coeffs */ - -void lsp2lpc(double *lsp_coef,double *lpc_coef) -{ - int i,j=0,index,ok=1; - double lspcos[11],delta,tmp,p_avg; - double F1[12],F2[12]; /* begin at indice two*/ - - F1[0]=0;F1[1]=1; - F2[0]=0;F2[1]=1; - /* stability check */ - while(ok && (j<11)) - { - ok=0; - for(i=1;i<10;i++) - { - if( (lsp_coef[i+1]-lsp_coef[i]) < Dmin) - { - ok=1; - p_avg=(lsp_coef[i]+lsp_coef[i+1])/2.0; - lsp_coef[i]=p_avg-Dmin/2.0; - lsp_coef[i+1]=p_avg+Dmin/2.0; - }; - }; - j++; - } - - /* first converts lsp frequencies to lsp coefficients */ - for (i=1;i<11;i++) - { - /* interpolation */ - tmp=lsp_coef[i]*255.0; - index=(int)tmp; - delta=CosineTable[index+1]-CosineTable[index]; - lspcos[i]=CosineTable[index]+delta*(tmp-index); - }; - - for(i=2;i<7;i++) - { - F1[i]=-2*lspcos[2*i-3]*F1[i-1]+2*F1[i-2]; - F2[i]=-2*lspcos[2*i-2]*F2[i-1]+2*F2[i-2]; - for(j=i-1;j>1;j--) - { - F1[j]=F1[j]-2*lspcos[2*i-3]*F1[j-1]+F1[j-2]; - F2[j]=F2[j]-2*lspcos[2*i-2]*F2[j-1]+F2[j-2]; - }; - }; - for(i=6;i>1;i--) - { - F1[i]=F1[i]+F1[i-1]; - F2[i]=F2[i]-F2[i-1]; - }; - for(i=2;i<7;i++) - { - lpc_coef[i-1]=(F1[i]+F2[i])*0.5; - lpc_coef[i+4]=(F1[8-i]-F2[8-i])*0.5; - }; - lpc_coef[0]=1; -} - diff --git a/vocoder~/rs-vocoder~.pd b/vocoder~/rs-vocoder~.pd deleted file mode 100644 index 65dfc0d..0000000 --- a/vocoder~/rs-vocoder~.pd +++ /dev/null @@ -1,13 +0,0 @@ -#N canvas 0 0 450 300 10; -#X obj 39 146 block~ 512; -#X obj 89 36 inlet~; -#X obj 151 34 inlet~; -#X obj 129 77 vocoder~; -#X obj 207 33 inlet; -#X obj 261 33 inlet; -#X obj 129 108 outlet~; -#X connect 1 0 3 0; -#X connect 2 0 3 1; -#X connect 3 0 6 0; -#X connect 4 0 3 2; -#X connect 5 0 3 3; diff --git a/vocoder~/tables.c b/vocoder~/tables.c deleted file mode 100644 index 049a523..0000000 --- a/vocoder~/tables.c +++ /dev/null @@ -1,311 +0,0 @@ -/* -vox - a musical real-time vocoder. version 1.0 -Copyright (C) 2000 Simon MORLAT (simon.morlat@free.fr) - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -double LspDcTable[11] = { - 0, - 0.0955505 , - 0.144073 , - 0.23468 , - 0.329773 , - 0.42334 , - 0.503387 , - 0.602783 , - 0.679321 , - 0.77771 , - 0.845886 -}; - -double CosineTable[257] = { - 1 , - 0.999939 , - 0.999695 , - 0.999329 , - 0.998779 , - 0.998108 , - 0.997314 , - 0.996338 , - 0.995178 , - 0.993896 , - 0.992493 , - 0.990906 , - 0.989197 , - 0.987305 , - 0.985291 , - 0.983093 , - 0.980774 , - 0.978333 , - 0.975708 , - 0.972961 , - 0.970032 , - 0.96698 , - 0.963806 , - 0.960449 , - 0.95697 , - 0.953308 , - 0.949524 , - 0.945618 , - 0.941528 , - 0.937317 , - 0.932983 , - 0.928528 , - 0.923889 , - 0.919128 , - 0.914185 , - 0.90918 , - 0.903992 , - 0.898682 , - 0.89325 , - 0.887634 , - 0.881897 , - 0.876099 , - 0.870117 , - 0.863953 , - 0.857727 , - 0.851379 , - 0.844849 , - 0.838196 , - 0.831482 , - 0.824585 , - 0.817566 , - 0.810486 , - 0.803223 , - 0.795837 , - 0.78833 , - 0.780762 , - 0.77301 , - 0.765198 , - 0.757202 , - 0.749146 , - 0.740967 , - 0.732666 , - 0.724243 , - 0.715759 , - 0.707092 , - 0.698364 , - 0.689514 , - 0.680603 , - 0.67157 , - 0.662415 , - 0.653198 , - 0.64386 , - 0.634399 , - 0.624878 , - 0.615234 , - 0.60553 , - 0.595703 , - 0.585815 , - 0.575806 , - 0.565735 , - 0.555542 , - 0.545349 , - 0.534973 , - 0.524597 , - 0.514099 , - 0.50354 , - 0.49292 , - 0.482178 , - 0.471375 , - 0.46051 , - 0.449585 , - 0.438599 , - 0.427551 , - 0.416443 , - 0.405212 , - 0.393982 , - 0.38269 , - 0.371338 , - 0.359924 , - 0.348389 , - 0.336914 , - 0.325317 , - 0.31366 , - 0.302002 , - 0.290283 , - 0.278503 , - 0.266724 , - 0.254883 , - 0.242981 , - 0.231079 , - 0.219116 , - 0.207092 , - 0.195068 , - 0.183044 , - 0.170959 , - 0.158875 , - 0.146729 , - 0.134583 , - 0.122437 , - 0.110229 , - 0.0980225 , - 0.0858154 , - 0.0735474 , - 0.0613403 , - 0.0490723 , - 0.0368042 , - 0.0245361 , - 0.0122681 , - 0 , - -0.0122681 , - -0.0245361 , - -0.0368042 , - -0.0490723 , - -0.0613403 , - -0.0735474 , - -0.0858154 , - -0.0980225 , - -0.110229 , - -0.122437 , - -0.134583 , - -0.146729 , - -0.158875 , - -0.170959 , - -0.183044 , - -0.195068 , - -0.207092 , - -0.219116 , - -0.231079 , - -0.242981 , - -0.254883 , - -0.266724 , - -0.278503 , - -0.290283 , - -0.302002 , - -0.31366 , - -0.325317 , - -0.336914 , - -0.348389 , - -0.359924 , - -0.371338 , - -0.38269 , - -0.393982 , - -0.405212 , - -0.416443 , - -0.427551 , - -0.438599 , - -0.449585 , - -0.46051 , - -0.471375 , - -0.482178 , - -0.49292 , - -0.50354 , - -0.514099 , - -0.524597 , - -0.534973 , - -0.545349 , - -0.555542 , - -0.565735 , - -0.575806 , - -0.585815 , - -0.595703 , - -0.60553 , - -0.615234 , - -0.624878 , - -0.634399 , - -0.64386 , - -0.653198 , - -0.662415 , - -0.67157 , - -0.680603 , - -0.689514 , - -0.698364 , - -0.707092 , - -0.715759 , - -0.724243 , - -0.732666 , - -0.740967 , - -0.749146 , - -0.757202 , - -0.765198 , - -0.77301 , - -0.780762 , - -0.78833 , - -0.795837 , - -0.803223 , - -0.810486 , - -0.817566 , - -0.824585 , - -0.831482 , - -0.838196 , - -0.844849 , - -0.851379 , - -0.857727 , - -0.863953 , - -0.870117 , - -0.876099 , - -0.881897 , - -0.887634 , - -0.89325 , - -0.898682 , - -0.903992 , - -0.90918 , - -0.914185 , - -0.919128 , - -0.923889 , - -0.928528 , - -0.932983 , - -0.937317 , - -0.941528 , - -0.945618 , - -0.949524 , - -0.953308 , - -0.95697 , - -0.960449 , - -0.963806 , - -0.96698 , - -0.970032 , - -0.972961 , - -0.975708 , - -0.978333 , - -0.980774 , - -0.983093 , - -0.985291 , - -0.987305 , - -0.989197 , - -0.990906 , - -0.992493 , - -0.993896 , - -0.995178 , - -0.996338 , - -0.997314 , - -0.998108 , - -0.998779 , - -0.999329 , - -0.999695 , - -0.999939 , - -1 -}; - -double BandExpTable[11] = { - 1, - 0.993988 , - 0.988037 , - 0.982117 , - 0.976227 , - 0.970367 , - 0.964539 , - 0.95874 , - 0.953003 , - 0.947266 , - 0.941589 -}; - - -double HammingWindowTable[128*3]={ -5.38469e-16, 6.69307e-05, 0.000267706, 0.000602271, 0.00107054, 0.00167238, 0.00240763, 0.00327611, 0.00427757, 0.00541174, 0.00667833, 0.00807699, 0.00960736, 0.011269, 0.0130615, 0.0149844, 0.0170371, 0.0192191, 0.0215298, 0.0239687, 0.0265349, 0.029228, 0.032047, 0.0349914, 0.0380602, 0.0412527, 0.0445681, 0.0480053, 0.0515636, 0.055242, 0.0590394, 0.0629548, 0.0669873, 0.0711357, 0.0753989, 0.0797758, 0.0842652, 0.0888659, 0.0935766, 0.0983962, 0.103323, 0.108357, 0.113495, 0.118736, 0.12408, 0.129524, 0.135068, 0.140709, 0.146447, 0.152279, 0.158204, 0.164221, 0.170327, 0.176522, 0.182803, 0.18917, 0.195619, 0.20215, 0.208761, 0.21545, 0.222215, 0.229054, 0.235966, 0.242949, 0.25, 0.257118, 0.264302, 0.271548, 0.278856, 0.286222, 0.293646, 0.301126, 0.308658, 0.316242, 0.323875, 0.331555, 0.33928, 0.347048, 0.354858, 0.362706, 0.37059, 0.37851, 0.386462, 0.394444, 0.402455, 0.410492, 0.418552, 0.426635, 0.434737, 0.442857, 0.450991, 0.459139, 0.467298, 0.475466, 0.48364, 0.491819, 0.5, 0.508181, 0.51636, 0.524534, 0.532702, 0.540861, 0.549009, 0.557143, 0.565263, 0.573365, 0.581448, 0.589508, 0.597545, 0.605556, 0.613538, 0.62149, 0.62941, 0.637294, 0.645142, 0.652952, 0.66072, 0.668445, 0.676125, 0.683758, 0.691342, 0.698874, 0.706354, 0.713778, 0.721144, 0.728452, 0.735698, 0.742882, 0.75, 0.757051, 0.764034, 0.770946, 0.777785, 0.78455, 0.791239, 0.79785, 0.804381, 0.81083, 0.817197, 0.823478, 0.829673, 0.835779, 0.841796, 0.847721, 0.853553, 0.859291, 0.864932, 0.870476, 0.87592, 0.881264, 0.886505, 0.891643, 0.896677, 0.901604, 0.906423, 0.911134, 0.915735, 0.920224, 0.924601, 0.928864, 0.933013, 0.937045, 0.940961, 0.944758, 0.948436, 0.951995, 0.955432, 0.958747, 0.96194, 0.965009, 0.967953, 0.970772, 0.973465, 0.976031, 0.97847, 0.980781, 0.982963, 0.985016, 0.986938, 0.988731, 0.990393, 0.991923, 0.993322, 0.994588, 0.995722, 0.996724, 0.997592, 0.998328, 0.998929, 0.999398, 0.999732, 0.999933, 1, 0.999933, 0.999732, 0.999398, 0.998929, 0.998328, 0.997592, 0.996724, 0.995722, 0.994588, 0.993322, 0.991923, 0.990393, 0.988731, 0.986938, 0.985016, 0.982963, 0.980781, 0.97847, 0.976031, 0.973465, 0.970772, 0.967953, 0.965009, 0.96194, 0.958747, 0.955432, 0.951995, 0.948436, 0.944758, 0.940961, 0.937045, 0.933013, 0.928864, 0.924601, 0.920224, 0.915735, 0.911134, 0.906423, 0.901604, 0.896677, 0.891643, 0.886505, 0.881264, 0.87592, 0.870476, 0.864932, 0.859291, 0.853553, 0.847721, 0.841796, 0.835779, 0.829673, 0.823478, 0.817197, 0.81083, 0.804381, 0.79785, 0.791239, 0.78455, 0.777785, 0.770946, 0.764034, 0.757051, 0.75, 0.742882, 0.735698, 0.728452, 0.721144, 0.713778, 0.706354, 0.698874, 0.691342, 0.683758, 0.676125, 0.668445, 0.66072, 0.652952, 0.645142, 0.637294, 0.62941, 0.62149, 0.613538, 0.605556, 0.597545, 0.589508, 0.581448, 0.573365, 0.565263, 0.557143, 0.549009, 0.540861, 0.532702, 0.524534, 0.51636, 0.508181, 0.5, 0.491819, 0.48364, 0.475466, 0.467298, 0.459139, 0.450991, 0.442857, 0.434737, 0.426635, 0.418552, 0.410492, 0.402455, 0.394444, 0.386462, 0.37851, 0.37059, 0.362706, 0.354858, 0.347048, 0.33928, 0.331555, 0.323875, 0.316242, 0.308658, 0.301126, 0.293646, 0.286222, 0.278856, 0.271548, 0.264302, 0.257118, 0.25, 0.242949, 0.235966, 0.229054, 0.222215, 0.21545, 0.208761, 0.20215, 0.195619, 0.18917, 0.182803, 0.176522, 0.170327, 0.164221, 0.158204, 0.152279, 0.146447, 0.140709, 0.135068, 0.129524, 0.12408, 0.118736, 0.113495, 0.108357, 0.103323, 0.0983962, 0.0935766, 0.0888659, 0.0842652, 0.0797758, 0.0753989, 0.0711357, 0.0669873, 0.0629548, 0.0590394, 0.055242, 0.0515636, 0.0480053, 0.0445681, 0.0412527, 0.0380602, 0.0349914, 0.032047, 0.029228, 0.0265349, 0.0239687, 0.0215298, 0.0192191, 0.0170371, 0.0149844, 0.0130615, 0.011269, 0.00960736, 0.00807699, 0.00667833, 0.00541174, 0.00427757, 0.00327611, 0.00240763, 0.00167238, 0.00107054, 0.000602271, 0.000267706, 6.69307e-05, - }; diff --git a/vocoder~/vocoder~-help.pd b/vocoder~/vocoder~-help.pd deleted file mode 100644 index 7bbf3b2..0000000 --- a/vocoder~/vocoder~-help.pd +++ /dev/null @@ -1,55 +0,0 @@ -#N canvas 123 129 764 525 10; -#X obj 201 393 dac~; -#X obj 153 330 adc~; -#X obj 204 355 rs-vocoder~; -#X text 356 457 vocoder~ : vocoder effect; -#X text 356 469 inspired by xvox written by; -#X text 357 483 Simon Morlat ( http://simon.morlat.free.fr ); -#X text 357 497 Part of unauthorized PD ( http://ydegoyon.free.fr ) -; -#X obj 125 406 env~; -#X floatatom 124 435 5 0 0; -#X obj 265 301 hsl 128 15 0 1000 0 0 empty empty empty -2 -6 0 8 -262144 --1 -1 11500 1; -#X text 409 299 Cutoff Frequency; -#X obj 295 327 hsl 128 15 0 100 0 0 empty empty empty -2 -6 0 8 -262144 --1 -1 10500 1; -#X text 439 325 Voice Feedback [ 0 - 100 ]; -#X msg 49 39 bang; -#X obj 48 61 openpanel; -#X obj 48 81 t s b; -#X obj 105 83 float \$0; -#X text 56 16 Step 1 : Load a sound file; -#X obj 48 104 route float; -#X obj 49 196 soundfiler; -#X text 106 32 ( maybe \, a guitar sound ? ); -#X obj 48 127 makefilename %d-sample; -#X msg 49 174 read -resize \$1 \$2; -#X obj 50 153 pack s s; -#X msg 237 207 bang; -#X text 282 207 Step 2 : Start playing; -#X obj 237 254 tabplay~ \$0-sample; -#X msg 308 230 stop; -#X obj 237 230 metro 250; -#X text 49 300 Step 3 : Grab the mike !!!; -#X obj 333 90 table \$0-sample; -#X connect 1 0 2 0; -#X connect 2 0 0 0; -#X connect 2 0 0 1; -#X connect 2 0 7 0; -#X connect 7 0 8 0; -#X connect 9 0 2 2; -#X connect 11 0 2 3; -#X connect 13 0 14 0; -#X connect 14 0 15 0; -#X connect 15 0 23 0; -#X connect 15 1 16 0; -#X connect 16 0 18 0; -#X connect 18 0 21 0; -#X connect 21 0 23 1; -#X connect 22 0 19 0; -#X connect 23 0 22 0; -#X connect 24 0 28 0; -#X connect 26 0 2 1; -#X connect 27 0 28 0; -#X connect 28 0 26 0; diff --git a/vocoder~/vocoder~.c b/vocoder~/vocoder~.c deleted file mode 100644 index 08dbe3d..0000000 --- a/vocoder~/vocoder~.c +++ /dev/null @@ -1,163 +0,0 @@ -/* 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. - * - * THE AUTHOR AND HIS EXPLOITERS MAKE NO WARRANTY, EXPRESS OR IMPLIED, - * IN CONNECTION WITH THIS SOFTWARE. - * - */ - -#include "m_pd.h" -#include "filters.h" -#include "lpc.h" - -#define OUTPUT_DELAY 50 - -typedef struct _vocoder -{ - t_object x_obj; - t_float x_f; - t_float x_cutoff; - t_int x_vfeedback; - double *x_in1buf; - double *x_in2buf; - double *x_outbuf; - t_int x_blocksize; - t_int x_process; -} t_vocoder; - -static t_class *vocoder_class; - -static char *vocoder_version = "vocoder~: version 0.1, written by ydegoyon@free.fr, inspired by xvox (Simon Morlat)"; - -static void vocoder_cutoff(t_vocoder *x, t_floatarg fcutoff ) -{ - if ( fcutoff > 128.0 ) - { - fcutoff = 128.0; - } - if ( fcutoff < 0.0 ) - { - fcutoff = 0.0; - } - x->x_cutoff = fcutoff; -} - -static void vocoder_vfeedback(t_vocoder *x, t_floatarg fvfeedback ) -{ - if ( fvfeedback > 100.0 ) - { - fvfeedback = 100.0; - } - if ( fvfeedback < 0.0 ) - { - fvfeedback = 0.0; - } - x->x_vfeedback = fvfeedback; -} - -static t_int *vocoder_perform(t_int *w) -{ - t_vocoder *x = (t_vocoder *)(w[1]); - t_float *in1 = (t_float *)(w[2]); - t_float *fin1 = (t_float *)(w[2]); - t_float *in2 = (t_float *)(w[3]); - t_float *out1 = (t_float *)(w[4]); - double correls[12], lpc_coef[11], f1[12], f2[12], lsp_coef[11]; - int offset=0; - int n = (int)(w[5]), i; - - if ( !x->x_process ) return (w+6); - 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;ix_blocksize/2;i++) - { - x->x_in1buf[i]=x->x_in1buf[i+x->x_blocksize]; - }; - for(i=0;ix_outbuf[i]=x->x_outbuf[i+x->x_blocksize]; - for(i=0;ix_blocksize;i++) - { - 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++) - { - 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;ix_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); - }; - - return (w+6); -} - -static void vocoder_dsp(t_vocoder *x, t_signal **sp) -{ - dsp_add(vocoder_perform, 5, x, sp[0]->s_vec, sp[1]->s_vec, sp[2]->s_vec, sp[0]->s_n); -} - -static void *vocoder_new(void) -{ - t_vocoder *x = (t_vocoder *)pd_new(vocoder_class); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_signal, &s_signal); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("cutoff")); - inlet_new(&x->x_obj, &x->x_obj.ob_pd, &s_float, gensym("vfeedback")); - outlet_new(&x->x_obj, &s_signal); - x->x_cutoff = 60.; - x->x_vfeedback = 50; - x->x_blocksize=-1; - x->x_in1buf = NULL; - x->x_in2buf = NULL; - x->x_outbuf = NULL; - x->x_process = 1; - return (x); -} - - /* clean up */ -static void vocoder_free(t_vocoder *x) -{ - 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 ) ); -} - -void vocoder_tilde_setup(void) -{ - post(vocoder_version); - vocoder_class = class_new(gensym("vocoder~"), (t_newmethod)vocoder_new, (t_method)vocoder_free, - 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); - class_addmethod(vocoder_class, (t_method)vocoder_vfeedback, gensym("vfeedback"), A_FLOAT, 0); -} -- cgit v1.2.1