00001 
00045 
00046 
00047 
00048 
00049 
00050 
00051 
00052 #include <julius.h>
00053 
00054 #include <sys/stat.h>
00055 
00056 
00057 
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     
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     
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   
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   
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   
00126   Wav2MFCC(speech, param->parvec, para, speechlen, ssbuf, sslen);
00127 
00128   
00129   param->header.samplenum = framenum;
00130   param->header.wshift = para.smp_period * para.frameshift;
00131   param->header.sampsize = para.veclen * sizeof(VECT); 
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