00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <stdio.h>
00010
00011 #include "tdef.h"
00012 #include "uti.h"
00013 #include "xalloc.h"
00014 #include "cabdef0.h"
00015 #include "cabdef1.h"
00016 #include "cabctrl.h"
00017 #include "cabecer.h"
00018 #include "fvoz.h"
00019 #include "spl.h"
00020
00021
00022
00023 fseni * fseni_construct( pCHAR fname )
00024 {
00025 fseni * fs;
00026
00027 fs = (fseni *)xmalloc(sizeof(fseni));
00028
00029 fs->f = xfopen(fname,"rb");
00030 fs->tdata = leecfs(fs->f,&fs->cgs,-1);
00031 fs->min = fs->cgs.rango.min;
00032 fs->max = fs->cgs.rango.max;
00033
00034 fs->cgs.rango.min = -1;
00035 fs->cgs.rango.max = 1;
00036
00037 return fs;
00038 }
00039
00040
00041
00042 fseni * fseni_v_construct( pCHAR fname )
00043 {
00044 fseni * fs;
00045
00046 fs = (fseni *)xmalloc(sizeof(fseni));
00047
00048 fs->f = xfopen(fname,"rb");
00049 vleecfs(fs->f,&(fs->cgs));
00050 fs->tdata = TD_INT2;
00051 fs->min = fs->cgs.rango.min;
00052 fs->max = fs->cgs.rango.max;
00053
00054 fs->cgs.rango.min = -1;
00055 fs->cgs.rango.max = 1;
00056
00057 return fs;
00058 }
00059
00060
00061
00062
00063 void fseni_destruct( fseni * fs )
00064 {
00065 free_cgsenal(&fs->cgs);
00066 xfclose(fs->f);
00067 xfree(fs);
00068 }
00069
00070
00071
00072 struct cgsenal * fseni_getcgs( fseni * fs )
00073 {
00074 return &fs->cgs;
00075 }
00076
00077
00078
00079 UINT4 fseni_getnm( fseni * fs )
00080 {
00081 return fs->cgs.nm;
00082 }
00083
00084
00085
00086 FLOAT4 fseni_getfm( fseni * fs )
00087 {
00088 return fs->cgs.fm;
00089 }
00090
00091
00092
00093 FLOAT4 fseni_getsamp( fseni * fs )
00094 {
00095 INT16 samp;
00096
00097 switch (fs->tdata) {
00098 case TD_INT2 :
00099 xfread(&samp,sizeof(samp),1,fs->f);
00100 return (FLOAT4)normalize(samp,fs->min,fs->max);
00101 case TD_FLOAT4 :
00102 return (FLOAT4)normalize(xlee_sfloat(fs->f),fs->min,fs->max);
00103 default :
00104 die_beep("error: tipo de datos no soportado");
00105 break;
00106 }
00107 return 0;
00108 }
00109
00110
00111
00112 INT16 fseni_geti16samp( fseni * fs )
00113 {
00114 INT16 samp;
00115
00116 switch (fs->tdata) {
00117 case TD_INT2 :
00118 xfread(&samp,sizeof(samp),1,fs->f);
00119 return samp;
00120 case TD_FLOAT4 :
00121 return sunnorm_i16(normalize(xlee_sfloat(fs->f),fs->min,fs->max));
00122 default :
00123 die_beep("error: tipo de datos no soportado");
00124 break;
00125 }
00126 return 0;
00127 }
00128
00129
00130
00131 fseno * fseno_construct( pCHAR fname,
00132 struct cgsenal * cgs,
00133 UINT2 ftyp,
00134 UCHAR1 tdata,
00135 pCHAR tmpname )
00136 {
00137 fseno * fs;
00138 struct fminmax rango;
00139
00140 fs = (fseno *)xmalloc(sizeof(fseno));
00141 fs->fn = fntmp_construct(fname,tmpname);
00142
00143 fs->f = xfopen(fntmp_getname(fs->fn),"wb+");
00144 rango = cgs->rango;
00145 if (tdata==TD_INT2) {
00146 cgs->rango.min = -INT16_RANGE;
00147 cgs->rango.max = +INT16_RANGE;
00148 }
00149 else {
00150 cgs->rango.min = -1;
00151 cgs->rango.max = +1;
00152 }
00153
00154 escribecfs_ftyp(fs->f,cgs,ftyp,tdata);
00155 fs->tdata = tdata;
00156 cgs->rango = rango;
00157
00158 fs->nm = 0;
00159
00160 return fs;
00161 }
00162
00163
00164
00165 void fseno_destruct( fseno * fs )
00166 {
00167 UINT4 n;
00168
00169 n = fs->nm;
00170 vete_cgsenal(fs->f);
00171 xfwrite(&n,sizeof(n),1,fs->f);
00172 xfclose(fs->f);
00173 fntmp_destruct(fs->fn);
00174 xfree(fs);
00175 }
00176
00177
00178
00179 UINT4 fseno_getnm( fseno * fs )
00180 {
00181 return fs->nm;
00182 }
00183
00184
00185
00186 void fseno_setsamp( fseno * fs,
00187 FLOAT4 samp )
00188 {
00189 INT16 isamp;
00190
00191 switch (fs->tdata) {
00192 case TD_INT2 :
00193 isamp = sunnorm_i16(samp);
00194 xfwrite(&isamp,sizeof(isamp),1,fs->f);
00195 break;
00196 case TD_FLOAT4 :
00197 xescribe_sfloat(fs->f,samp);
00198 break;
00199 default :
00200 die_beep("error: tipo de datos no soportado");
00201 break;
00202 }
00203 (fs->nm)++;
00204 }
00205
00206
00207
00208 void fseno_seti16samp( fseno * fs,
00209 INT16 samp )
00210 {
00211 switch (fs->tdata) {
00212 case TD_INT2 :
00213 xfwrite(&samp,sizeof(samp),1,fs->f);
00214 break;
00215 case TD_FLOAT4 :
00216 xescribe_sfloat(fs->f,(FLOAT4)norm_i16(samp));
00217 break;
00218 default :
00219 die_beep("error: tipo de datos no soportado");
00220 break;
00221 }
00222 (fs->nm)++;
00223 }
00224
00225
00226
00227 fslpco * fslpco_construct( pCHAR fname,
00228 struct cgsenal * cgs,
00229 struct cgp_lpc * cgpl,
00230 UINT2 ftyp,
00231 UCHAR1 tdata,
00232 pCHAR tmpname )
00233 {
00234 fslpco * fs;
00235 struct fminmax rango;
00236
00237 fs = (fslpco *)xmalloc(sizeof(fslpco));
00238 fs->fn = fntmp_construct(fname,tmpname);
00239
00240 fs->f = xfopen(fntmp_getname(fs->fn),"wb+");
00241 rango = cgs->rango;
00242
00243 if (tdata==TD_INT2) {
00244 cgs->rango.min = -INT16_RANGE;
00245 cgs->rango.max = +INT16_RANGE;
00246 }
00247 else {
00248 cgs->rango.min = -1;
00249 cgs->rango.max = +1;
00250 }
00251
00252 escribecfslpc(fs->f,cgs,cgpl,ftyp,tdata);
00253 fs->tdata = tdata;
00254 cgs->rango = rango;
00255
00256 fs->nm = 0;
00257
00258 return fs;
00259 }
00260
00261
00262
00263 void fslpco_destruct( fslpco * fs )
00264 {
00265 UINT4 n;
00266
00267 n = fs->nm;
00268 vete_cgsenal(fs->f);
00269 xfwrite(&n,sizeof(n),1,fs->f);
00270 xfclose(fs->f);
00271 fntmp_destruct(fs->fn);
00272 xfree(fs);
00273 }
00274
00275
00276
00277 UINT4 fslpco_getnm( fslpco * fs )
00278 {
00279 return fs->nm;
00280 }
00281
00282
00283
00284 void fslpco_setsamp( fslpco * fs,
00285 FLOAT4 samp )
00286 {
00287 INT16 isamp;
00288
00289 switch (fs->tdata) {
00290 case TD_INT2 :
00291 isamp = sunnorm_i16(samp);
00292 xfwrite(&isamp,sizeof(isamp),1,fs->f);
00293 break;
00294 case TD_FLOAT4 :
00295 xescribe_sfloat(fs->f,samp);
00296 break;
00297 default :
00298 die_beep("error: tipo de datos no soportado");
00299 break;
00300 }
00301 (fs->nm)++;
00302 }
00303
00304
00305
00306 fslpci * fslpci_construct( pCHAR fname )
00307 {
00308 fslpci * fs;
00309
00310 fs = (fslpci *)xmalloc(sizeof(fslpci));
00311
00312 fs->f = xfopen(fname,"rb");
00313 fs->tdata = (UCHAR1)leecfslpc(fs->f,&fs->cgs,&fs->cgpl,-1,&fs->haycgpl);
00314 fs->min = fs->cgs.rango.min;
00315 fs->max = fs->cgs.rango.max;
00316
00317 fs->cgs.rango.min = -1;
00318 fs->cgs.rango.max = 1;
00319
00320 return fs;
00321 }
00322
00323
00324
00325 void fslpci_destruct( fslpci * fs )
00326 {
00327 free_cgsenal(&fs->cgs);
00328 xfclose(fs->f);
00329 xfree(fs);
00330 }
00331
00332
00333
00334 struct cgsenal * fslpci_getcgs( fslpci * fs )
00335 {
00336 return &fs->cgs;
00337 }
00338
00339
00340
00341 BOOL fslpci_haycgpl( fslpci * fs )
00342 {
00343 return fs->haycgpl;
00344 }
00345
00346
00347
00348 struct cgp_lpc * fslpci_getcgpl( fslpci * fs )
00349 {
00350 return &fs->cgpl;
00351 }
00352
00353
00354
00355 UINT4 fslpci_getnm( fslpci * fs )
00356 {
00357 return fs->cgs.nm;
00358 }
00359
00360
00361
00362 FLOAT4 fslpci_getfm( fslpci * fs )
00363 {
00364 return fs->cgs.fm;
00365 }
00366
00367
00368
00369 FLOAT4 fslpci_getsamp( fslpci * fs )
00370 {
00371 INT16 samp;
00372
00373 switch (fs->tdata) {
00374 case TD_INT2 :
00375 xfread(&samp,sizeof(samp),1,fs->f);
00376 return (FLOAT4)normalize(samp,fs->min,fs->max);
00377 case TD_FLOAT4 :
00378 return (FLOAT4)normalize(xlee_sfloat(fs->f),fs->min,fs->max);
00379 default :
00380 die_beep("error: tipo de datos no soportado");
00381 break;
00382 }
00383 return 0;
00384 }
00385
00386
00387
00388 flpci * flpci_construct( pCHAR fname )
00389 {
00390 flpci * fl;
00391
00392 fl = (flpci *)xmalloc(sizeof(flpci));
00393
00394 fl->f = xfopen(fname,"rb");
00395 lee_cab_lpc(fl->f,&fl->cgpl);
00396 fl->lpcvec = (pFLOAT4)xmalloc(sizeof(FLOAT4)*flpci_getdimvlpc(fl));
00397
00398 return fl;
00399 }
00400
00401
00402
00403 void flpci_destruct( flpci * fl )
00404 {
00405 xfclose(fl->f);
00406 xfree(fl->lpcvec);
00407 xfree(fl);
00408 }
00409
00410
00411
00412 struct cgp_lpc * flpci_getcgp_lpc( flpci * fl )
00413 {
00414 return &(fl->cgpl);
00415 }
00416
00417
00418
00419 UINT4 flpci_getnvec( flpci * fl )
00420 {
00421 return (fl->cgpl.cgp.vecd.nvec);
00422 }
00423
00424
00425
00426 UINT2 flpci_getdimvlpc( flpci * fl )
00427 {
00428 return (fl->cgpl.cgp.vecd.dimv) - ( (fl->cgpl.ginc) ? 1 : 0 );
00429 }
00430
00431
00432
00433 BOOL flpci_getginc( flpci * fl )
00434 {
00435 return fl->cgpl.ginc;
00436 }
00437
00438
00439
00440 pFLOAT4 flpci_getvlpc( flpci * fl,
00441 FLOAT4 * G )
00442 {
00443 UINT2 i, l;
00444
00445 if (flpci_getginc(fl))
00446 *G = xlee_sfloat(fl->f);
00447 else
00448 *G = 1;
00449
00450 l = flpci_getdimvlpc(fl);
00451 for (i=0; i<l; i++)
00452 fl->lpcvec[i]=xlee_sfloat(fl->f);
00453 return fl->lpcvec;
00454 }
00455
00456
00457
00458 flpco * flpco_construct( pCHAR fname,
00459 struct cgsenal * cgs,
00460 struct cgp_lpc * cgpl,
00461 pCHAR tmpname )
00462 {
00463 flpco * fl;
00464
00465 fl = (flpco *)xmalloc(sizeof(flpco));
00466 fl->fn = fntmp_construct(fname,tmpname);
00467
00468 fl->f = xfopen(fntmp_getname(fl->fn),"wb+");
00469 escribe_cab_lpc(fl->f,cgs,cgpl);
00470
00471 fl->nv = 0;
00472 fl->incG = cgpl->ginc;
00473 fl->dimv = (cgpl->cgp.vecd.dimv) - ( (fl->incG) ? 1 : 0 );
00474
00475 return fl;
00476 }
00477
00478
00479
00480 void flpco_destruct( flpco * fl )
00481 {
00482 UINT4 n;
00483
00484 n = fl->nv;
00485 vete_cgparam(fl->f);
00486 xfseek(fl->f,sizeof(UINT2),SEEK_CUR);
00487 xfwrite(&n,sizeof(n),1,fl->f);
00488 xfclose(fl->f);
00489 fntmp_destruct(fl->fn);
00490 xfree(fl);
00491 }
00492
00493
00494
00495 UINT4 flpco_getnvec( flpco * fl )
00496 {
00497 return fl->nv;
00498 }
00499
00500
00501
00502 UINT2 flpco_getdimvlpc( flpco * fl )
00503 {
00504 return fl->dimv;
00505 }
00506
00507
00508
00509 BOOL flpco_getginc( flpco * fl )
00510 {
00511 return fl->incG;
00512 }
00513
00514
00515
00516 void flpco_setvlpc( flpco * fl,
00517 pFLOAT4 lpcvec,
00518 FLOAT4 G )
00519 {
00520 INT16 i;
00521
00522 if (fl->incG)
00523 xescribe_sfloat(fl->f,G);
00524 for (i=0; i<fl->dimv; i++)
00525 xescribe_sfloat(fl->f,lpcvec[i]);
00526
00527 (fl->nv)++;
00528 }
00529
00530
00531
00532 fparo * fparo_construct( pCHAR fname,
00533 struct cgsenal * cgs,
00534 struct cgp_parcor * cgpp,
00535 pCHAR tmpname )
00536 {
00537 fparo * fp;
00538
00539 fp = (fparo *)xmalloc(sizeof(fparo));
00540 fp->fn = fntmp_construct(fname,tmpname);
00541
00542 fp->f = xfopen(fntmp_getname(fp->fn),"wb+");
00543 escribe_cab_parcor(fp->f,cgs,cgpp);
00544
00545 fp->nv = 0;
00546 fp->incG = cgpp->ginc;
00547 fp->dimv = (cgpp->cgp.vecd.dimv) - ( (fp->incG) ? 1 : 0 );
00548
00549 return fp;
00550 }
00551
00552
00553
00554 void fparo_destruct( fparo * fp )
00555 {
00556 UINT4 n;
00557
00558 n = fp->nv;
00559 vete_cgparam(fp->f);
00560 xfseek(fp->f,sizeof(UINT2),SEEK_CUR);
00561 xfwrite(&n,sizeof(n),1,fp->f);
00562 xfclose(fp->f);
00563 fntmp_destruct(fp->fn);
00564 xfree(fp);
00565 }
00566
00567
00568
00569 UINT4 fparo_getnvec( fparo * fp )
00570 {
00571 return fp->nv;
00572 }
00573
00574
00575
00576 UINT2 fparo_getdimvpar( fparo * fp )
00577 {
00578 return fp->dimv;
00579 }
00580
00581
00582
00583 BOOL fparo_getginc( fparo * fp )
00584 {
00585 return fp->incG;
00586 }
00587
00588
00589
00590 void fparo_setvpar( fparo * fp,
00591 pFLOAT4 parvec,
00592 FLOAT4 G )
00593 {
00594 INT i;
00595
00596 if (fp->incG)
00597 xescribe_sfloat(fp->f,G);
00598
00599 for (i=0; i<fp->dimv; i++)
00600 xescribe_sfloat(fp->f,parvec[i]);
00601
00602 (fp->nv)++;
00603 }
00604
00605