14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------* 24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * make_ve_grammar.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_FILE_NAME_LEN 64 384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define DEFAULT_WWTRIPHONE_SILMODE 3 394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/* check if the central phoneme is a word-specific phoneme; if so, do not enroll it into the ve grammar.*/ 424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint ws_verify(char * allo_phoneme){ 434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project switch(allo_phoneme[0]){ 444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '(': return 1; 454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '.': return 1; 464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '0': return 1; 474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '1': return 1; 484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '2': return 1; 494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '3': return 1; 504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '4': return 1; 514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '5': return 1; 524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '7': return 1; 534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '8': return 1; 544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '9': return 1; 554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '=': return 1; 564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '>': return 1; 574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'B': return 1; 584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'F': return 1; 594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'G': return 1; 604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'H': return 1; 614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'K': return 1; 624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'M': return 1; 634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'Q': return 1; 644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'R': return 1; 654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'W': return 1; 664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'X': return 1; 674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case 'Y': return 1; 684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '[': return 1; 694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '\\': return 1; 704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '|': return 1; 714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project case '+': return 1; 724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project default: return 0; 734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projectint main (int argc, char **argv) 774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{ 784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int i; 794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char filen[MAX_FILE_NAME_LEN]=""; 804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_Arbdata *ca_arbdata = NULL; /* new, link btw acc/syn */ 814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char *arbfile = NULL; 824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project char *base = NULL; 834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FILE* pfile; 854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FILE* pFile_PCLG; 864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FILE* pFile_map; 874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FILE* pFile_P; 884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FILE* pFile_Grev; 894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project FILE* pFile_script; 904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_hmms; 924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int num_wd = 0; 934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int script_line = 0; 944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int cflag = 0, fnode = 0; 954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int sil_model = DEFAULT_WWTRIPHONE_SILMODE; 964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project int rc; 974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project srec_arbdata *allotree = NULL; 984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nodeID startNode = 0; 1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nodeID pauEndNode = 1; 1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nodeID modelStartNode = 2; 1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nodeID modelEndNode = 3; 1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nodeID pau2StartNode = 4; 1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nodeID pau2EndNode = 5; 1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project nodeID endNode = 6; 1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* initial memory */ 1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CHKLOG(rc, PMemInit()); 1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(argc<5){ 1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("USAGE: -swiarb <swiarb file> -base <output base name>\n"); 1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project exit(1); 1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(i=1; i<argc; i++) { 1174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!strcmp(argv[i],"-swiarb")) { 1184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project arbfile = argv[++i]; 1194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("using swiarb from file %s\n", arbfile); 1204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else if(!strcmp(argv[i],"-base")){ 1224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project base = argv[++i]; 1234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else { 1254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("error_usage: argument [%s]\n", argv[i]); 1264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project exit(1); 1274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* check arb file exist*/ 1314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if ( (pfile = fopen(arbfile, "r")) != NULL ){ 1324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fclose(pfile); 1334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else{ 1354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("ERROR: the specified swiarb file does not exist.\n"); 1364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project exit(1); 1374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 1384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project ca_arbdata = CA_LoadArbdata(arbfile); 1414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project allotree = (srec_arbdata*)ca_arbdata; 1434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project num_hmms = allotree->num_hmms; 1444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project /* Dump out VE .PCLG.txt, .Grev2.det.txt, .P.txt, .script and .map files; .P.txt, .script and .map are not necessary for voice enroll, so just dump out to create .g2g file. Xufang */ 1474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Dumping out VE files\n"); 1494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,base); 1514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,".PCLG.txt"); 1524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pFile_PCLG = fopen(filen,"w"); 1534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filen[0]='\0'; 1554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,base); 1564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,".map"); 1574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pFile_map = fopen(filen,"w"); 1584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filen[0]='\0'; 1604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,base); 1614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,".P.txt"); 1624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pFile_P = fopen(filen,"w"); 1634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filen[0]='\0'; 1654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,base); 1664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,".Grev2.det.txt"); 1674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pFile_Grev = fopen(filen,"w"); 1684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project filen[0]='\0'; 1704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,base); 1714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project strcat(filen,".script"); 1724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project pFile_script = fopen(filen,"w"); 1734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_Grev,"0\t1\teps\t80\n"); 1754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_Grev,"1\t2\t%s.grxml@VE_Words\n",base); 1764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_map,"eps %d\n",num_wd++); 1784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_map,"%s.grxml@ROOT %d\n",base,num_wd++); 1794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_map,"%s.grxml@VE_Words %d\n",base,num_wd++); 1804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_map,"-pau- %d\n",num_wd++); 1814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_map,"-pau2- %d\n",num_wd++); 1824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_map,"@VE_Words %d\n",num_wd++); 1834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"0\t1\teps\t{\t\n"); 1854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"1\t2\teps\t{\t\n"); 1864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"2\t3\teps\t{\t\n"); 1874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"2\t4\teps\t{\t\n"); 1884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"3\t5\t%s.grxml@VE_Words\t%s.grxml@VE_Words\t\n",base,base); 1894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"4\t8\teps\t{\t\n"); 1904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"5\t6\teps\t_3\t\n"); 1914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"6\t7\teps\tVE_Words}\t\n"); 1924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"7\t9\teps\t_2\t\n"); 1934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 1944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_script,"%d type=SENT.type;meaning=SENT.V;\n",script_line++); 1954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_script,"%d type='NEW';V=UTT.V;\n",script_line++); 1964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_script,"%d type='OLD';V=VE_Words.V;\n",script_line++); 1974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_script,"%d V=UTT.V?UTT.V:'--';\n",script_line++); 1984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_script,"%d V=PHONEME.V\n",script_line++); 1994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(i=0;i<num_hmms;i++){ 2014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(ws_verify(allotree->hmm_infos[i].name)) 2024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project continue; 2034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(!strcmp(allotree->hmm_infos[i].name,"#")){ 2044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project sil_model = i; 2054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_PCLG,"%d\t%d\thmm%d_#sil#\t-pau-\n", startNode, pauEndNode, i); 2064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_PCLG,"%d\t%d\t.wb\teps\n", pauEndNode, modelStartNode); 2074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project else{ 2094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(strlen(allotree->hmm_infos[i].name)>0){ 2104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(cflag==0){ 2114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fnode = i; 2124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project cflag = 1; 2134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_PCLG,"%d\t%d\thmm%d_%s\twd_hmm%d_%s\t40\n", modelStartNode, modelEndNode, 2154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project i,allotree->hmm_infos[i].name,i,allotree->hmm_infos[i].name); 2164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_map,"wd_hmm%d_%s %d\n",i,allotree->hmm_infos[i].name,num_wd++); 2174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_Grev,"1\t3\twd_hmm%d_%s\n",i,allotree->hmm_infos[i].name); 2184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"8\t10\twd_hmm%d_%s\t_%d\t\n",i,allotree->hmm_infos[i].name,script_line); 2194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_script,"%d V=V?V:'';V=V+'wd_hmm%d_%s';\n",script_line++,i,allotree->hmm_infos[i].name); 2204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_PCLG,"%d\t%d\t.wb\teps\n", modelEndNode, modelStartNode); 2254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_PCLG,"%d\t%d\t.wb\teps\n", modelEndNode, pau2StartNode); 2264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_PCLG,"%d\t%d\thmm%d_#sil#\t-pau2-\n",pau2StartNode, pau2EndNode, sil_model); 2274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_PCLG,"%d\t%d\t.wb\teps\n", pau2EndNode, endNode); 2284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_PCLG,"%d\n", endNode); 2294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_Grev,"2\n"); 2314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project for(i=fnode;i<num_hmms;i++){ 2324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project if(ws_verify(allotree->hmm_infos[i].name)) 2334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project continue; 2344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_Grev,"3\t3\twd_hmm%d_%s\t40\n",i,allotree->hmm_infos[i].name); 2354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project } 2364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_Grev,"3\n"); 2374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"9\t11\teps\tSENT}\t\n"); 2394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"10\t12\teps\tPHONEME}\t\n"); 2404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"11\t13\teps\t_0\t\n"); 2414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"12\t14\teps\t_4\t\n"); 2424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"13\t15\teps\tROOT}\t\n"); 2434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"14\t16\teps\teps\t\n"); 2444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"15\t\n"); 2454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"16\t17\teps\tUTT}\t\n"); 2464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"16\t8\teps\t{\t\n"); 2474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fprintf(pFile_P,"17\t9\teps\t_1\t\n"); 2484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fclose(pFile_PCLG); 2504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Creating %s.PCLG.txt...\n",base); 2514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fclose(pFile_Grev); 2524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Creating %s.Grev2.det.txt...\n",base); 2534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fclose(pFile_map); 2544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Creating %s.map...\n",base); 2554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fclose(pFile_P); 2564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Creating %s.P.txt...\n",base); 2574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project fclose(pFile_script); 2584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("Creating %s.script...\n",base); 2594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project printf("SUCCESS!\n"); 2604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project CA_FreeArbdata( ca_arbdata); 2634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 2644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project PMemShutdown(); 2654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 0; 2664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectCLEANUP: 2674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project return 1; 2684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project} 2694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project 270