1 /*---------------------------------------------------------------------------* 2 * hmm_desc.h * 3 * * 4 * Copyright 2007, 2008 Nuance Communciations, Inc. * 5 * * 6 * Licensed under the Apache License, Version 2.0 (the 'License'); * 7 * you may not use this file except in compliance with the License. * 8 * * 9 * You may obtain a copy of the License at * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, software * 13 * distributed under the License is distributed on an 'AS IS' BASIS, * 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15 * See the License for the specific language governing permissions and * 16 * limitations under the License. * 17 * * 18 *---------------------------------------------------------------------------*/ 19 20 21 22 #ifndef _h_hmm_desc_ 23 #define _h_hmm_desc_ 24 25 #ifdef SET_RCSID 26 static const char hmm_desc_h[] = "$Id: hmm_desc.h,v 1.2.10.6 2008/01/21 20:30:05 dahan Exp $"; 27 #endif 28 29 #include "creccons.h" /* CREC Public Constants */ 30 31 #include "all_defs.h" 32 #include "hmm_type.h" 33 #include "sizes.h" 34 35 36 37 #define PDTYP(X) ((X) & 0x0f) 38 39 #define DIAG (1<<4) /* Diagonal covariance model */ 40 #define FULL (2<<4) /* Full covariance model */ 41 #define VARTYP(X) ((X) & 0x30) 42 43 #define EXPDUR (1<<6) /* Exponential duration model */ 44 #define DURTYP(X) ((X) & 0xc0) 45 46 /** 47 * @todo document 48 */ 49 typedef struct 50 { 51 unsigned char phone; /* Internal phoneme symbol */ 52 unsigned char pr_code[4]; /* Printable phone code */ 53 unsigned char near_phone; 54 int num_states; 55 unsigned char dict_code; /* single char printable code */ 56 } 57 phoneme_info; 58 59 /** 60 * @todo document 61 */ 62 typedef struct 63 { 64 int num_phones; 65 phoneme_info *phoneme; 66 int index[256]; 67 } 68 phoneme_set; 69 70 /** 71 * The space_filler var here is to make sure that this structure is 72 * always the same size on different platforms. ARM unix appears to 73 * want structures to by a multiple of 4 bytes, hence the filler. 74 */ 75 typedef struct 76 { 77 unsigned char left_phone[MAX_PHONEMES]; 78 unsigned char right_phone[MAX_PHONEMES]; 79 short apply; 80 short space_filler; /* TODO: revisit this issue */ 81 } 82 question; 83 84 #define NON_GENERIC 0 85 #define RIGHT_GENERIC 1 86 #define LEFT_GENERIC 2 /* Was the other way */ 87 #define BOTH_GENERIC 3 88 #define DIPHONE 9 89 90 /* the terminal_tree_node structure is used in a union with tree_branch_info 91 resulting in a "tree_node". We must initialize "tree_node"s of both 92 both types in large static array, which is hard. So instead we initialize 93 a static array of terminal_tree_node's but need to fill that structure up 94 with dummies to be the same size as the full "tree_node". For 2-byte 95 pointer configurations this may not be memory efficient :( */ 96 97 /** 98 * @todo document 99 */ 100 typedef struct terminal_tree_node_info 101 { 102 asr_int16_t quest_index; 103 asr_int16_t pelid; 104 asr_int16_t avg_durn; 105 asr_int16_t dummy_filler1, dummy_filler2, dummy_filler3; 106 } 107 terminal_tree_node; 108 109 /** 110 * @todo document 111 */ 112 typedef struct tree_branch_info 113 { 114 asr_int16_t quest_index; 115 struct tree_branch_info *fail; 116 struct tree_branch_info *pass; 117 } 118 tree_branch_info; 119 120 /** 121 * @todo document 122 */ 123 typedef union { 124 struct tree_branch_info node; 125 struct terminal_tree_node_info term; 126 } tree_node; 127 128 /** 129 * @todo document 130 */ 131 typedef struct 132 { 133 int no_states; 134 /* int phoneme; */ 135 tree_node *root[MAX_PHONE_STATES]; 136 } 137 tree_info; 138 139 /** 140 * holds the body of a sorted .ok dictionary file 141 */ 142 typedef struct 143 { 144 char* ok_file_data; /* data in the .ok file */ 145 int ok_file_data_length; /* length of data ok_file_data */ 146 const char* first_entry; /* first entry in the dictionary */ 147 const char* last_entry; /* last entry in the dictionary */ 148 int hasUpper; /* nonzero if upper case present in dictionary (usually not) */ 149 } 150 vocab_info; 151 152 #endif 153