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