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

📄 telmatedemodlg.cpp

📁 包括语音识别和数字TTS 设置语音识别内容的列表
💻 CPP
📖 第 1 页 / 共 4 页
字号:
	UpdateData(TRUE);
	int iSpeed=atoi((LPTSTR)(LPCTSTR)m_DialSpeed);
	if(iSpeed < 50) iSpeed=50;
	else if(iSpeed > 512) iSpeed=512;
	TV_SetSendDTMFSpeed(iSpeed);

	TV_StartDial((LPTSTR)(LPCTSTR)m_DialCode,FALSE);
}

void CTelMateDemoDlg::OnStopdial() 
{
	TV_StopDial();	
}

void CTelMateDemoDlg::OnSetvolume() 
{
	UpdateData(TRUE);	
	int iVolume=atoi((LPTSTR)(LPCTSTR)m_Volume);
	if(iVolume <= 0)
	{
		return;
	}
	else
	{
		//if(iVolume > 100) iVolume = 100;
	}
	TV_SetVolume(iVolume,VT_PLAYFILE);

	//TV_SetVolume(iVolume,VT_RECAUDIO);
	TV_SetVolume(iVolume,VT_PLAYAUDIO);
	int iValue=TV_GetVolume(VT_PLAYFILE);


}

void CTelMateDemoDlg::OnPlayfile() 
{
	static char szFilter[] = "Sound Files(*.pcm,*.wav)|*.pcm;*.wav|All Files (*.*)|*.*||";
 	CFileDialog dlgLoad(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_FILEMUSTEXIST, (LPCTSTR)szFilter, NULL);
	if(dlgLoad.DoModal()!=IDOK)
		return;
	CString str=dlgLoad.GetPathName();
	if(str.GetLength() > 0)
	{
//		TV_SetFileVolume((LPTSTR)(LPCTSTR)str,200);
		OnSetvolume();	
		if(m_lPlayFileID >= 0)
		{
			TV_StopPlayFile(m_lPlayFileID);
		}

		m_lPlayFileID=TV_StartPlayFile((LPTSTR)(LPCTSTR)str,0,0,TRUE,TRUE,TRUE,0);
		m_OpenDoPlay.SetCheck(1);
		if(m_lPlayFileID < 0)
			AddStatus("播放失败");
		else
		{
			m_StartPlayFile.EnableWindow(FALSE);
			m_StopPlayFile.EnableWindow(TRUE);
			AddStatus("正在播放文件... ");
		}
	}
}

void CTelMateDemoDlg::OnPlaybuf() 
{
	if(m_lMixID >= 0)
		TV_StopPlayBuf(m_lMixID);

	static char szFilter[] = "A_Law Sound Files(*.pcm)|*.pcm|WAVE Sound Files(*.wav)|*.wav|All Files (*.*)|*.*||";
 	CFileDialog dlgLoad(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_FILEMUSTEXIST, (LPCTSTR)szFilter, NULL);
	if(dlgLoad.DoModal()!=IDOK)
		return;
	CString str=dlgLoad.GetPathName();
	m_PlayFile = fopen((LPTSTR)(LPCTSTR)str,"rb");
	if(m_PlayFile == NULL)
		return;
	else
	{
		m_PlaySize=fread(m_PlayFileBuf,1,TOTALBUFSIZE,m_PlayFile);
		if(m_PlaySize <= 0)
		{
			fclose(m_PlayFile);
			m_PlayFile=NULL;
			return;
		}
		else
		{
			OnSetvolume();	
			m_lMixID=TV_StartPlayBuf(m_PlayFileBuf,m_PlaySize,this,PlayMixEnd,false);
			if(m_lMixID < 0)
				AddStatus("播放缓冲失败");
			else
			{
				TV_OpenDoPlay();//让喇叭出声音
				m_OpenDoPlay.SetCheck(1);
				AddStatus("正在播放缓冲...");
				m_StartPlayBuf.EnableWindow(FALSE);
				m_StopPlayBuf.EnableWindow(TRUE);
			}
		}
	}		
}

void CTelMateDemoDlg::StopFile()
{
	if(m_PlayFile != NULL)
	{
		fclose(m_PlayFile);
		m_PlayFile = NULL;
		TV_ResetPlayBuf(m_lMixID);
		m_lMixID = -1;
	}
}

void CTelMateDemoDlg::FreeBuf()
{

}
long CTelMateDemoDlg::PlayMixEnd(pTmPlayState pPlayState)
{
	CTelMateDemoDlg *pParent=(CTelMateDemoDlg *)pPlayState->pParam;

	if(pParent->m_PlayFile != NULL)
	{
		int isize=fread(pPlayState->pBuf,1,pPlayState->lSize,pParent->m_PlayFile);
		if(isize <= 0)
		{
			pParent->StopFile();
			pParent->FreeBuf();
			if(pParent->m_lMixID >= 0)
			{
				TV_ResetPlayBuf(pParent->m_lMixID);
				pParent->m_lMixID=-1;
			}
			return -1;
			
		}else
		{
			return isize;
		}
	}
	return 0;
}

