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

📄 sound.c

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