14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * test_swiarb.c * 34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * you may not use this file except in compliance with the License. * 84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * You may obtain a copy of the License at * 104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * See the License for the specific language governing permissions and * 164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * limitations under the License. * 174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * * 184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/ 194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdio.h> 224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <stdlib.h> 234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include <string.h> 244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "plog.h" 264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "passert.h" 274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "duk_args.h" 284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "duk_err.h" 294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ptrd.h" 304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "srec_arb.h" 324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "simapi.h" 334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFileSystem.h" 354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PANSIFileSystem.h" 364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_PATH_LENGTH 256 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_LINE_LENGTH 256 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_ENTRY_LENGTH 128 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_NUM_REC_CONTEXTS 4 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define ANY_SYNTAX syntax_list[0] /* just get around internal checks */ 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define NUM_WORDS_TO_ADD 500 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define MAX_INTERACTIVE_NUM 128 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define printf_vector(HEAD, FMT, PTR, NN) { unsigned int iI; printf(HEAD); for(iI=0;iI<(NN);iI++) printf(FMT, PTR[iI]); printf("\n"); } 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* #include"scg_arbdata.c" */ 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project//static int debug = 0; 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint main (int argc, char **argv) 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int i, j; 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int interactive_test = 0; 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_Arbdata *ca_arbdata = NULL; /* new, link btw acc/syn */ 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project //char *modelmap = NULL; 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char *arbfile = NULL; 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char* q; 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project modelID model_sequence[128]; 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char pronunciation[256]; 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int pronunciation_len; 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int rc; 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project srec_arbdata *allotree = NULL; 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* initial memory */ 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PMemInit()); 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(argc<=1){ 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("USAGE: -swiarb <swiarb file> -interactive\n"); 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project exit(1); 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(i=1; i<argc; i++) { 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!strcmp(argv[i],"-swiarb")) { 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(argc==2){ 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Please specify the swiarb file.\n"); 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project exit(1); 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project arbfile = argv[++i]; 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("using swiarb from file %s\n", arbfile); 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } else if(!strcmp(argv[i],"-interactive")) { 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project interactive_test++; 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } else { 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("error_usage: argument [%s]\n", argv[i]); 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project exit(1); 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* get modelID for a triphone */ 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ca_arbdata = CA_LoadArbdata(arbfile); 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(i=0; i<MAX_INTERACTIVE_NUM; i++){ 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(interactive_test){ 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Type \"quit\" to exit the test.\n"); 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("pronunciation: "); 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project q = fgets(pronunciation, sizeof(pronunciation), stdin); 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!strcmp(q,"quit\n")) break; 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else{ 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("USAGE: -swiarb <swiarb file> -interactive\n"); 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project exit(1); 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pronunciation_len = strlen(pronunciation)-1; 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_ArbdataGetModelIdsForPron(ca_arbdata, 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pronunciation, pronunciation_len, 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project &model_sequence[0]); 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("short pronunciation length is %d.\n", pronunciation_len); 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Acoustic model IDs (\"#\" is silence,\"_\" is word boundary):\n"); 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for (j=0;j<pronunciation_len;j++){ 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(j==0){ 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(pronunciation_len==1) 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("triphone:_%c_ -> ModelID:%d\n", pronunciation[j], model_sequence[j]); 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("triphone:_%c%c -> ModelID:%d\n", pronunciation[j], pronunciation[j+1], 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project model_sequence[j]); 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if(j==(pronunciation_len-1)){ 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("triphone:%c%c_ -> ModelID:%d\n", pronunciation[j-1], pronunciation[j], model_sequence[j]); 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else{ 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("triphone:%c%c%c -> ModelID:%d\n", pronunciation[j-1], pronunciation[j], pronunciation[j+1], 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project model_sequence[j]); 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project allotree = (srec_arbdata*)ca_arbdata; 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf_vector("pel_ids: ", " %d", allotree->hmm_infos[model_sequence[j]].state_indices, 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project (unsigned int) allotree->hmm_infos[model_sequence[j]].num_states); 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("\n"); 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeArbdata( ca_arbdata); 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PMemShutdown(); 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 0; 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 1; 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 147