I am programming by pocketsphinx to speech recognize on WIN7 32bit ,the environment is vs Now I meet some problem:
My code:
#include <stdio.h> #include <string.h> #include <time.h> #include <sys/types.h> #include <sys/timeb.h> #include <signal.h> #include <setjmp.h> #include <sphinxbase/err.h> #include <sphinxbase/ad.h> #include <sphinxbase/cont_ad.h> #include "pocketsphinx.h" static ps_decoder_t *ps; static cmd_ln_t *config; //sleep for specified msec static void sleep_msec(int32 ms) { Sleep(ms); } static void recognize_from_microphone() { ad_rec_t *ad; int16 adbuf[4096]; int32 k,ts,rem; char const *hyp; char const *uttid; cont_ad_t *cont; char word[256]; if((ad=ad_open_dev(cmd_ln_str_r(config,"-adcdev"),(int)cmd_ln_float32_r(config,"-samprate")))==NULL) E_FATAL("Failed to 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 such 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 to 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 再见*/ if(hyp) { sscanf(hyp,"%s",word); if(strcmp(word,"再见")==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); } static jmp_buf jbuf; static void sighandler(int signo) { longjmp(jbuf, 1); } #define MODELDIR "E:/pocketsphinx/bin/Release" int main(int argc, char* argv[]) { config=cmd_ln_init(NULL,ps_args(),TRUE, "-hmm",MODELDIR "/tdt_sc_8k", "-lm",MODELDIR "/7646.lm", "-dict",MODELDIR "/7646.dic", NULL); if(config==NULL) return 1; ps=ps_init(config); if(ps==NULL) return 1; signal(SIGINT,&sighandler); if(setjmp(jbuf)==0) recognize_from_microphone(); ps_free(ps); return 0; }
when run comes to error:
INFO: ngram_search_fwdtree.c(326): after: max nonroot chan increased to 144 INFO: ngram_search_fwdtree.c(338): after: 6 root, 16 non-root channels, 7 single -phone words INFO: ngram_search_fwdflat.c(156): fwdflat: min_ef_width = 4, max_sf_win = 25 ERROR: "cmd_ln.c", line 942: Unknown argument: -adcdev Allocating 32 buffers of 2500 samples each READY...
But it can recognize well. I have no ideas about this error ,please tell me how to solve it .
I have no ideas about this error ,please tell me how to solve it .
In this line
if((ad=ad_open_dev(cmd_ln_str_r(config,"-adcdev"),(int)cmd_ln_float32_r(config,"-samprate")))==NUL
You request config option not described in config init:
config=cmd_ln_init(NULL,ps_args(),TRUE,
You need to add ''adcdev'' option description to ps_args array or just use NULL instead of calling ''cmd_ln_str_r(config,"-adcdev")''.
Log in to post a comment.
I am programming by pocketsphinx to speech recognize on WIN7 32bit ,the environment is vs
Now I meet some problem:
My code:
when run comes to error:
But it can recognize well.
I have no ideas about this error ,please tell me how to solve it .
Last edit: Nickolay V. Shmyrev 2013-05-14
In this line
You request config option not described in config init:
You need to add ''adcdev'' option description to ps_args array or just use NULL instead of calling ''cmd_ln_str_r(config,"-adcdev")''.