📄 guard.c
字号:
//=======================================================================
//
//The information contained herein is the exclusive property of
//Sunplus Technology Co. And shall not be distributed, reproduced,
//or disclosed in whole in part without prior written permission.
//
// (C) COPYRIGHT 2001 SUNPLUS TECHNOLOGY CO.
// ALL RIGHTS RESERVED
//
//The entire notice above must be reproduced on all authorized copies.
//
//======================================================================
//============================================================
// 工程名称: Guard_SD.spj
// 功能描述: 语音辨识
// 文件来源:《实验仪实验指导书》,"实验三十二 语音辨识" 第116页
// IDE环境: SUNPLUS u'nSPTM IDE 1.8.4
//
// 涉及的库:
// 组成文件:
// guard.c fiq.asm hardware.asm bsrv222SDL.lib flash4096.asm key.asm system.asm sacmv26e.lib
//===============================================
//============================================================
// 文件名称:guard.c
// 实现功能: 语音辨识
//============================================================
#include "bsrsd.h"
#define NAME_ID 0x100
#define COMMAND_ONE_ID 0x101
#define COMMAND_TWO_ID 0x102
#define COMMAND_THREE_ID 0x103
#define COMMAND_FOUR_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
#define C_Commond_Start 0
#define C_GroupOne_Start 600
#define C_GroupTwo_Start 1600
#define C_PageOne 0
#define C_PagTwo 1
#define Recognise 1
#define Train 2
#define NO_Re_Tr 0
#define C_Recognise 1
//-------------------------------------
void g_Recognise(void);
extern void ClearWatchDog();
extern unsigned int BSR_SDModel[100];
//***************************全程变量******************************//
int gActivated = 0; //该变量用于检测是否有触发命令,当有识别出语句
//为触发名称则该位置1
//***********************PlayRespond-voice*************************//
//*****************************************************************//
void PlayRespond(int Result)
{
BSR_StopRecognizer();
SACM_S480_Initial(1);
SACM_S480_Play(Result, 3, 3);
while((SACM_S480_Status()&0x0001) != 0)
{
SACM_S480_ServiceLoop();
ClearWatchDog();
}
SACM_S480_Stop();
BSR_InitRecognizer(BSR_MIC);
BSR_EnableCPUIndicator();
}
//*********************Training************************************//
//*****************************************************************//
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(10);
return -1;
case -2: //需要重新训练一遍
PlayRespond(9);
break;
case -3: //环境太吵
PlayRespond(11);
return -1;
case -4: //数据库满
return -1;
case -5: //检测出声音不同
if(WordID == NAME_ID) PlayRespond(11);//两次输入名称不同
else PlayRespond(11);//两次输入命令不同
return -1;
case -6: //序号错误
return -1;
}
}
return 0;
}
//=============================================================
// 函数名称: main()
// 功能描述: 语音辨识
// 语法格式: main()
//入口参数: 无
// 出口参数: 无
// 注意事项: 仅为用户模型
//=============================================================
int main()
{
System_Initial();
while(1)
{
switch(SP_GetCh())
{
case 0x0000: //语音训练
BSR_DeleteSDGroup(0); //初始化存储器RAM
PlayRespond(RSP_INTR); //语音”请输入触发名称”
while(TrainWord(NAME_ID,1) != 0) ; //语音训练“圣诞快乐”
while(TrainWord(COMMAND_ONE_ID,2) != 0) ; //语音训练“新年快乐
while(TrainWord(COMMAND_TWO_ID,3) != 0) ; //语音训练“生日快乐
PlayRespond(14); //语音"yea",表示训练成功
break;
case 0x0001: //语音辨识
BSR_InitRecognizer(BSR_MIC); //辨识初始化
PlayRespond(15); //语音“教你学英语”
g_Recognise(); //辨识
break;
}
System_ServiceLoop();
}
}
//**********************Recognise**********************************//
//*****************************************************************//
void g_Recognise()
{
unsigned int timeCnt = 0,res,counter1=0,counter2=0,counter3=0;
while(1)
{
res = BSR_GetResult(); //Recognised
if(res > 0)
{
switch(res)
{
case NAME_ID:
PlayRespond(5); //
counter1++;
break;
case COMMAND_ONE_ID:
PlayRespond(6); //
counter2++;
break;
case COMMAND_TWO_ID:
PlayRespond(7); //
counter3++;
break;
}
if(counter1!=0&&counter2!=0&&counter3!=0)
break;
}
else
if (++timeCnt > 450) //Out the stated time
{
PlayRespond(10); //There is no voic within stated time
gActivated = 0;
timeCnt = 0;
}
}
PlayRespond(14);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -