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

📄 snoopy.c

📁 一个基于凌阳91A的非特定语音识别例子,能够识别六句英文句子.很好的一个程序
💻 C
字号:
//-----------------This is the main program of Snoopy project---------------------------
//--Copyright(C) 2001, Cyberon Corp.
//该程序是非特定人语音识别程序,原来在SPCE500A下运行,能识别并应答16个命令,存储空间为128K字节。
//我们将其进行了修改,使其能在SPCE061A下运行,由于存储空间为32K字,只能识别并应答9个命令。
//在这个例程当中,我们示范了如何使用语音识别引擎对8个已经经过训练的命令进行识别。
//第一个命令 "Snoopy",可以作为使能命令,也就是说使用者只能在该命令之后发出其他命令。
//例如,用户只有在发出 "Snoopy"命令并且听到响应"Snoopy here"之后才能继续下达其他命令
//如"How are you", "I love you",等等。
//当"Snoopy"命令响应之后,程序将等待8秒钟,如果没有其他命令发出,
//系统将跳回到第0组,并且再次等待触发命令"Snoopy"。当用户的命令无法被识别时,
//程序将响应为"Execuse me?", "I can't hear you!"或 "Say again!"这时用户可以再一次下达语音命令。
//  	        Snoopy Group 		Response phrase
// ------------------------------------------------------------------------
// 		Snoopy			Snoopy here
//		How are you		I'm fine!
//		I love you		I love you too!
//		Goto sleep		ZZZzzzzz....(Snore)
// 		Let's play		Snoopy loves to play!t4                            
//		Sing a song		lala..la...
//		Merry Christmas		Merry Christmas!
//		Happy new year		Happy New Year!

#include "bsr.h"

//...............available commands.........................
#define SNOOPY			1
#define WHAT			0
#define EXCUSEME		9	

void PlayRespond(int Result)
{
	BSR_StopRecognizer();//停止识别,进入响应部分
	SACM_A2000_Initial();//初始化语音播放
	
	if (Result>5) Result-=1;//跳过第5个命令(该命令训练失效
	
	if (Result>9) Result=9;//当反应的结果数超过所知结果时,停止在提问状态。
	SACM_A2000_Play(Result);//播放对应的语音响应
	while(SACM_A2000_Status() != 0)
	{
		SACM_A2000_ServiceLoop();
	}
	SACM_A2000_Stop();//停止播放
	BSR_InitRecognizer();//启动语音识别
}

int gActivated = 0;
			//这个变量用来确定系统是否已经被触发,当被触发时,该变量为1.

int gWhatCount = 0;	
			//用来计量系统已经存在几个"What?" 响应.如果响应多于3个,系统将对"What?" 响应
			//进行屏蔽,直到有一个系统能够识别的命令为止.这可以防止噪音的干扰.
	

extern void InitIO(void);

int main()
{
	int res,score,unknown=0;
	int TimeCount = 0;

	InitIO();
	BSR_SelectGroup(0);		//找到第一个语音命令组
	BSR_InitRecognizer();		//初始化语音识别器
	PlayRespond(1);			//播放"Snoopy is here"
	BSR_EnableCPUIndicator();	//启动实时监控
	while(1)
	{
		res = BSR_GetResult();//获得识别结果
		if(res!=0 && res!=-1)
		{
			if(res == -2)
			{	//当语音被拒绝识别时,res为-2.通过获得识别码判断是否为一个命令.
				score = BSR_GetRecognizerScore();

				if(score >= -60)
				{
				//判断已经出现几个不可识别的命令
					if(gWhatCount < 3)
					{
      					gWhatCount ++;
      					PlayRespond(EXCUSEME);
      					unknown ++;                              
      					if(unknown >= 3) unknown = 0;
					    TimeCount = 0;		// Reset TimeCount
     				}
				}
			}
			else
			{
				gWhatCount = 0;//清除无法识别命令记数器
				if(gActivated)
				{   
					PlayRespond(res);
				}
				else
				{
					if(res == SNOOPY)//触发命令,激活系统
					{
						PlayRespond(res);
						gActivated = 1;
					}
				}
				TimeCount = 0;		// Reset TimeCount
			}
		}
		else if (gActivated)
		{
			if (++TimeCount > 500)	//如果在触发命令之后8秒之内并没有一个
									//有效命令出现,则进入休眠状态
			{		
				PlayRespond(WHAT);
				TimeCount = 0;
				gActivated = 0;
			}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -