📄 mainfrm.cpp
字号:
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 + -