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"staticps_decoder_t*ps;staticcmd_ln_t*config;//sleep for specified msec staticvoidsleep_msec(int32ms){Sleep(ms);}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 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);}staticjmp_bufjbuf;staticvoidsighandler(intsigno){longjmp(jbuf,1);}#define MODELDIR "E:/pocketsphinx/bin/Release"intmain(intargc,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)return1;ps=ps_init(config);if(ps==NULL)return1;signal(SIGINT,&sighandler);if(setjmp(jbuf)==0)recognize_from_microphone();ps_free(ps);return0;}
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")''.