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