图3.3 写入识别列表流程图
(3)开始识别:
设置几个相关的寄存器,就可以控制LD3320芯片开始语音识别。
uint8 LD_AsrRun()
{
nAsrStatus=LD_ASR_RUNNING;
……
}
设置芯片当前状态为正在运行,该函数运行成功返回值1。
在函数uint8 RunASR();中调用语音识别用初始化函数,并且如果写入识别列表和ASR运行均成功,返回asrflag=1。
(4)响应中断:
如果麦克风采集到声音,不管是否识别出正常结果,都会产生一个中断信号:
void ExtInt0Handler(void) interrupt 0
{
nInt0Flag = 1;
}
void ProcessInt0()
{
……
}
主函数中判断:
if (nInt0Flag)
{
ProcessInt0();
continue;
}
中断程序要根据寄存器的值分析结果。读取BA寄存器的值,可以知道有几个候选答案,LD_ReadReg(0xba)的值1-4说明有对应数量的正确识别结果,0或者大于4表示没有识别候选。而C5寄存器里存储的是得分最高、最可能正确的答案的编号。在目前的程序中,只读取了最优候选。在其他使用场合,如果需要其他候选,可以通过编程读取寄存器0xc7、0xc9、0xcb实现。
uint8 LD_GetResult()
{
return LD_ReadReg(0xc5);
}
以下为中断响应的简单流程图:
图3.4 语音识别响应中断流程图
3.3.3 声音播放
播放声音的操作顺序是:通用初始化→MP3播放用初始化→调节播放音量→开始播放声音,并准备好中断响应函数,打开中断允许位。 STC10L08XE基于语音识别的智能控制系统开发(7):http://www.youerw.com/tongxin/lunwen_9683.html