Julius 4.1.5
|
00001 00047 /* 00048 * Copyright (c) 1991-2007 Kawahara Lab., Kyoto University 00049 * Copyright (c) 2000-2005 Shikano Lab., Nara Institute of Science and Technology 00050 * Copyright (c) 2005-2007 Julius project team, Nagoya Institute of Technology 00051 * All rights reserved 00052 */ 00053 00054 #include <sent/stddefs.h> 00055 #include <sent/htk_hmm.h> 00056 #include <sent/ptree.h> 00057 00058 static boolean 00059 load_hmmlist_callback(void **data_p, void *data, FILE *fp) 00060 { 00061 HTK_HMM_INFO *hmminfo = data; 00062 HMM_Logical *new; 00063 int len; 00064 char buf[MAX_HMMNAME_LEN]; 00065 HTK_HMM_Data *d; 00066 00067 new = (HMM_Logical *)mybmalloc2(sizeof(HMM_Logical), &(hmminfo->lroot)); 00068 if (myfread(&(new->is_pseudo), sizeof(boolean), 1, fp) < 1) return FALSE; 00069 if (myfread(&len, sizeof(int), 1, fp) < 1) return FALSE; 00070 new->name = (char *)mybmalloc2(len, &(hmminfo->lroot)); 00071 if (myfread(new->name, len, 1, fp) < 1) return FALSE; 00072 if (myfread(&len, sizeof(int), 1, fp) < 1) return FALSE; 00073 if (myfread(buf, len, 1, fp) < 1) return FALSE; 00074 if (new->is_pseudo) { 00075 jlog("Error: sorry, pseudo logical phone saving not implemented yet\n"); 00076 return FALSE; 00077 } else { 00078 d = htk_hmmdata_lookup_physical(hmminfo, buf); 00079 if (d == NULL) { 00080 jlog("Error: load_hmmlist_callback: no name \"%s\" in hmmdefs!\n", buf); 00081 return FALSE; 00082 } 00083 new->body.defined = d; 00084 } 00085 new->next = hmminfo->lgstart; 00086 hmminfo->lgstart = new; 00087 00088 *data_p = new; 00089 00090 return TRUE; 00091 } 00092 00093 boolean 00094 load_hmmlist_bin(FILE *fp, HTK_HMM_INFO *hmminfo) 00095 { 00096 HMM_Logical *l; 00097 int n; 00098 00099 if (aptree_read(fp, &(hmminfo->logical_root), &(hmminfo->lroot), hmminfo, load_hmmlist_callback) == FALSE) { 00100 jlog("Error: load_hmmlist_bin: failed to read hmmlist from binary file\n"); 00101 return FALSE; 00102 } 00103 n = 0; 00104 for(l=hmminfo->lgstart;l;l=l->next) n++; 00105 hmminfo->totallogicalnum = n; 00106 00107 return TRUE; 00108 }