void CTelMateDemoDlg::OnStopplaybuf() 
{
	if(m_lMixID >= 0)
		TV_StopPlayBuf(m_lMixID);	

	AddStatus("播放缓冲结束");
	m_StartPlayBuf.EnableWindow(TRUE);
	m_StopPlayBuf.EnableWindow(FALSE);
}


void CTelMateDemoDlg::OnRecfile() 
{
	CString strPath=SelectSaveFilePath();
	if(strPath.GetLength() <= 0)
		return;

	TV_SetRecordFileFormate(WF_LINE);
	m_lRecID=TV_StartRecordFile((LPTSTR)(LPCTSTR)strPath,0,0);
	if(m_lRecID < 0)
	{
		MessageBox("录音失败");
		return;
	}
	CString str;
	str.Format("ID=%d 开始文件录音 %s",m_lRecID,strPath);
	AddStatus(str);
	m_RecFile.EnableWindow(FALSE);
	m_StopRecFile.EnableWindow(TRUE);
}

void CTelMateDemoDlg::OnStoprecfile() 
{
	if(m_lRecID >= 0)
	{
		TV_StopRecordFile(m_lRecID,FALSE);	
	}
	m_RecFile.EnableWindow(TRUE);
	m_StopRecFile.EnableWindow(FALSE);
	AddStatus("停止文件录音");
}

void CTelMateDemoDlg::OnRecbuf() 
{
	TV_RegRecBufWnd(GetSafeHwnd());//注册缓冲录音,建议不要注册主窗口,这样会在主窗口最大化,最小化时引起消息堵塞,引起录音数据丢失,播放延迟。

	CString strPath=SelectSaveFilePath();
	if(strPath.GetLength() <= 0)
		return;
	
	m_SoundOut.Start(m_SoundOut.GetFormat());//同时把声音送入计算机声卡

	//m_StopRecBuf.EnableWindow(TRUE);
	//m_RecBuf.EnableWindow(FALSE);

	//打开这里就可以把数据写入文件里
	if(m_RecBufFile==NULL)
	{
		m_RecBufFile=fopen((LPTSTR)(LPCTSTR)strPath,"wb");
		//此文件录音没有写文件头,如果需要加ALAW的文件头,可自行加入。
		//用在第三方的VOIP或其它就不需要写入文件,直接把内存数据传入第三方就可以。
		if(m_RecBufFile)
		{
			m_StopRecBuf.EnableWindow(TRUE);
			m_RecBuf.EnableWindow(FALSE);
		}
		else
		{
			AddStatus("打开文件失败");
		}
	}
	else
	{
		AddStatus("正在录音,要重新录音请先停止录音");	
	}
	
}

void CTelMateDemoDlg::OnStoprecbuf() 
{
	if(m_RecBufFile)
	{
		fclose(m_RecBufFile);
		m_RecBufFile=NULL;
		m_StopRecBuf.EnableWindow(FALSE);
		m_RecBuf.EnableWindow(TRUE);
	}	

	m_SoundOut.Stop();
}

void CTelMateDemoDlg::OnDestroy() 
{
	OnStoprecfile();
	OnStoprecbuf();

	OnStopplayfile();
	OnStopplaybuf();

	if(m_EventTimer)
	{
		KillTimer(m_EventTimer);
		m_EventTimer=NULL;
	}
	OnClosedev();
	CDialog::OnDestroy();
}

void CTelMateDemoDlg::OnUsbPlug(WPARAM wParam, LPARAM lParam)
{
	if(wParam == 0)//usbunplug
	{
		AddStatus("设备被拔掉");
	}
	else
	{
		AddStatus("设备被插入可继续正常使用");
	}
}

