?? 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 + -