1 /*---------------------------------------------------------------------------* 2 * srec_arb.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 #ifndef __SREC_ARB_H__ 21 #define __SREC_ARB_H__ 22 23 #include"sizes.h" 24 #include"hmm_desc.h" /* 'cuz we're still using the old tree nodes */ 25 #include"search_network.h" /* for EPSILON_OFFSET */ 26 27 #define PSET_BIT_ARRAY_SIZE 7 /* max phonemes is 7*16 (128) */ 28 typedef asr_uint16_t phonemeID; 29 #define MAXphonemeID 255 30 #define SILENCE_CODE '#' 31 #define OPTSILENCE_CODE '&' 32 #define SILENCE_CODE_STR "#" 33 #define OPTSILENCE_CODE_STR "&" 34 #define HMM_COUNTER_OFFSET EPSILON_OFFSET 35 #define NUM_SILENCE_HMMS 3 36 #define WBPHONEME_CODE '_' 37 #define USE_WWTRIPHONE 0 38 39 #define QUESTION_LEFT 1 40 #define QUESTION_RIGHT 2 41 #define QUESTION_WBLEFT 3 42 #define QUESTION_WBRIGHT 4 43 #define ANSWER_FAIL 0 44 #define ANSWER_PASS 1 45 46 /** 47 * @todo document 48 */ 49 typedef struct 50 { 51 asr_uint16_t qtype; 52 asr_uint16_t membership_bits[PSET_BIT_ARRAY_SIZE]; 53 } 54 srec_question; 55 #define BIT_ADDRESS(K,A,B) { A=(K)/16; B=1<<((K)%16); } 56 57 #define MAX_PHONEME_NAME_LEN 8/BYTES_PER_ATOM 58 59 /** 60 * @todo document 61 */ 62 typedef struct 63 { 64 char name[MAX_PHONEME_NAME_LEN]; 65 asr_uint16_t code; 66 tree_node* model_nodes; /* pelid at the bottom, is really a HMM model ID */ 67 asr_uint16_t num_states; 68 tree_node* state_nodes[MAX_PHONE_STATES]; 69 } 70 phoneme_data; 71 72 /** 73 * @todo document 74 */ 75 typedef struct 76 { 77 char name[MAX_PHONEME_NAME_LEN]; /* 6400 bytes to free up here */ 78 asr_int16_t num_states; 79 asr_int16_t* state_indices; /* only the first HMMInfo owns the pointer data */ 80 } 81 HMMInfo; 82 83 #define NUM_PHONEME_INDICES 256 84 /** 85 * @todo document 86 */ 87 typedef struct 88 { 89 char* image; 90 asr_uint16_t image_size; 91 asr_int16_t num_phonemes; 92 phoneme_data* pdata; 93 asr_int16_t num_questions; 94 srec_question* questions; 95 asr_int16_t num_states; /* total number of states, all allophones, phonemes */ 96 asr_int16_t num_hmms; 97 HMMInfo* hmm_infos; 98 phonemeID phoneme_index[NUM_PHONEME_INDICES]; /* from short code to phoneme index */ 99 /* later add a data member called 'hmm_ilabel_offset', such that 100 for graphs prepared with OSR/SGC, the ilabels on that graph 101 must be offset by this number to get hmms */ 102 // struct PCPinfo* pcpinfo; 103 void* pcpinfo; 104 } 105 srec_arbdata; 106 107 /*---------------------------------------------------------------------------* 108 * * 109 * * 110 * * 111 *---------------------------------------------------------------------------*/ 112 113 #if defined(__cplusplus) /*&& !defined(_ASCPP)*/ 114 extern "C" 115 { 116 #endif 117 118 int get_modelid_for_pic(srec_arbdata* allotree, 119 phonemeID lphon, phonemeID cphon, phonemeID rphon); 120 121 int get_modelids_for_pron(srec_arbdata* allotree, const char* phonemes, 122 int num_phonemes, modelID* acoustic_model_ids); 123 124 int read_arbdata_from_stream(srec_arbdata** pallotree, char* buffer, int buffer_size); 125 unsigned int version_arbdata_models(srec_arbdata* a); 126 127 #if defined(__cplusplus) /*&& !defined(_ASCPP)*/ 128 } 129 #endif 130 131 #endif 132