⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dec_read_4.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: dec_read_4.cc//// system include files//#include <string.h>// isip include files//#include "decoder.h"#include "decoder_constants.h" // method: read_cd_models_cc//// arguments://  FILE* fp: (input) file pointer//  // return: a logical_1 indicating status//// this method reads in the cd model data from file into an array of// phone objects//logical_1 Decoder::read_cd_models_cc(FILE* fp_a) {  // check file  //  if (fp_a == (FILE*)NULL) {    error_handler_cc((char_1*)"read_cd_models_cc",		     (char_1*)"NULL input file pointer");  }    // allocate memory for the phone map  //  int_4 num_map = (int_4)pow(num_ci_d, cd_size_d);  cdmap_d = new int_4[num_map];  for (int_4 i = 0; i < num_map; i++) {    cdmap_d[i] = DEC_DEFAULT_INDEX;  }    // variables to read data  //  int_4 ind = (int_4)0;  int_4 mod = (int_4)0;  int_4 nph = (int_4)0;  int_4* mph = (int_4*)NULL;  char_1* tmp = new char_1[ISIP_MAX_STRING_LENGTH];  // array of phone models  //  int_4 phcount = (int_4)0;    // read data from file  //  while (fscanf(fp_a, "%s", tmp) != EOF) {        // ignore comment lines    //    if (tmp[0] == (char_1)'#') {            // do nothing      //      fscanf(fp_a, "%[^\n]", tmp);      fscanf(fp_a, "%[\n]", tmp);    }    // read the number of phones    //    else if (strcmp((char*)tmp, "num_phones") == 0) {            // read the number of phones      //      fscanf(fp_a, "%s%ld", tmp, &num_cd_d);      // but this number is valid only for cd models, if ci models are      // used for decoding then the number of models is the same as      // that of the ci phones      //      if (cd_size_d == DEC_MONOPHONE_SIZE) {	num_cd_d = num_ci_d;      }            // allocate space for the phone list      //      cd_models_d = new Phone*[num_cd_d];    }    // otherwise read the phone data    //    else {	      // read the number of constituent monophones      //      fscanf(fp_a, "%ld", &nph);      // if this is ci mode, only read monophone data      //      if (context_mode_d == DEC_MONO_PHONE_MODE) {	// make sure this is monophone	//	if (nph == cd_size_d) {	  // read phone data	  //	  mph = new int_4[nph];	  for (int_4 j = 0; j < nph; j++) {	    fscanf(fp_a, "%ld", &mph[j]);	  }      	  // read the map index and model index	  //	  fscanf(fp_a, "%ld%ld", &ind, &mod);	  	  // create the phone	  //	  cd_models_d[phcount] = new Phone(tmp, nph, mph, models_d[mod]);	  	  // store a link to this in the phone map	  //	  cdmap_d[mph[nph - 1]] = phcount;	  //	  cdmap_d[ind] = phcount;	  	  // increase phone count	  //	  phcount++;	  	  // free memory	  //	  delete [] mph;	  mph = (int_4*)NULL;	}	// otherwise ignore this line of data	//	else {	  fscanf(fp_a, "%[^\n]", tmp);	  fscanf(fp_a, "%[\n]", tmp);	}      } // end if ci models mode      // otherwise these are cd phone models      //      else {		// if this is a bi-phone need special treatment wrt direction of	// context	//	if (nph == (int_4)2) {	  	  // allocate memory	  //	  mph = new int_4[cd_size_d];	  	  // check for context direction and read the constituent	  // monophone indices	  //	  if (strchr((char*)tmp, '-') != (char*)NULL) {	    for (int_4 j = 0; j < nph; j++) {	      fscanf(fp_a, "%ld", &mph[j]);	    }	    mph[nph] = (int_4)0;	  }	  else if (strchr((char*)tmp, '+') != (char*)NULL) {	    for (int_4 j = 0; j < nph; j++) {	      fscanf(fp_a, "%ld", &mph[j + 1]);	    }	    mph[0] = (int_4)0;	  }	}		// otherwise treat normally	//	else {	  mph = new int_4[nph];	  for (int_4 j = 0; j < nph; j++) {	    fscanf(fp_a, "%ld", &mph[j]);	  }	}		// read the map index and model index	//	fscanf(fp_a, "%ld%ld", &ind, &mod);		// create the phone	//	cd_models_d[phcount] = new Phone(tmp, nph, mph, models_d[mod]);		// store a link to this in the phone map	//	cdmap_d[ind] = phcount;		// increase phone count	//	phcount++;		// free memory	//	delete [] mph;	mph = (int_4*)NULL;      } // end else cd mode    } // end else data line  } // end if not EOF  // make sure there is no mismatch in number of phones  //  if (num_cd_d != phcount) {    fprintf(stdout, "Error - mismatch in number of phones\n");    exit(ISIP_PROTO_ERROR);  }    // free memory  //  delete [] tmp;  // exit gracefully  //  return ISIP_TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -