blob: d461de4d9d9a113dc6e02e876706db840acd4647 [file] [log] [blame]
/*---------------------------------------------------------------------------*
* srec_arb.h *
* *
* Copyright 2007, 2008 Nuance Communciations, Inc. *
* *
* Licensed under the Apache License, Version 2.0 (the 'License'); *
* you may not use this file except in compliance with the License. *
* *
* You may obtain a copy of the License at *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an 'AS IS' BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*---------------------------------------------------------------------------*/
#ifndef __SREC_ARB_H__
#define __SREC_ARB_H__
#include"sizes.h"
#include"hmm_desc.h" /* 'cuz we're still using the old tree nodes */
#include"search_network.h" /* for EPSILON_OFFSET */
#define PSET_BIT_ARRAY_SIZE 7 /* max phonemes is 7*16 (128) */
typedef asr_uint16_t phonemeID;
#define MAXphonemeID 255
#define SILENCE_CODE '#'
#define OPTSILENCE_CODE '&'
#define SILENCE_CODE_STR "#"
#define OPTSILENCE_CODE_STR "&"
#define HMM_COUNTER_OFFSET EPSILON_OFFSET
#define NUM_SILENCE_HMMS 3
#define WBPHONEME_CODE '_'
#define USE_WWTRIPHONE 0
#define QUESTION_LEFT 1
#define QUESTION_RIGHT 2
#define QUESTION_WBLEFT 3
#define QUESTION_WBRIGHT 4
#define ANSWER_FAIL 0
#define ANSWER_PASS 1
/**
* @todo document
*/
typedef struct
{
asr_uint16_t qtype;
asr_uint16_t membership_bits[PSET_BIT_ARRAY_SIZE];
}
srec_question;
#define BIT_ADDRESS(K,A,B) { A=(K)/16; B=1<<((K)%16); }
#define MAX_PHONEME_NAME_LEN 8/BYTES_PER_ATOM
/**
* @todo document
*/
typedef struct
{
char name[MAX_PHONEME_NAME_LEN];
asr_uint16_t code;
tree_node* model_nodes; /* pelid at the bottom, is really a HMM model ID */
asr_uint16_t num_states;
tree_node* state_nodes[MAX_PHONE_STATES];
}
phoneme_data;
/**
* @todo document
*/
typedef struct
{
char name[MAX_PHONEME_NAME_LEN]; /* 6400 bytes to free up here */
asr_int16_t num_states;
asr_int16_t* state_indices; /* only the first HMMInfo owns the pointer data */
}
HMMInfo;
#define NUM_PHONEME_INDICES 256
/**
* @todo document
*/
typedef struct
{
char* image;
asr_uint16_t image_size;
asr_int16_t num_phonemes;
phoneme_data* pdata;
asr_int16_t num_questions;
srec_question* questions;
asr_int16_t num_states; /* total number of states, all allophones, phonemes */
asr_int16_t num_hmms;
HMMInfo* hmm_infos;
phonemeID phoneme_index[NUM_PHONEME_INDICES]; /* from short code to phoneme index */
/* later add a data member called 'hmm_ilabel_offset', such that
for graphs prepared with OSR/SGC, the ilabels on that graph
must be offset by this number to get hmms */
// struct PCPinfo* pcpinfo;
void* pcpinfo;
}
srec_arbdata;
/*---------------------------------------------------------------------------*
* *
* *
* *
*---------------------------------------------------------------------------*/
#if defined(__cplusplus) /*&& !defined(_ASCPP)*/
extern "C"
{
#endif
int get_modelid_for_pic(srec_arbdata* allotree,
phonemeID lphon, phonemeID cphon, phonemeID rphon);
int get_modelids_for_pron(srec_arbdata* allotree, const char* phonemes,
int num_phonemes, modelID* acoustic_model_ids);
int read_arbdata_from_stream(srec_arbdata** pallotree, char* buffer, int buffer_size);
unsigned int version_arbdata_models(srec_arbdata* a);
#if defined(__cplusplus) /*&& !defined(_ASCPP)*/
}
#endif
#endif