int err_set_logfile(const char *path) { FILE *newfp, *oldfp; if ((newfp = fopen(path, "a")) == NULL) return -1; oldfp = err_get_logfp(); err_set_logfp(newfp); if (oldfp != NULL && oldfp != stdout && oldfp != stderr) fclose(oldfp); return 0; }
int main() { logmath_t *logmath; ngram_model_t *model; FILE *fp; char *line = NULL, *grapheme, *phoneme, *predicted_phoneme; int32 different_word_count = 0, fit_count = 0; size_t len = 0; err_set_logfp(NULL); logmath = logmath_init(1.0001f, 0, 0); model = ngram_model_read(NULL, "cmudict-en-us.dmp", NGRAM_AUTO, logmath); fp = fopen("cmudict-en-us.dict", "r"); while (getline(&line, &len, fp) != -1) { grapheme = strtok(line, " "); phoneme = strtok(NULL, "\n"); if (strstr(grapheme, "(")) { grapheme = strtok(grapheme, "("); } else { different_word_count++; } predicted_phoneme = g2p(model, grapheme, 100); if (predicted_phoneme && strcmp(phoneme, predicted_phoneme) == 0) { fit_count++; } ckd_free(predicted_phoneme); } printf("%d %d %f\n", fit_count, different_word_count, fit_count * 1.0 / different_word_count); ckd_free(grapheme); fclose(fp); ngram_model_free(model); logmath_free(logmath); }
int ofxSphinxASR::engineInit(ofAsrEngineArgs *e) { #if defined TARGET_WIN32 char cfg_filename[] = "sphinx.cfg"; char grammarJSGF_filename[] = "grammar.jsgf"; char grammarFSG_filename[] = "grammar.fsg"; #else char cfg_filename[] = "/tmp/sphinx.cfg"; char grammarJSGF_filename[] = "/tmp/grammar.jsgf"; char grammarFSG_filename[] = "/tmp/grammar.fsg"; #endif FILE *cfg_fp = fopen(cfg_filename, "wt"); if (cfg_fp==NULL) return OFXASR_FAIL_WRITE_CONFIG; if ( access(e->sphinxmodel_am.c_str(), 0) != 0 ) return OFXASR_FAIL_READ_FILES; if ( access(e->sphinxmodel_lm.c_str(), 0) != 0 ) return OFXASR_FAIL_READ_FILES; if ( access(e->sphinxmodel_dict.c_str(), 0) != 0 ) return OFXASR_FAIL_READ_FILES; if ( access(e->sphinxmodel_fdict.c_str(), 0) != 0 ) return OFXASR_FAIL_READ_FILES; char cur_path[1024]; getcwd(cur_path, 1024); fprintf(cfg_fp, "-samprate %d\n", e->samplerate); fprintf(cfg_fp, "-hmm %s/%s\n", cur_path, e->sphinxmodel_am.c_str()); fprintf(cfg_fp, "-dict %s/%s\n", cur_path, e->sphinxmodel_dict.c_str()); fprintf(cfg_fp, "-fdict %s/%s\n", cur_path, e->sphinxmodel_fdict.c_str()); fprintf(cfg_fp, "-lm %s/%s\n", cur_path, e->sphinxmodel_lm.c_str()); if (e->sphinx_mode == 2) { if(e->sphinx_candidate_sentences.size() < 1) { printf("Warning: The word list is empty! Use mode 4.\n"); e->sphinx_mode = 4; } else { FILE *gram_fp = fopen(grammarJSGF_filename, "wt"); if (gram_fp==NULL) return OFXASR_FAIL_WRITE_CONFIG; fprintf(gram_fp, "#JSGF V1.0;\n\ngrammar cca_gram;\n\npublic <cca_gram> = (\n"); for (int i=0; i<e->sphinx_candidate_sentences.size()-1; i++) { fprintf(gram_fp, "%s |\n", e->sphinx_candidate_sentences[i].c_str()); } fprintf(gram_fp, "%s );\n\n", e->sphinx_candidate_sentences[e->sphinx_candidate_sentences.size()-1].c_str()); fclose(gram_fp); } jsgf_t *jsgf = jsgf_parse_file(grammarJSGF_filename, NULL); if (jsgf == NULL) { printf("Bad jsgf file %s.\n", grammarJSGF_filename); return OFXASR_INVALID_JSGF_GRAMMAR; } fsg_model_t *fsg = get_fsg(jsgf, NULL); fsg_model_writefile(fsg, grammarFSG_filename); fsg_model_free(fsg); jsgf_grammar_free(jsgf); fprintf(cfg_fp, "-fsg %s\n", grammarFSG_filename); } fprintf(cfg_fp, "-op_mode %d\n", e->sphinx_mode); fclose(cfg_fp); err_set_logfp(NULL); // disable logs cmd_ln_t *config = NULL; config = cmd_ln_parse_file_r(config, S3_DECODE_ARG_DEFS, cfg_filename, TRUE); if (config == NULL) { return OFXASR_INVALID_CONFIG; } decoder = new s3_decode_t; if (s3_decode_init(decoder, config) != S3_DECODE_SUCCESS) { return OFXASR_FAIL_INIT_DECODER; } fe = fe_init_auto_r(config); if (fe == NULL) { return OFXASR_FAIL_INIT_FRONTEND; } bEngineInitialed = true; return OFXASR_SUCCESS; }