📄 guard.c
字号:
//--------------------------------------------------------------------
//语音识别DEMO程序
//每次上电复位后请训练3条命令,第一条为触发命令(用户名,如:张三),
//后两条Fire、Guard(也可以有用户自己任意设定两条命令)为控制命令,
//为了便于DEMO,会用语音提示“Say Fire.”“Say Guard.”
//每次识别时先说用户名,识别成功则回答“I'm here.”,再说控制命令。
//识别成功则用语音提示。
//
//-- 命令 回答
//-------------------------------------------------------------------
//-- Fire gunshot
//-- Guard I'm ready
//-------------------------------------------------------------------
#include "bsrsd.h"
#define NAME_ID 0x100
#define COMMAND_ONE_ID 0x101
#define COMMAND_TWO_ID 0x102
#define RSP_INTRO 0 //0. I am your body guard.
#define RSP_NAME 1 //1. Please give me your name.
#define RSP_FIRE 2 //2. Say Fire.
#define RSP_GUARD 3 //3. Say Guard.
#define RSP_AGAIN 4 //4. Say again.
#define RSP_NOVOICE 5 //5. No voice detected.
#define RSP_NAMEDIFF 6 //6. Two given names are different.
#define RSP_HERE 7 //10. I'm here
#define RSP_STANDBY 8 //8. Iam standing by.
#define RSP_GUNSHOT 9 //11. Gun sound.
#define RSP_READY 10 //13. I'm ready!
//..................global variables.....................
int gActivated = 0; //1---触发命令识别成功
//0---无触发命令
//*************** 播放提示语音 ***********************//
//input:播放序号
//output:NO
//*****************************************************//
void PlayRespond(int Result)
{
BSR_StopRecognizer(); //关闭识别器
SACM_A2000_Initial(1); //初始化播放器
SACM_A2000_Play(Result, 3, 3); //播放提示语音
while((SACM_A2000_Status()&0x0001) != 0)
{
SACM_A2000_ServiceLoop();
}
SACM_A2000_Stop(); //停止播放
BSR_InitRecognizer(BSR_MIC); //初始化识别器
// BSR_EnableCPUIndicator(); //
}
//*************** 训练命令函数 ***********************//
//input:命令序号、提示语序号
//output:0----训练成功 -1------训练失败
//*****************************************************//
int TrainWord(int WordID, int RespondID)
{
int res;
PlayRespond(RespondID);
while(1)
{
res = BSR_Train(WordID,BSR_TRAIN_TWICE);
if(res == 0) //训练成功
break;
switch(res)
{
case -1: //没有检测到命令
PlayRespond(RSP_NOVOICE);
return -1;
case -2: //需要再训练一次
PlayRespond(RSP_AGAIN);
break;
case -3: //环境太吵
return -1;
case -4: //存储器满
return -1;
case -5: //两次命令不一样
PlayRespond(RSP_NAMEDIFF);
return -1;
case -6: //命令序号超出范围
return -1;
case -7: //命令已存在
return -1;
}
}
return 0;
}
//*************** 主程序 ***********************//
//C语言
//************************************************//
int main()
{
int res, timeCnt=0;
InitIO();
BSR_DeleteSDGroup(0); //初始化存储器,选用SPCE061A内部RAM存储语音样本
PlayRespond(RSP_INTRO);
while(TrainWord(NAME_ID,1) != 0) ; //训练用户名
while(TrainWord(COMMAND_ONE_ID,2) != 0) ; //训练第一条命令
while(TrainWord(COMMAND_TWO_ID,3) != 0) ; //训练第二条命令
BSR_InitRecognizer(BSR_MIC); //初始化识别器
//BSR_EnableCPUIndicator(); //??
PlayRespond(RSP_STANDBY); //播放提示语
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -