this is all the code in Qt creator (just a simple test):
#include<QtGui/QApplication>#include"mainwindow.h"#include<stdio.h>#include<string.h>#if!defined(_WIN32_WCE)#include<signal.h>#include<setjmp.h>#endif#ifdefined(WIN32)&&!defined(GNUWINCE)#include<time.h>#else#include<sys/types.h>#include<sys/time.h>#endif#include<sphinxbase/err.h>#include<sphinxbase/ad.h>#include<sphinxbase/cont_ad.h>#include"pocketsphinx.h"//--------------------------------------------------------------------------//--------------------------------------------------------------------------//--------------------------------------------------------------------------staticconstarg_tcont_args_def[]={POCKETSPHINX_OPTIONS,/* Argument file. */{"-argfile",ARG_STRING,NULL,"Argument file giving extra arguments."},{"-adcdev",ARG_STRING,NULL,"Name of audio device to use for input."},{"-infile",ARG_STRING,NULL,"Audio file to transcribe."},{"-time",ARG_BOOLEAN,"no","Print word times in file transcription."},CMDLN_EMPTY_OPTION};staticps_decoder_t*ps;staticcmd_ln_t*config=cmd_ln_init(NULL,ps_args(),TRUE,"-hmm","am/","-lm","beta.DMP","-dict","beta.dic",NULL);staticFILE*rawfd;staticint32ad_file_read(ad_rec_t*ad,int16*buf,int32max){size_tnread;nread=fread(buf,sizeof(int16),max,rawfd);return(nread>0?nread:-1);}staticvoidprint_word_times(int32start){ps_seg_t*iter=ps_seg_iter(ps,NULL);while(iter!=NULL){int32sf,ef,pprob;floatconf;ps_seg_frames(iter,&sf,&ef);pprob=ps_seg_prob(iter,NULL,NULL,NULL);conf=logmath_exp(ps_get_logmath(ps),pprob);printf("%s %f %f %f\n",ps_seg_word(iter),(sf+start)/100.0,(ef+start)/100.0,conf);iter=ps_seg_next(iter);}}/* Sleep for specified msec */staticvoidsleep_msec(int32ms){#if(defined(WIN32)&&!defined(GNUWINCE))||defined(_WIN32_WCE)Sleep(ms);#else/* ------------------- Unix ------------------ */structtimevaltmo;tmo.tv_sec=0;tmo.tv_usec=ms*1000;select(0,NULL,NULL,NULL,&tmo);#endif}/* * Main utterance processing loop: * for (;;) { * wait for start of next utterance; * decode utterance until silence of at least 1 sec observed; * print utterance result; * } */staticvoidrecognize_from_microphone(){ad_rec_t*ad;int16adbuf[4096];int32k,ts,rem;charconst*hyp;charconst*uttid;cont_ad_t*cont;charword[256];if((ad=ad_open_dev(cmd_ln_str_r(config,"-adcdev"),(int)cmd_ln_float32_r(config,"-samprate")))==NULL)E_FATAL("Failed top open audio device\n");/* Initialize continuous listening module */if((cont=cont_ad_init(ad,ad_read))==NULL)E_FATAL("Failed to initialize voice activity detection\n");if(ad_start_rec(ad)<0)E_FATAL("Failed to start recording\n");if(cont_ad_calib(cont)<0)E_FATAL("Failed to calibrate voice activity detection\n");for(;;){/* Indicate listening for next utterance */printf("READY....\n");fflush(stdout);fflush(stderr);/* Wait data for next utterance */while((k=cont_ad_read(cont,adbuf,4096))==0)sleep_msec(100);if(k<0)E_FATAL("Failed to read audio\n");/* * Non-zero amount of data received; start recognition of new utterance. * NULL argument to uttproc_begin_utt => automatic generation of utterance-id. */if(ps_start_utt(ps,NULL)<0)E_FATAL("Failed to start utterance\n");ps_process_raw(ps,adbuf,k,FALSE,FALSE);printf("Listening...\n");fflush(stdout);/* Note timestamp for this first block of data */ts=cont->read_ts;/* Decode utterance until end (marked by a "long" silence, >1sec) */for(;;){/* Read non-silence audio data, if any, from continuous listening module */if((k=cont_ad_read(cont,adbuf,4096))<0)E_FATAL("Failed to read audio\n");if(k==0){/* * No speech data available; check current timestamp with most recent * speech to see if more than 1 sec elapsed. If so, end of utterance. */if((cont->read_ts-ts)>DEFAULT_SAMPLES_PER_SEC)break;}else{/* New speech data received; note current timestamp */ts=cont->read_ts;}/* * Decode whatever data was read above. */rem=ps_process_raw(ps,adbuf,k,FALSE,FALSE);/* If no work to be done, sleep a bit */if((rem==0)&&(k==0))sleep_msec(20);}/* * Utterance ended; flush any accumulated, unprocessed A/D data and stop * listening until current utterance completely decoded */ad_stop_rec(ad);while(ad_read(ad,adbuf,4096)>=0);cont_ad_reset(cont);printf("Stopped listening, please wait...\n");fflush(stdout);/* Finish decoding, obtain and print result */ps_end_utt(ps);hyp=ps_get_hyp(ps,NULL,&uttid);printf("%s: %s\n",uttid,hyp);fflush(stdout);/* Exit if the first word spoken was GOODBYE */if(hyp){sscanf(hyp,"%s",word);if(strcmp(word,"goodbye")==0)break;}/* Resume A/D recording for next utterance */if(ad_start_rec(ad)<0)E_FATAL("Failed to start recording\n");}cont_ad_close(cont);ad_close(ad);}staticjmp_bufjbuf;staticvoidsighandler(intsigno){longjmp(jbuf,1);}//--------------------------------------------------------------------------//--------------------------------------------------------------------------//--------------------------------------------------------------------------intmain(intargc,char*argv[]){QApplicationa(argc,argv);MainWindoww;w.show();charconst*cfg;if(argc==2){config=cmd_ln_parse_file_r(NULL,cont_args_def,argv[1],TRUE);}else{config=cmd_ln_parse_r(NULL,cont_args_def,argc,argv,FALSE);}/* Handle argument file as -argfile. */if(config&&(cfg=cmd_ln_str_r(config,"-argfile"))!=NULL){config=cmd_ln_parse_file_r(config,cont_args_def,cfg,FALSE);}if(config==NULL)return1;ps=ps_init(config);if(ps==NULL)return1;E_INFO("%s COMPILED ON: %s, AT: %s\n\n",argv[0],__DATE__,__TIME__);if(cmd_ln_str_r(config,"-infile")!=NULL){//recognize_from_file();}else{/* Make sure we exit cleanly (needed for profiling among other things) *//* Signals seem to be broken in arm-wince-pe. */#if!defined(GNUWINCE)&&!defined(_WIN32_WCE)&&!defined(__SYMBIAN32__)signal(SIGINT,&sighandler);#endifif(setjmp(jbuf)==0){recognize_from_microphone();}}ps_free(ps);returna.exec();}
Thank you
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi all,
Can you please explain to me what to change in order to make continuous.c work
with my dic and language model and acoustic model?
I did this;
no errors, but it is not using my data...
this is all the code in Qt creator (just a simple test):
Thank you
Your config variable is overriden by the local variable created by the
following lines
You need to edit those lines if you want to modify config, your static
variable has no effect.
Thank you so much sir, it's working now :)