⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guard.c

📁 spce061单片机的一些程序!C语言和汇编语言都有
💻 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 + -