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

📄 mainfrm.cpp

📁 The ITU-T(Telecommunication Standardization Sector)is a permanent organ of the International Telecom
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	theApp.m_LogTrace.WriteLine("初始化结束");
	SetTimer(ROBOT_STATUS_SYSTEM, 1000, NULL);
	
	return TRUE;
}

void CMainFrame::FreeResource()
{
	SrExitDragonVoice();
	for (int i=0; i < 5; i++)
	{
		delete [] m_szResult[i];
	}

	for (i = 0; i < m_aryList.GetSize(); i ++)
	{
		LPQUESTIONINFO lpInfo = (LPQUESTIONINFO)m_aryList.GetAt(i);

		delete lpInfo;
	}
	m_aryList.RemoveAll();

}

void CMainFrame::OnTimer(UINT nIDEvent) 
{
	switch(nIDEvent)
	{
	/*case WAITTIMER :
		{
			//	判断当前时间(小时)是否改变,记录日志文件名改变
			CTime tm = CTime::GetCurrentTime();
			if (tm.GetHour() != m_nLocalH)
			{
				m_nLocalH = tm.GetHour();

				CString sFileName;
				sFileName.Format("%04d年%02d月%02d日%02d点.txt", 
					tm.GetYear(), tm.GetMonth(), tm.GetDay(), tm.GetHour());
				theApp.m_LogTrace.SetFileName(sFileName);
				theApp.m_LogTrace.ResetFile();
				theApp.m_LogTrace.SetActive(TRUE);
			}

			m_nOvertime ++;

			//	端口监测
			CString sItem;
			int dwValue = (int)GetParallelStatus(sItem);
			switch (dwValue)
			{
			case 1 :
				{
					//	压力开关闭合
					if (m_bRun) SwitchStatus("./Data/Wav/welcome1.wav", "压力开关闭合");
				}
				break;
			case 2 :
				{
					//	有人靠近Mic
					if (m_bRun) 
					{
						SwitchStatus("", "有人靠近Mic");
						StartRecord();
					}
				}
				break;
			case -1 :
				{
					//	压力开关断开
					if (m_bLeave)
					{
						m_bLeave = FALSE;
						SwitchStatus("./Data/Wav/leave1.wav", "压力开关断开");
					}
				}
				break;
			case -2 :
				{
					//	有人离开Mic
					if (g_nQNum != 0) SwitchStatus("./Data/Wav/close1.wav", "有人离开Mic");
					if (m_bClose && g_nQNum == 0)
					{
						m_bClose = FALSE;
						SwitchStatus("./Data/Wav/close1.wav", "有人离开Mic");
					}
				}
				break;
			default :	//	状态未变
				//	是否进行超时处理
				m_bRun = SwitchNext();
				if (m_bRun)
				{
					if (m_nOvertime == OVERTIME)
					{
						//	超时,则不处理识别结果
						theApp.m_LogTrace.WriteLine("超时,则不处理识别结果");
						KillTimer(WAITTIMER);
						StopRecord();
						m_nOvertime = 0;
						m_nDegree ++;

						//超时处理
						Sleep(2000);
						CView *pView = GetActiveView();
						pView->SendMessage(WM_DISPLAYRESULT, (WPARAM)("超时处理"), 0);
						WritePort(0x00);
						PlayFileAsync(g_nDeviceID, "./Data/Wav/remind1.wav", this->m_hWnd);
						WritePort(0xff);

						if (m_nDegree == OVERTIMES)
						{
							g_nQNum --;
							m_nDegree = 0;
							m_bRun = SwitchNext();
						}
						
						if (m_bRun) StartRecord();
						if (theApp.m_bSetTiemr) SetTimer(WAITTIMER, 1000, NULL);
					}
				}
				break;
			}
		}
		break;*/
	case ROBOT_STATUS_SYSTEM :
		{
			KillTimer(ROBOT_STATUS_SYSTEM);
			//	系统初始化结束,进入自我介绍状态
			g_nStatus = ROBOT_STATUS_INTRO;

			//	播放欢迎词
			PlayFileAsync(g_nDeviceID, "./Data/Wav/welcome1.wav", this->m_hWnd);

			//	进入等待状态,开启端口监测定时器
			//g_nStatus = ROBOT_STATUS_WAIT;
			//if (theApp.m_bSetTiemr) SetTimer(WAITTIMER, 1000, NULL);
			StartRecord();
		}
		break;
	}
}

void CMainFrame::StartRecord()
{
	theApp.m_LogTrace.WriteLine("开始录音");
	m_bDispose	= TRUE;
	SrMicOn();
}

void CMainFrame::StopRecord()
{
	theApp.m_LogTrace.WriteLine("关闭录音");
	m_bDispose	= FALSE;
	SrMicOff();
}

//	返回值:
//			 0:状态未改变
//			 1:用户靠近机器人有效距离
//			-1:用户离开机器人有效距离
//			 2:用户靠近Mic有效距离
//			-2:用户离开Mic有效距离
DWORD CMainFrame::GetParallelStatus(CString &sItem)
{
	return 0;
}

