本文整理匯總了C++中E_INFO函數的典型用法代碼示例。如果您正苦於以下問題:C++ E_INFO函數的具體用法?C++ E_INFO怎麽用?C++ E_INFO使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了E_INFO函數的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C++代碼示例。
示例1: kb_init
//.........這裏部分代碼省略.........
lm_lmwid2dictwid(lm, lm_finishwid(lm)) = BAD_S3WID;
for (w = dict_startwid(dict); IS_S3WID(w); w = dict_nextalt(dict, w))
kbcore->dict2lmwid[w] = BAD_S3LMWID;
for (w = dict_finishwid(dict); IS_S3WID(w); w = dict_nextalt(dict, w))
kbcore->dict2lmwid[w] = BAD_S3LMWID;
}
sil = mdef_silphone (kbcore_mdef (kbcore));
if (NOT_S3CIPID(sil))
E_FATAL("Silence phone '%s' not in mdef\n", S3_SILENCE_CIPHONE);
kb->sen_active = (int32 *) ckd_calloc (mdef_n_sen(mdef), sizeof(int32));
kb->rec_sen_active = (int32 *) ckd_calloc (mdef_n_sen(mdef), sizeof(int32));
kb->ssid_active = (int32 *) ckd_calloc (mdef_n_sseq(mdef), sizeof(int32));
kb->comssid_active = (int32 *) ckd_calloc (dict2pid_n_comsseq(d2p), sizeof(int32));
/* Build set of all possible left contexts */
lc = (s3cipid_t *) ckd_calloc (mdef_n_ciphone(mdef) + 1, sizeof(s3cipid_t));
lc_active = bitvec_alloc (mdef_n_ciphone (mdef));
for (w = 0; w < dict_size (dict); w++) {
ci = dict_pron (dict, w, dict_pronlen(dict, w) - 1);
if (! mdef_is_fillerphone (mdef, (int)ci))
bitvec_set (lc_active, ci);
}
ci = mdef_silphone(mdef);
bitvec_set (lc_active, ci);
for (ci = 0, n_lc = 0; ci < mdef_n_ciphone(mdef); ci++) {
if (bitvec_is_set (lc_active, ci))
lc[n_lc++] = ci;
}
lc[n_lc] = BAD_S3CIPID;
E_INFO("Building lextrees\n");
/* Get the number of lexical tree*/
kb->n_lextree = cmd_ln_int32 ("-Nlextree");
if (kb->n_lextree < 1) {
E_ERROR("No. of ugtrees specified: %d; will instantiate 1 ugtree\n",
kb->n_lextree);
kb->n_lextree = 1;
}
/* ARCHAN: This code was rearranged in s3.4 implementation of dynamic LM */
/* Build active word list */
wp = (wordprob_t *) ckd_calloc (dict_size(dict), sizeof(wordprob_t));
if(lmset){
kb->ugtreeMulti = (lextree_t **) ckd_calloc (kbcore_nlm(kbcore)*kb->n_lextree, sizeof(lextree_t *));
/* Just allocate pointers*/
kb->ugtree = (lextree_t **) ckd_calloc (kb->n_lextree, sizeof(lextree_t *));
for(i=0;i<kbcore_nlm(kbcore);i++){
E_INFO("Creating Unigram Table for lm %d name %s\n",i,lmset[i].name);
n=0;
for(j=0;j<dict_size(dict);j++){ /*try to be very careful again */
wp[j].wid=-1;
wp[j].prob=-1;
}
n = lm_ug_wordprob (lmset[i].lm, dict,MAX_NEG_INT32, wp);
E_INFO("Size of word table after unigram + words in class: %d.\n",n);
if (n < 1)
E_FATAL("%d active words in %s\n", n,lmset[i].name);
n = wid_wordprob2alt(dict,wp,n);
E_INFO("Size of word table after adding alternative prons: %d.\n",n);
if (cmd_ln_int32("-treeugprob") == 0) {
示例2: mk_tree_comp
dtree_t *
mk_tree_comp(float32 ****mixw,
/* ADDITION FOR CONTINUOUS_TREES, 18 May 98 */
float32 ****means,
float32 ****vars,
uint32 *veclen,
/* END ADDITIONS FOR CONTINUOUS_TREES */
uint32 n_model,
uint32 n_state,
uint32 n_stream,
uint32 n_density,
float32 *stwt,
uint32 *id,
uint32 n_id,
quest_t *all_q,
uint32 n_all_q,
pset_t *pset,
uint32 n_base_phone,
uint32 **dfeat,
uint32 n_dfeat,
uint32 split_min,
uint32 split_max,
float32 split_thr,
uint32 split_min_comp,
uint32 split_max_comp,
float32 split_thr_comp,
float32 mwfloor)
{
dtree_t *comp_tree;
dtree_node_t *root, *b_n;
uint32 i;
comp_tree = ckd_calloc(1, sizeof(dtree_t));
comp_tree->node = ckd_calloc(2*split_max_comp+1, sizeof(dtree_node_t));
comp_tree->n_node = 0;
comp_tree->node[0].node_id = 0;
comp_tree->n_node = 1;
root = &comp_tree->node[0];
/* MODIFICATION FOR CONTINUOUS_TREES 18 May 98, pass means and var along with mixw */
mk_node(root, 0,
id, n_id,
mixw, means, vars, veclen,
n_model, n_state, n_stream, n_density, stwt, mwfloor);
/* END MODIFICATION FOR CONTINUOUS_TREES */
/* MODIFICATION FOR CONTINUOUS_TREES 18 May 98, pass means and var along with mixw */
root->q = (void *)mk_comp_quest(&root->wt_ent_dec,
mixw, means, vars, veclen,
n_model, n_state, n_stream, n_density, stwt,
id, n_id,
all_q, n_all_q, pset, n_base_phone,
dfeat, n_dfeat,
split_min, split_max, split_thr,
mwfloor);
/* END MODIFICATION FOR CONTINUOUS_TREES */
for (i = 0; i < split_max_comp; i++) {
b_n = best_leaf_node(root);
E_INFO("Comp split %u\n", i);
if (b_n == NULL) {
E_INFO("stop. leaf nodes are specific\n");
break;
}
if (b_n->wt_ent_dec <= 0) {
E_INFO("stop. b_n->wt_ent_dec (%.3e) <= 0\n",
b_n->wt_ent_dec);
break;
}
if ((i > split_min_comp) &&
(b_n->wt_ent_dec < split_thr_comp * b_n->wt_ent)) {
E_INFO("stop. b_n->wt_ent_dec <= split_thr_comp * b_n->wt_ent. %.3e <= %.3e\n",
b_n->wt_ent_dec, split_thr_comp * b_n->wt_ent);
break;
}
/* MODIFICATION FOR CONTINUOUS_TREES 18 May 98, pass means and var along with mixw */
split_node_comp(comp_tree, b_n->node_id,
mixw, means, vars, veclen,
n_model, n_state, n_stream, n_density, stwt,
all_q, n_all_q, pset, n_base_phone,
dfeat, n_dfeat,
split_min, split_max, split_thr, mwfloor);
/* END MODIFICATION FOR CONTINUOUS_TREES */
#if 0
printf("Comp Split %u:\n", i);
print_tree_comp(stderr, "*", root, pset, 0);
//.........這裏部分代碼省略.........
示例3: ckd_calloc
fillpen_t *fillpen_init (dict_t *dict, char *file, float64 silprob, float64 fillprob,
float64 lw, float64 wip)
{
s3wid_t w, bw;
float64 prob;
FILE *fp;
char line[1024], wd[1024];
int32 k;
fillpen_t *_fillpen;
_fillpen = (fillpen_t *) ckd_calloc (1, sizeof(fillpen_t));
_fillpen->dict = dict;
_fillpen->lw = lw;
_fillpen->wip = wip;
if (dict->filler_end >= dict->filler_start)
_fillpen->prob = (int32 *) ckd_calloc (dict->filler_end - dict->filler_start + 1,
sizeof(int32));
else
_fillpen->prob = NULL;
/* Initialize all words with filler penalty (HACK!! backward compatibility) */
prob = fillprob;
for (w = dict->filler_start; w <= dict->filler_end; w++)
_fillpen->prob[w - dict->filler_start] = (int32) ((logs3(prob) + logs3(wip)) * lw);
/* Overwrite silence penalty (HACK!! backward compatibility) */
w = dict_wordid (dict, S3_SILENCE_WORD);
if (NOT_S3WID(w) || (w < dict->filler_start) || (w > dict->filler_end))
E_FATAL("%s not a filler word in the given dictionary\n", S3_SILENCE_WORD);
prob = silprob;
_fillpen->prob[w - dict->filler_start] = (int32) ((logs3(prob) + logs3(wip)) * lw);
/* Overwrite with filler prob input file, if specified */
if (! file)
return _fillpen;
E_INFO("Reading filler penalty file: %s\n", file);
if ((fp = fopen (file, "r")) == NULL)
E_FATAL("fopen(%s,r) failed\n", file);
while (fgets (line, sizeof(line), fp) != NULL) {
if (line[0] == '#') /* Skip comment lines */
continue;
k = sscanf (line, "%s %lf", wd, &prob);
if ((k != 0) && (k != 2))
E_FATAL("Bad input line: %s\n", line);
w = dict_wordid(dict, wd);
if (NOT_S3WID(w) || (w < dict->filler_start) || (w > dict->filler_end))
E_FATAL("%s not a filler word in the given dictionary\n", S3_SILENCE_WORD);
_fillpen->prob[w - dict->filler_start] = (int32) ((logs3(prob) + logs3(wip)) * lw);
}
fclose (fp);
/* Replicate fillpen values for alternative pronunciations */
for (w = dict->filler_start; w <= dict->filler_end; w++) {
bw = dict_basewid (dict, w);
if (bw != w)
_fillpen->prob[w-dict->filler_start] = _fillpen->prob[bw-dict->filler_start];
}
return _fillpen;
}
示例4: ps_start_utt
int
ps_start_utt(ps_decoder_t *ps, char const *uttid)
{
FILE *mfcfh = NULL;
FILE *rawfh = NULL;
int rv;
if (ps->search == NULL) {
E_ERROR("No search module is selected, did you forget to "
"specify a language model or grammar?\n");
return -1;
}
ptmr_reset(&ps->perf);
ptmr_start(&ps->perf);
if (uttid) {
ckd_free(ps->uttid);
ps->uttid = ckd_salloc(uttid);
}
else {
char nuttid[16];
ckd_free(ps->uttid);
sprintf(nuttid, "%09u", ps->uttno);
ps->uttid = ckd_salloc(nuttid);
++ps->uttno;
}
/* Remove any residual word lattice and hypothesis. */
ps_lattice_free(ps->search->dag);
ps->search->dag = NULL;
ps->search->last_link = NULL;
ps->search->post = 0;
ckd_free(ps->search->hyp_str);
ps->search->hyp_str = NULL;
if ((rv = acmod_start_utt(ps->acmod)) < 0)
return rv;
/* Start logging features and audio if requested. */
if (ps->mfclogdir) {
char *logfn = string_join(ps->mfclogdir, "/",
ps->uttid, ".mfc", NULL);
E_INFO("Writing MFCC log file: %s\n", logfn);
if ((mfcfh = fopen(logfn, "wb")) == NULL) {
E_ERROR_SYSTEM("Failed to open MFCC log file %s", logfn);
ckd_free(logfn);
return -1;
}
ckd_free(logfn);
acmod_set_mfcfh(ps->acmod, mfcfh);
}
if (ps->rawlogdir) {
char *logfn = string_join(ps->rawlogdir, "/",
ps->uttid, ".raw", NULL);
E_INFO("Writing raw audio log file: %s\n", logfn);
if ((rawfh = fopen(logfn, "wb")) == NULL) {
E_ERROR_SYSTEM("Failed to open raw audio log file %s", logfn);
ckd_free(logfn);
return -1;
}
ckd_free(logfn);
acmod_set_rawfh(ps->acmod, rawfh);
}
/* Start auxiliary phone loop search. */
if (ps->phone_loop)
ps_search_start(ps->phone_loop);
return ps_search_start(ps->search);
}
示例5: acmod_init
acmod_t *
acmod_init(cmd_ln_t *config, logmath_t *lmath, fe_t *fe, feat_t *fcb)
{
acmod_t *acmod;
char const *featparams;
acmod = ckd_calloc(1, sizeof(*acmod));
acmod->config = cmd_ln_retain(config);
acmod->lmath = lmath;
acmod->state = ACMOD_IDLE;
/* Look for feat.params in acoustic model dir. */
if ((featparams = cmd_ln_str_r(acmod->config, "-featparams"))) {
if (NULL !=
cmd_ln_parse_file_r(acmod->config, feat_defn, featparams, FALSE))
E_INFO("Parsed model-specific feature parameters from %s\n",
featparams);
}
/* Initialize feature computation. */
if (fe) {
if (acmod_fe_mismatch(acmod, fe))
goto error_out;
fe_retain(fe);
acmod->fe = fe;
}
else {
/* Initialize a new front end. */
acmod->fe = fe_init_auto_r(config);
if (acmod->fe == NULL)
goto error_out;
if (acmod_fe_mismatch(acmod, acmod->fe))
goto error_out;
}
if (fcb) {
if (acmod_feat_mismatch(acmod, fcb))
goto error_out;
feat_retain(fcb);
acmod->fcb = fcb;
}
else {
/* Initialize a new fcb. */
if (acmod_init_feat(acmod) < 0)
goto error_out;
}
/* Load acoustic model parameters. */
if (acmod_init_am(acmod) < 0)
goto error_out;
/* The MFCC buffer needs to be at least as large as the dynamic
* feature window. */
acmod->n_mfc_alloc = acmod->fcb->window_size * 2 + 1;
acmod->mfc_buf = (mfcc_t **)
ckd_calloc_2d(acmod->n_mfc_alloc, acmod->fcb->cepsize,
sizeof(**acmod->mfc_buf));
/* Feature buffer has to be at least as large as MFCC buffer. */
acmod->n_feat_alloc = acmod->n_mfc_alloc + cmd_ln_int32_r(config, "-pl_window");
acmod->feat_buf = feat_array_alloc(acmod->fcb, acmod->n_feat_alloc);
acmod->framepos = ckd_calloc(acmod->n_feat_alloc, sizeof(*acmod->framepos));
acmod->utt_start_frame = 0;
/* Senone computation stuff. */
acmod->senone_scores = ckd_calloc(bin_mdef_n_sen(acmod->mdef),
sizeof(*acmod->senone_scores));
acmod->senone_active_vec = bitvec_alloc(bin_mdef_n_sen(acmod->mdef));
acmod->senone_active = ckd_calloc(bin_mdef_n_sen(acmod->mdef),
sizeof(*acmod->senone_active));
acmod->log_zero = logmath_get_zero(acmod->lmath);
acmod->compallsen = cmd_ln_boolean_r(config, "-compallsen");
return acmod;
error_out:
acmod_free(acmod);
return NULL;
}
示例6: E_INFO
kbcore_t *kbcore_init (float64 logbase,
char *feattype,
char *cmn,
char *varnorm,
char *agc,
char *mdeffile,
char *dictfile,
char *fdictfile,
char *compsep,
char *lmfile,
char *fillpenfile,
float64 silprob,
float64 fillprob,
float64 langwt,
float64 inspen,
float64 uw,
char *meanfile,
char *varfile,
float64 varfloor,
char *mixwfile,
float64 mixwfloor,
char *subvqfile,
char *tmatfile,
float64 tmatfloor)
{
kbcore_t *kb;
E_INFO("Initializing core models:\n");
kb = (kbcore_t *) ckd_calloc (1, sizeof(kbcore_t));
kb->fcb = NULL;
kb->mdef = NULL;
kb->dict = NULL;
kb->dict2pid = NULL;
kb->lm = NULL;
kb->fillpen = NULL;
kb->dict2lmwid = NULL;
kb->mgau = NULL;
kb->svq = NULL;
kb->tmat = NULL;
logs3_init (logbase);
if (feattype) {
if ((kb->fcb = feat_init (feattype, cmn, varnorm, agc)) == NULL)
E_FATAL("feat_init(%s) failed\n", feattype);
if (feat_n_stream(kb->fcb) != 1)
E_FATAL("#Feature streams(%d) != 1\n", feat_n_stream(kb->fcb));
}
if (mdeffile) {
if ((kb->mdef = mdef_init (mdeffile)) == NULL)
E_FATAL("mdef_init(%s) failed\n", mdeffile);
}
if (dictfile) {
if (! compsep)
compsep = "";
else if ((compsep[0] != '\0') && (compsep[1] != '\0')) {
E_FATAL("Compound word separator(%s) must be empty or single character string\n",
compsep);
}
if ((kb->dict = dict_init (kb->mdef, dictfile, fdictfile, compsep[0])) == NULL)
E_FATAL("dict_init(%s,%s,%s) failed\n", dictfile,
fdictfile ? fdictfile : "", compsep);
}
if (lmfile) {
if ((kb->lm = lm_read (lmfile, langwt, inspen, uw)) == NULL)
E_FATAL("lm_read(%s, %e, %e, %e) failed\n", lmfile, langwt, inspen, uw);
}
if (fillpenfile || (lmfile && kb->dict)) {
if (! kb->dict) /* Sic */
E_FATAL("No dictionary for associating filler penalty file(%s)\n", fillpenfile);
if ((kb->fillpen = fillpen_init (kb->dict, fillpenfile, silprob, fillprob,
langwt, inspen)) == NULL)
E_FATAL("fillpen_init(%s) failed\n", fillpenfile);
}
if (meanfile) {
if ((! varfile) || (! mixwfile))
E_FATAL("Varfile or mixwfile not specified along with meanfile(%s)\n", meanfile);
kb->mgau = mgau_init (meanfile, varfile, varfloor, mixwfile, mixwfloor, TRUE);
if (kb->mgau == NULL)
E_FATAL("gauden_init(%s, %s, %e) failed\n", meanfile, varfile, varfloor);
if (subvqfile) {
if ((kb->svq = subvq_init (subvqfile, varfloor, -1, kb->mgau)) == NULL)
E_FATAL("subvq_init (%s, %e, -1) failed\n", subvqfile, varfloor);
}
}
if (tmatfile) {
if ((kb->tmat = tmat_init (tmatfile, tmatfloor)) == NULL)
E_FATAL("tmat_init (%s, %e) failed\n", tmatfile, tmatfloor);
}
if (kb->dict && kb->lm) { /* Initialize dict2lmwid */
//.........這裏部分代碼省略.........
示例7: ngram_fwdflat_search
int
ngram_fwdflat_search(ngram_search_t *ngs, int frame_idx)
{
int16 const *senscr;
int32 nf, i, j;
int32 *nawl;
/* Activate our HMMs for the current frame if need be. */
if (!ps_search_acmod(ngs)->compallsen)
compute_fwdflat_sen_active(ngs, frame_idx);
/* Compute GMM scores for the current frame. */
senscr = acmod_score(ps_search_acmod(ngs), &frame_idx);
ngs->st.n_senone_active_utt += ps_search_acmod(ngs)->n_senone_active;
/* Mark backpointer table for current frame. */
ngram_search_mark_bptable(ngs, frame_idx);
/* If the best score is equal to or worse than WORST_SCORE,
* recognition has failed, don't bother to keep trying. */
if (ngs->best_score == WORST_SCORE || ngs->best_score WORSE_THAN WORST_SCORE)
return 0;
/* Renormalize if necessary */
if (ngs->best_score + (2 * ngs->beam) WORSE_THAN WORST_SCORE) {
E_INFO("Renormalizing Scores at frame %d, best score %d\n",
frame_idx, ngs->best_score);
fwdflat_renormalize_scores(ngs, frame_idx, ngs->best_score);
}
ngs->best_score = WORST_SCORE;
hmm_context_set_senscore(ngs->hmmctx, senscr);
/* Evaluate HMMs */
fwdflat_eval_chan(ngs, frame_idx);
/* Prune HMMs and do phone transitions. */
fwdflat_prune_chan(ngs, frame_idx);
/* Do word transitions. */
fwdflat_word_transition(ngs, frame_idx);
/* Create next active word list */
nf = frame_idx + 1;
nawl = ngs->active_word_list[nf & 0x1];
for (i = 0, j = 0; ngs->fwdflat_wordlist[i] >= 0; i++) {
if (bitvec_is_set(ngs->word_active, ngs->fwdflat_wordlist[i])) {
*(nawl++) = ngs->fwdflat_wordlist[i];
j++;
}
}
for (i = ps_search_start_wid(ngs); i < ps_search_n_words(ngs); i++) {
if (bitvec_is_set(ngs->word_active, i)) {
*(nawl++) = i;
j++;
}
}
if (!ngs->fwdtree)
++ngs->n_frame;
ngs->n_active_word[nf & 0x1] = j;
/* Return the number of frames processed. */
return 1;
}
示例8: s3_read_mgau
/* Read a Sphinx3 mean or variance file. */
static int32
s3_read_mgau(s2_semi_mgau_t *s, const char *file_name, float32 ***out_cb)
{
char tmp;
FILE *fp;
int32 i, blk, n;
int32 n_mgau;
int32 n_feat;
int32 n_density;
int32 *veclen;
int32 byteswap, chksum_present;
char **argname, **argval;
uint32 chksum;
E_INFO("Reading S3 mixture gaussian file '%s'\n", file_name);
if ((fp = fopen(file_name, "rb")) == NULL)
E_FATAL("fopen(%s,rb) failed\n", file_name);
/* Read header, including argument-value info and 32-bit byteorder magic */
if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0)
E_FATAL("bio_readhdr(%s) failed\n", file_name);
/* Parse argument-value list */
chksum_present = 0;
for (i = 0; argname[i]; i++) {
if (strcmp(argname[i], "version") == 0) {
if (strcmp(argval[i], MGAU_PARAM_VERSION) != 0)
E_WARN("Version mismatch(%s): %s, expecting %s\n",
file_name, argval[i], MGAU_PARAM_VERSION);
}
else if (strcmp(argname[i], "chksum0") == 0) {
chksum_present = 1; /* Ignore the associated value */
}
}
bio_hdrarg_free(argname, argval);
argname = argval = NULL;
chksum = 0;
/* #Codebooks */
if (bio_fread(&n_mgau, sizeof(int32), 1, fp, byteswap, &chksum) != 1)
E_FATAL("fread(%s) (#codebooks) failed\n", file_name);
if (n_mgau != 1) {
E_ERROR("%s: #codebooks (%d) != 1\n", file_name, n_mgau);
fclose(fp);
return -1;
}
/* #Features/codebook */
if (bio_fread(&n_feat, sizeof(int32), 1, fp, byteswap, &chksum) != 1)
E_FATAL("fread(%s) (#features) failed\n", file_name);
if (s->n_feat == 0)
s->n_feat = n_feat;
else if (n_feat != s->n_feat)
E_FATAL("#Features streams(%d) != %d\n", n_feat, s->n_feat);
/* #Gaussian densities/feature in each codebook */
if (bio_fread(&n_density, sizeof(int32), 1, fp,
byteswap, &chksum) != 1)
E_FATAL("fread(%s) (#density/codebook) failed\n", file_name);
if (s->n_density == 0)
s->n_density = n_density;
else if (n_density != s->n_density)
E_FATAL("%s: Number of densities per feature(%d) != %d\n",
file_name, n_mgau, s->n_density);
/* Vector length of feature stream */
veclen = ckd_calloc(s->n_feat, sizeof(int32));
if (bio_fread(veclen, sizeof(int32), s->n_feat,
fp, byteswap, &chksum) != s->n_feat)
E_FATAL("fread(%s) (feature vector-length) failed\n", file_name);
for (i = 0, blk = 0; i < s->n_feat; ++i) {
if (s->veclen[i] == 0)
s->veclen[i] = veclen[i];
else if (veclen[i] != s->veclen[i])
E_FATAL("feature stream length %d is inconsistent (%d != %d)\n",
i, veclen[i], s->veclen[i]);
blk += veclen[i];
}
/* #Floats to follow; for the ENTIRE SET of CODEBOOKS */
if (bio_fread(&n, sizeof(int32), 1, fp, byteswap, &chksum) != 1)
E_FATAL("fread(%s) (total #floats) failed\n", file_name);
if (n != n_mgau * n_density * blk)
E_FATAL
("%s: #float32s(%d) doesn't match dimensions: %d x %d x %d\n",
file_name, n, n_mgau, n_density, blk);
*out_cb = ckd_calloc(s->n_feat, sizeof(float32 *));
for (i = 0; i < s->n_feat; ++i) {
(*out_cb)[i] =
(float32 *) ckd_calloc(n_density * veclen[i],
sizeof(float32));
if (bio_fread
((*out_cb)[i], sizeof(float32),
n_density * veclen[i], fp,
byteswap, &chksum) != n_density * veclen[i])
E_FATAL("fread(%s, %d) of feat %d failed\n", file_name,
//.........這裏部分代碼省略.........
示例9: ps_end_utt
int
ps_end_utt(ps_decoder_t *ps)
{
int rv, i;
if (ps->acmod->state == ACMOD_ENDED || ps->acmod->state == ACMOD_IDLE) {
E_ERROR("Utterance is not started\n");
return -1;
}
acmod_end_utt(ps->acmod);
/* Search any remaining frames. */
if ((rv = ps_search_forward(ps)) < 0) {
ptmr_stop(&ps->perf);
return rv;
}
/* Finish phone loop search. */
if (ps->phone_loop) {
if ((rv = ps_search_finish(ps->phone_loop)) < 0) {
ptmr_stop(&ps->perf);
return rv;
}
}
/* Search any frames remaining in the lookahead window. */
if (ps->acmod->output_frame >= ps->pl_window) {
for (i = ps->acmod->output_frame - ps->pl_window;
i < ps->acmod->output_frame; ++i)
ps_search_step(ps->search, i);
}
/* Finish main search. */
if ((rv = ps_search_finish(ps->search)) < 0) {
ptmr_stop(&ps->perf);
return rv;
}
ptmr_stop(&ps->perf);
/* Log a backtrace if requested. */
if (cmd_ln_boolean_r(ps->config, "-backtrace")) {
const char* hyp;
ps_seg_t *seg;
int32 score;
hyp = ps_get_hyp(ps, &score);
if (hyp != NULL) {
E_INFO("%s (%d)\n", hyp, score);
E_INFO_NOFN("%-20s %-5s %-5s %-5s %-10s %-10s %-3s\n",
"word", "start", "end", "pprob", "ascr", "lscr", "lback");
for (seg = ps_seg_iter(ps, &score); seg;
seg = ps_seg_next(seg)) {
char const *word;
int sf, ef;
int32 post, lscr, ascr, lback;
word = ps_seg_word(seg);
ps_seg_frames(seg, &sf, &ef);
post = ps_seg_prob(seg, &ascr, &lscr, &lback);
E_INFO_NOFN("%-20s %-5d %-5d %-1.3f %-10d %-10d %-3d\n",
word, sf, ef, logmath_exp(ps_get_logmath(ps), post),
ascr, lscr, lback);
}
}
}
return rv;
}
示例10: read_sendump
static int32
read_sendump(s2_semi_mgau_t *s, mdef_t *mdef, char const *file)
{
FILE *fp;
char line[1000];
int32 i, n;
int32 do_swap, do_mmap;
size_t filesize, offset;
int n_clust = 256; /* Number of clusters (if zero, we are just using
* 8-bit quantized weights) */
int r = s->n_density;
int c = mdef_n_sen(mdef);
s->n_sen = c;
do_mmap = cmd_ln_boolean_r(s->config, "-mmap");
if ((fp = fopen(file, "rb")) == NULL)
return -1;
E_INFO("Loading senones from dump file %s\n", file);
/* Read title size, title */
fread(&n, sizeof(int32), 1, fp);
/* This is extremely bogus */
do_swap = 0;
if (n < 1 || n > 999) {
SWAP_INT32(&n);
if (n < 1 || n > 999) {
E_FATAL("Title length %x in dump file %s out of range\n", n, file);
}
do_swap = 1;
}
if (fread(line, sizeof(char), n, fp) != n)
E_FATAL("Cannot read title\n");
if (line[n - 1] != '\0')
E_FATAL("Bad title in dump file\n");
E_INFO("%s\n", line);
/* Read header size, header */
fread(&n, 1, sizeof(n), fp);
if (do_swap) SWAP_INT32(&n);
if (fread(line, sizeof(char), n, fp) != n)
E_FATAL("Cannot read header\n");
if (line[n - 1] != '\0')
E_FATAL("Bad header in dump file\n");
/* Read other header strings until string length = 0 */
for (;;) {
fread(&n, 1, sizeof(n), fp);
if (do_swap) SWAP_INT32(&n);
if (n == 0)
break;
if (fread(line, sizeof(char), n, fp) != n)
E_FATAL("Cannot read header\n");
/* Look for a cluster count, if present */
if (!strncmp(line, "cluster_count ", strlen("cluster_count "))) {
n_clust = atoi(line + strlen("cluster_count "));
}
}
/* Read #codewords, #pdfs */
fread(&r, 1, sizeof(r), fp);
if (do_swap) SWAP_INT32(&r);
fread(&c, 1, sizeof(c), fp);
if (do_swap) SWAP_INT32(&c);
E_INFO("Rows: %d, Columns: %d\n", r, c);
if (n_clust) {
E_ERROR ("Dump file is incompatible with PocketSphinx\n");
fclose(fp);
return -1;
}
if (do_mmap) {
E_INFO("Using memory-mapped I/O for senones\n");
}
offset = ftell(fp);
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fseek(fp, offset, SEEK_SET);
/* Allocate memory for pdfs (or memory map them) */
if (do_mmap)
s->sendump_mmap = mmio_file_read(file);
/* Otherwise, set up all pointers, etc. */
if (s->sendump_mmap) {
s->mixw = ckd_calloc(s->n_feat, sizeof(*s->mixw));
for (i = 0; i < s->n_feat; i++) {
/* Pointers into the mmap()ed 2d array */
s->mixw[i] = ckd_calloc(r, sizeof(**s->mixw));
}
for (n = 0; n < s->n_feat; n++) {
for (i = 0; i < r; i++) {
s->mixw[n][i] = ((uint8 *) mmio_file_ptr(s->sendump_mmap)) + offset;
offset += c;
}
}
}
else {
s->mixw = ckd_calloc_3d(s->n_feat, r, c, sizeof(***s->mixw));
//.........這裏部分代碼省略.........
示例11: read_mixw
static int32
read_mixw(s2_semi_mgau_t * s, char const *file_name, double SmoothMin)
{
char **argname, **argval;
char eofchk;
FILE *fp;
int32 byteswap, chksum_present;
uint32 chksum;
float32 *pdf;
int32 i, f, c, n;
int32 n_sen;
int32 n_feat;
int32 n_comp;
int32 n_err;
E_INFO("Reading mixture weights file '%s'\n", file_name);
if ((fp = fopen(file_name, "rb")) == NULL)
E_FATAL("fopen(%s,rb) failed\n", file_name);
/* Read header, including argument-value info and 32-bit byteorder magic */
if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0)
E_FATAL("bio_readhdr(%s) failed\n", file_name);
/* Parse argument-value list */
chksum_present = 0;
for (i = 0; argname[i]; i++) {
if (strcmp(argname[i], "version") == 0) {
if (strcmp(argval[i], MGAU_MIXW_VERSION) != 0)
E_WARN("Version mismatch(%s): %s, expecting %s\n",
file_name, argval[i], MGAU_MIXW_VERSION);
}
else if (strcmp(argname[i], "chksum0") == 0) {
chksum_present = 1; /* Ignore the associated value */
}
}
bio_hdrarg_free(argname, argval);
argname = argval = NULL;
chksum = 0;
/* Read #senones, #features, #codewords, arraysize */
if ((bio_fread(&n_sen, sizeof(int32), 1, fp, byteswap, &chksum) != 1)
|| (bio_fread(&n_feat, sizeof(int32), 1, fp, byteswap, &chksum) !=
1)
|| (bio_fread(&n_comp, sizeof(int32), 1, fp, byteswap, &chksum) !=
1)
|| (bio_fread(&n, sizeof(int32), 1, fp, byteswap, &chksum) != 1)) {
E_FATAL("bio_fread(%s) (arraysize) failed\n", file_name);
}
if (n_feat != s->n_feat)
E_FATAL("#Features streams(%d) != %d\n", n_feat, s->n_feat);
if (n != n_sen * n_feat * n_comp) {
E_FATAL
("%s: #float32s(%d) doesn't match header dimensions: %d x %d x %d\n",
file_name, i, n_sen, n_feat, n_comp);
}
/* n_sen = number of mixture weights per codeword, which is
* fixed at the number of senones since we have only one codebook.
*/
s->n_sen = n_sen;
/* Quantized mixture weight arrays. */
s->mixw = ckd_calloc_3d(s->n_feat, s->n_density, n_sen, sizeof(***s->mixw));
/* Temporary structure to read in floats before conversion to (int32) logs3 */
pdf = (float32 *) ckd_calloc(n_comp, sizeof(float32));
/* Read senone probs data, normalize, floor, convert to logs3, truncate to 8 bits */
n_err = 0;
for (i = 0; i < n_sen; i++) {
for (f = 0; f < n_feat; f++) {
if (bio_fread((void *) pdf, sizeof(float32),
n_comp, fp, byteswap, &chksum) != n_comp) {
E_FATAL("bio_fread(%s) (arraydata) failed\n", file_name);
}
/* Normalize and floor */
if (vector_sum_norm(pdf, n_comp) <= 0.0)
n_err++;
vector_floor(pdf, n_comp, SmoothMin);
vector_sum_norm(pdf, n_comp);
/* Convert to LOG, quantize, and transpose */
for (c = 0; c < n_comp; c++) {
int32 qscr;
qscr = -logmath_log(s->lmath_8b, pdf[c]);
if ((qscr > MAX_NEG_MIXW) || (qscr < 0))
qscr = MAX_NEG_MIXW;
s->mixw[f][c][i] = qscr;
}
}
}
if (n_err > 0)
E_WARN("Weight normalization failed for %d senones\n", n_err);
ckd_free(pdf);
//.........這裏部分代碼省略.........
示例12: s2_semi_mgau_init
s2_semi_mgau_t *
s2_semi_mgau_init(cmd_ln_t *config, logmath_t *lmath, feat_t *fcb, mdef_t *mdef)
{
s2_semi_mgau_t *s;
char const *sendump_path;
float32 **fgau;
int i;
s = ckd_calloc(1, sizeof(*s));
s->config = config;
s->lmath = logmath_retain(lmath);
/* Log-add table. */
s->lmath_8b = logmath_init(logmath_get_base(lmath), SENSCR_SHIFT, TRUE);
if (s->lmath_8b == NULL) {
s2_semi_mgau_free(s);
return NULL;
}
/* Ensure that it is only 8 bits wide so that fast_logmath_add() works. */
if (logmath_get_width(s->lmath_8b) != 1) {
E_ERROR("Log base %f is too small to represent add table in 8 bits\n",
logmath_get_base(s->lmath_8b));
s2_semi_mgau_free(s);
return NULL;
}
/* Inherit stream dimensions from acmod, will be checked below. */
s->n_feat = feat_dimension1(fcb);
s->veclen = ckd_calloc(s->n_feat, sizeof(int32));
for (i = 0; i < s->n_feat; ++i)
s->veclen[i] = feat_dimension2(fcb, i);
/* Read means and variances. */
if (s3_read_mgau(s, cmd_ln_str_r(s->config, "-mean"), &fgau) < 0) {
s2_semi_mgau_free(s);
return NULL;
}
s->means = (mfcc_t **)fgau;
if (s3_read_mgau(s, cmd_ln_str_r(s->config, "-var"), &fgau) < 0) {
s2_semi_mgau_free(s);
return NULL;
}
s->vars = (mfcc_t **)fgau;
/* Precompute (and fixed-point-ize) means, variances, and determinants. */
s->dets = (mfcc_t **)ckd_calloc_2d(s->n_feat, s->n_density, sizeof(**s->dets));
s3_precomp(s, s->lmath, cmd_ln_float32_r(s->config, "-varfloor"));
/* Read mixture weights */
if ((sendump_path = cmd_ln_str_r(s->config, "-sendump")))
read_sendump(s, mdef, sendump_path);
else
read_mixw(s, cmd_ln_str_r(s->config, "-mixw"),
cmd_ln_float32_r(s->config, "-mixwfloor"));
s->ds_ratio = cmd_ln_int32_r(s->config, "-ds");
/* Determine top-N for each feature */
s->topn_beam = ckd_calloc(s->n_feat, sizeof(*s->topn_beam));
s->max_topn = cmd_ln_int32_r(s->config, "-topn");
split_topn(cmd_ln_str_r(s->config, "-topn_beam"), s->topn_beam, s->n_feat);
E_INFO("Maximum top-N: %d ", s->max_topn);
E_INFOCONT("Top-N beams:");
for (i = 0; i < s->n_feat; ++i) {
E_INFOCONT(" %d", s->topn_beam[i]);
}
E_INFOCONT("\n");
/* Top-N scores from recent frames */
s->n_topn_hist = cmd_ln_int32_r(s->config, "-pl_window") + 2;
s->topn_hist = (vqFeature_t ***)
ckd_calloc_3d(s->n_topn_hist, s->n_feat, s->max_topn,
sizeof(***s->topn_hist));
s->topn_hist_n = ckd_calloc_2d(s->n_topn_hist, s->n_feat,
sizeof(**s->topn_hist_n));
for (i = 0; i < s->n_topn_hist; ++i) {
int j;
for (j = 0; j < s->n_feat; ++j) {
int k;
for (k = 0; k < s->max_topn; ++k) {
s->topn_hist[i][j][k].score = WORST_DIST;
s->topn_hist[i][j][k].codeword = k;
}
}
}
return s;
}
示例13: parse_cmd_ln
int
parse_cmd_ln(int argc, char *argv[])
{
uint32 isHelp;
uint32 isExample;
const char helpstr[] =
"Description: \n\
(copied from Eric's comments)\n\
* Create a tied-state-to-codebook mapping file for semi-continuous, \n\
* phone dependent or fully continuous Gaussian density tying.";
const char examplestr[]=
"Example: \n\
(By Arthur: Not sure, may be obsolete) \n\
mk_ts2cb -moddeffn semi -ts2cbfn ts2cb";
static arg_t defn[] = {
{ "-help",
ARG_BOOLEAN,
"no",
"Shows the usage of the tool"
},
{ "-example",
ARG_BOOLEAN,
"no",
"Shows example of how to use the tool"
},
{ "-ts2cbfn",
ARG_STRING,
NULL,
"A SPHINX-III tied-state-to-cb file name"
},
{ "-moddeffn",
ARG_STRING,
NULL,
"A SPHINX-III model definition file name"
},
{ "-tyingtype", /* either "semi", "pd", or "cont" */
ARG_STRING,
"semi",
"Output a state parameter def file for fully continuous models"
},
{ "-pclassfn", /* this switch is reference for -tyingtype pd */
ARG_STRING,
NULL,
"A SPHINX-II phone class file name"
},
{ NULL,
0,
NULL,
NULL
}
};
cmd_ln_parse(defn, argc, argv, TRUE);
isHelp = cmd_ln_int32("-help");
isExample = cmd_ln_int32("-example");
if(isHelp) {
printf("%s\n\n",helpstr);
}
if(isExample) {
printf("%s\n\n",examplestr);
}
if(isHelp || isExample) {
E_INFO("User asked for help or example.\n");
exit(0);
}
return 0;
}
示例14: live_utt_decode_block
int32 live_utt_decode_block (int16 *samples, int32 nsamples,
int32 live_endutt, partialhyp_t **ohyp)
{
static int32 live_begin_new_utt = 1;
static int32 frmno;
static float32 ***live_feat = NULL;
int32 live_nfr, live_nfeatvec;
int32 nwds =0;
float32 **mfcbuf;
/* int i,j;*/
/* 2004/08/27 L Galescu <[email protected]> -- added raw audio file saving */
static char uttfn[1024];
static FILE *rawfp = NULL;
int16 block_peak_amplitude;
if(live_feat==NULL)
live_feat = feat_array_alloc (kbcore_fcb(kbcore), LIVEBUFBLOCKSIZE);
if (live_begin_new_utt){
fe_start_utt(fe);
utt_begin (kb);
frmno = 0;
kb->nfr = 0;
kb->utt_hmm_eval = 0;
kb->utt_sen_eval = 0;
kb->utt_gau_eval = 0;
live_begin_new_utt = 0;
sprintf(uttfn, "%s/%s.raw", cmd_ln_str("-outrawdir"), kb->uttid);
rawfp = fopen(uttfn, "wb");
}
/* 10.jan.01 RAH, fe_process_utt now requires ***mfcbuf and it allocates the memory internally) */
mfcbuf = NULL;
/* LG 20080613 */
block_peak_amplitude = get_peak_amplitude(samples, nsamples);
if (block_peak_amplitude > peak_amplitude)
peak_amplitude = block_peak_amplitude;
E_INFO("segment peak %d\n",peak_amplitude);
live_nfr = fe_process_utt(fe, samples, nsamples, &mfcbuf); /**/
if (rawfp != NULL) {
fwrite(samples, sizeof(int16), nsamples, rawfp);
if (live_endutt)
fclose(rawfp);
}
if (live_endutt) {
/* RAH, It seems that we shouldn't throw out this data */
fe_end_utt(fe,dummyframe); /* Flush out the fe */
}
#if 0
E_INFO("Number frame after fe_process_utt %d\n",live_nfr);
for(i=0;i<live_nfr;i++){
printf("%d ",i);
for(j=0;j<13;j++){
printf("%f ",mfcbuf[i][j]);
fflush(stdout);
}
printf("\n");
fflush(stdout);
}
#endif
/* lgalescu 2004/08/22 -- i am under the impression that
* feat_s2mfc2feat_block() needs to be called at the end of utt
* even if no frames need processing
*/
/* lgalescu 2004/10/13 -- rescinded the above */
if(live_nfr>0){
/* Compute feature vectors */
live_nfeatvec = feat_s2mfc2feat_block(kbcore_fcb(kbcore), mfcbuf,
live_nfr, live_begin_new_utt,
live_endutt, live_feat);
#if 0
E_INFO ("live_nfeatvec: %ld\n",live_nfeatvec);
#endif
#if 0
E_INFO("Current frame number %d, Number of frames %d, Number frame after feat_s2mfcfeat_block %d\n",frmno,live_nfr,live_nfeatvec);
for(i=0;i<live_nfeatvec;i++){
printf("%d\n",i);
printf("Cep: ");
fflush(stdout);
for(j=0;j<13;j++){
printf("%f ",live_feat[i][0][j]);
fflush(stdout);
}
printf("\n");
fflush(stdout);
printf("Del: ");
fflush(stdout);
for(j=13;j<26;j++){
printf("%f ",live_feat[i][0][j]);
fflush(stdout);
}
printf("\n");
fflush(stdout);
printf("Acc: ");
fflush(stdout);
//.........這裏部分代碼省略.........
示例15: recognize_from_file
/*
* Continuous recognition from a file
*/
static void
recognize_from_file() {
cont_ad_t *cont;
ad_rec_t file_ad = {0};
int16 adbuf[4096];
const char* hyp;
const char* uttid;
int32 k, ts, start;
char waveheader[44];
if ((rawfd = fopen(cmd_ln_str_r(config, "-infile"), "rb")) == NULL) {
E_FATAL_SYSTEM("Failed to open file '%s' for reading",
cmd_ln_str_r(config, "-infile"));
}
fread(waveheader, 1, 44, rawfd);
file_ad.sps = (int32)cmd_ln_float32_r(config, "-samprate");
file_ad.bps = sizeof(int16);
if ((cont = cont_ad_init(&file_ad, ad_file_read)) == NULL) {
E_FATAL("Failed to initialize voice activity detection\n");
}
if (cont_ad_calib(cont) < 0)
E_INFO("Using default voice activity detection\n");
rewind (rawfd);
for (;;) {
while ((k = cont_ad_read(cont, adbuf, 4096)) == 0);
if (k < 0)
break;
if (ps_start_utt(ps, NULL) < 0)
E_FATAL("ps_start_utt() failed\n");
ps_process_raw(ps, adbuf, k, FALSE, FALSE);
hyp = ps_get_hyp(ps, NULL, &uttid);
printf("= partial_hypothese | %s: %s\n", uttid, hyp);
fflush(stdout);
ts = cont->read_ts;
start = ((ts - k) * 100.0) / file_ad.sps;
for (;;) {
if ((k = cont_ad_read(cont, adbuf, 4096)) < 0)
break;
if (k == 0) {
/*
* No speech data available; check current timestamp with most recent
* speech to see if more than 1 sec elapsed. If so, end of utterance.
*/
if ((cont->read_ts - ts) > 2000) {
printf("= utterance_end | %i\n", (cont->read_ts - ts) );
break;
}
} else {
/* New speech data received; note current timestamp */
ts = cont->read_ts;
}
ps_process_raw(ps, adbuf, k, FALSE, FALSE);
hyp = ps_get_hyp(ps, NULL, &uttid);
printf("= partial_hypothese | %s: %s\n", uttid, hyp);
fflush(stdout);
}
ps_end_utt(ps);
if (cmd_ln_boolean_r(config, "-time")) {
print_word_times(start);
printf("= continue\n");
fflush(stdout);
fgetc( stdin );
} else {
hyp = ps_get_hyp(ps, NULL, &uttid);
printf("= final_hypothese | %s: %s\n\n\n", uttid, hyp);
}
fflush(stdout);
}
cont_ad_close(cont);
fclose(rawfd);
}