/* EXPORT->LSave: Save transcription in fname */ ReturnStatus LSave(char *fname, Transcription *t, FileFormat fmt) { FILE *f; char buf[MAXSTRLEN]; if (fmt == UNDEFF){ if (GetConfStr(cParm,numParm,"TARGETLABEL",buf)) fmt = Str2Format(buf); else fmt = HTK; } if (outMLF != NULL) { if (fmt != HTK){ HRError(6572,"LSave: cant save to MLF in %s format",Format2Str(fmt)); return(FAIL); } f = outMLF; /* save to MLF file */ fprintf(f,"\"%s\"\n",fname); } else /* else open new one */ if ((f=fopen(fname,"wb")) == NULL){ HRError(6511,"LSave: Unable to create label file %s",fname); return(FAIL); } if (trace&T_SAV) printf("HLabel: Saving transcription to %s in format %s\n", fname,Format2Str(fmt)); switch (fmt) { case HTK: SaveHTKLabels( f, t); break; case ESPS: SaveESPSLabels(f, t); break; default: HRError(6572,"LSave: Illegal label file format."); fclose(f); return(FAIL); break; } if (outMLF != NULL && fmt==HTK){ fprintf(f,".\n"); fflush(f); }else fclose(f); return(SUCCESS); }
int main(int argc, char *argv[]) { char * labFn, *listfn, *s; int i,fidx; MLFEntry *me = NULL; Transcription *t; void InitStats(char *listfn); void GatherStats(Transcription *t); void OutputStats(void); if(InitShell(argc,argv,hlstats_version,hlstats_vc_id)<SUCCESS) HError(1300,"HLStats: InitShell failed"); InitMem(); InitMath(); InitWave(); InitLabel(); InitLM(); if (!InfoPrinted() && NumArgs() == 0) ReportUsage(); if (NumArgs() == 0) Exit(0); SetConfParms(); enterId=GetLabId("!ENTER",TRUE); /* All sentences should or are coerced */ exitId=GetLabId("!EXIT",TRUE); /* to start enterId and end exitId */ nullId=GetLabId("!NULL",TRUE); /* Name for words not in list */ while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(1319,"HLStats: Bad switch %s; must be single letter",s); switch(s[0]){ case 'b': doBigram = TRUE; if (NextArg() != STRINGARG) HError(1319,"HLStats: Ngram output file name expected"); bigFile = GetStrArg(); break; case 'c': doLCount = TRUE; lCountLimit = GetChkedInt(0,100000,s); break; case 'd': doDurs = TRUE; break; case 'f': bigFloor = GetChkedFlt(0.0,1000.0,s); break; case 'h': hSize = GetChkedInt(1,2,s); break; case 'l': doList = TRUE; if (NextArg() != STRINGARG) HError(1319,"HLStats: Output label list file name expected"); listFile = GetStrArg(); break; case 'o': doBOff = TRUE; break; case 'p': doPCount = TRUE; pCountLimit = GetChkedInt(0,100000,s); break; case 's': if (NextArg() != STRINGARG) HError(1319,"HLStats: ENTER label name expected"); enterId=GetLabId(GetStrArg(),TRUE); if (NextArg() != STRINGARG) HError(1319,"HLStats: EXIT label name expected"); exitId=GetLabId(GetStrArg(),TRUE); break; case 't': bigThresh = GetChkedInt(0,100,s); break; case 'u': uniFloor = GetChkedFlt(0.0,1000.0,s); break; case 'G': if (NextArg() != STRINGARG) HError(1319,"HLStats: Input label File format expected"); if((ff = Str2Format(GetStrArg())) == ALIEN) HError(-1389,"HLStats: Warning ALIEN Label file format set"); break; case 'I': if (NextArg() != STRINGARG) HError(1319,"HLStats: Input MLF file name expected"); LoadMasterFile(GetStrArg()); break; case 'T': if (NextArg() != INTARG) HError(1319,"HLStats: Trace value expected"); trace = GetChkedInt(0,017,s); break; default: HError(1319,"HLStats: Unknown switch %s",s); } } if (NextArg()!=STRINGARG) HError(1319,"HLStats: Label list file name expected"); listfn = GetStrArg(); if (!(doDurs || doBigram || doList || doLCount || doPCount)) HError(1330,"HLStats: Nothing to do!"); InitStats(listfn); i=0; while (NumArgs()>0) { if (NextArg()!=STRINGARG) HError(1319,"HLStats: Input label file name expected"); labFn = GetStrArg(); if (IsMLFFile(labFn)) { fidx = NumMLFFiles(); if ((me=GetMLFTable()) != NULL) { while(me->next != NULL) me=me->next; LoadMasterFile(labFn); me=me->next; } else { LoadMasterFile(labFn); me=GetMLFTable(); } while (me != NULL) { if (me->type == MLF_IMMEDIATE && me->def.immed.fidx == fidx) { if (trace&T_FIL) { printf(" Processing file %s\n",me->pattern); fflush(stdout); } t = LOpen(&tmpHeap,me->pattern,ff); if (t->numLists<1) HError(-1330,"HLStats: Empty file %s",me->pattern); else GatherStats(t),i++; Dispose(&tmpHeap,t); } me = me->next; if ((trace&T_BAS) && !(trace&T_FIL) && NumMLFEntries()>5000 && i%1000==0) printf(". "),fflush(stdout); } if ((trace&T_BAS) && !(trace&T_FIL) && NumMLFEntries()>5000) printf("\n"); } else { if (trace&T_FIL) { printf(" Processing file %s\n",labFn); fflush(stdout); } t = LOpen(&tmpHeap,labFn,ff); if (t->numLists<1) HError(-1330,"HLStats: Empty file %s",me->pattern); else GatherStats(t),i++; Dispose(&tmpHeap,t); } } if (trace&T_MEM) PrintAllHeapStats(); OutputStats(); if (trace&T_MEM) PrintAllHeapStats(); Exit(0); return (0); /* never reached -- make compiler happy */ }
int main(int argc, char *argv[]) { char *datafn, *s; int nSeg; void Initialise(void); void LoadFile(char *fn); void EstimateModel(void); void SaveModel(char *outfn); if(InitShell(argc,argv,hinit_version,hinit_vc_id)<SUCCESS) HError(2100,"HInit: InitShell failed"); InitMem(); InitLabel(); InitMath(); InitSigP(); InitWave(); InitAudio(); InitVQ(); InitModel(); if(InitParm()<SUCCESS) HError(2100,"HInit: InitParm failed"); InitTrain(); InitUtil(); if (!InfoPrinted() && NumArgs() == 0) ReportUsage(); if (NumArgs() == 0) Exit(0); SetConfParms(); CreateHMMSet(&hset,&gstack,FALSE); while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(2119,"HInit: Bad switch %s; must be single letter",s); switch(s[0]){ case 'e': epsilon = GetChkedFlt(0.0,1.0,s); break; case 'i': maxIter = GetChkedInt(0,100,s); break; case 'l': if (NextArg() != STRINGARG) HError(2119,"HInit: Segment label expected"); segLab = GetStrArg(); break; case 'm': minSeg = GetChkedInt(1,1000,s); break; case 'n': newModel = FALSE; break; case 'o': outfn = GetStrArg(); break; case 'u': SetuFlags(); break; case 'v': minVar = GetChkedFlt(0.0,10.0,s); break; case 'w': mixWeightFloor = MINMIX * GetChkedFlt(0.0,10000.0,s); break; case 'B': saveBinary = TRUE; break; case 'F': if (NextArg() != STRINGARG) HError(2119,"HInit: Data File format expected"); if((dff = Str2Format(GetStrArg())) == ALIEN) HError(-2189,"HInit: Warning ALIEN Data file format set"); break; case 'G': if (NextArg() != STRINGARG) HError(2119,"HInit: Label File format expected"); if((lff = Str2Format(GetStrArg())) == ALIEN) HError(-2189,"HInit: Warning ALIEN Label file format set"); break; case 'H': if (NextArg() != STRINGARG) HError(2119,"HInit: HMM macro file name expected"); AddMMF(&hset,GetStrArg()); break; case 'I': if (NextArg() != STRINGARG) HError(2119,"HInit: MLF file name expected"); LoadMasterFile(GetStrArg()); break; case 'L': if (NextArg()!=STRINGARG) HError(2119,"HInit: Label file directory expected"); labDir = GetStrArg(); break; case 'M': if (NextArg()!=STRINGARG) HError(2119,"HInit: Output macro file directory expected"); outDir = GetStrArg(); break; case 'T': if (NextArg() != INTARG) HError(2119,"HInit: Trace value expected"); trace = GetChkedInt(0,01777,s); break; case 'X': if (NextArg()!=STRINGARG) HError(2119,"HInit: Label file extension expected"); labExt = GetStrArg(); break; default: HError(2119,"HInit: Unknown switch %s",s); } } if (NextArg()!=STRINGARG) HError(2119,"HInit: source HMM file name expected"); hmmfn = GetStrArg(); Initialise(); do { if (NextArg()!=STRINGARG) HError(2119,"HInit: training data file name expected"); datafn = GetStrArg(); LoadFile(datafn); } while (NumArgs()>0); nSeg = NumSegs(segStore); if (nSeg < minSeg) HError(2121,"HInit: Too Few Observation Sequences [%d]",nSeg); if (trace&T_TOP) { printf("%d Observation Sequences Loaded\n",nSeg); fflush(stdout); } EstimateModel(); SaveModel(outfn); if (trace&T_TOP) printf("Output written to directory %s\n", outDir==NULL?"current":outDir); Exit(0); return (0); /* never reached -- make compiler happy */ }
static Boolean tgtHdr = FALSE; /* print target header info */ static Boolean obsFmt = FALSE; /* print observation format */ static Boolean prData = TRUE; /* print data */ static Boolean rawOut = FALSE; /* raw output i.e no numbering */ static Boolean replay = FALSE; /* replay audio */ static Boolean frcDisc = FALSE; /* List VQ symbols from cont file */ static FileFormat ff = UNDEFF; /* Source File format */ static long gst = -1; /* start sample to list */ static long gen = -1; /* end sample to list */ static int numS = 1; /* number of streams */ static int nItems = 10; /* num items per line */ static int barwidth; /* width of printed bars */ static char barc = '-'; /* bar character */ /* ---------------- Configuration Parameters --------------------- */ static ConfParam *cParm[MAXGLOBS]; static int nParm = 0; /* total num params */ static HTime sampPeriod; /* raw audio input only */ static int audSignal; /* ---------------- Process Command Line ------------------------- */ /* SetConfParms: set conf parms relevant to this tool */ void SetConfParms(void) { int i; double d; sampPeriod = 0.0; audSignal = NULLSIG; nParm = GetConfig("HLIST", TRUE, cParm, MAXGLOBS); if (nParm>0){ if (GetConfInt(cParm,nParm,"AUDIOSIG",&i)) audSignal = i; if (GetConfInt(cParm,nParm,"TRACE",&i)) trace = i; if (GetConfFlt(cParm,nParm,"SOURCERATE",&d)) sampPeriod = d; } }
int main_HCopy(int argc, char *argv[]) { char *s; /* next file to process */ void OpenSpeechFile(char *s); void AppendSpeechFile(char *s); void PutTargetFile(char *s); if(InitShell(argc,argv,hcopy_version,hcopy_vc_id)<SUCCESS) HError(1000,"HCopy: InitShell failed"); InitMem(); InitLabel(); InitMath(); InitSigP(); InitWave(); InitAudio(); InitVQ(); InitModel(); if(InitParm()<SUCCESS) HError(1000,"HCopy: InitParm failed"); if (!InfoPrinted() && NumArgs() == 0) ReportUsageHCopy(); if (NumArgs() == 0) return(0); SetConfParmsHCopy(); /* initial trace string is null */ trList.str = NULL; CreateHeap(&iStack, "InBuf", MSTAK, 1, 0.0, STACKSIZE, LONG_MAX); CreateHeap(&oStack, "OutBuf", MSTAK, 1, 0.0, STACKSIZE, LONG_MAX); CreateHeap(&cStack, "ChopBuf", MSTAK, 1, 0.0, STACKSIZE, LONG_MAX); CreateHeap(&lStack, "LabBuf", MSTAK, 1, 0.0, 10000, LONG_MAX); CreateHeap(&tStack, "Trace", MSTAK, 1, 0.0, 100, 200); while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(1019,"HCopy: Bad switch %s; must be single letter",s); switch(s[0]){ case 'a': if (NextArg() != INTARG) HError(1019,"HCopy: Auxiliary label index expected"); auxLab = GetChkedInt(1,100000,s) - 1; break; case 'e': /* end time in seconds, max 10e5 secs */ en = GetChkedFlt(-MAXTIME,MAXTIME,s); stenSet = TRUE; chopF = TRUE; break; case 'i': if (NextArg() != STRINGARG) HError(1019,"HCopy: Output MLF name expected"); if(SaveToMasterfile(GetStrArg())<SUCCESS) HError(1014,"HCopy: Cannot write to MLF"); useMLF = TRUE; labF = TRUE; break; case 'l': if (NextArg() != STRINGARG) HError(1019,"HCopy: Target label file directory expected"); outLabDir = GetStrArg(); labF = TRUE; break; case 'm': xMargin = GetChkedFlt(-MAXTIME,MAXTIME,s); chopF = TRUE; break; case 'n': if (NextArg() != INTARG) HError(1019,"HCopy: Label index expected"); labstidx= GetChkedInt(-100000,100000,s); if (NextArg() == INTARG) labenidx = GetChkedInt(-100000,100000,s); chopF = TRUE; break; case 's': /* start time in seconds */ st = GetChkedFlt(0,MAXTIME,s); stenSet = TRUE; chopF = TRUE; break; case 't': if (NextArg() != INTARG) HError(1019,"HCopy: Trace line width expected"); traceWidth= GetChkedInt(10,100000,s); break; case 'x': if (NextArg() != STRINGARG) HError(1019,"HCopy: Label name expected"); labName = GetLabId(GetStrArg(),TRUE); if (NextArg() == INTARG) labRep = GetChkedInt(1,100000,s); chopF = TRUE; labF = TRUE; break; case 'F': if (NextArg() != STRINGARG) HError(1019,"HCopy: Source file format expected"); if((srcFF = Str2Format(GetStrArg())) == ALIEN) HError(-1089,"HCopy: Warning ALIEN src file format set"); break; case 'G': if (NextArg() != STRINGARG) HError(1019,"HCopy: Source label File format expected"); if((srcLabFF = Str2Format(GetStrArg())) == ALIEN) HError(-1089,"HCopy: Warning ALIEN Label output file format set"); labF= TRUE; break; case 'I': if (NextArg() != STRINGARG) HError(1019,"HCopy: MLF file name expected"); LoadMasterFile(GetStrArg()); labF = TRUE; break; case 'L': if (NextArg()!=STRINGARG) HError(1019,"HCopy: Label file directory expected"); labDir = GetStrArg(); labF = TRUE; break; case 'P': if (NextArg() != STRINGARG) HError(1019,"HCopy: Label File format expected"); if((tgtLabFF = Str2Format(GetStrArg())) == ALIEN) HError(-1089,"HCopy: Warning ALIEN Label file format set"); labF = TRUE; break; case 'O': if (NextArg() != STRINGARG) HError(1019,"HCopy: Target file format expected"); if((tgtFF = Str2Format(GetStrArg())) == ALIEN) HError(-1089,"HCopy: Warning ALIEN target file format set"); break; case 'T': trace = GetChkedInt(0,16,s); break; case 'X': if (NextArg()!=STRINGARG) HError(1019,"HCopy: Label file extension expected"); labExt = GetStrArg(); labF = TRUE; break; default: HError(1019,"HCopy: Unknown switch %s",s); } } if (NumArgs() == 1) HError(1019,"HCopy: Target file or + operator expected"); FixOptions(); while (NumArgs()>1) { /* process group S1 + S2 + ... TGT */ off = 0.0; if (NextArg()!=STRINGARG) HError(1019,"HCopy: Source file name expected"); s = GetStrArg(); OpenSpeechFile(s); /* Load initial file S1 */ if (NextArg()!=STRINGARG) HError(1019,"HCopy: Target file or + operator expected"); s = GetStrArg(); while (strcmp(s,"+") == 0) { /* Append + S2 + S3 ... */ if (NextArg()!=STRINGARG) HError(1019,"HCopy: Append file name expected"); s = GetStrArg(); AppendSpeechFile(s); if (NextArg()!=STRINGARG) HError(1019,"HCopy: Target file or + operator expected"); s = GetStrArg(); } PutTargetFile(s); if(trace & T_MEM) PrintAllHeapStats(); if(trans != NULL){ trans = NULL; ResetHeap(&lStack); } ResetHeap(&iStack); ResetHeap(&oStack); if(chopF) ResetHeap(&cStack); } if(useMLF) CloseMLFSaveFile(); if (NumArgs() != 0) HError(-1019,"HCopy: Unused args ignored"); return (0); /* never reached -- make compiler happy */ }
/* SetConfParms: set conf parms relevant to HCompV */ void SetConfParms(void) { int i; Boolean b; double f; char buf[MAXSTRLEN]; nParm = GetConfig("HEREST", TRUE, cParm, MAXGLOBS); if (nParm>0) { if (GetConfInt(cParm,nParm,"TRACE",&i)) trace = i; if (GetConfFlt(cParm,nParm,"VARFLOORPERCENTILE",&f)) varFloorPercent = f; if (GetConfBool(cParm,nParm,"SAVEBINARY",&b)) saveBinary = b; if (GetConfBool(cParm,nParm,"BINARYACCFORMAT",&b)) ldBinary = b; /* 2-model reestimation alignment model set */ if (GetConfStr(cParm,nParm,"ALIGNMODELMMF",buf)) { strcpy(al_hmmMMF,buf); al_hmmUsed = TRUE; } if (GetConfStr(cParm,nParm,"ALIGNHMMLIST",buf)) { strcpy(al_hmmLst,buf); al_hmmUsed = TRUE; } /* allow multiple individual model files */ if (GetConfStr(cParm,nParm,"ALIGNMODELDIR",buf)) { strcpy(al_hmmDir,buf); al_hmmUsed = TRUE; } if (GetConfStr(cParm,nParm,"ALIGNMODELEXT",buf)) { strcpy(al_hmmExt,buf); al_hmmUsed = TRUE; } if (GetConfStr(cParm,nParm,"ALIGNXFORMEXT",buf)) { xfInfo.alXFormExt = CopyString(&hmmStack,buf); } if (GetConfStr(cParm,nParm,"ALIGNXFORMDIR",buf)) { xfInfo.alXFormDir = CopyString(&hmmStack,buf); } if (GetConfStr(cParm,nParm,"INXFORMMASK",buf)) { xfInfo.inSpkrPat = CopyString(&hmmStack,buf); } if (GetConfStr(cParm,nParm,"PAXFORMMASK",buf)) { xfInfo.paSpkrPat = CopyString(&hmmStack,buf); } if (GetConfStr(cParm,nParm,"LABFILEMASK",buf)) { labFileMask = (char*)malloc(strlen(buf)+1); strcpy(labFileMask, buf); } if (GetConfStr(cParm,nParm,"UPDATEMODE",buf)) { if (!strcmp (buf, "DUMP")) updateMode = UPMODE_DUMP; else if (!strcmp (buf, "UPDATE")) updateMode = UPMODE_UPDATE; else if (!strcmp (buf, "BOTH")) updateMode = UPMODE_BOTH; else HError(2319, "Unknown UPDATEMODE specified (must be DUMP, UPDATE or BOTH)"); } } } void ReportUsage(void) { printf("\nUSAGE: HERest [options] hmmList dataFiles...\n\n"); printf(" Option Default\n\n"); printf(" -a Use an input linear transform off\n"); printf(" -c f Mixture pruning threshold 10.0\n"); printf(" -d s dir to find hmm definitions current\n"); printf(" -h s set output speaker name pattern *.%%%%%%\n"); printf(" to s, optionally set input and parent patterns\n"); printf(" -l N set max files per speaker off\n"); printf(" -m N set min examples needed per model 3\n"); printf(" -o s extension for new hmm files as src\n"); printf(" -p N set parallel mode to N off\n"); printf(" -r Enable Single Pass Training... \n"); printf(" ...using two parameterisations off\n"); printf(" -s s print statistics to file s off\n"); printf(" -t f [i l] set pruning to f [inc limit] inf\n"); printf(" -u tmvwap update t)rans m)eans v)ars w)ghts tmvw\n"); printf(" a)daptation xform p)rior used \n"); printf(" s)semi-tied xform \n"); printf(" -v f set minimum variance to f 0.0\n"); printf(" -w f set mix weight floor to f*MINMIX 0.0\n"); printf(" -x s extension for hmm files none\n"); printf(" -z s Save all xforms to TMF file s TMF\n"); PrintStdOpts("BEFGHIJKLMSTX"); printf("\n\n"); } void SetuFlags(void) { char *s; s=GetStrArg(); uFlags=(UPDSet) 0; while (*s != '\0') switch (*s++) { case 't': uFlags = (UPDSet) (uFlags+UPTRANS); break; case 'm': uFlags = (UPDSet) (uFlags+UPMEANS); break; case 'v': uFlags = (UPDSet) (uFlags+UPVARS); break; case 'w': uFlags = (UPDSet) (uFlags+UPMIXES); break; case 's': uFlags = (UPDSet) (uFlags+UPSEMIT); break; case 'a': uFlags = (UPDSet) (uFlags+UPXFORM); break; case 'p': uFlags = (UPDSet) (uFlags+UPMAP); break; default: HError(2320,"SetuFlags: Unknown update flag %c",*s); break; } } /* ScriptWord: return next word from script */ char *ScriptWord(FILE *script, char *scriptBuf) { int ch,qch,i; i=0; ch=' '; while (isspace(ch)) ch = fgetc(script); if (ch==EOF) { scriptBuf=NULL; return NULL; } if (ch=='\'' || ch=='"'){ qch = ch; ch = fgetc(script); while (ch != qch && ch != EOF) { scriptBuf[i++] = ch; ch = fgetc(script); } if (ch==EOF) HError(5051,"ScriptWord: Closing quote missing in script file"); } else { do { scriptBuf[i++] = ch; ch = fgetc(script); }while (!isspace(ch) && ch != EOF); } scriptBuf[i] = '\0'; return scriptBuf; } void CheckUpdateSetUp() { AdaptXForm *xf;
int main(int argc, char *argv[]) { char *datafn, *s; int stream = 0; void Initialise(char *datafn); void LoadFile(char *fn); void CalcMeanCov(Sequence seq[], int s); void ClusterVecs(Sequence seq[], int s); void WriteVQTable(ClusterSet *cs[], char *fn); if(InitShell(argc,argv,hquant_version,hquant_vc_id)<SUCCESS) HError(2500,"HQuant: InitShell failed"); InitMem(); InitLabel(); InitMath(); InitSigP(); InitWave(); InitAudio(); InitVQ(); InitModel(); if(InitParm()<SUCCESS) HError(2500,"HQuant: InitParm failed"); InitTrain(); if (!InfoPrinted() && NumArgs() == 0) ReportUsage(); if (NumArgs() == 0) Exit(0); SetConfParms(); InitStreamVars(); while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(2519,"HQuant: Bad switch %s; must be single letter",s); switch(s[0]){ case 'd': if ( ck != NULLC) HError(2519,"HQuant: Specify one of -d or -f, not both"); ck = INVDIAGC; break; case 'f': if ( ck != NULLC) HError(2519,"HQuant: Specify one of -d or -f, not both"); ck = FULLC; break; case 'g': globClustVar = TRUE; break; case 'l': if (NextArg() != STRINGARG) HError(2519,"HQuant: Segment label expected"); segLab = GetStrArg(); break; case 'n': if (NextArg() != INTARG) HError(2519,"HQuant: Stream number expected"); stream = GetChkedInt(1,SMAX,s); if (NextArg() != INTARG) HError(2519,"HQuant: Codebook size expected"); cbSizes[stream]= GetChkedInt(1,32768,s); break; case 's': if (NextArg() != INTARG) HError(2519,"HQuant: Number of streams expected"); swidth[0] = GetChkedInt(1,SMAX,s); break; case 't': tType = binTree; break; case 'w': if (NextArg() != INTARG) HError(2519,"HQuant: Stream number expected"); stream = GetChkedInt(1,SMAX,s); if(swidth[0] < stream) swidth[0] = stream; widthSet = TRUE; if (NextArg() != INTARG) HError(2519,"HQuant: Stream width expected"); swidth[stream]= GetChkedInt(1,256,s); break; case 'F': if (NextArg() != STRINGARG) HError(2519,"HQuant: Data File format expected"); if((dff = Str2Format(GetStrArg())) == ALIEN) HError(-2589,"HQuant: Warning ALIEN Data file format set"); break; case 'G': if (NextArg() != STRINGARG) HError(2519,"HQuant: Label File format expected"); if((lff = Str2Format(GetStrArg())) == ALIEN) HError(-2589,"HQuant: Warning ALIEN Label file format set"); break; case 'I': if (NextArg() != STRINGARG) HError(2519,"HQuant: MLF file name expected"); LoadMasterFile(GetStrArg()); break; case 'L': if (NextArg()!=STRINGARG) HError(2519,"HQuant: Label file directory expected"); labDir = GetStrArg(); break; case 'T': if (NextArg() != INTARG) HError(2519,"HQuant: Trace value expected"); trace = GetChkedInt(0,077,s); break; case 'X': if (NextArg()!=STRINGARG) HError(2519,"HQuant: Label file extension expected"); labExt = GetStrArg(); break; default: HError(2519,"HQuant: Unknown switch %s",s); } } if (NextArg()!=STRINGARG) HError(2519,"HQuant: Output VQ table file name expected"); vqfn = GetStrArg(); if (NextArg()!=STRINGARG) HError(2519,"HQuant: Training data file name expected"); datafn = GetStrArg(); Initialise(datafn); LoadFile(datafn); while (NumArgs()>0) { if (NextArg()!=STRINGARG) HError(2519,"HQuant: Training data file name expected"); datafn = GetStrArg(); LoadFile(datafn); } for (stream=1;stream<=swidth[0];stream++){ if (trace&T_TOP) printf("%s-clustering data for stream %d (width %d)\n", (tType==linTree)?"Flat":"Tree",stream,swidth[stream]); CalcMeanCov(dSeq,stream); ClusterVecs(dSeq,stream); } WriteVQTable(cs,vqfn); ResetTrain(); ResetParm(); ResetModel(); ResetVQ(); ResetAudio(); ResetWave(); ResetSigP(); ResetMath(); ResetLabel(); ResetMem(); ResetShell(); Exit(0); return (0); /* never reached -- make compiler happy */ }
int mainHInit(int argc, char *argv[]) { static int ft=1; char *datafn, *s; int nSeg; zwangModify(); if(InitShell(argc,argv,hinit_version,hinit_vc_id)<SUCCESS) HError(2100,"HInit: InitShell failed"); if(ft) { if(isMemInit==0) { InitMem(); isMemInit=1; } InitLabel(); InitMath(); InitSigP(); InitWave(); InitAudio(); InitVQ(); InitModel(); if(InitParm()<SUCCESS) HError(2100,"HInit: InitParm failed"); InitTrain(); InitUtil(); ft=0; /* Stacks for global structures requiring memory allocation */ CreateHeap(&segmentStack,"SegStore", MSTAK, 1, 0.0, 100000, LONG_MAX); CreateHeap(&sequenceStack,"SeqStore", MSTAK, 1, 0.0, 1000, 1000); CreateHeap(&clustSetStack,"ClustSetStore", MSTAK, 1, 0.0, 1000, 1000); CreateHeap(&transStack,"TransStore", MSTAK, 1, 0.0, 1000, 1000); CreateHeap(&traceBackStack,"TraceBackStore", MSTAK, 1, 0.0, 1000, 1000); CreateHeap(&bufferStack,"BufferStore", MSTAK, 1, 0.0, 1000, 1000); } zwangHMemGetConf(); zwangHWaveGetConf(); zwangHLabelGetConf(); zwangHMathGetConf(); zwangHSigPGetConf(); zwangHAudioGetConf(); zwangHVQGetConf(); zwangHModelGetConf(); zwangHParmGetConf(); zwangHTrainGetConf(); zwangHUtilGetConf(); SetConfParms(); CreateHMMSet(&hset,&gstack,FALSE); while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(2119,"HInit: Bad switch %s; must be single letter",s); switch(s[0]){ case 'e': epsilon = GetChkedFlt(0.0,1.0,s); break; case 'i': maxIter = GetChkedInt(0,100,s); break; case 'l': if (NextArg() != STRINGARG) HError(2119,"HInit: Segment label expected"); segLab = GetStrArg(); break; case 'm': minSeg = GetChkedInt(1,1000,s); break; case 'n': newModel = FALSE; break; case 'o': outfn = GetStrArg(); break; case 'u': SetuFlags(); break; case 'v': minVar = GetChkedFlt(0.0,10.0,s); break; case 'w': mixWeightFloor = MINMIX * GetChkedFlt(0.0,10000.0,s); break; case 'B': saveBinary = TRUE; break; case 'F': if (NextArg() != STRINGARG) HError(2119,"HInit: Data File format expected"); if((dff = Str2Format(GetStrArg())) == ALIEN) HError(-2189,"HInit: Warning ALIEN Data file format set"); break; case 'G': if (NextArg() != STRINGARG) HError(2119,"HInit: Label File format expected"); if((lff = Str2Format(GetStrArg())) == ALIEN) HError(-2189,"HInit: Warning ALIEN Label file format set"); break; case 'H': if (NextArg() != STRINGARG) HError(2119,"HInit: HMM macro file name expected"); AddMMF(&hset,GetStrArg()); break; case 'I': if (NextArg() != STRINGARG) HError(2119,"HInit: MLF file name expected"); LoadMasterFile(GetStrArg()); break; case 'L': if (NextArg()!=STRINGARG) HError(2119,"HInit: Label file directory expected"); labDir = GetStrArg(); break; case 'M': if (NextArg()!=STRINGARG) HError(2119,"HInit: Output macro file directory expected"); outDir = GetStrArg(); break; case 'T': if (NextArg() != INTARG) HError(2119,"HInit: Trace value expected"); trace = GetChkedInt(0,01777,s); break; case 'X': if (NextArg()!=STRINGARG) HError(2119,"HInit: Label file extension expected"); labExt = GetStrArg(); break; default: HError(2119,"HInit: Unknown switch %s",s); } } if (NextArg()!=STRINGARG) HError(2119,"HInit: source HMM file name expected"); hmmfn = GetStrArg(); Initialise(); do { if (NextArg()!=STRINGARG) HError(2119,"HInit: training data file name expected"); datafn = GetStrArg(); LoadFile(datafn); } while (NumArgs()>0); nSeg = NumSegs(segStore); if (nSeg < minSeg) HError(2121,"HInit: Too Few Observation Sequences [%d]",nSeg); EstimateModel(); SaveModel(outfn); Dispose(hset.hmem,hset.mtab); ResetHeap(&gstack); ResetHeap(&segmentStack); ResetHeap(&sequenceStack); ResetHeap(&clustSetStack); ResetHeap(&transStack); ResetHeap(&traceBackStack); ResetHeap(&bufferStack); zwangInitParmClear(); zwangInitShellClear(); return (0); /* never reached -- make compiler happy */ }
int pk_genkeypair(int argc, char *argv[]) { int rv; int opt; extern int optind_av; extern char *optarg_av; KMF_KEYSTORE_TYPE kstype = 0; char *tokenname = NULL; char *dir = NULL; char *prefix = NULL; char *keytype = PK_DEFAULT_KEYTYPE; int keylen = PK_DEFAULT_KEYLENGTH; char *label = NULL; char *outkey = NULL; char *format = NULL; KMF_HANDLE_T kmfhandle = NULL; KMF_ENCODE_FORMAT fmt = KMF_FORMAT_ASN1; KMF_KEY_ALG keyAlg = KMF_RSA; KMF_ALGORITHM_INDEX sigAlg; KMF_CREDENTIAL tokencred = {NULL, 0}; KMF_OID *curveoid = NULL; /* ECC */ int y_flag = 0; while ((opt = getopt_av(argc, argv, "k:(keystore)s:(subject)n:(nickname)" "T:(token)d:(dir)p:(prefix)t:(keytype)y:(keylen)" "l:(label)K:(outkey)F:(format)C:(curve)" "E(listcurves)")) != EOF) { if (opt != 'i' && opt != 'E' && EMPTYSTRING(optarg_av)) return (PK_ERR_USAGE); switch (opt) { case 'k': kstype = KS2Int(optarg_av); if (kstype == 0) return (PK_ERR_USAGE); break; case 'l': case 'n': if (label) return (PK_ERR_USAGE); label = optarg_av; break; case 'T': if (tokenname) return (PK_ERR_USAGE); tokenname = optarg_av; break; case 'd': if (dir) return (PK_ERR_USAGE); dir = optarg_av; break; case 'p': if (prefix) return (PK_ERR_USAGE); prefix = optarg_av; break; case 't': keytype = optarg_av; break; case 'y': if (sscanf(optarg_av, "%d", &keylen) != 1) { cryptoerror(LOG_STDERR, gettext("key length must be" "a numeric value (%s)\n"), optarg_av); return (PK_ERR_USAGE); } y_flag++; break; case 'K': if (outkey) return (PK_ERR_USAGE); outkey = optarg_av; break; case 'F': if (format) return (PK_ERR_USAGE); format = optarg_av; break; case 'C': curveoid = ecc_name_to_oid(optarg_av); if (curveoid == NULL) { cryptoerror(LOG_STDERR, gettext( "Unrecognized ECC curve.\n")); return (PK_ERR_USAGE); } break; case 'E': show_ecc_curves(); return (0); default: return (PK_ERR_USAGE); } } /* No additional args allowed. */ argc -= optind_av; argv += optind_av; if (argc) { return (PK_ERR_USAGE); } if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) { cryptoerror(LOG_STDERR, gettext("Error initializing KMF\n")); return (PK_ERR_USAGE); } /* Assume keystore = PKCS#11 if not specified. */ if (kstype == 0) kstype = KMF_KEYSTORE_PK11TOKEN; DIR_OPTION_CHECK(kstype, dir); if (format && (fmt = Str2Format(format)) == KMF_FORMAT_UNDEF) { cryptoerror(LOG_STDERR, gettext("Error parsing format string (%s).\n"), format); return (PK_ERR_USAGE); } if (Str2KeyType(keytype, NULL, &keyAlg, &sigAlg) != 0) { cryptoerror(LOG_STDERR, gettext("Unrecognized keytype (%s).\n"), keytype); return (PK_ERR_USAGE); } if (curveoid != NULL && keyAlg != KMF_ECDSA) { cryptoerror(LOG_STDERR, gettext("EC curves are only " "valid for EC keytypes.\n")); return (PK_ERR_USAGE); } if (keyAlg == KMF_ECDSA && curveoid == NULL) { cryptoerror(LOG_STDERR, gettext("A curve must be " "specifed when using EC keys.\n")); return (PK_ERR_USAGE); } if (keyAlg == KMF_ECDSA && kstype == KMF_KEYSTORE_OPENSSL) { (void) fprintf(stderr, gettext("ECC certificates are" "only supported with the pkcs11 and nss keystores\n")); rv = PK_ERR_USAGE; goto end; } /* Adjust default keylength for NSS and DSA */ if (keyAlg == KMF_DSA && kstype == KMF_KEYSTORE_NSS) { /* NSS only allows for 512-1024 bit DSA keys */ if (!y_flag) /* If nothing was given, default to 1024 */ keylen = 1024; else if (keylen > 1024 || keylen < 512) { (void) fprintf(stderr, gettext("NSS keystore only " "supports DSA keylengths of 512 - 1024 bits\n")); rv = PK_ERR_USAGE; goto end; } } if (kstype == KMF_KEYSTORE_NSS || kstype == KMF_KEYSTORE_PK11TOKEN) { if (label == NULL) { (void) fprintf(stderr, gettext("No key label specified\n")); rv = PK_ERR_USAGE; goto end; } if (tokenname == NULL || !strlen(tokenname)) { if (kstype == KMF_KEYSTORE_NSS) { tokenname = "internal"; } else { tokenname = PK_DEFAULT_PK11TOKEN; } } (void) get_token_password(kstype, tokenname, &tokencred); } if (kstype == KMF_KEYSTORE_NSS) { if (dir == NULL) dir = PK_DEFAULT_DIRECTORY; rv = genkeypair_nss(kmfhandle, tokenname, label, dir, prefix, keyAlg, keylen, &tokencred, curveoid, NULL, NULL); } else if (kstype == KMF_KEYSTORE_PK11TOKEN) { rv = genkeypair_pkcs11(kmfhandle, tokenname, label, keyAlg, keylen, &tokencred, curveoid, NULL, NULL); } else if (kstype == KMF_KEYSTORE_OPENSSL) { rv = genkeypair_file(kmfhandle, keyAlg, keylen, fmt, outkey, NULL, NULL); } if (rv != KMF_OK) display_error(kmfhandle, rv, gettext("Error creating and keypair")); end: if (tokencred.cred != NULL) free(tokencred.cred); (void) kmf_finalize(kmfhandle); return (rv); }
int main(int argc, char *argv[]) { int i; char *s,*c,*e; InitShell(argc,argv,lplex_version,lplex_vc_id); InitMem(); InitMath(); InitWave(); InitLabel(); InitWMap(); InitCMap(); InitLUtil(); InitLModel(); InitPCalc(); InitPMerge(); SetConfParms(); if (!InfoPrinted() && NumArgs() == 0) ReportUsage(); if (NumArgs() == 0) Exit(EXIT_SUCCESS); nLModel = 1; for (i=1; i<=LM_NSIZE; i++) cutOff[i] = 0, wdThresh[i] = 0.0; CreateHeap(&permHeap, "permHeap", MSTAK, 1, 1.0, 4000, 20000); CreateHeap(&tempHeap, "tempHeap", MSTAK, 1, 1.0, 8000, 40000); while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(16619,"Bad switch %s; must be single letter",s); switch(s[0]){ case 'c': i = GetChkedInt(2,LM_NSIZE,s); cutOff[i] = GetChkedInt(1,1000,s); break; case 'd': i = GetChkedInt(2,LM_NSIZE,s); wdThresh[i] = GetChkedFlt(0.0,1E10,s); break; case 'e': if (NextArg() != STRINGARG) HError(16619,"LPlex: Eq Class Name Expected"); c = GetStrArg(); if (NextArg() != STRINGARG) HError(16619,"LPlex: Eq Label Name Expected"); e = GetStrArg(); AddEquiv(c,e); break; case 'i': if (NextArg()!=FLOATARG) HError(16619,"LPlex: Interpolation weight expected"); lmInfo[nLModel].weight = GetChkedFlt(0.0,1.0,s); if (NextArg()!=STRINGARG) HError(16619,"LPlex: Interpolation LM filename expected"); lmInfo[nLModel].fn = GetStrArg(); nLModel++; break; case 'n': testInfo[numTests++] = GetChkedInt(1, 10, s); break; case 'o': printOOV = TRUE; break; case 's': if (NextArg() != STRINGARG) HError(16619,"LPlex: Prob Stream file name expected"); outStreamFN = GetStrArg(); break; case 't': streamMode = TRUE; break; case 'u': skipOOV = FALSE; break; case 'w': if (NextArg() != STRINGARG) HError(16619,"LPlex: Word list file name expected"); wlistFN = GetStrArg(); break; case 'z': if (NextArg() != STRINGARG) HError(16619,"LPlex: New null class name expected"); nulName = GetStrArg(); break; case 'G': if (NextArg() != STRINGARG) HError(16619,"Label File format expected"); if((lff = Str2Format(GetStrArg())) == ALIEN) HError(16619,"Warning ALIEN Label file format set"); break; case 'I': if (NextArg() != STRINGARG) HError(16619,"MLF file name expected"); LoadMasterFile(GetStrArg()); break; case 'T': trace = GetChkedInt(0,077, s); break; default: HError(16619,"LPlex: Unknown switch %s",s); } } #ifdef HTK_TRANSCRIBER if (trace&T_PROB) trace=trace^T_PROB; #endif if (NextArg()!=STRINGARG) /* load the language model */ HError(16619, "Language model filename expected"); lmInfo[0].fn = GetStrArg(); Initialise(); ProcessFiles(); Exit(EXIT_SUCCESS); return EXIT_SUCCESS; /* never reached -- make compiler happy */ }
int main(int argc, char *argv[]) { char *s; char *labfn; int numUtt; void Initialise(void); void DoGeneration(char *labfn); if (InitShell(argc, argv, hmgens_version, hmgens_vc_id) < SUCCESS) HError(2300, "HMGenS: InitShell failed"); InitMem(); InitMath(); InitSigP(); InitWave(); InitLabel(); InitModel(); if (InitParm() < SUCCESS) HError(2300, "HMGenS: InitParm failed"); InitUtil(); InitFB(); InitAdapt(&xfInfo_hmm, &xfInfo_dur); InitMap(); InitGen(); if (NumArgs() == 0) ReportUsage(); CreateHeap(&genStack, "genStore", MSTAK, 1, 1.0, 80000, 400000); CreateHeap(&uttStack, "uttStore", MSTAK, 1, 0.5, 100, 1000); CreateHeap(&fbInfoStack, "FBInfoStore", MSTAK, 1, 0.5, 100, 1000); CreateHeap(&hmmStack, "HmmStore", MSTAK, 1, 1.0, 50000, 500000); CreateHeap(&dmStack, "dmStore", MSTAK, 1, 1.0, 50000, 500000); SetConfParms(); CreateHMMSet(&hmset, &hmmStack, TRUE); CreateHMMSet(&dmset, &dmStack, TRUE); utt = (UttInfo *) New(&uttStack, sizeof(UttInfo)); genInfo = (GenInfo *) New(&genStack, sizeof(GenInfo)); fbInfo = (FBInfo *) New(&fbInfoStack, sizeof(FBInfo)); while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s) != 1) HError(9919, "HMGenS: Bad switch %s; must be single letter", s); switch (s[0]) { case 'a': xfInfo_hmm.useInXForm = TRUE; break; case 'b': xfInfo_dur.useInXForm = TRUE; break; case 'c': if (NextArg() != INTARG) HError(2119, "HMGenS: Parameter generation algorithm type value expected"); type = (ParmGenType) GetChkedInt(CHOLESKY, FB, s); break; case 'd': if (NextArg() != STRINGARG) HError(2319, "HMGenS: HMM definition directory expected"); hmmDir = GetStrArg(); break; case 'e': useAlign = TRUE; break; case 'f': frameRate = (HTime) GetChkedFlt(0.0, 10000000.0, s); break; case 'g': minFrwdP = GetChkedFlt(0.0, 1000.0, s); break; case 'h': if (NextArg() != STRINGARG) HError(1, "Speaker name pattern expected"); xfInfo_hmm.inSpkrPat = xfInfo_dur.inSpkrPat = GetStrArg(); if (NextArg() == STRINGARG) xfInfo_hmm.paSpkrPat = xfInfo_dur.paSpkrPat = GetStrArg(); if (NextArg() != SWITCHARG) HError(2319, "HMGenS: cannot have -h as the last option"); break; case 'm': modelAlign = TRUE; break; case 'n': if (NextArg() != STRINGARG) HError(2319, "HMGenS: duration model definition directory expected"); dmDir = GetStrArg(); break; case 'p': outPdf = TRUE; break; case 'r': if (NextArg() != FLOATARG) HError(2119, "HMGenS: Speaking rate value (float) expected"); speakRate = GetChkedFlt(0.0, 3.0, s); break; case 's': stateAlign = TRUE; break; case 't': pruneInit = GetChkedFlt(0.0, 1.0E20, s); if (NextArg() == FLOATARG || NextArg() == INTARG) { pruneInc = GetChkedFlt(0.0, 1.0E20, s); pruneLim = GetChkedFlt(0.0, 1.0E20, s); } else { pruneInc = 0.0; pruneLim = pruneInit; } break; case 'v': MSDthresh = GetChkedFlt(0.0, 1.0, s); break; case 'x': if (NextArg() != STRINGARG) HError(2319, "HMGenS: HMM file extension expected"); hmmExt = GetStrArg(); break; case 'y': if (NextArg() != STRINGARG) HError(2319, "HMGenS: duration model file extension expected"); dmExt = GetStrArg(); break; case 'B': inBinary = TRUE; break; case 'E': if (NextArg() != STRINGARG) HError(2319, "HMGenS: parent transform directory expected"); xfInfo_hmm.usePaXForm = TRUE; xfInfo_hmm.paXFormDir = GetStrArg(); if (NextArg() == STRINGARG) xfInfo_hmm.paXFormExt = GetStrArg(); if (NextArg() != SWITCHARG) HError(2319, "HMGenS: cannot have -E as the last option"); break; case 'G': if (NextArg() != STRINGARG) HError(2119, "HMGenS: Label File format expected"); if ((lff = Str2Format(GetStrArg())) == ALIEN) HError(-2189, "HMGenS: Warning ALIEN Label file format set"); break; case 'H': if (NextArg() != STRINGARG) HError(3219, "HMGenS: HMM MMF File name expected"); AddMMF(&hmset, GetStrArg()); break; case 'I': if (NextArg() != STRINGARG) HError(2319, "HMGenS: MLF file name expected"); LoadMasterFile(GetStrArg()); break; case 'J': if (NextArg() != STRINGARG) HError(2319, "HMGenS: input transform directory expected"); AddInXFormDir(&hmset, GetStrArg()); if (NextArg() == STRINGARG) xfInfo_hmm.inXFormExt = GetStrArg(); if (NextArg() != SWITCHARG) HError(2319, "HMGenS: cannot have -J as the last option"); break; case 'L': if (NextArg() != STRINGARG) HError(2319, "HMGenS: Label file directory expected"); labDir = GetStrArg(); break; case 'M': if (NextArg() != STRINGARG) HError(2319, "HMGenS: Output macro file directory expected"); genDir = GetStrArg(); break; case 'N': if (NextArg() != STRINGARG) HError(3219, "HMGenS: Duration MMF File name expected"); AddMMF(&dmset, GetStrArg()); break; case 'T': if (NextArg() != INTARG) HError(2119, "HMGenS: Trace value expected"); trace = GetChkedInt(0, 0002, s); break; case 'W': if (NextArg() != STRINGARG) HError(2319, "HMGenS: parent duration transform directory expected"); xfInfo_dur.usePaXForm = TRUE; xfInfo_dur.paXFormDir = GetStrArg(); if (NextArg() == STRINGARG) xfInfo_dur.paXFormExt = GetStrArg(); if (NextArg() != SWITCHARG) HError(2319, "HMGenS: cannot have -W as the last option"); break; case 'X': if (NextArg() != STRINGARG) HError(2319, "HMGenS: Label file extension expected"); labExt = GetStrArg(); break; case 'Y': if (NextArg() != STRINGARG) HError(2319, "HMGenS: input duration transform directory expected"); AddInXFormDir(&dmset, GetStrArg()); if (NextArg() == STRINGARG) { if (xfInfo_dur.inXFormExt == NULL) xfInfo_dur.inXFormExt = GetStrArg(); else HError(2319, "MGenS: only one input duration transform extension may be specified"); } if (NextArg() != SWITCHARG) HError(2319, "HMGenS: cannot have -Y as the last option"); break; default: HError(9919, "HMGenS: Unknown switch %s", s); } } if (NextArg() != STRINGARG) HError(2319, "HMGenS: file name of vocabulary list expected"); Initialise(); InitUttInfo(utt, FALSE); numUtt = 1; if (trace & T_TOP) SetTraceGen(); /* generate parameter sequences */ do { if (NextArg() != STRINGARG) HError(2319, "HMGenS: data file name expected"); labfn = GetStrArg(); /* track speakers */ if (UpdateSpkrStats(&hmset, &xfInfo_hmm, labfn)) { if (!xfInfo_hmm.useInXForm) xfInfo_hmm.inXForm = NULL; } if (UpdateSpkrStats(&dmset, &xfInfo_dur, labfn)) { if (!xfInfo_dur.useInXForm) xfInfo_dur.inXForm = NULL; else ResetDMMPreComps(&dmset); } fbInfo->xfinfo_hmm = &xfInfo_hmm; fbInfo->xfinfo_dur = &xfInfo_dur; fbInfo->inXForm_hmm = xfInfo_hmm.inXForm; fbInfo->inXForm_dur = xfInfo_dur.inXForm; fbInfo->al_inXForm_hmm = xfInfo_hmm.al_inXForm; fbInfo->al_inXForm_dur = xfInfo_dur.al_inXForm; fbInfo->paXForm_hmm = xfInfo_hmm.paXForm; fbInfo->paXForm_dur = xfInfo_dur.paXForm; /* generate parameters */ DoGeneration(labfn); numUtt++; } while (NumArgs() > 0); if (trace & T_TOP) { printf("Generation complete - average log prob per frame = %e (%d frames)\n", totalPr / totalT, totalT); } /* Reset stacks */ Dispose(&fbInfoStack, fbInfo); Dispose(&genStack, genInfo); Dispose(&uttStack, utt); ResetHeap(&fbInfoStack); ResetHeap(&uttStack); ResetHeap(&genStack); ResetHeap(&dmStack); ResetHeap(&hmmStack); /* Reset modules */ ResetGen(); ResetAdapt(&xfInfo_hmm, &xfInfo_dur); ResetFB(); ResetUtil(); ResetParm(); ResetModel(); ResetLabel(); ResetWave(); ResetSigP(); ResetMath(); ResetMem(); ResetShell(); Exit(0); return (0); /* never reached -- make compiler happy */ }
/* main func */ int mainHCompV(int argc, char *argv[]) { static int ft=1; char *datafn, *s; void SetCovs(void); void PutVFloor(void); SpkrAcc *sa = NULL; zwangModify(); if(InitShell(argc,argv,hcompv_version,hcompv_vc_id)<SUCCESS) HError(2000,"HCompV: InitShell failed"); if(ft) { if(isMemInit==0) { InitMem(); isMemInit=1; } InitLabel(); InitMath(); InitSigP(); InitWave(); InitAudio(); InitVQ(); InitModel(); if(InitParm()<SUCCESS) HError(2000,"HCompV: InitParm failed"); ft=0; CreateHeap(&iStack,"InBuf", MSTAK, 1, 0.5, 100000, LONG_MAX); } zwangHMemGetConf(); zwangHWaveGetConf(); zwangHLabelGetConf(); zwangHMathGetConf(); zwangHSigPGetConf(); zwangHAudioGetConf(); zwangHVQGetConf(); zwangHModelGetConf(); zwangHParmGetConf(); SetConfParms(); CreateHMMSet(&hset,&gstack,FALSE); pathPattern[0]='\0'; while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(2019,"HCompV: Bad switch %s; must be single letter",s); switch(s[0]){ case 'f': if (NextArg() != FLOATARG) HError(2019,"HCompV: Variance floor scale expected"); vFloorScale = GetChkedFlt(0.0,100.0,s); break; case 'l': if (NextArg() != STRINGARG) HError(2019,"HCompV: Segment label expected"); segLab = GetStrArg(); break; case 'm': meanUpdate = TRUE; break; case 'o': outfn = GetStrArg(); break; case 'v': if (NextArg() != FLOATARG) HError(2019,"HCompV: Minimum variance level expected"); minVar = GetChkedFlt(0.0,100.0,s); break; case 'k': if (NextArg() != STRINGARG) HError(2019,"HCompV: speaker pattern expected"); strcpy(spPattern,GetStrArg()); if (strchr(spPattern,'%')==NULL) HError(2019,"HCompV: Speaker mask invalid"); break; case 'c': if (NextArg() != STRINGARG) HError(2019,"HCompV: CMV output dir expected"); strcpy(cmDir,GetStrArg()); DoCMV = TRUE; break; case 'p': if (NextArg() != STRINGARG) HError(2019,"HCompV: path pattern expected"); strcpy(pathPattern,GetStrArg()); if (strchr(pathPattern,'%')==NULL) HError(2019,"HCompV: Path mask invalid"); break; case 'q': if (NextArg() != STRINGARG) HError(2019,"HCompV: output flags (nmv)"); strcpy(oflags,GetStrArg()); break; case 'B': saveBinary = TRUE; break; case 'F': if (NextArg() != STRINGARG) HError(2019,"HCompV: Data File format expected"); if((dff = Str2Format(GetStrArg())) == ALIEN) HError(-2089,"HCompV: Warning ALIEN Data file format set"); break; case 'G': if (NextArg() != STRINGARG) HError(2019,"HCompV: Label File format expected"); if((lff = Str2Format(GetStrArg())) == ALIEN) HError(-2089,"HCompV: Warning ALIEN Label file format set"); break; case 'H': if (NextArg() != STRINGARG) HError(2019,"HCompV: HMM macro file name expected"); AddMMF(&hset,GetStrArg()); break; case 'I': if (NextArg() != STRINGARG) HError(2019,"HCompV: MLF file name expected"); LoadMasterFile(GetStrArg()); break; case 'L': if (NextArg()!=STRINGARG) HError(2019,"HCompV: Label file directory expected"); labDir = GetStrArg(); break; case 'M': if (NextArg()!=STRINGARG) HError(2019,"HCompV: Output macro file directory expected"); outDir = GetStrArg(); break; case 'T': if (NextArg() != INTARG) HError(2019,"HCompV: Trace value expected"); trace = GetChkedInt(0,077,s); break; case 'X': if (NextArg()!=STRINGARG) HError(2019,"HCompV: Label file extension expected"); labExt = GetStrArg(); break; default: HError(2019,"HCompV: Unknown switch %s",s); } } /* if not doing CMV, do standard HCompV */ if (DoCMV == FALSE){ if (NextArg()!=STRINGARG) HError(2019,"HCompV: Source HMM file name expected"); hmmfn = GetStrArg(); Initialise(); do { if (NextArg()!=STRINGARG) HError(2019,"HCompV: Training data file name expected"); datafn = GetStrArg(); LoadFile(datafn); } while (NumArgs()>0); SetCovs(); FixGConsts(hmmLink); SaveModel(outfn); if (trace&T_TOP) printf("Output written to directory %s\n",(outDir==NULL)?"./":outDir); if (vFloorScale>0.0) PutVFloor(); } else { /* report export data type */ ReportOutput(); /* init input buffer mem heap */ CreateHeap(&iStack,"BufferIn",MSTAK,1,0.5,100000,5000000); do { if (NextArg()!=STRINGARG){ HError(2019,"HCompV: Training data file name expected"); } datafn = GetStrArg(); /* accumulate stats for current utterance file and update speaker list */ sa = AccGenUtt(spPattern,datafn,sa); salist = UpdateSpkrAccList(salist,sa); /* reset for next utterance */ ClrSpkrAcc(sa); } while (NumArgs()>0); /* compute the means and variances for each speaker */ UpdateMeanVar(salist); /* export NMV for each speaker */ ExportNMV(salist,cmDir,TargetPKStr); } Dispose(hset.hmem,hset.mtab); ResetHeap(&gstack); ResetHeap(&iStack); zwangInitParmClear(); zwangInitShellClear(); //Exit(0); return (0); /* never reached -- make compiler happy */ }
int pk_gencsr(int argc, char *argv[]) { KMF_RETURN rv; int opt; extern int optind_av; extern char *optarg_av; KMF_KEYSTORE_TYPE kstype = 0; char *subject = NULL; char *tokenname = NULL; char *dir = NULL; char *prefix = NULL; int keylen = PK_DEFAULT_KEYLENGTH; char *certlabel = NULL; char *outcsr = NULL; char *outkey = NULL; char *format = NULL; char *altname = NULL; char *kustr = NULL; char *ekustr = NULL; char *hashname = NULL; uint16_t kubits = 0; char *keytype = PK_DEFAULT_KEYTYPE; KMF_HANDLE_T kmfhandle = NULL; KMF_ENCODE_FORMAT fmt = KMF_FORMAT_ASN1; KMF_KEY_ALG keyAlg = KMF_RSA; KMF_ALGORITHM_INDEX sigAlg = KMF_ALGID_SHA1WithRSA; boolean_t interactive = B_FALSE; char *subname = NULL; KMF_CREDENTIAL tokencred = {NULL, 0}; KMF_GENERALNAMECHOICES alttype = 0; int altcrit = 0, kucrit = 0; EKU_LIST *ekulist = NULL; KMF_OID *curveoid = NULL; /* ECC */ KMF_OID *hashoid = NULL; int y_flag = 0; while ((opt = getopt_av(argc, argv, "ik:(keystore)s:(subject)n:(nickname)A:(altname)" "u:(keyusage)T:(token)d:(dir)p:(prefix)t:(keytype)" "y:(keylen)l:(label)c:(outcsr)e:(eku)C:(curve)" "K:(outkey)F:(format)E(listcurves)h:(hash)")) != EOF) { switch (opt) { case 'A': altname = optarg_av; break; case 'i': if (interactive) return (PK_ERR_USAGE); else if (subject) { cryptoerror(LOG_STDERR, gettext("Interactive (-i) and " "subject options are mutually " "exclusive.\n")); return (PK_ERR_USAGE); } else interactive = B_TRUE; break; case 'k': kstype = KS2Int(optarg_av); if (kstype == 0) return (PK_ERR_USAGE); break; case 's': if (subject) return (PK_ERR_USAGE); else if (interactive) { cryptoerror(LOG_STDERR, gettext("Interactive (-i) and " "subject options are mutually " "exclusive.\n")); return (PK_ERR_USAGE); } else subject = optarg_av; break; case 'l': case 'n': if (certlabel) return (PK_ERR_USAGE); certlabel = optarg_av; break; case 'T': if (tokenname) return (PK_ERR_USAGE); tokenname = optarg_av; break; case 'd': dir = optarg_av; break; case 'p': if (prefix) return (PK_ERR_USAGE); prefix = optarg_av; break; case 't': keytype = optarg_av; break; case 'u': kustr = optarg_av; break; case 'y': if (sscanf(optarg_av, "%d", &keylen) != 1) { cryptoerror(LOG_STDERR, gettext("Unrecognized " "key length (%s)\n"), optarg_av); return (PK_ERR_USAGE); } y_flag++; break; case 'c': if (outcsr) return (PK_ERR_USAGE); outcsr = optarg_av; break; case 'K': if (outkey) return (PK_ERR_USAGE); outkey = optarg_av; break; case 'F': if (format) return (PK_ERR_USAGE); format = optarg_av; break; case 'e': ekustr = optarg_av; break; case 'C': curveoid = ecc_name_to_oid(optarg_av); if (curveoid == NULL) { cryptoerror(LOG_STDERR, gettext("Unrecognized ECC " "curve.\n")); return (PK_ERR_USAGE); } break; case 'E': /* * This argument is only to be used * by itself, no other options should * be present. */ if (argc != 2) { cryptoerror(LOG_STDERR, gettext("listcurves has no other " "options.\n")); return (PK_ERR_USAGE); } show_ecc_curves(); return (0); case 'h': hashname = optarg_av; hashoid = ecc_name_to_oid(optarg_av); if (hashoid == NULL) { cryptoerror(LOG_STDERR, gettext("Unrecognized hash.\n")); return (PK_ERR_USAGE); } break; default: cryptoerror(LOG_STDERR, gettext( "unrecognized gencsr option '%s'\n"), argv[optind_av]); return (PK_ERR_USAGE); } } /* No additional args allowed. */ argc -= optind_av; argv += optind_av; if (argc) { return (PK_ERR_USAGE); } /* Assume keystore = PKCS#11 if not specified. */ if (kstype == 0) kstype = KMF_KEYSTORE_PK11TOKEN; DIR_OPTION_CHECK(kstype, dir); if (EMPTYSTRING(outcsr) && interactive) { (void) get_filename("CSR", &outcsr); } if (EMPTYSTRING(outcsr)) { (void) printf(gettext("A filename must be specified to hold" "the final certificate request data.\n")); return (PK_ERR_USAGE); } /* * verify that the outcsr file does not already exist * and that it can be created. */ rv = verify_file(outcsr); if (rv == KMF_ERR_OPEN_FILE) { cryptoerror(LOG_STDERR, gettext("Warning: file \"%s\" exists, " "will be overwritten."), outcsr); if (yesno(gettext("Continue with gencsr? "), gettext("Respond with yes or no.\n"), B_FALSE) == B_FALSE) { return (0); } else { /* remove the file */ (void) unlink(outcsr); } } else if (rv != KMF_OK) { cryptoerror(LOG_STDERR, gettext("Warning: error accessing \"%s\""), outcsr); return (rv); } if ((kstype == KMF_KEYSTORE_NSS || kstype == KMF_KEYSTORE_PK11TOKEN)) { if (EMPTYSTRING(certlabel) && interactive) (void) get_certlabel(&certlabel); if (EMPTYSTRING(certlabel)) { cryptoerror(LOG_STDERR, gettext("A label must be " "specified to create a certificate request.\n")); return (PK_ERR_USAGE); } } else if (kstype == KMF_KEYSTORE_OPENSSL) { if (EMPTYSTRING(outkey) && interactive) (void) get_filename("private key", &outkey); if (EMPTYSTRING(outkey)) { cryptoerror(LOG_STDERR, gettext("A key filename " "must be specified to create a certificate " "request.\n")); return (PK_ERR_USAGE); } } if (format && (fmt = Str2Format(format)) == KMF_FORMAT_UNDEF) { cryptoerror(LOG_STDERR, gettext("Error parsing format string (%s).\n"), format); return (PK_ERR_USAGE); } if (format && fmt != KMF_FORMAT_ASN1 && fmt != KMF_FORMAT_PEM) { cryptoerror(LOG_STDERR, gettext("CSR must be DER or PEM format.\n")); return (PK_ERR_USAGE); } /* * Check the subject name. * If interactive is true, get it now interactively. */ if (interactive) { if (get_subname(&subname) != KMF_OK) { cryptoerror(LOG_STDERR, gettext("Failed to get the " "subject name interactively.\n")); return (PK_ERR_USAGE); } } else { if (EMPTYSTRING(subject)) { cryptoerror(LOG_STDERR, gettext("A subject name or " "-i must be specified to create a certificate " "request.\n")); return (PK_ERR_USAGE); } else { subname = strdup(subject); if (subname == NULL) { cryptoerror(LOG_STDERR, gettext("Out of memory.\n")); return (PK_ERR_SYSTEM); } } } if (altname != NULL) { rv = verify_altname(altname, &alttype, &altcrit); if (rv != KMF_OK) { cryptoerror(LOG_STDERR, gettext("Subject AltName " "must be specified as a name=value pair. " "See the man page for details.")); goto end; } else { /* advance the altname past the '=' sign */ char *p = strchr(altname, '='); if (p != NULL) altname = p + 1; } } if (kustr != NULL) { rv = verify_keyusage(kustr, &kubits, &kucrit); if (rv != KMF_OK) { cryptoerror(LOG_STDERR, gettext("KeyUsage " "must be specified as a comma-separated list. " "See the man page for details.")); goto end; } } if (ekustr != NULL) { rv = verify_ekunames(ekustr, &ekulist); if (rv != KMF_OK) { (void) fprintf(stderr, gettext("EKUs must " "be specified as a comma-separated list. " "See the man page for details.\n")); rv = PK_ERR_USAGE; goto end; } } if ((rv = Str2KeyType(keytype, hashoid, &keyAlg, &sigAlg)) != 0) { cryptoerror(LOG_STDERR, gettext("Unsupported key/hash combination (%s/%s).\n"), keytype, (hashname ? hashname : "none")); goto end; } if (curveoid != NULL && keyAlg != KMF_ECDSA) { cryptoerror(LOG_STDERR, gettext("EC curves are only " "valid for EC keytypes.\n")); return (PK_ERR_USAGE); } if (keyAlg == KMF_ECDSA && curveoid == NULL) { cryptoerror(LOG_STDERR, gettext("A curve must be " "specifed when using EC keys.\n")); return (PK_ERR_USAGE); } if (keyAlg == KMF_ECDSA && kstype == KMF_KEYSTORE_OPENSSL) { (void) fprintf(stderr, gettext("ECC certificates are" "only supported with the pkcs11 and nss keystores\n")); rv = PK_ERR_USAGE; goto end; } /* Adjust default keylength for NSS and DSA */ if (keyAlg == KMF_DSA && !y_flag && kstype == KMF_KEYSTORE_NSS) keylen = 1024; if (kstype == KMF_KEYSTORE_NSS || kstype == KMF_KEYSTORE_PK11TOKEN) { if (tokenname == NULL || !strlen(tokenname)) { if (kstype == KMF_KEYSTORE_NSS) { tokenname = "internal"; } else { tokenname = PK_DEFAULT_PK11TOKEN; } } (void) get_token_password(kstype, tokenname, &tokencred); } if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) { cryptoerror(LOG_STDERR, gettext("Error initializing KMF\n")); return (PK_ERR_USAGE); } if (kstype == KMF_KEYSTORE_NSS) { if (dir == NULL) dir = PK_DEFAULT_DIRECTORY; rv = gencsr_nss(kmfhandle, tokenname, subname, altname, alttype, altcrit, certlabel, dir, prefix, keyAlg, keylen, kubits, kucrit, fmt, outcsr, &tokencred, ekulist, sigAlg, curveoid); } else if (kstype == KMF_KEYSTORE_PK11TOKEN) { rv = gencsr_pkcs11(kmfhandle, tokenname, subname, altname, alttype, altcrit, certlabel, keyAlg, keylen, kubits, kucrit, fmt, outcsr, &tokencred, ekulist, sigAlg, curveoid); } else if (kstype == KMF_KEYSTORE_OPENSSL) { rv = gencsr_file(kmfhandle, keyAlg, keylen, fmt, subname, altname, alttype, altcrit, kubits, kucrit, outcsr, outkey, ekulist, sigAlg); } end: if (rv != KMF_OK) { display_error(kmfhandle, rv, gettext("Error creating CSR or keypair")); if (rv == KMF_ERR_RDN_PARSER) { cryptoerror(LOG_STDERR, gettext("subject or " "issuer name must be in proper DN format.\n")); } } if (ekulist != NULL) free_eku_list(ekulist); if (subname) free(subname); if (tokencred.cred != NULL) free(tokencred.cred); (void) kmf_finalize(kmfhandle); if (rv != KMF_OK) return (PK_ERR_USAGE); return (0); }
void main(int argc, char *argv[]) { FILE *fwav, *ppd, *ptm; int byte_swap = 0; int headersize, sampling_rate, min_pitch, max_pitch; int filesize, total = 0, min_amp = 0, max_amp = 0, ten_ms; int min_range, max_range, verbose = 0, low_range, high_range; short *speech; int i, j; float mean, global_rms = 0.0, sample_interval; float *rho, eng; int x_start, num_peaks; short *peak_set; int pitch[NUM_FRAMES][MAX_CANDS], frame_ct = 0, peak_ct[NUM_FRAMES]; float corr[NUM_FRAMES][MAX_CANDS]; int start_frame, end_frame, done, counter, at, at_bad; short possible[GROUP_SIZE][MAX_CANDS][MAX_CANDS]; int best_path[MAX_CANDS][GROUP_SIZE+1], cand_ct; float best_cost[MAX_CANDS], best_no_bad[MAX_CANDS], min, best, min_bad; int cur_end, at2; int target, index, keep_going, end_pt; int male; int num_bad, ct1, ct2, num_shared; float ave1, ave2; int targ_pitch[NUM_FRAMES], choice1[NUM_FRAMES], choice2[NUM_FRAMES]; int ave_pit_len, ave_ct, need_fix; char message[100]; float time,start_time,out_pitch; int mstime; int length,start,last_length,last_start; int len_stem; char *stem; int end_of_file; char *ptmfn,*ppdfn; #ifndef HTKCOMPILE char *stem_ptmfn,*stem_ppdfn; #endif #ifdef HTKCOMPILE char *s; DataFile src; /* src is then a DataFile type structure */ FileFormat ff; /* ff is then a FileFormat type */ char *wavfn; /* Waveform input file name */ char *tempptmfn=NULL; /* temporary storage for command line specified ptmfn */ char *tempppdfn=NULL; /* temporary storage for command line specified ppdfn */ min_pitch = DEFAULT_MIN_PITCH; max_pitch = DEFAULT_MAX_PITCH; #endif #ifndef HTKCOMPILE if (argc < 2) { ReportUsage(); exit(1); } if (Scan_flag(argc, argv, "-o") == -1) { fprintf(stderr,"\n\nsrcfn.ptm - contains time (in seconds) against pitch (in Hz)\nsrcfn.ppd - contains length of voiced pitch period (in samples) against\n start position of pitch period (in samples)\n\n"); exit(1); } if ((fwav = Std_fopen(argv[argc - 1], "r")) == NULL) { fprintf(stderr,"Cannot open input file %s\n",argv[argc - 1]); exit(1); } /* gets the stem from the input filename and creates the output filenames from this, if not otherwise specified */ len_stem = strcspn(argv[argc - 1],"."); if ((stem = (char *)calloc((len_stem+1),sizeof(char))) == NULL) { fprintf(stderr,"Cannot create stem character array"); exit(1); } *strncpy(stem,argv[argc - 1],len_stem); if ((stem_ptmfn = (char *)calloc((len_stem+5),sizeof(char))) == NULL) { fprintf(stderr,"Cannot create stem_ptmfn character array"); exit(1); } if ((stem_ppdfn = (char *)calloc((len_stem+5),sizeof(char))) == NULL) { fprintf(stderr,"Cannot create stem_ppdfn character array"); exit(1); } sprintf(stem_ptmfn,"%s.ptm",stem); sprintf(stem_ppdfn,"%s.ppd",stem); ptmfn = Scan_string(argc, argv, "-t", stem_ptmfn); ppdfn = Scan_string(argc, argv, "-p", stem_ppdfn); if ((ptm = Std_fopen(ptmfn, "w")) == NULL) { fprintf(stderr,"Cannot open output file %s\n",ptmfn); exit(1); } if ((ppd = Std_fopen(ppdfn, "w")) == NULL) { fprintf(stderr,"Cannot open output file %s\n",ppdfn); exit(1); } headersize = Scan_int(argc, argv, "-h", DEFAULT_HEADER_SIZE); sampling_rate= Scan_int(argc, argv, "-s", DEFAULT_SAMPLING_RATE); min_pitch= Scan_int(argc, argv, "-n", DEFAULT_MIN_PITCH); max_pitch= Scan_int(argc, argv, "-x", DEFAULT_MAX_PITCH); byte_swap= Scan_flag(argc, argv, "-b"); /* print out the options being used */ fprintf(stderr,"Waveform input filename : %s\n",argv[argc - 1]); fprintf(stderr,"Pitch against time output file : %s\n",ptmfn); fprintf(stderr,"Pitch period output file : %s\n",ppdfn); fprintf(stderr,"Headersize : %d\n",headersize); fprintf(stderr,"Sampling_rate : %d\n",sampling_rate); fprintf(stderr,"Min_pitch : %d\n",min_pitch); fprintf(stderr,"Max_pitch : %d\n",max_pitch); if (byte_swap == -1) fprintf(stderr,"Byte swapping data\n"); for (i = 0; i < NUM_FRAMES; i++) targ_pitch[i] = choice1[i] = choice2[i] = 0; /* load in the speech file */ Panic_fseek(fwav, 0, 2); filesize = (ftell(fwav) - headersize) / sizeof(short); Panic_fseek(fwav, headersize, 0); speech = Panic_short_array(filesize); Panic_fread(speech, sizeof(*speech), filesize, fwav); /* byte swap if nesscessary */ if (byte_swap == -1) { for (i = 0; i < filesize; i++) Swap(&speech[i]); } #endif #ifdef HTKCOMPILE InitShell(argc,argv); InitMath(FALSE); if (NumArgs()==0) ReportUsage(); while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(1,"Bad switch %s; must be single letter",s); switch(s[0]){ case 'o': fprintf(stderr,"\n\nsrcfn.ptm - contains time (in seconds) against pitch (in Hz)\nsrcfn.ppd - contains length of voiced pitch period (in samples) against\n start position of pitch period (in samples)\n\n"); exit(1); break; case 'n': min_pitch = GetIntArg(); break; case 'x': max_pitch = GetIntArg(); break; case 't': tempptmfn = GetStrArg(); break; case 'p': tempppdfn = GetStrArg(); break; case 'F': if (NextArg() != STRINGARG) HError(1,"Data File format expected"); if((ff = Str2Format(GetStrArg())) == ALIEN) HError(0,"Warning ALIEN Data file format set"); SetFormat(ff); break; default: HError(1,"Unknown switch %s",s); } } if (NextArg()!=STRINGARG) HError(1,"Waveform file name expected"); wavfn = GetStrArg(); /* gets the stem from the input filename and creates the output filenames from this, if not otherwise specified */ len_stem = strcspn(wavfn,"."); if ((stem = (char *)calloc((len_stem+1),sizeof(char))) == NULL) { fprintf(stderr,"Cannot create stem character array"); exit(1); } *strncpy(stem,wavfn,len_stem); if (tempptmfn == NULL) { if ((ptmfn = (char *)calloc((len_stem+5),sizeof(char))) == NULL) { fprintf(stderr,"Cannot create ptmfn character array"); exit(1); } sprintf(ptmfn,"%s.ptm",stem); } else ptmfn = tempptmfn; if (tempppdfn == NULL) { if ((ppdfn = (char *)calloc((len_stem+5),sizeof(char))) == NULL) { fprintf(stderr,"Cannot create ppdfn character array"); exit(1); } sprintf(ppdfn,"%s.ppd",stem); } else ppdfn = tempppdfn; if ((ptm = fopen(ptmfn, "w")) == NULL) { fprintf(stderr,"Cannot open output file %s\n",ptmfn); exit(1); } if ((ppd = fopen(ppdfn, "w")) == NULL) { fprintf(stderr,"Cannot open output file %s\n",ppdfn); exit(1); } /* print out the options being used */ fprintf(stderr,"Waveform input filename : %s\n",wavfn); fprintf(stderr,"Pitch against time output file : %s\n",ptmfn); fprintf(stderr,"Pitch period output file : %s\n",ppdfn); fprintf(stderr,"Min_pitch : %d\n",min_pitch); fprintf(stderr,"Max_pitch : %d\n",max_pitch); SpOpen(wavfn,&src); if (src.sampKind != WAVEFORM) HError(99,"Waveform file expected"); sampling_rate = 10000000/src.sampPeriod; filesize = src.nSamples; for (i = 0; i < NUM_FRAMES; i++) targ_pitch[i] = choice1[i] = choice2[i] = 0; /* load in the speech file */ if ((speech = (short *)calloc(filesize,sizeof(short))) == NULL) { fprintf(stderr,"Cannot create speech array"); exit(1); } for (i = 0; i < filesize; i++) GetSample(&src,i,&speech[i]); #endif /* The rest is independent of the HTKCOMPILE flag */ for (i = 0; i < filesize; i++) total += speech[i]; mean = (total * 1.0) / filesize; for (i = 0; i < filesize; i++) { speech[i] -= mean; if (speech[i] > max_amp) max_amp = speech[i]; if (speech[i] < min_amp) min_amp = speech[i]; } for (i = 0; i < filesize; i++) global_rms += (speech[i] * speech[i]); global_rms = sqrt(global_rms/(filesize * 1.0)); sample_interval = 1.0 / (float) sampling_rate; ten_ms = (int) (1.0 * sampling_rate) / 100; min_range = (int) ((1.0/max_pitch)/sample_interval); max_range = (int) ((1.0/min_pitch)/sample_interval); if ((rho = (float *)calloc(max_range + 1,sizeof(float))) == NULL) { fprintf(stderr,"Cannot create rho array"); exit(1); } if ((peak_set = (short *)calloc(MAX_CANDS,sizeof(short))) == NULL) { fprintf(stderr,"Cannot create peak_set array"); exit(1); } x_start = 0; while (x_start + 2 * max_range < filesize) { for (i = 0; i <= max_range; i++) rho[i] = 0.0; eng = find_sq_eng(speech, x_start, max_range - min_range + 1); if (eng >= 0.05 * global_rms) { for (i = min_range; i <= max_range; i++) { rho[i] = calculate_rho_first(speech, i, x_start, min_range); } } num_peaks = identify_peak_candidates(rho, min_range, max_range, peak_set, x_start, verbose, speech, global_rms); if (num_peaks > MAX_CANDS) { sprintf(message, "MAX_CANDS not big enough for %d\n", num_peaks); help(message); } peak_ct[frame_ct] = num_peaks + 1; for (i = 0; i < num_peaks; i++) { pitch[frame_ct][i+1] = peak_set[i]; corr[frame_ct][i+1] = rho[peak_set[i]]; } frame_ct++; if (frame_ct >= NUM_FRAMES) { sprintf(message, "NUM_FRAMES not big enough for %d\n", frame_ct); help(message); } x_start += ten_ms; } /* The stuff in finp didnt seem to be very useful - so i got rid of that output file - R.E.D (23:8:93) fprintf(finp, "%d\n", frame_ct); for (i = 0; i < frame_ct; i++) { fprintf(finp, "%d ", peak_ct[i]); for (j = 1; j < peak_ct[i]; j++) fprintf(finp, "%d %f\n", pitch[i][j], corr[i][j]); } fclose(finp); */ /**** fscanf(finp, "%d", &frame_ct); for (i = 0; i < frame_ct; i++) { fscanf(finp, "%d", peak_ct + i); for (j = 1; j < peak_ct[i]; j++) fscanf(finp, "%d %f", &(pitch[i][j]), &(corr[i][j])); } ****/ done = 0; counter = 0; while (! done) { /* get a group */ while ((counter < frame_ct) && (peak_ct[counter] == 1)) counter++; if (counter >= frame_ct) done = 1; if (! done) { start_frame = counter; keep_going = 1; while (keep_going) { /* hack so we don't miss singulars */ while ((counter < frame_ct) && (peak_ct[counter] > 1)) counter++; if ((counter+1 < frame_ct) && (peak_ct[counter+1] > 1) && (counter+2 < frame_ct) && (peak_ct[counter+2] > 1)) counter = counter + 1; else { end_frame = counter-1; keep_going = 0; } } /* got a group */ if (end_frame > start_frame) { make_possible(start_frame, end_frame, pitch, possible, peak_ct, corr, frame_ct); cand_ct = 0; for (j = 1; j < peak_ct[start_frame]; j++) { warp(start_frame, end_frame, pitch, corr, peak_ct, j, possible, best_path, best_cost, &cand_ct, best_no_bad); } if (cand_ct >= MAX_CANDS) { sprintf(message, "cand_ct %d too big for MAX_CANDS", cand_ct); help(message); } /* Choosing which string to use */ min = min_bad = VBIG; for (i = 0; i < cand_ct; i++) { if (best_cost[i] < min) { min = best_cost[i]; at = i; } if (best_no_bad[i] < min_bad) { min_bad = best_no_bad[i]; at_bad = i; } } if (at == at_bad) { assign_targ(targ_pitch, start_frame, end_frame, best_path, at, pitch); } else { /* lets look at the options */ if ((num_shared = share(at, at_bad, pitch, start_frame, end_frame, best_path))) { num_bad = 0; for (i = start_frame; i <= end_frame; i++) if ((corr[i][best_path[at_bad][i-start_frame+1]] == PENALTY) && (pitch[i][best_path[at_bad][i-start_frame+1]] != pitch[i][best_path[at][i-start_frame+1]])) num_bad++; if ((end_frame-start_frame+1 == num_shared + num_bad) || (num_bad > round((end_frame-start_frame+1.0-num_shared)/2.0))) { /* keep the original */ assign_targ(targ_pitch, start_frame, end_frame, best_path, at, pitch); } else { /* figure out which one to use by calculating average over non-penalty portions */ ave1 = ave2 = 0.0; ct1 = ct2 = 0; for (i = start_frame; i <= end_frame; i++) { if (corr[i][best_path[at][i-start_frame+1]] != PENALTY) { ave1 += (1.0 - corr[i][best_path[at][i-start_frame+1]]); ct1++; } if (corr[i][best_path[at_bad][i-start_frame+1]] != PENALTY) { ave2 += (1.0 - corr[i][best_path[at_bad][i-start_frame+1]]); ct2++; } } ave1 /= ct1; ave2 /= ct2; if (ave1 < ave2) { /* use at */ assign_targ(targ_pitch, start_frame, end_frame, best_path, at, pitch); } else { /* use at_bad */ assign_targ(targ_pitch, start_frame, end_frame, best_path, at_bad, pitch); } } } else { /* they dont share a common path - so lets check if one is much better than the other, and if not, lets delay the choice until we have analysed the entire sentence */ ave1 = ave2 = 0.0; ct1 = ct2 = 0; for (i = start_frame; i <= end_frame; i++) { if (corr[i][best_path[at][i-start_frame+1]] != PENALTY) { ave1 += 1.0 - corr[i][best_path[at][i-start_frame+1]]; ct1++; } if (corr[i][best_path[at_bad][i-start_frame+1]] != PENALTY) { ave2 += 1.0 - corr[i][best_path[at_bad][i-start_frame+1]]; ct2++; } } ave1 /= ct1; ave2 /= ct2; if (ave1 < ave2 - 0.03) /* use at */ assign_targ(targ_pitch, start_frame, end_frame, best_path, at, pitch); else if (ave2 < ave1 - 0.03) /* use at_bad */ assign_targ(targ_pitch, start_frame, end_frame, best_path, at_bad, pitch); else { /* save these 2 choices for later resolution */ assign_targ(choice1, start_frame, end_frame, best_path, at, pitch); assign_targ(choice2, start_frame, end_frame, best_path, at_bad, pitch); } } } } } } /* now resolve any choices */ need_fix = 0; ave_pit_len = ave_ct = 0; for (i = 0; i < frame_ct; i++) { if (targ_pitch[i] > 0) { ave_pit_len += targ_pitch[i]; ave_ct++; } if (choice1[i] > 0) need_fix = 1; } if (ave_ct) ave_pit_len /= ave_ct; else { if (male) ave_pit_len = 125; /* SUSPECT HARD NUMBERING HERE **********/ else ave_pit_len = 71; /* But its not used i think - R.E.D */ printf("average pitch length being set to fixed number\nwhich i think ought to be scaled by the sampling frequency - but isnt. - R.E.D"); } if (need_fix) { done = counter = 0; while (! done) { while ((counter < frame_ct) && (choice1[counter] == 0)) counter++; if (counter >= frame_ct) done = 1; if (! done) { start_frame = counter; while ((counter < frame_ct) && (choice1[counter] > 0)) counter++; end_frame = counter-1; /* get the averages and choose the one closest to ave_pit_len */ ave1 = ave2 = 0.0; ct1 = 0; for (i = start_frame; i <= end_frame; i++) { ave1 += choice1[i]; ave2 += choice2[i]; ct1++; } ave1 /= ct1; ave2 /= ct1; if (absof(ave1 - ave_pit_len) < absof(ave2 - ave_pit_len)) { for (i = start_frame; i <= end_frame; i++) targ_pitch[i] = choice1[i]; } else { for (i = start_frame; i <= end_frame; i++) targ_pitch[i] = choice2[i]; } } } } done = counter = 0; while (! done) { while ((counter < frame_ct) && (targ_pitch[counter] == 0)) counter++; if (counter >= frame_ct) done = 1; if (! done) { start_frame = counter; while ((counter < frame_ct) && (targ_pitch[counter] > 0)) counter++; end_frame = counter-1; x_start = start_frame * ten_ms; low_range = (int) ((1.0-MAX_SEP) * targ_pitch[start_frame]); if (low_range < min_range) low_range = min_range; high_range = (int) ((1.0+MAX_SEP) * targ_pitch[start_frame]); if (high_range > max_range) high_range = max_range; cur_end = x_start; end_pt = (end_frame * ten_ms) + (2 * targ_pitch[end_frame]); while (cur_end < end_pt) { for (i = 0; i <= max_range; i++) rho[i] = 0.0; best = 0.0; for (i = low_range; i <= high_range; i++) { rho[i] = calculate_rho_first(speech, i, x_start, low_range); if (rho[i] > best) { best = rho[i]; at2 = i; } } fprintf(ppd, "%d %d\n", at2, x_start); x_start += at2; index = 1 + x_start/ten_ms; if (index < start_frame) index = start_frame; if (index > end_frame) index = end_frame; target = targ_pitch[index]; low_range = (int) ((1.0-MAX_SEP) * target); if (low_range < min_range) low_range = min_range; high_range = (int) ((1.0+MAX_SEP) * target); if (high_range > max_range) high_range = max_range; cur_end = x_start + at2; } } } fclose(ppd); /* now reopen the output file written so far for reading, and from this calculate a pitch file of time against pitch. Resolution = 1 ms R.E.D 24:8:93 */ if ((ppd = fopen(ppdfn, "r")) == NULL) { fprintf(stderr,"Cannot reopen output file %s\n",ppdfn); exit(1); } time = 0.0; mstime = 0; out_pitch = 0.0; end_of_file = 0; last_length = 0; last_start = 0; fscanf(ppd, "%d", &length); fscanf(ppd, "%d", &start); start_time = start*1.0/sampling_rate; while ( 1 == 1 ) { while (start_time < time) { last_length = length; last_start = start; if (fscanf(ppd, "%d", &length) == EOF) { end_of_file = 1; break; } fscanf(ppd, "%d", &start); start_time = start*1.0/sampling_rate; } if (end_of_file == 1) break; /* if voiced then interpolate for the pitch */ if (start == last_start + last_length) out_pitch = ( (sampling_rate*time - last_start)/((start-last_start)*length) +(start - sampling_rate*time)/((start-last_start)*last_length)) *sampling_rate; else out_pitch = 0.0; fprintf(ptm,"%f %f\n",time,out_pitch); mstime++; time = mstime/1000.0; } /* if there's an unvoiced/silent bit at the end then output zeros to the output file */ if (filesize > (start + 3*length) ) { while (sampling_rate*time < filesize) { fprintf(ptm,"%f %f\n",time,0.0); mstime++; time = mstime/1000.0; } } fclose(ppd); fclose(ptm); fclose(fwav); }
int pk_gencert(int argc, char *argv[]) { int rv; int opt; extern int optind_av; extern char *optarg_av; KMF_KEYSTORE_TYPE kstype = 0; char *subject = NULL; char *tokenname = NULL; char *dir = NULL; char *prefix = NULL; char *keytype = PK_DEFAULT_KEYTYPE; int keylen = PK_DEFAULT_KEYLENGTH; char *trust = NULL; char *lifetime = NULL; char *certlabel = NULL; char *outcert = NULL; char *outkey = NULL; char *format = NULL; char *serstr = NULL; char *altname = NULL; char *keyusagestr = NULL; char *ekustr = NULL; char *hashname = NULL; KMF_GENERALNAMECHOICES alttype = 0; KMF_BIGINT serial = { NULL, 0 }; uint32_t ltime; KMF_HANDLE_T kmfhandle = NULL; KMF_ENCODE_FORMAT fmt = KMF_FORMAT_ASN1; KMF_KEY_ALG keyAlg = KMF_RSA; KMF_ALGORITHM_INDEX sigAlg = KMF_ALGID_SHA1WithRSA; boolean_t interactive = B_FALSE; char *subname = NULL; KMF_CREDENTIAL tokencred = { NULL, 0 }; uint16_t kubits = 0; int altcrit = 0, kucrit = 0; EKU_LIST *ekulist = NULL; KMF_OID *curveoid = NULL; /* ECC */ KMF_OID *hashoid = NULL; int y_flag = 0; while ((opt = getopt_av(argc, argv, "ik:(keystore)s:(subject)n:(nickname)A:(altname)" "T:(token)d:(dir)p:(prefix)t:(keytype)y:(keylen)" "r:(trust)L:(lifetime)l:(label)c:(outcert)e:(eku)" "K:(outkey)S:(serial)F:(format)u:(keyusage)C:(curve)" "E(listcurves)h:(hash)")) != EOF) { if (opt != 'i' && opt != 'E' && EMPTYSTRING(optarg_av)) return (PK_ERR_USAGE); switch (opt) { case 'A': altname = optarg_av; break; case 'i': if (interactive || subject) return (PK_ERR_USAGE); else interactive = B_TRUE; break; case 'k': kstype = KS2Int(optarg_av); if (kstype == 0) return (PK_ERR_USAGE); break; case 's': if (interactive || subject) return (PK_ERR_USAGE); else subject = optarg_av; break; case 'l': case 'n': if (certlabel) return (PK_ERR_USAGE); certlabel = optarg_av; break; case 'T': if (tokenname) return (PK_ERR_USAGE); tokenname = optarg_av; break; case 'd': if (dir) return (PK_ERR_USAGE); dir = optarg_av; break; case 'p': if (prefix) return (PK_ERR_USAGE); prefix = optarg_av; break; case 't': keytype = optarg_av; break; case 'u': keyusagestr = optarg_av; break; case 'y': if (sscanf(optarg_av, "%d", &keylen) != 1) { cryptoerror(LOG_STDERR, gettext("key length must be" "a numeric value (%s)\n"), optarg_av); return (PK_ERR_USAGE); } y_flag++; break; case 'r': if (trust) return (PK_ERR_USAGE); trust = optarg_av; break; case 'L': if (lifetime) return (PK_ERR_USAGE); lifetime = optarg_av; break; case 'c': if (outcert) return (PK_ERR_USAGE); outcert = optarg_av; break; case 'K': if (outkey) return (PK_ERR_USAGE); outkey = optarg_av; break; case 'S': serstr = optarg_av; break; case 'F': if (format) return (PK_ERR_USAGE); format = optarg_av; break; case 'e': ekustr = optarg_av; break; case 'C': curveoid = ecc_name_to_oid(optarg_av); if (curveoid == NULL) { cryptoerror(LOG_STDERR, gettext("Unrecognized ECC " "curve.\n")); return (PK_ERR_USAGE); } break; case 'E': /* * This argument is only to be used * by itself, no other options should * be present. */ if (argc != 2) { cryptoerror(LOG_STDERR, gettext("listcurves has no other " "options.\n")); return (PK_ERR_USAGE); } show_ecc_curves(); return (0); case 'h': hashname = optarg_av; hashoid = ecc_name_to_oid(optarg_av); if (hashoid == NULL) { cryptoerror(LOG_STDERR, gettext("Unrecognized hash.\n")); return (PK_ERR_USAGE); } break; default: return (PK_ERR_USAGE); } } /* No additional args allowed. */ argc -= optind_av; argv += optind_av; if (argc) { return (PK_ERR_USAGE); } if ((rv = kmf_initialize(&kmfhandle, NULL, NULL)) != KMF_OK) { cryptoerror(LOG_STDERR, gettext("Error initializing KMF\n")); return (PK_ERR_USAGE); } /* Assume keystore = PKCS#11 if not specified. */ if (kstype == 0) kstype = KMF_KEYSTORE_PK11TOKEN; if ((kstype == KMF_KEYSTORE_NSS || kstype == KMF_KEYSTORE_PK11TOKEN)) { if (interactive && EMPTYSTRING(certlabel)) { (void) get_certlabel(&certlabel); } /* It better not be empty now */ if (EMPTYSTRING(certlabel)) { cryptoerror(LOG_STDERR, gettext("A label must be " "specified to create a self-signed certificate." "\n")); return (PK_ERR_USAGE); } } else if (kstype == KMF_KEYSTORE_OPENSSL && EMPTYSTRING(outcert)) { cryptoerror(LOG_STDERR, gettext("A certificate filename must " "be specified to create a self-signed certificate.\n")); return (PK_ERR_USAGE); } DIR_OPTION_CHECK(kstype, dir); if (format && (fmt = Str2Format(format)) == KMF_FORMAT_UNDEF) { cryptoerror(LOG_STDERR, gettext("Error parsing format string (%s).\n"), format); return (PK_ERR_USAGE); } if (Str2Lifetime(lifetime, <ime) != 0) { cryptoerror(LOG_STDERR, gettext("Error parsing lifetime string\n")); return (PK_ERR_USAGE); } if (Str2KeyType(keytype, hashoid, &keyAlg, &sigAlg) != 0) { cryptoerror(LOG_STDERR, gettext("Unsupported key/hash combination (%s/%s).\n"), keytype, (hashname ? hashname : "none")); return (PK_ERR_USAGE); } if (curveoid != NULL && keyAlg != KMF_ECDSA) { cryptoerror(LOG_STDERR, gettext("EC curves are only " "valid for EC keytypes.\n")); return (PK_ERR_USAGE); } if (keyAlg == KMF_ECDSA && curveoid == NULL) { cryptoerror(LOG_STDERR, gettext("A curve must be " "specifed when using EC keys.\n")); return (PK_ERR_USAGE); } /* Adjust default keylength for NSS and DSA */ if (keyAlg == KMF_DSA && !y_flag && kstype == KMF_KEYSTORE_NSS) keylen = 1024; /* * Check the subject name. * If interactive is true, get it now interactively. */ if (interactive) { subname = NULL; if (get_subname(&subname) != KMF_OK || subname == NULL) { cryptoerror(LOG_STDERR, gettext("Failed to get the " "subject name interactively.\n")); return (PK_ERR_USAGE); } if (serstr == NULL) { (void) get_serial(&serstr); } } else { if (EMPTYSTRING(subject)) { cryptoerror(LOG_STDERR, gettext("A subject name or " "-i must be specified to create a self-signed " "certificate.\n")); return (PK_ERR_USAGE); } else { subname = strdup(subject); if (subname == NULL) { cryptoerror(LOG_STDERR, gettext("Out of memory.\n")); return (PK_ERR_SYSTEM); } } } if (serstr == NULL) { (void) fprintf(stderr, gettext("A serial number " "must be specified as a hex number when creating" " a self-signed certificate " "(ex: serial=0x0102030405feedface)\n")); rv = PK_ERR_USAGE; goto end; } else { uchar_t *bytes = NULL; size_t bytelen; rv = kmf_hexstr_to_bytes((uchar_t *)serstr, &bytes, &bytelen); if (rv != KMF_OK || bytes == NULL) { (void) fprintf(stderr, gettext("serial number " "must be specified as a hex number " "(ex: 0x0102030405ffeeddee)\n")); rv = PK_ERR_USAGE; goto end; } serial.val = bytes; serial.len = bytelen; } if (altname != NULL) { rv = verify_altname(altname, &alttype, &altcrit); if (rv != KMF_OK) { (void) fprintf(stderr, gettext("Subject AltName " "must be specified as a name=value pair. " "See the man page for details.\n")); rv = PK_ERR_USAGE; goto end; } else { /* advance the altname past the '=' sign */ char *p = strchr(altname, '='); if (p != NULL) altname = p + 1; } } if (keyusagestr != NULL) { rv = verify_keyusage(keyusagestr, &kubits, &kucrit); if (rv != KMF_OK) { (void) fprintf(stderr, gettext("KeyUsage " "must be specified as a comma-separated list. " "See the man page for details.\n")); rv = PK_ERR_USAGE; goto end; } } if (ekustr != NULL) { rv = verify_ekunames(ekustr, &ekulist); if (rv != KMF_OK) { (void) fprintf(stderr, gettext("EKUs must " "be specified as a comma-separated list. " "See the man page for details.\n")); rv = PK_ERR_USAGE; goto end; } } if (keyAlg == KMF_ECDSA && kstype == KMF_KEYSTORE_OPENSSL) { (void) fprintf(stderr, gettext("ECC certificates are" "only supported with the pkcs11 and nss keystores\n")); rv = PK_ERR_USAGE; goto end; } if (kstype == KMF_KEYSTORE_NSS || kstype == KMF_KEYSTORE_PK11TOKEN) { if (tokenname == NULL || !strlen(tokenname)) { if (kstype == KMF_KEYSTORE_NSS) { tokenname = "internal"; } else { tokenname = PK_DEFAULT_PK11TOKEN; } } (void) get_token_password(kstype, tokenname, &tokencred); } if (kstype == KMF_KEYSTORE_NSS) { if (dir == NULL) dir = PK_DEFAULT_DIRECTORY; rv = gencert_nss(kmfhandle, tokenname, subname, altname, alttype, altcrit, certlabel, dir, prefix, keyAlg, sigAlg, keylen, trust, ltime, &serial, kubits, kucrit, &tokencred, ekulist, curveoid); } else if (kstype == KMF_KEYSTORE_PK11TOKEN) { rv = gencert_pkcs11(kmfhandle, tokenname, subname, altname, alttype, altcrit, certlabel, keyAlg, sigAlg, keylen, ltime, &serial, kubits, kucrit, &tokencred, ekulist, curveoid); } else if (kstype == KMF_KEYSTORE_OPENSSL) { rv = gencert_file(kmfhandle, keyAlg, sigAlg, keylen, fmt, ltime, subname, altname, alttype, altcrit, &serial, kubits, kucrit, outcert, outkey, ekulist); } if (rv != KMF_OK) display_error(kmfhandle, rv, gettext("Error creating certificate and keypair")); end: if (ekulist != NULL) free_eku_list(ekulist); if (subname) free(subname); if (tokencred.cred != NULL) free(tokencred.cred); if (serial.val != NULL) free(serial.val); (void) kmf_finalize(kmfhandle); return (rv); }
int main(int argc, char *argv[]) { char *s; void Initialise(void); void DoRecognition(void); void DoAlignment(void); if(InitShell(argc,argv,hvite_version,hvite_vc_id)<SUCCESS) HError(3200,"HVite: InitShell failed"); InitMem(); InitLabel(); InitMath(); InitSigP(); InitWave(); InitAudio(); InitVQ(); InitModel(); if(InitParm()<SUCCESS) HError(3200,"HVite: InitParm failed"); InitDict(); InitNet(); InitRec(); InitUtil(); InitAdapt(&xfInfo); InitMap(); if (!InfoPrinted() && NumArgs() == 0) ReportUsage(); if (NumArgs() == 0) Exit(0); SetConfParms(); CreateHeap(&modelHeap, "Model heap", MSTAK, 1, 0.0, 100000, 800000 ); CreateHMMSet(&hset,&modelHeap,TRUE); while (NextArg() == SWITCHARG) { s = GetSwtArg(); if (strlen(s)!=1) HError(3219,"HVite: Bad switch %s; must be single letter",s); switch(s[0]){ case 'a': loadLabels=TRUE; break; case 'b': if (NextArg()!=STRINGARG) HError(3219,"HVite: Utterance boundary word expected"); bndId = GetLabId(GetStrArg(),TRUE); break; case 'c': tmBeam = GetChkedFlt(0.0,1000.0,s); break; case 'd': if (NextArg()!=STRINGARG) HError(3219,"HVite: HMM definition directory expected"); hmmDir = GetStrArg(); break; case 'e': saveAudioOut=TRUE; break; case 'f': states=TRUE; break; case 'g': replay=TRUE; break; case 'i': if (NextArg()!=STRINGARG) HError(3219,"HVite: Output MLF file name expected"); /* if(SaveToMasterfile(GetStrArg())<SUCCESS) HError(3214,"HCopy: Cannot write to MLF"); */ SaveToMasterfile(GetStrArg()); break; case 'k': xfInfo.useInXForm = TRUE; break; case 'j': if (NextArg()!=INTARG) HError(3219,"HVite: No. of files per online adaptation step expected"); update = GetChkedInt(1,256,s); break; case 'l': if (NextArg()!=STRINGARG) HError(3219,"HVite: Label file directory expected"); labDir = GetStrArg(); break; case 'm': models=TRUE; break; case 'n': nToks = GetChkedInt(2,MAX_TOKS,s); if (NextArg()==FLOATARG || NextArg()==INTARG) nTrans = GetChkedInt(1,10000,s); else nTrans = 1; break; case 'o': if (NextArg()!=STRINGARG) HError(3219,"HVite: Output label format expected"); labForm = GetStrArg(); break; case 'p': wordPen = GetChkedFlt(-1000.0,1000.0,s); break; case 'q': if (NextArg()!=STRINGARG) HError(3219,"HVite: Output lattice format expected"); latForm = GetStrArg(); break; case 'r': prScale = GetChkedFlt(0.0,1000.0,s); break; case 's': lmScale = GetChkedFlt(0.0,1000.0,s); break; case 't': genBeam = GetChkedFlt(0,1.0E20,s); if (genBeam == 0.0) genBeam = -LZERO; if (NextArg()==FLOATARG || NextArg()==INTARG) { genBeamInc = GetChkedFlt(0.0,1.0E20,s); genBeamLim = GetChkedFlt(0.0,1.0E20,s); if (genBeamLim < (genBeam + genBeamInc)) { genBeamLim = genBeam; genBeamInc = 0.0; } } else { genBeamInc = 0.0; genBeamLim = genBeam; } break; case 'w': if (NextArg()!=STRINGARG) loadNetworks=TRUE; else { wdNetFn = GetStrArg(); if (strlen(wdNetFn)==0) { wdNetFn=NULL; loadNetworks=TRUE; } } break; case 'u': maxActive = GetChkedInt(0,100000,s); break; case 'v': wordBeam = GetChkedFlt(0,1.0E20,s); if (wordBeam == 0.0) wordBeam = -LZERO; break; case 'x': if (NextArg()!=STRINGARG) HError(3219,"HVite: HMM file extension expected"); hmmExt = GetStrArg(); break; case 'y': if (NextArg()!=STRINGARG) HError(3219,"HVite: Output label file extension expected"); labExt = GetStrArg(); break; case 'z': if (NextArg()!=STRINGARG) HError(3219,"HVite: Lattice output file extension expected"); latExt = GetStrArg(); break; case 'F': if (NextArg() != STRINGARG) HError(3219,"HVite: Data File format expected"); if((dfmt = Str2Format(GetStrArg())) == ALIEN) HError(-3289,"HVite: Warning ALIEN Input file format set"); break; case 'G': if (NextArg() != STRINGARG) HError(3219,"HVite: Source Label File format expected"); if((ifmt = Str2Format(GetStrArg())) == ALIEN) HError(-3289,"HVite: Warning ALIEN Input file format set"); break; case 'H': if (NextArg() != STRINGARG) HError(3219,"HVite: MMF File name expected"); AddMMF(&hset,GetStrArg()); break; case 'I': if (NextArg() != STRINGARG) HError(3219,"HVite: MLF file name expected"); LoadMasterFile(GetStrArg()); break; case 'L': if (NextArg()!=STRINGARG) HError(3219,"HVite: Label/network file directory expected"); labInDir = GetStrArg(); break; case 'P': if (NextArg() != STRINGARG) HError(3219,"HVite: Target Label File format expected"); if((ofmt = Str2Format(GetStrArg())) == ALIEN) HError(-3289,"HVite: Warning ALIEN Label output file format set"); break; case 'B': saveBinary = TRUE; break; case 'T': trace = GetChkedInt(0,511,s); break; case 'X': if (NextArg()!=STRINGARG) HError(3219,"HVite: Input label/network file extension expected"); labInExt = GetStrArg(); break; case 'h': if (NextArg()!=STRINGARG) HError(1,"Speaker name pattern expected"); xfInfo.outSpkrPat = GetStrArg(); if (NextArg()==STRINGARG) { xfInfo.inSpkrPat = GetStrArg(); if (NextArg()==STRINGARG) xfInfo.paSpkrPat = GetStrArg(); } if (NextArg() != SWITCHARG) HError(2319,"HERest: cannot have -h as the last option"); break; case 'E': if (NextArg()!=STRINGARG) HError(2319,"HERest: parent transform directory expected"); xfInfo.usePaXForm = TRUE; xfInfo.paXFormDir = GetStrArg(); if (NextArg()==STRINGARG) xfInfo.paXFormExt = GetStrArg(); if (NextArg() != SWITCHARG) HError(2319,"HVite: cannot have -E as the last option"); break; case 'J': if (NextArg()!=STRINGARG) HError(2319,"HERest: input transform directory expected"); AddInXFormDir(&hset,GetStrArg()); if (NextArg()==STRINGARG) xfInfo.inXFormExt = GetStrArg(); if (NextArg() != SWITCHARG) HError(2319,"HVite: cannot have -J as the last option"); break; case 'K': if (NextArg()!=STRINGARG) HError(2319,"HVite: output transform directory expected"); xfInfo.outXFormDir = GetStrArg(); xfInfo.useOutXForm = TRUE; if (NextArg()==STRINGARG) xfInfo.outXFormExt = GetStrArg(); if (NextArg() != SWITCHARG) HError(2319,"HVite: cannot have -K as the last option"); break; default: HError(3219,"HVite: Unknown switch %s",s); } } if (NextArg()!=STRINGARG) HError(3219,"HVite: Dictionary file name expected"); dictFn = GetStrArg(); if (NextArg()!=STRINGARG) HError(3219,"HVite: HMM list file name expected"); hmmListFn = GetStrArg(); #ifndef PHNALG if ((states || models) && nToks>1) HError(3230,"HVite: Alignment using multiple tokens is not supported"); #endif if (NumArgs()==0 && wdNetFn==NULL) HError(3230,"HVite: Network must be specified for recognition from audio"); if (loadNetworks && loadLabels) HError(3230,"HVite: Must choose either alignment from network or labels"); if (nToks>1 && latExt==NULL && nTrans==1) HError(-3230,"HVite: Performing nbest recognition with no nbest output"); if (nToks > 1 && latExt != NULL && nTrans > 1) HError(-3230,"HVite: Performing nbest recognition with 1-best and latttices output"); if ((update>0) && (!xfInfo.useOutXForm)) HError(3230,"HVite: Must use -K option with incremental adaptation"); Initialise(); /* Process the data */ if (wdNetFn==NULL) DoAlignment(); else DoRecognition(); /* Free up and we are done */ if (trace & T_MEM) { printf("Memory State on Completion\n"); PrintAllHeapStats(); } DeleteVRecInfo(vri); ResetHeap(&netHeap); FreePSetInfo(psi); UpdateSpkrStats(&hset,&xfInfo, NULL); ResetHeap(®Heap); ResetHeap(&modelHeap); Exit(0); return (0); /* never reached -- make compiler happy */ }