void CTelMateDemoDlg::OnTimer(UINT nIDEvent) 
{
	CString Str;
	long lEventType,lResult;

#define  iDataBufLen  (MaxDataLen+1) //一共分配47个字节
	char chDataBuf[iDataBufLen];

	CString str;
	if(nIDEvent == m_EventTimer)
	{
		//所有事件类型,请查阅A4drv.h
		//方法一和方法二只要使用其中一个就可以
		//----------------------------------------------------------------
		//方法一
		long lRet=TV_GetEventEx(&lEventType,&lResult,chDataBuf,iDataBufLen);
		if(lRet < 0) MessageBox("chDataBuf的内存长度分配不够");
		else if(lRet > 0)
		{
			switch(lEventType)
			{
			case TEvent_GetFsk:case TEvent_GetDTMF:
				AddStatus(chDataBuf);
				break;
			case TEvent_OffHook:
				AddStatus("呼叫方摘机");
				break;
			case TEvent_Ring:
				if(chDataBuf[0] != '1')
				{
					str.Format("来电开始响铃 %d",lResult);
				}else
				{
					str.Format("来电停止响铃 %d",lResult);
				}
				AddStatus(str);
				break;
			case TEvent_DialEnd:
				AddStatus("拨号结束");
				break;
			case TEvent_Dial:
				AddStatus("检测到拨号音,可以开始调用TV_StartDial(...)进行拨号了(如果还没有摘机先调用TV_OffHookCtrl(...))");
				break;
			case TEvent_Busy://OK
				AddStatus("忙音");
				break;
			case TEvent_PlayEnd:
				AddStatus("播放完毕");
				break;
			case TEvent_HangUp:
				 AddStatus("对方挂机");
				break;
			case TEvent_InterHangUp:
				AddStatus("本地话机挂机");
				break;
			case TEvent_InterOffHook:
				AddStatus("本地话机摘机");
				break;
			case TEvent_Nobody:
				AddStatus("无人接听");
				break;
			case TEvent_GetChar:
				{					
					Str.Format("取得DTMF码:%c",chDataBuf[0]);
					AddStatus(Str);
				}
				break;
			case TEvent_TelDial:
				str.Format("本地话机拨号=%s",chDataBuf);
				AddStatus(str);
				break;
			case TEvent_TelCallOut:
				AddStatus("本地话机拨号后听到回铃");
				break;
			default:
				{
					str.Format("接收到事件,事件类型ID=%ld ,请查阅A4drv.h看事件说明",lEventType);
					AddStatus(str);
				}
				break;
			}
		}
		//方法一结束
		//-----------------------------------------------------------------
		/*//开始注释
		//----------------------------------------------------------
		//方法二
		TV_Event Event;
		while(TV_GetEvent(&Event) > 0)		
		{
			switch(Event.Type)
			{
			case TEvent_GetFsk:case TEvent_GetDTMF:
				AddStatus(Event.data.ptrData);
				break;
			case TEvent_OffHook:
				AddStatus("呼叫方摘机");
				break;
			case TEvent_Ring:
				if(Event.data.ptrData[0] != '1')
				{
					str.Format("来电开始响铃 %d",Event.data.Result);
				}else
				{
					str.Format("来电停止响铃 %d",Event.data.Result);
				}
				AddStatus(str);
				break;
			case TEvent_DialEnd:
				AddStatus("拨号结束");
				break;
			case TEvent_Dial:
				AddStatus("检测到拨号音,可以开始调用TV_StartDial(...)进行拨号了(如果还没有摘机先调用TV_OffHookCtrl(...))");
				break;
			case TEvent_Busy://OK
				AddStatus("忙音");
				break;
			case TEvent_PlayEnd:
				AddStatus("播放完毕");
				break;
			case TEvent_HangUp:
				 AddStatus("对方挂机");
				break;
			case TEvent_InterHangUp:
				AddStatus("本地话机挂机");
				break;
			case TEvent_InterOffHook:
				AddStatus("本地话机摘机");
				break;
			case TEvent_Nobody:
				AddStatus("无人接听");
				break;
			case TEvent_GetChar:
				{					
					Str.Format("取得DTMF码:%c",Event.data.ptrData[0]);
					AddStatus(Str);
				}
				break;
			case TEvent_TelDial:
				str.Format("本地话机拨号=%s",chDataBuf);
				AddStatus(str);				
				break;
			case TEvent_TelCallOut:
				AddStatus("本地话机拨号后听到回铃");
				break;
			default:
				{
					str.Format("接收到事件,事件类型ID=%ld,请查阅A4drv.h看事件说明",lEventType);
					AddStatus(str);
				}
				break;
			}
		}
		//----------------------------------------------------------
		//方法二结束
		*///结束开始注释
	}
	CDialog::OnTimer(nIDEvent);
}


void CTelMateDemoDlg::AddStatus(CString strStatus)
{
	CString str;
	m_status.GetWindowText(str);
	str=strStatus+"\r\n"+str+"\r\n";
	m_status.SetWindowText(str);
		
	CFile file;
	CFileException  e;
	CString strPath=GetModulePath()+"Log.txt";
	if(file.Open((LPTSTR)(LPCTSTR)strPath,CFile::typeBinary|CFile::modeWrite|CFile::modeNoTruncate|CFile::modeCreate,&e))
	{
		file.SeekToEnd();
		file.Write((LPTSTR)(LPCTSTR)strStatus,strStatus.GetLength());
		file.Write("\r\n",2);
		file.Close();
	}
}

⌨️ 快捷键说明

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