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