📄 sound.c
字号:
//========================================================================
// 文件名称: Sound.c
// 功能描述: A2000放音程序以及语音识别的训练程序
// 维护记录: 2005-10-16 v1.0 by xinqiang
//========================================================================
#include "A2000.h" //包含A2000放音的头文件
#include "bsrSD.h" //包含语音识别库的头文件
#define P_Watchdog_Clear (unsigned int*)0x7012
//以下定义为语音识别用
#define NAME_ID 0x100
#define COMMAND_ONE_ID 0x101
#define COMMAND_TWO_ID 0x102
#define COMMAND_THREE_ID 0x103
#define COMMAND_FORE_ID 0x104
#define RSP_INTR 0
#define RSP_NAME 1
#define RSP_FIRE 2
#define RSP_GUARD 3
#define RSP_AGAIN 4
#define RSP_NOVOICE 5
#define RSP_NAMEDIFF 6
#define RSP_CMDDIFF 7
#define RSP_STAR 8
#define RSP_MASTER 9
#define RSP_HERE 10
#define RSP_GUNSHOT 0
#define RSP_PATROL 11
#define RSP_READY 12
#define RSP_COPY 13
#define RSP_NOISY 14
//....end
//========================================================================
// 语法格式: void Play_Sound(unsigned int Index)
// 实现功能: 语音播放子程序,播放在SpeechTable中定义的一定序号的语音
// 参数: unsigned int Index 要播放的语音的序号
// 返回值: 无
//========================================================================
void Play_Sound(unsigned int Index)
{
unsigned int Status=1;
BSR_StopRecognizer(); //停止辨识
SACM_A2000_Initial(1);
SACM_A2000_Play(Index,3,3);
while(Status==1)
{
SACM_A2000_ServiceLoop();
if((SACM_A2000_Status()&0x0001)==0)
{
Status = 0;
SACM_A2000_Stop();
}
*P_Watchdog_Clear = 0x0001;
}
BSR_InitRecognizer(BSR_MIC); //恢复使能辨识
BSR_EnableCPUIndicator();
}
//========================================================================
// 语法格式: unsigned int TrainCommand(unsigned int Command_ID,
// unsigned int PlayBack_Res_ID)
// 实现功能: 语音识别的指令训练程序,每条语音指令训练两次,如训练有误
// 则播放"OHOH"提示音,并返回1,训练成功则返回0
// 参数: Command_ID 命令的ID号
// PlayBack_Res_ID 在训练时提示当前语音指令的语音序号
// 返回值: uiBack 训练结果返回值
//========================================================================
unsigned int TrainCommand(unsigned int Command_ID,unsigned int PlayBack_Res_ID)
{
unsigned int uiBack,Status=1;
int res;
Play_Sound(PlayBack_Res_ID);
while(Status==1)
{
res = BSR_Train(Command_ID,BSR_TRAIN_TWICE);
switch(res)
{
case 0: //两次训练成功,退出循环
Status = 0;
uiBack = 0; //返回值置0
break;
case -1: //没有检测出声音
Status = 0;
uiBack = 1; //返回1,需要再重新训练
Play_Sound(11); //语音:OHOH
break;
case -2: //第一次训练成功,需要再训练一次
Play_Sound(10); //语音:HOO
break;
case -3: //环境太吵
Status = 0;
uiBack = 1;
Play_Sound(11); //语音:OHOH
break;
case -4: //数据库满
Status = 0;
uiBack = 1;
Play_Sound(11); //语音:OHOH
break;
case -5: //检测出声音不同
Status = 0;
uiBack = 1;
Play_Sound(11); //语音:OHOH
break;
case -6: //序号错误
Status = 0;
uiBack = 1;
Play_Sound(11); //语音:OHOH
break;
default:break;
}
}
return uiBack;
}
//========================================================================
// 语法格式: unsigned int ReTrainBS(void)
// 实现功能: 语音识别训练程序,按顺序训练五条指令
// 参数: 无
// 返回值: 无
//========================================================================
void ReTrainBS(void)
{
BSR_DeleteSDGroup(0); //初始化存储器RAM
while(TrainCommand(NAME_ID,0)!=0);
while(TrainCommand(COMMAND_ONE_ID,1)!=0);
while(TrainCommand(COMMAND_TWO_ID,2)!=0);
while(TrainCommand(COMMAND_THREE_ID,3)!=0);
while(TrainCommand(COMMAND_FORE_ID,4)!=0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -