/*---------------------------------------------------------------------------*
* 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;
}