julius/wav2mfcc.c

説明を見る。
00001 
00045 /*
00046  * Copyright (c) 1991-2006 Kawahara Lab., Kyoto University
00047  * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology
00048  * Copyright (c) 2005-2006 Julius project team, Nagoya Institute of Technology
00049  * All rights reserved
00050  */
00051 
00052 #include <julius.h>
00053 
00054 #include <sys/stat.h>
00055 
00056 /* make MFCC_E_D_N_Z from speech[0..speechlen-1] and returns
00057    newly malloced param */
00058 
00079 HTK_Param *new_wav2mfcc(SP16 speech[], int speechlen)
00080 {
00081   HTK_Param *param;
00082   int framenum;
00083   int i;
00084   int len;
00085 
00086   if (ssload_filename && ssbuf == NULL) {
00087     /* load noise spectrum for spectral subtraction from file (once) */
00088     if ((ssbuf = new_SS_load_from_file(ssload_filename, &sslen)) == NULL) {
00089       j_error("Error: failed to read \"%s\"\n", ssload_filename);
00090     }
00091   }
00092 
00093   if (sscalc) {
00094     /* compute noise spectrum from head silence for each input */
00095     len = sscalc_len * para.smp_freq / 1000;
00096     if (len > speechlen) len = speechlen;
00097 #ifdef SSDEBUG
00098     printf("[%d]\n", len);
00099 #endif
00100     ssbuf = new_SS_calculate(speech, len, para, &sslen);
00101   }
00102 #ifdef SSDEBUG
00103   {
00104     int i;
00105     for(i=0;i<sslen;i++) {
00106       printf("%d: %f\n", i, ssbuf[i]);
00107     }
00108   }
00109 #endif
00110   
00111   /* calculate frame length from speech length, frame size and frame shift */
00112   framenum = (int)((speechlen - para.framesize) / para.frameshift) + 1;
00113   if (framenum < 1) {
00114     j_printerr("input too short (%d samples), ignored\n", speechlen);
00115     return NULL;
00116   }
00117   
00118   /* malloc new param */
00119   param = new_param();
00120   param->parvec = (VECT **)mymalloc(sizeof(VECT *) * framenum);
00121   for(i=0;i<framenum;i++) {
00122     param->parvec[i] = (VECT *)mymalloc(sizeof(VECT) * para.veclen);
00123   }
00124 
00125   /* make MFCC from speech data */
00126   Wav2MFCC(speech, param->parvec, para, speechlen, ssbuf, sslen);
00127 
00128   /* set miscellaneous parameters */
00129   param->header.samplenum = framenum;
00130   param->header.wshift = para.smp_period * para.frameshift;
00131   param->header.sampsize = para.veclen * sizeof(VECT); /* not compressed */
00132   param->header.samptype = F_MFCC;
00133   if (para.delta) param->header.samptype |= F_DELTA;
00134   if (para.acc) param->header.samptype |= F_ACCL;
00135   if (para.energy) param->header.samptype |= F_ENERGY;
00136   if (para.c0) param->header.samptype |= F_ZEROTH;
00137   if (para.absesup) param->header.samptype |= F_ENERGY_SUP;
00138   if (para.cmn) param->header.samptype |= F_CEPNORM;
00139   param->veclen = para.veclen;
00140   param->samplenum = framenum;
00141 
00142   return param;
00143 }
00144 

Juliusに対してTue Dec 26 16:19:28 2006に生成されました。  doxygen 1.5.0