#include

#include

#include

#include

#include

#define TRUE 1

#define FALSE 0

int run_asr(const char* asrfile);

const int BUFFER_NUM = 4096;

const int MAX_KEYWORD_LEN = 4096;

int main(int argc, char* argv[])

{

int ret = MSP_SUCCESS;

const char* asrfile ="lib.wav";

ret = QISRInit("appid=xxxxxx");

if(ret != MSP_SUCCESS)

{

printf("QISRInit with errorCode: %d \n", ret);

return 0;

}

ret = run_asr(asrfile);

QISRFini();

char key = getchar();

return 0;

}

int run_asr(const char* asrfile)

{

int ret = MSP_SUCCESS;

int i = 0;

FILE* fp = NULL;

char buff[BUFFER_NUM];

unsigned int len;

int status = MSP_AUDIO_SAMPLE_CONTINUE, ep_status = -1, rec_status = -1, rslt_status = -1;

//const char* GrammarID="e7eb1a443ee143d5e7ac52cb794810fe";

const char *GrammarID="c66d4eecd37d4fe1c8274a2224b832d5";

const char* param = "rst=json,sub=asr,ssm=1,aue=speex,auf=audio/L16;rate=16000";//注意sub=asr

const char* sess_id = QISRSessionBegin(GrammarID, param, &ret);

if ( MSP_SUCCESS != ret )

{

printf("QISRSessionBegin err %d\n", ret);

return ret;

}

fp = fopen( asrfile , "rb");

if ( NULL == fp )

{

printf("failed to open file,please check the file.\n");

QISRSessionEnd(sess_id, "normal");

return -1;

}

printf("writing audio...\n");

//

int count=0;

//

while ( !feof(fp) )

{

len = (unsigned int)fread(buff, 1, BUFFER_NUM, fp);

feof(fp) ? status = MSP_AUDIO_SAMPLE_LAST : status = MSP_AUDIO_SAMPLE_CONTINUE;

if(status==MSP_AUDIO_SAMPLE_LAST)

printf("MSP_AUDIO_SAMPLE_LAST\n");

if(status==MSP_AUDIO_SAMPLE_CONTINUE)

printf("MSP_AUDIO_SAMPLE_CONTINUE\n");

//

ret = QISRAudioWrite(sess_id, buff, len, status, &ep_status, &rec_status);

if ( ret != MSP_SUCCESS )

{

printf("\nQISRAudioWrite err %d\n", ret);

break;

}

//

printf("%d\n",count++);

//

if ( rec_status == MSP_REC_STATUS_SUCCESS )

{

const char* result = QISRGetResult(sess_id, &rslt_status, 0, &ret);

if (ret != MSP_SUCCESS )

{

printf("error code: %d\n", ret);

break;

}

else if( rslt_status == MSP_REC_STATUS_NO_MATCH )

printf("get result nomatch\n");

else

{

if ( result != NULL )

printf("get result[%d/%d]:len:%d\n %s\n", ret, rslt_status,strlen(result), result);

}

}

printf(".");

}

printf("\n");

if (ret == MSP_SUCCESS)

{

printf("get reuslt~~~~~~~\n");

char asr_result[1024] = "";

unsigned int pos_of_result = 0;

int loop_count = 0;

do

{

const char* result = QISRGetResult(sess_id, &rslt_status, 0, &ret);

if ( ret != 0 )

{

printf("QISRGetResult err %d\n", ret);

break;

}

if( rslt_status == MSP_REC_STATUS_NO_MATCH )

{

printf("get result nomatch\n");

}

else if ( result != NULL )

{

//

FILE*f=fopen("data.txt","wb");

printf("~~~%d\n",strlen(result));

fwrite(result,1,strlen(result),f);

fclose(f);

//

printf("[%d]:get result[%d/%d]: %s\n", (loop_count), ret, rslt_status, result);

strcpy(asr_result+pos_of_result,result);

pos_of_result += (unsigned int)strlen(result);

}

else

{

printf("[%d]:get result[%d/%d]\n",(loop_count), ret, rslt_status);

}

usleep(500000);

} while (rslt_status != MSP_REC_STATUS_COMPLETE && loop_count++ < 30);

if (strcmp(asr_result,"")==0)

{

printf("no result\n");

}

}

QISRSessionEnd(sess_id, NULL);

printf("QISRSessionEnd.\n");

fclose(fp);

return 0;

}

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