void CMainFrame::GenerateQuesion(CString szFileName)
{
	CStdioFile file;
	CFileException ex;
	CString sAnswer, sPathName, sS, sAct, sTmp;

	LPQUESTIONINFO pInfo;
	if(file.Open(szFileName, CFile::typeText | CFile::modeRead, &ex))
	{
		file.SeekToBegin();

		int nPosBgn = -1;
		int nPosEnd = 0;
		char pBuf[65535];
		memset(pBuf, 0, 65535);
		int nLen = file.GetLength();
		file.ReadHuge(pBuf, nLen);

		CString s = pBuf;
		nPosBgn = s.Find("{", nPosEnd);
		nPosEnd = s.Find("}", nPosBgn);

		while ((nPosEnd != -1) && (nPosBgn != -1))
		{
			sTmp = s.Mid(nPosBgn + 1, nPosEnd - nPosBgn - 1);

			//用于存储输入参数的PROPERTY和VALUE
			CMapStringToString msPropertys;

			//循环分析输入参数,将参数内容另存到变量msPropertys中
			int nPos;
			while(sTmp.GetLength() > 0)
			{
				nPos = sTmp.Find("[");
				if(nPos >= 0) sTmp = sTmp.Mid(nPos + 1);

				CString sProperty;
				nPos = sTmp.Find("]");
				if(nPos >= 0)
				{
					sProperty = sTmp.Left(nPos);
					sTmp = sTmp.Mid(nPos + 1);
				}

				CString sValue;
				nPos = sTmp.Find("[");
				if(nPos >= 0)
				{
					//还有下一个属性结点
					sValue = sTmp.Left(nPos);
					sValue = sValue.Mid(1);		//去"="
					sTmp = sTmp.Mid(nPos);
				}
				else
				{
					//此为最后一个属性结点
					sValue = sTmp.Mid(1);		//去"="
					sTmp.Empty();
				}

				//存储属性
				msPropertys.SetAt(sProperty, sValue);
			}
			msPropertys.Lookup("CMD", sAnswer);
			msPropertys.Lookup("FILENAME", sPathName);
			msPropertys.Lookup("S", sS);
			msPropertys.Lookup("ACT", sAct);
			m_sScroll +=sAnswer;
			m_sScroll += "|";

			pInfo = new QUESTIONINFO;
			strcpy(pInfo->cmdbuf, sAnswer);
			strcpy(pInfo->filename, sPathName);
			pInfo->nS	= atoi(sS);
			pInfo->nAct	= atoi(sAct);
			m_aryList.Add(pInfo);

			//	取下一个选项
			nPosBgn = s.Find("{", nPosEnd);
			nPosEnd = s.Find("}", nPosBgn);
		}
		file.Close();
	}
}

void CMainFrame::OnMyPlayEnd(WPARAM wParam, LPARAM lParam)
{
	switch(wParam)
	{
	case MCI_NOTIFY_SUCCESSFUL:
		StopPlayFileAsync(g_nDeviceID, this->m_hWnd);
		g_bPlayEnd	= TRUE;
		theApp.m_LogTrace.WriteLine("播放声音文件结束");
		break;
	default:
		break;
	}
}

BOOL CMainFrame::SwitchNext()
{
	//	如果问题数为零,则不识别(返回FALSE,否则返回TRUE)。
	if (g_nQNum == 0)
		return FALSE;
	else
		return TRUE;
}

void CMainFrame::SwitchStatus(char *szFileName, char *szInfo)
{
	theApp.m_LogTrace.WriteLine(szInfo);
	KillTimer(WAITTIMER);
	StopRecord();
	m_nOvertime = 0;
	CView *pView = GetActiveView();
	pView->SendMessage(WM_DISPLAYRESULT, (WPARAM)szInfo, 0);
	if (strlen(szFileName) > 0)
	{
		WritePort(0x00);
		PlayFileAsync(g_nDeviceID, szFileName, this->m_hWnd);
		WritePort(0xff);
	}
	if (theApp.m_bSetTiemr) SetTimer(WAITTIMER, 1000, NULL);
}

void CMainFrame::OnPlayTime(WPARAM wParam, LPARAM lParam)
{
	DWORD dwLen = (DWORD)lParam;
	CString sLen;
	sLen.Format("%d", dwLen);
	int nLen = (int)dwLen / 1000;
	CString sMinute, sSecond;
	sMinute.Format("%d", nLen / 60);
	sSecond.Format("%d", nLen % 60);
	CString sMilli	= sLen.Right(3);
	sMilli = sMilli.Left(2);
	sLen = sMinute + ":" + sSecond + ":" + sMilli;
	m_pEditAM->SetWindowText(sLen);
}

void CMainFrame::WritePort(DWORD dwValue)
{
	//DP_OutpW(WRITEPORT, dwValue);
}

⌨️ 快捷键说明

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