1/*---------------------------------------------------------------------------*
2 *  test_swiarb.c                                                            *
3 *                                                                           *
4 *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
5 *                                                                           *
6 *  Licensed under the Apache License, Version 2.0 (the 'License');          *
7 *  you may not use this file except in compliance with the License.         *
8 *                                                                           *
9 *  You may obtain a copy of the License at                                  *
10 *      http://www.apache.org/licenses/LICENSE-2.0                           *
11 *                                                                           *
12 *  Unless required by applicable law or agreed to in writing, software      *
13 *  distributed under the License is distributed on an 'AS IS' BASIS,        *
14 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
15 *  See the License for the specific language governing permissions and      *
16 *  limitations under the License.                                           *
17 *                                                                           *
18 *---------------------------------------------------------------------------*/
19
20
21#include <stdio.h>
22#include <stdlib.h>
23#include <string.h>
24
25#include "plog.h"
26#include "passert.h"
27#include "duk_args.h"
28#include "duk_err.h"
29#include "ptrd.h"
30
31#include "srec_arb.h"
32#include "simapi.h"
33
34#include "PFileSystem.h"
35#include "PANSIFileSystem.h"
36
37#define MAX_PATH_LENGTH 256
38#define MAX_LINE_LENGTH 256
39#define MAX_ENTRY_LENGTH 128
40#define MAX_NUM_REC_CONTEXTS 4
41#define ANY_SYNTAX syntax_list[0] /* just get around internal checks */
42#define NUM_WORDS_TO_ADD 500
43#define MAX_INTERACTIVE_NUM 128
44
45#define printf_vector(HEAD, FMT, PTR, NN) { unsigned int iI; printf(HEAD); for(iI=0;iI<(NN);iI++) printf(FMT, PTR[iI]); printf("\n"); }
46
47/* #include"scg_arbdata.c" */
48//static int debug = 0;
49
50
51int main (int argc, char **argv)
52{
53	int i, j;
54	int interactive_test = 0;
55    CA_Arbdata             *ca_arbdata = NULL;     /* new, link btw acc/syn */
56	//char *modelmap = NULL;
57	char *arbfile = NULL;
58	char* q;
59	modelID model_sequence[128];
60	char pronunciation[256];
61	int pronunciation_len;
62	int rc;
63	srec_arbdata *allotree = NULL;
64
65/* initial memory */
66	CHKLOG(rc, PMemInit());
67
68	if(argc<=1){
69	  printf("USAGE: -swiarb <swiarb file> -interactive\n");
70	  exit(1);
71	}
72
73
74	for(i=1; i<argc; i++) {
75      if(!strcmp(argv[i],"-swiarb")) {
76	if(argc==2){
77	  printf("Please specify the swiarb file.\n");
78	  exit(1);
79	}
80	arbfile = argv[++i];
81	printf("using swiarb from file %s\n", arbfile);
82      } else if(!strcmp(argv[i],"-interactive")) {
83	interactive_test++;
84      } else {
85	printf("error_usage: argument [%s]\n", argv[i]);
86	exit(1);
87      }
88    }
89
90/* get modelID for a triphone */
91    ca_arbdata = CA_LoadArbdata(arbfile);
92
93    for(i=0; i<MAX_INTERACTIVE_NUM; i++){
94
95      if(interactive_test){
96	printf("Type \"quit\" to exit the test.\n");
97	printf("pronunciation: ");
98	q = fgets(pronunciation, sizeof(pronunciation), stdin);
99	if(!strcmp(q,"quit\n")) break;
100      }
101      else{
102	printf("USAGE: -swiarb <swiarb file> -interactive\n");
103	exit(1);
104      }
105
106      pronunciation_len = strlen(pronunciation)-1;
107      CA_ArbdataGetModelIdsForPron(ca_arbdata,
108                                 pronunciation, pronunciation_len,
109                                 &model_sequence[0]);
110
111
112      printf("short pronunciation length is %d.\n", pronunciation_len);
113      printf("Acoustic model IDs (\"#\" is silence,\"_\" is word boundary):\n");
114      for (j=0;j<pronunciation_len;j++){
115
116	if(j==0){
117	  if(pronunciation_len==1)
118	    printf("triphone:_%c_ -> ModelID:%d\n", pronunciation[j], model_sequence[j]);
119	    else
120	  printf("triphone:_%c%c -> ModelID:%d\n", pronunciation[j], pronunciation[j+1],
121	       model_sequence[j]);
122	}
123	else if(j==(pronunciation_len-1)){
124	  printf("triphone:%c%c_ -> ModelID:%d\n", pronunciation[j-1], pronunciation[j], model_sequence[j]);
125	}
126	else{
127	  printf("triphone:%c%c%c -> ModelID:%d\n", pronunciation[j-1], pronunciation[j], pronunciation[j+1],
128	       model_sequence[j]);
129	}
130
131	allotree = (srec_arbdata*)ca_arbdata;
132	printf_vector("pel_ids: ", " %d", allotree->hmm_infos[model_sequence[j]].state_indices,
133		    (unsigned int) allotree->hmm_infos[model_sequence[j]].num_states);
134	printf("\n");
135
136      }
137    }
138
139  CA_FreeArbdata( ca_arbdata);
140
141  PMemShutdown();
142  return 0;
143CLEANUP:
144  return 1;
145}
146
147