1cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines/*---------------------------------------------------------------------------* 2cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * hmm_desc.h * 3cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * * 4cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * Copyright 2007, 2008 Nuance Communciations, Inc. * 5cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * * 6cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * Licensed under the Apache License, Version 2.0 (the 'License'); * 7cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * you may not use this file except in compliance with the License. * 8cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * * 9cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * You may obtain a copy of the License at * 10cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * http://www.apache.org/licenses/LICENSE-2.0 * 11cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * * 12cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * Unless required by applicable law or agreed to in writing, software * 13cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * distributed under the License is distributed on an 'AS IS' BASIS, * 14cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * See the License for the specific language governing permissions and * 16cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * limitations under the License. * 17cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * * 18cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines *---------------------------------------------------------------------------*/ 19cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 20cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 21cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 22cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#ifndef _h_hmm_desc_ 23cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define _h_hmm_desc_ 24cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 25cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#ifdef SET_RCSID 26cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesstatic const char hmm_desc_h[] = "$Id: hmm_desc.h,v 1.2.10.6 2008/01/21 20:30:05 dahan Exp $"; 27cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#endif 28cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 29cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "creccons.h" /* CREC Public Constants */ 30cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 31cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "all_defs.h" 32cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "hmm_type.h" 33cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#include "sizes.h" 34cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 35cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 36cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 37cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define PDTYP(X) ((X) & 0x0f) 38cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 39cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define DIAG (1<<4) /* Diagonal covariance model */ 40cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define FULL (2<<4) /* Full covariance model */ 41cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define VARTYP(X) ((X) & 0x30) 42cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 43cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define EXPDUR (1<<6) /* Exponential duration model */ 44cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines#define DURTYP(X) ((X) & 0xc0) 45cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 46cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines/** 47cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines * @todo document 48cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines */ 49cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinestypedef struct 50cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines{ 51cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines unsigned char phone; /* Internal phoneme symbol */ 52cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines unsigned char pr_code[4]; /* Printable phone code */ 53cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines unsigned char near_phone; 54cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines int num_states; 55cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines unsigned char dict_code; /* single char printable code */ 56cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines} 57cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hinesphoneme_info; 58cd81d94322a39503e4a3e87b6ee03d4fcb3465fbStephen Hines 59/** 60 * @todo document 61 */ 62typedef struct 63{ 64 int num_phones; 65 phoneme_info *phoneme; 66 int index[256]; 67} 68phoneme_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 */ 75typedef 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} 82question; 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 */ 100typedef 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} 107terminal_tree_node; 108 109/** 110 * @todo document 111 */ 112typedef struct tree_branch_info 113{ 114 asr_int16_t quest_index; 115 struct tree_branch_info *fail; 116 struct tree_branch_info *pass; 117} 118tree_branch_info; 119 120/** 121 * @todo document 122 */ 123typedef union { 124 struct tree_branch_info node; 125 struct terminal_tree_node_info term; 126} tree_node; 127 128/** 129 * @todo document 130 */ 131typedef struct 132{ 133 int no_states; 134 /* int phoneme; */ 135 tree_node *root[MAX_PHONE_STATES]; 136} 137tree_info; 138 139/** 140 * holds the body of a sorted .ok dictionary file 141 */ 142typedef 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} 150vocab_info; 151 152#endif 153