微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于语音识别的微博签到系统

基于语音识别的微博签到系统

时间:11-26 来源:互联网 点击:

LD_WriteReg(0xBD, 0x00);//初始化控制寄存器写入00H;然后启动;为ASR模块;

return 1;

}

第1行,ADC增益设置,或可以理解为麦克风(MIC)音量。可以设置为00H-7FH。建议设置值为40H-55H:值越大代表MIC音量越大,识别启动越敏感,但可能带来更多误识别;值越小代表MIC音量越小,需要近距离说话才能启动识别功能,好处是对远处的干扰语音没有反应。第6行检查LD3320是否为空闲状态,如果为空闲状态,在第7行向0x37寄存器写入0x06,通知DSP开始语音识别。第8行,向寄存器0x1c写入0x0b,表示麦克风输入ADC通道可用。

LD3320中断处理程序(摘至LDChip.c)

voidProcessInt0(void)

{

uint8nAsrResCount=0;

1ucRegVal = LD_ReadReg(0x2B);// 读取中断请求编号寄存器

2LD_WriteReg(0x29,0);// 第2位:FIFO 中断允许,1表示允许;0表示不允许。第4位:同步中断允许,1表示允许;0表示不允许。

3LD_WriteReg(0x02,0);// FIFO中断允许第0位:允许FIFO_DATA中断;第2位:允许FIFO_EXT中断;

4If((ucRegVal& 0x10)&&LD_ReadReg(0xb2)==0x21 &&LD_ReadReg(0xbf)==0x35)// 中断请求编号寄存器0x2B第4位:读取值为1表示语音识别有结果产生;MCU可清零。ASR过程中DSP忙闲状态寄存器0xb2,读取到0x21 表示闲,查询到为闲状态可以进行下一步ASR动作。ASR状态报告寄存器0xbf 读到数值为0x35,可以确定是一次语音识别流程正常结束.

{

5nAsrResCount= LD_ReadReg(0xba); //中断辅助信息寄存器,其中的数值表示语音识别有几个识别候选

6if(nAsrResCount>0&&nAsrResCount<=4)

{

nAsrStatus=LD_ASR_FOUNDOK;

}

else

{

7nAsrStatus=LD_ASR_FOUNDZERO;

}

}

else

{

8nAsrStatus=LD_ASR_FOUNDZERO;//执行没有识别

}

LD_WriteReg(0x2b,0);

LD_WriteReg(0x1C,0);

LD_WriteReg(0x29,0);

LD_WriteReg(0x02,0);

LD_WriteReg(0x2B,0);

LD_WriteReg(0xBA,0);

LD_WriteReg(0xBC,0);

LD_WriteReg(0x08,1);

LD_WriteReg(0x08,0);

}

中断处理函数的第1行读取中断请求编号寄存器0x2B的值,第4位:读取值为1表示语音识别有结果产生;MCU可清零。第2位:读取值为1表示芯片内部FIFO中断发生。MP3播放时会产生中断标志请求外部MCU向FIFO_DATA中Reload数据。第3位:读取值为1表示芯片内部已经出现错误。值得注意的是:如果在中断响应时读到这位为1,需要对芯片进行重启Reset,才可以继续工作。第2,3行关闭LD3320的中断。第4行,读取中断请求编号寄存器0x2B的值,当第4位读取值为1表示语音识别有结果产生,其次读取语音识别过程中DSP忙闲状态寄存器0xb2,读取到0x21表示闲,然后读取语音识别状态报告寄存器0xbf的值,读到数值为0x35,可以确定是一次语音识别流程正常结束,当这三个寄存器的数值不满足以上要求的时候,返回“LD_ASR_FOUNDZERO”,表示未找到识别结果。当满足以上要求时,第5行,读取中断辅助信息寄存器,其中的数值表示语音识别有几个识别候选,当数值为1 – 4:表示有N个识别候选,数值为0或者大于4表示没有识别候选,当有识别候选的时候,返回“LD_ASR_FOUNDOK”,表示找到语音识别结果。

发送微博程序(摘至weibo.c)

unsigned char post_weibo_upload(char* weibo, uint8* pic,uint32 picLen)

{

unsigned char ret=0;

unsignedintlen=0;

1 if(socket(SOCK_WEIBO,Sn_MR_TCP,any_local_port++,0)!=1)//to initialize a TCP socket

{

printf("Socket initialization failed.");

return 0;

}

else

{

printf("Connect with Weibo server.");

2ret=connect(SOCK_WEIBO,weibo_server_ip,80);//connect to the weibo server, default TCPport is 80

if(ret!=1)

{

printf("Connect Weibo server failed.");

return 0;

}

else

{

3while(getSn_SR(SOCK_WEIBO)!=SOCK_ESTABLISHED);//wait for the TCP connection established!

printf("Connected with Weiboserver.");

4sprintf(post_data,"--%sContent-Disposition:form-data; name="id"%s"

"--%sContent-Disposition:form-data; name="pw"%s"

"--%sContent-Disposition:form-data; name="cmd"upload"

"--%sContent-Disposition:form-data; name="status"%s"

"--%sContent-Disposition:form-data; name="file"; filename="pic.jpg"Content-Type:application/octet-stream",(char*)BOUNDARY,(char*)WEIBO_ID,(char*)BOUNDARY,(char*)WEIBO_PWD,(char*)BOUNDARY,(char*)BOUNDARY,weibo,(char*)BOUNDARY);//"--%s--"

5sprintf(tmp_buf,"POST %sHTTP/1.1Host: %sUser-Agent: w5500Content-Type: multipart/form-data;boundary=%sConnection:closeContent-Length:%d%s",(char*)HTTP_PATH,(char*)WEIBO_SERVER,(char*)BOUNDARY,strlen(post_data)+picLen+strlen((char*)BOUNDARY)+8,post_data);

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top