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

📄 ht_project_2.cc

📁 这是处理语音信号的程序
💻 CC
字号:
// file: ht_project_2.cc//// isip include files//#include "hmm_train.h"#include "hmm_train_constants.h"// method: generate_phones_cc//// arguments://  Train_Trace* trace : (input) the input trace to be projected//  Train_Link_list** token_list : (input) linked lists of active tokens//  Train_Phone** phones : (input) phone models//  Train_Link_list* treelist : (input) list of active lexical trees//  Train_Lattice* lattice: (input) the lattice for this application//  int_4 num_mono : (input) number of monophones//  int_4 ph_size : (input) phone context size//  int_4* ph_map : (input) the phone map//  int_4*& wd_active : (output) list of active words//  int_4& wd_numact : (output) number of active words//  int_4*& ph_active : (output) list of active phones//  int_4& ph_numact : (output) number of active phones//  int_4*& ngen : (output) number of traces generated//  float_8& max_score : (output) maximum path score so far//  mlf_mode : (input) the mlf mode flag//// return: a logical_1 indicating status//// this method generates the next phones (including crossword phones)// for the given trace and projects traces onto these//logical_1 generate_phones_cc(Train_Trace* trace_a, Train_Link_list** token_list_a,			     Train_Phone** phones_a, Train_Link_list* treelist_a,			     Train_Lattice* lattice_a, int_4 num_mono_a,			     int_4 ph_size_a, int_4* ph_map_a,			     int_4*& wd_active_a, int_4& wd_numact_a,			     int_4*& ph_active_a, int_4& ph_numact_a,			     int_4*& ngen_a, float_8& max_score_a,			     int_4 context_mode_a, logical_1 mlf_mode_a,			     int_4 num_sph_a, int_4* sph_index_a) {  // dummy variables  //  Train_Lex_node* lexch = (Train_Lex_node*)NULL;  Train_Hash_cell* hcell = (Train_Hash_cell*)NULL;  // phone parameters  //  int_4* phn = new int_4[ph_size_a];  // the current trace parameters  //  Train_Lex_node* curr_lex = trace_a->get_lex_node_cc();  Train_Lattice_node* curr_lat = trace_a->get_lat_node_cc();  // the current phone  //  int_4 curr_phn = trace_a->get_phone_ind_cc();  int_4 mid_phn = phones_a[curr_phn]->get_num_phones_cc() / (int_4)2;    // set the first phone of the triphone  //  phn[0] = phones_a[curr_phn]->get_phone_cc(mid_phn);  // set the middle phone of the triphone if possible  //  if (curr_lex != (Train_Lex_node*)NULL) {    phn[1] = curr_lex->get_phone_cc();  }    // check if this is end of the current word i.e. start of a new word  //  if (trace_a->get_level_cc() == HT_WORD_LEVEL) {        // dummy pointer for start node    //    Train_Lex_node* str_lex = (Train_Lex_node*)NULL;        // generate the lexical tree for the end of this word    //    lattice_a->get_lat_node_cc(curr_lat, hcell);    Train_Lex_tree* start_tree = curr_lat->get_lex_tree_cc();    if (start_tree == (Train_Lex_tree*)NULL) {      start_tree = new Train_Lex_tree(hcell);      curr_lat->set_lex_tree_cc(start_tree);      treelist_a->insert_cc(start_tree);    }        // make sure this tree is valid (end of sentence will have an    // invalid tree)    //    Train_Lex_node* hdptr = start_tree->get_head_cc();    if (hdptr == (Train_Lex_node*)NULL) {      delete [] phn;      return ISIP_TRUE;    }    if(context_mode_a == HT_MONOPHONE) {            // get the list of all possible next phones      //      Train_Link_list* start_list = hdptr->get_child_cc();	      // loop over all next phones      //      for (Train_Link_node* stx = start_list->get_head_cc();	   stx != (Train_Link_node*)NULL; stx = stx->get_next_cc()) {		// get the child lexical node	//	str_lex = (Train_Lex_node*)(stx->get_item_cc());		// set the middle phone of the triphone	//	phn[1] = str_lex->get_phone_cc();		// get the list of next phones from the current lexical tree	//	Train_Link_list* lex_list = str_lex->get_child_cc();	for (Train_Link_node* nlx = lex_list->get_head_cc();	     nlx != (Train_Link_node*)NULL; nlx = nlx->get_next_cc()) {	  	  // get the child lexical node	  //	  lexch = (Train_Lex_node*)(nlx->get_item_cc());	  	  // complete the triphone with the last phone	  //	  phn[2] = lexch->get_phone_cc();	  	  // grow triphones and project traces	  //	  grow_phone_cc(trace_a, token_list_a, phones_a,			treelist_a, lattice_a, curr_lat, str_lex,			lexch, ph_size_a, num_mono_a,			ph_map_a, phn, wd_active_a, wd_numact_a, ph_active_a,			ph_numact_a, ngen_a, max_score_a, context_mode_a,			mlf_mode_a, num_sph_a, sph_index_a);	  	} // end loop over all phones      } // end loop over all start phones    }        else{            // check if the next phone is already defined --- this will be the      // case if the current word does not end in sil      //      if (mid_phn > (int_4)0) {		if (context_mode_a == HT_WRD_INTERNAL) {	  	  int_4 num_phone = phones_a[curr_phn]->get_num_phones_cc();	  if (num_phone == 2) {	    phn[0] = 0;	    	    Train_Link_list* lex_list1 = hdptr->get_child_cc();	    for (Train_Link_node* nlx1 = lex_list1->get_head_cc();		 nlx1 != (Train_Link_node*)NULL; nlx1 = nlx1->get_next_cc()) {	      	      // get the child lexical node	      //	      str_lex = (Train_Lex_node*)(nlx1->get_item_cc());	      phn[1] = str_lex->get_phone_cc();	      	      Train_Link_list* lex_list2 = str_lex->get_child_cc();	      for (Train_Link_node* nlx2 = lex_list2->get_head_cc();		   nlx2 != (Train_Link_node*)NULL; nlx2 = nlx2->get_next_cc()) {				// get the child node		//		lexch = (Train_Lex_node*)(nlx2->get_item_cc());		phn[2] = lexch->get_phone_cc();				// grow phone		//		grow_phone_cc(trace_a, token_list_a, phones_a, treelist_a,			      lattice_a, curr_lat, str_lex, lexch, ph_size_a,			      num_mono_a, ph_map_a, phn, wd_active_a,			      wd_numact_a, ph_active_a, ph_numact_a, ngen_a,			      max_score_a, context_mode_a, mlf_mode_a,			      num_sph_a, sph_index_a);	      } // end loop all the phn[2]	    } // end loop all the phn[1]	  } // end loop if this is a diphone	} // end if context_mode equals word-internal mode		else if (context_mode_a == HT_DEF_TRIPHONE) {	  	  // set the middle phone of the triphone	  //	  phn[1] = phones_a[curr_phn]->get_phone_cc(mid_phn + (int_4)1);	  	  // find the lexical node in the tree that contains this monophone	  //	  str_lex = hdptr->get_node_cc(phn[1]);	  	  // get the list of next phones from the current lexical tree	  //	  Train_Link_list* lex_list = str_lex->get_child_cc();	  for (Train_Link_node* nlx = lex_list->get_head_cc();	       nlx != (Train_Link_node*)NULL; nlx = nlx->get_next_cc()) {	    	    // get the child lexical node	    //	    lexch = (Train_Lex_node*)(nlx->get_item_cc());	    	    // complete the triphone with the last phone	    //	    phn[2] = lexch->get_phone_cc();	    	    // grow triphones and project traces	    //	    grow_phone_cc(trace_a, token_list_a, phones_a, treelist_a,			  lattice_a, curr_lat, str_lex, lexch, ph_size_a,			  num_mono_a, ph_map_a, phn, wd_active_a,			  wd_numact_a, ph_active_a, ph_numact_a,			  ngen_a, max_score_a, context_mode_a,			  mlf_mode_a, num_sph_a, sph_index_a);	  	  } // end loop over all phones	} // end if mode equals triphone system      } // end if next phone is already known            // otherwise the word ended in sil and we need to extend all      // possible next phones      //      else {		// get the list of all possible next phones	//	Train_Link_list* start_list = hdptr->get_child_cc();		// loop over all next phones	//	for (Train_Link_node* stx = start_list->get_head_cc();	     stx != (Train_Link_node*)NULL; stx = stx->get_next_cc()) {	  	  // get the child lexical node	  //	  str_lex = (Train_Lex_node*)(stx->get_item_cc());	  	  // set the middle phone of the triphone	  //	  phn[1] = str_lex->get_phone_cc();	  	  // get the list of next phones from the current lexical tree	  //	  Train_Link_list* lex_list = str_lex->get_child_cc();	  for (Train_Link_node* nlx = lex_list->get_head_cc();	       nlx != (Train_Link_node*)NULL; nlx = nlx->get_next_cc()) {	    	    // get the child lexical node	    //	    lexch = (Train_Lex_node*)(nlx->get_item_cc());	    	    // complete the triphone with the last phone	    //	    phn[2] = lexch->get_phone_cc();	    	    if (context_mode_a == HT_WRD_INTERNAL) {	      	      // change the phn[0]	      //	      phn[0] = 0;	      	      // grow triphones and project traces	      //	      grow_phone_cc(trace_a, token_list_a, phones_a, treelist_a,			    lattice_a, curr_lat, str_lex, lexch,			    ph_size_a, num_mono_a, ph_map_a, phn,			    wd_active_a, wd_numact_a, ph_active_a,			    ph_numact_a, ngen_a, max_score_a, context_mode_a,			    mlf_mode_a, num_sph_a, sph_index_a);	    }	    else if (context_mode_a == HT_DEF_TRIPHONE) {	      	      // grow triphones and project traces	      //	      grow_phone_cc(trace_a, token_list_a, phones_a, treelist_a,			    lattice_a, curr_lat, str_lex, lexch,			    ph_size_a, num_mono_a, ph_map_a, phn,			    wd_active_a, wd_numact_a, ph_active_a,			    ph_numact_a, ngen_a, max_score_a, context_mode_a,			    mlf_mode_a, num_sph_a, sph_index_a);	      	    }	  } // end loop over all phones	} // end loop over all start phones      } // end else need to loop over all start phones    }  } // end if start of new word    // otherwise this is a word-internal case  //  else if ((curr_lex != (Train_Lex_node*)NULL) && (phn[1] != TRAIN_LXN_STOP_PHONE)) {        // get the list of next phones from the current lexical tree    //    Train_Link_list* lex_list = curr_lex->get_child_cc();    for (Train_Link_node* nlx = lex_list->get_head_cc(); nlx != (Train_Link_node*)NULL;	 nlx = nlx->get_next_cc()) {            // get the child lexical node      //      lexch = (Train_Lex_node*)(nlx->get_item_cc());            // complete the triphone with the last phone      //      phn[2] = lexch->get_phone_cc();            // grow triphones and project traces      //      grow_phone_cc(trace_a, token_list_a, phones_a, treelist_a, lattice_a,		    curr_lat, curr_lex, lexch, ph_size_a, num_mono_a,		    ph_map_a, phn, wd_active_a, wd_numact_a, ph_active_a,		    ph_numact_a, ngen_a, max_score_a, context_mode_a,		    mlf_mode_a, num_sph_a, sph_index_a);	      } // end loop over all phones  } // end else not start of sentence    // free memory  //  delete [] phn;    // exit gracefully  //  return ISIP_TRUE;}

⌨️ 快捷键说明

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