/*---------------------------------------------------------------------------* * test_swiarb.c * * * * 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. * * * *---------------------------------------------------------------------------*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "plog.h" #include "passert.h" #include "duk_args.h" #include "duk_err.h" #include "ptrd.h" #include "srec_arb.h" #include "simapi.h" #include "PFileSystem.h" #include "PANSIFileSystem.h" #define MAX_PATH_LENGTH 256 #define MAX_LINE_LENGTH 256 #define MAX_ENTRY_LENGTH 128 #define MAX_NUM_REC_CONTEXTS 4 #define ANY_SYNTAX syntax_list[0] /* just get around internal checks */ #define NUM_WORDS_TO_ADD 500 #define MAX_INTERACTIVE_NUM 128 #define printf_vector(HEAD, FMT, PTR, NN) { unsigned int iI; printf(HEAD); for(iI=0;iI<(NN);iI++) printf(FMT, PTR[iI]); printf("\n"); } /* #include"scg_arbdata.c" */ //static int debug = 0; int main (int argc, char **argv) { int i, j; int interactive_test = 0; CA_Arbdata *ca_arbdata = NULL; /* new, link btw acc/syn */ //char *modelmap = NULL; char *arbfile = NULL; char* q; modelID model_sequence[128]; char pronunciation[256]; int pronunciation_len; int rc; srec_arbdata *allotree = NULL; /* initial memory */ CHKLOG(rc, PMemInit()); if(argc<=1){ printf("USAGE: -swiarb <swiarb file> -interactive\n"); exit(1); } for(i=1; i<argc; i++) { if(!strcmp(argv[i],"-swiarb")) { if(argc==2){ printf("Please specify the swiarb file.\n"); exit(1); } arbfile = argv[++i]; printf("using swiarb from file %s\n", arbfile); } else if(!strcmp(argv[i],"-interactive")) { interactive_test++; } else { printf("error_usage: argument [%s]\n", argv[i]); exit(1); } } /* get modelID for a triphone */ ca_arbdata = CA_LoadArbdata(arbfile); for(i=0; i<MAX_INTERACTIVE_NUM; i++){ if(interactive_test){ printf("Type \"quit\" to exit the test.\n"); printf("pronunciation: "); q = fgets(pronunciation, sizeof(pronunciation), stdin); if(!strcmp(q,"quit\n")) break; } else{ printf("USAGE: -swiarb <swiarb file> -interactive\n"); exit(1); } pronunciation_len = strlen(pronunciation)-1; CA_ArbdataGetModelIdsForPron(ca_arbdata, pronunciation, pronunciation_len, &model_sequence[0]); printf("short pronunciation length is %d.\n", pronunciation_len); printf("Acoustic model IDs (\"#\" is silence,\"_\" is word boundary):\n"); for (j=0;j<pronunciation_len;j++){ if(j==0){ if(pronunciation_len==1) printf("triphone:_%c_ -> ModelID:%d\n", pronunciation[j], model_sequence[j]); else printf("triphone:_%c%c -> ModelID:%d\n", pronunciation[j], pronunciation[j+1], model_sequence[j]); } else if(j==(pronunciation_len-1)){ printf("triphone:%c%c_ -> ModelID:%d\n", pronunciation[j-1], pronunciation[j], model_sequence[j]); } else{ printf("triphone:%c%c%c -> ModelID:%d\n", pronunciation[j-1], pronunciation[j], pronunciation[j+1], model_sequence[j]); } allotree = (srec_arbdata*)ca_arbdata; printf_vector("pel_ids: ", " %d", allotree->hmm_infos[model_sequence[j]].state_indices, (unsigned int) allotree->hmm_infos[model_sequence[j]].num_states); printf("\n"); } } CA_FreeArbdata( ca_arbdata); PMemShutdown(); return 0; CLEANUP: return 1; }