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

📄 itri_create_0.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: itri_create_0.cc//// isip include files//#include "init_triphones.h"#include "init_triphones_constants.h"#include <string.h>// method: create_triphones_cc//// arguments://  FILE* fp_in : (input) data file name//  FILE* fp_model_a : (input) output model file//  FILE* fp_state_a : (input) output state file//  Hash_table* models : (input) context independent models//  Hash_table* ci_table : (input) context independent model hash table//  Hash_table* trans_map : (input) map of transition index and ci model name//  int_4 num_ci : (input) number of contect independent models//  int_4& new_num_states : (output) number of states in the context dependent//                                   models//  int_4& new_num_models : (output) number of physical context dependent//                                   models//// return: a logical_1 indicating status//logical_1 create_triphones_cc(FILE* fp_in_a, FILE* fp_model_a,			      FILE* fp_state_a, Train_Hash_table* models_a,			      Train_Hash_table* ci_table_a,			      Train_Hash_table* trans_map_a,			      int_4 num_ci_a, int_4& new_num_states_a,			      int_4& new_num_models_a) {  // local variables  //  logical_1* done = new logical_1[ITRI_MAX_NUM_MODELS];  for (int_4 i= 0; i < ITRI_MAX_NUM_MODELS; i++) {    done[i] = ISIP_FALSE;  }    char_1* line = new char_1[ISIP_MAX_STRING_LENGTH];  char_1* log_model = new char_1[ISIP_MAX_STRING_LENGTH];  char_1** phy_model = new char_1*[ITRI_MAX_NUM_MODELS];  memset((void*)phy_model, 0, ITRI_MAX_NUM_MODELS * sizeof(char_1*));  char_1* ci_model = new char_1[ITRI_MAX_NUM_MODELS];  char_1* temp_buf = (char_1*)NULL;  Train_Hash_cell* hcell = (Train_Hash_cell*)NULL;  Train_Model* temp_model = (Train_Model*)NULL;  int_4 curr_num_states = 1;  int_4 num_states = 0;  int_4 trans_index = 0;  int_4 phy_model_index = 0;  int_4 feature_dim = 0;  Train_State** states = (Train_State**)NULL;  int_4* mono_state_indices = (int_4*)NULL;  int_4* prev_state_indices = (int_4*)NULL;  int_4 tri_state_index = (int_4)0;  int_4 prev_num_states = (int_4)0;  logical_1 tied_flag = ISIP_FALSE;  // initialize number of states to account for the dummy 0'th state   //  new_num_states_a = 1;  new_num_models_a = 0;    // read the cluster list  //  while (fscanf(fp_in_a, "%[^\n]", line) != EOF) {    temp_buf = (char_1*)strtok((char*)line, (char*)" ");    strcpy((char*)log_model, (char*)temp_buf);    temp_buf = (char_1*)strtok((char*)NULL, (char*)"\n");        // if physical and logical models specified    //    if ((char*)temp_buf != (char*)NULL) {      phy_model[new_num_models_a] = new char_1[strlen((char*)temp_buf) + 1];      strcpy((char*)phy_model[new_num_models_a], (char*)temp_buf);    }    //  if only physical model specified    //    else {      phy_model[new_num_models_a] = new char_1[strlen((char*)log_model) + 1];      strcpy((char*)phy_model[new_num_models_a], (char*)log_model);    }        phy_model_index = get_cimodel_cc(phy_model[new_num_models_a],				     ci_table_a, num_ci_a, ci_model);        // write into models file only if it is a physical model    // (make sure it has not been written previously)    //    if (done[phy_model_index] == ISIP_FALSE) {      // accumulate the number of new states for the triphones      //      hcell = models_a->hash_lookup_cc(ci_model);      temp_model = (Train_Model*)hcell->get_item_cc();      new_num_states_a += temp_model->get_num_states_cc() - 2;      states = temp_model->get_states_cc();      feature_dim = states[1]->get_num_features_cc();      done[phy_model_index] = ISIP_TRUE;      new_num_models_a++;          }    else {      delete [] phy_model[new_num_models_a];      phy_model[new_num_models_a] = (char_1*)NULL;    }    fscanf(fp_in_a, "\n");        }  // print model info into the models file  //  fprintf(fp_model_a, "num_models = %ld\n\n", new_num_models_a);  // print the initial state information  //  fwrite((void*)&feature_dim, sizeof(int_4), 1, fp_state_a);  fwrite((void*)&new_num_states_a, sizeof(int_4), 1, fp_state_a);  // handle the dummy 0'th state  //  Train_State* temp_state = new Train_State;  temp_state->set_num_mixtures_cc(0);  print_state_cc(fp_state_a, temp_state);  delete temp_state;		        // print the non-dummy models  //  for (int_4 i = 0; i < new_num_models_a; i++) {    phy_model_index = get_cimodel_cc(phy_model[i], ci_table_a,				     num_ci_a, ci_model);    hcell = trans_map_a->hash_lookup_cc(ci_model);    trans_index = (int_4)hcell->get_item_cc();    fprintf(fp_model_a, "index:  %ld\n", i);    fprintf(fp_model_a, "phone:  %s\n", phy_model[i]);    hcell = models_a->hash_lookup_cc(ci_model);    temp_model = (Train_Model*)hcell->get_item_cc();        num_states = temp_model->get_num_states_cc();    states = temp_model->get_states_cc();    fprintf(fp_model_a, "num_states:  %ld\n", num_states);    hcell = trans_map_a->hash_lookup_cc(ci_model);    trans_index = (int_4)hcell->get_item_cc();    fprintf(fp_model_a, "transitions:  %ld\n", trans_index);    fprintf(fp_model_a, "states: 0");        // check if sp and sil in monophones list are tied     // tie sp and sil in triphones list if tied in monophones list    //    if ((strcmp((char*)phy_model[i], ITRI_SP_PHONE) == 0) ||	(strcmp((char*)phy_model[i], ITRI_SIL_PHONE) == 0)) {      // save the state index information of sp or sil whichever occurs first      //      if (mono_state_indices == (int_4*)NULL) {	mono_state_indices = new int_4[num_states-2];	memset((int_4*)mono_state_indices, 0, (num_states-2) * sizeof(int_4));	prev_state_indices = new int_4[num_states-2];	memset((int_4*)prev_state_indices, 0, (num_states-2) * sizeof(int_4));	for (int_4 k = 1; k < num_states-1; k++) {	  mono_state_indices[k-1] = states[k]->get_state_index_cc();	  tri_state_index = curr_num_states;	  prev_state_indices[k-1] = tri_state_index++;	  prev_num_states = num_states;	  // print sp or sil whichever occures first in triphone list file	  //	  fprintf(fp_model_a, " %ld", prev_state_indices[k-1]);	  	  // print state information to the states file	  //	  print_state_cc(fp_state_a, states[k]);	  	  // increment state count	  //	  curr_num_states++;  	}      }            else {		for (int_4 l = 1; l < num_states-1; l++) {	  for(int_4 m = 1; m < prev_num_states-1; m++) {	    // check if any state(s) of sp or sil are tied	    //	    if (states[l]->get_state_index_cc() == mono_state_indices[m-1]) {	      	      fprintf(fp_model_a, " %ld", prev_state_indices[m-1]);	      	      // print state information to the states file for tied states	      //	      print_state_cc(fp_state_a, states[l]);	      tied_flag = ISIP_TRUE;	      // increment state count	      //	      curr_num_states++;  	    }	  }   	  if (tied_flag == ISIP_FALSE) {	    fprintf(fp_model_a, " %ld", curr_num_states);	    	    // print state information to the states file for untied states	    //	    print_state_cc(fp_state_a, states[l]);	    	    // increment state count	    //	    curr_num_states++;	  }	    	  tied_flag = ISIP_FALSE;	  	  if(l == num_states-1) {	    // clean up memory	    //	    delete [] mono_state_indices;	    delete [] prev_state_indices;	  }	}      }    }    // print all triphones other than sp and sil    //    else {      for (int_4 j = 1; j < num_states-1; j++) {		fprintf(fp_model_a, " %ld", curr_num_states);		// print state information to the states file	//	print_state_cc(fp_state_a, states[j]);		// increment state count	//	curr_num_states++;      }    }      fprintf(fp_model_a, " 0\n\n");  }    // cleanup memory  //  delete [] mono_state_indices;  delete [] prev_state_indices;  delete [] log_model;  delete [] ci_model;  delete [] line;  delete [] done;  for (int_4 i = 0; i < ITRI_MAX_NUM_MODELS; i++) {    if (phy_model[i] != (char_1*)NULL) {      delete [] phy_model[i];    }  }  delete [] phy_model;    // exit gracefully  //  return ISIP_TRUE;}

⌨️ 快捷键说明

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