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

📄 telmatedemodlg.cpp

📁 包括语音识别和数字TTS 设置语音识别内容的列表
💻 CPP
📖 第 1 页 / 共 4 页
字号:

void CTelMateDemoDlg::OnMenuInit() 
{
	OnOpendev();
	
}

void CTelMateDemoDlg::OnMenuUninit() 
{
	OnClosedev();
	
}

void CTelMateDemoDlg::OnMenuExit() 
{
	OnOK();
	
}

void CTelMateDemoDlg::OnMenuGetserial() 
{
	OnButton15();
	
}

void CTelMateDemoDlg::OnEcho() 
{
	//当电话机在不可用状态,用电话机话筒录音(进入RS_MICREC录音状态)。如:用电话机打VOIP应用等。
	//如果这时候放音,声音数据将从电话机的听筒出来,为避免放的声音重新录入,可打开此回音抵消功能。
	//平时不需要打开。
	//如果用耳机就不需要此功能
	TV_EnableEchoCanceller(TRUE);
	m_StopEcho.EnableWindow(TRUE);
	m_Echo.EnableWindow(FALSE);
}

void CTelMateDemoDlg::OnStopecho() 
{
	//停止回音抵消
	TV_EnableEchoCanceller(FALSE);
	m_StopEcho.EnableWindow(FALSE);
	m_Echo.EnableWindow(TRUE);
}

void CTelMateDemoDlg::OnOffhookcheck() 
{
	if(m_OffHookCheck.GetCheck())
	{
		TV_OffHookCtrl();
		//设置接受DTMF灵敏度参数,
		//100:表示允许的DTMF声音大小,一般话机能在100以上,
		//但如果对方是手机可能会在100以下,50左右,或者线路对声音影响比较大,可能会使声音比较小,
		//这里就降低允许的声音最小值,以便漏号。
		//5:表示接受的DTMF坚持的时间长度,一般5左右,如果发现声音被干扰太严重而没有检测到号码,可减少次数
		//在接受来电是可以设置为2或3,以便能准确接受来电号码。
		//注意:如果设置太小的声音最小值,太小的时间次数,虽然能提高非常高的灵敏度,但如果在多人说话或有放歌什么的时候可能会误测号码
		//
		//拿着电话机,如果外界干扰严重(如:话机正在放歌的音箱...)出现误测可调整相应参数,灵敏度
		//TV_SetDTMFParam(20,20,0/*无效参数*/,4);
		//TV_SetCheckDTMFLevel(3);//设置DTMF允许的破坏程度,如果有发现误测,可相应的增大此值,有漏测可减少此值,建议为2,3

	}else
	{
		TV_HangUpCtrl();
		//设置接受DTMF灵敏度参数,
		//50:表示允许的DTMF声音大小,一般话机能在100以上,
		//但如果对方是手机可能会在100以下,50左右,或者线路对声音影响比较大,可能会使声音比较小,
		//这里就降低允许的声音最小值,以便漏号。
		//5:表示接受的DTMF坚持的时间长度,一般5左右,如果发现声音被干扰太严重而没有检测到号码,可减少次数
		//在接受来电是可以设置为2或3,以便能准确接受来电号码。
		//注意:如果设置太小的声音最小值,太小的时间次数,虽然能提高非常高的灵敏度,但如果在多人说话或有放歌什么的时候可能会误测号码
		//
		//接受DTMF来电,可以调整相应参数,灵敏度
		//TV_SetDTMFParam(10,10,0/*无效参数*/,6);
		//TV_SetCheckDTMFLevel(1);
	}
}

void CTelMateDemoDlg::OnDisabletelcheck() 
{
	TV_EnableRing(!m_DisableTel.GetCheck());
}

void CTelMateDemoDlg::OnOpendoplay() 
{
	if(m_OpenDoPlay.GetCheck())
	{//听语音数据
		TV_OpenDoPlay();//打开喇叭,播放的数据将从喇叭出声。
		//如果接了耳机,喇叭就自动被屏蔽,不会出声,声音从耳机出来。
		//用耳机通话时必须打开喇叭才能听到对方声音
	}else
	{
		TV_CloseDoPlay();
	}	
}

CString CTelMateDemoDlg::SelectSaveFilePath()
{
	char szFile[260];       // buffer for filename
	OPENFILENAME ofn;
	memset(szFile,0,sizeof(szFile));
	ZeroMemory(&ofn, sizeof(OPENFILENAME));
	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = m_hWnd;
	ofn.lpstrFile = szFile;
	ofn.nMaxFile = sizeof(szFile);
	
	ofn.nFilterIndex = 1;
	ofn.lpstrFileTitle = NULL;
	ofn.nMaxFileTitle = 0;
	
	ofn.lpstrInitialDir = NULL;
	ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT;
	
	ofn.lpstrFilter = "WAVE file(*.WAV)\0*.WAV\0All file\0*.*\0";
	ofn.lpstrDefExt = ".wav";
	
	if(::GetSaveFileName(&ofn))
	{
		CString strDestPath = szFile;	
		return strDestPath;
	}
	return "";
}


void CTelMateDemoDlg::OnStopplayfile() 
{
	if(m_lPlayFileID >= 0)
		TV_StopPlayFile(m_lPlayFileID);		

	AddStatus("停止播放文件,播放文件完成");
	m_StartPlayFile.EnableWindow(TRUE);
	m_StopPlayFile.EnableWindow(FALSE);
}

void CTelMateDemoDlg::OnRecordBuf(WPARAM wParam, LPARAM lParam)
{	
	long lSize=wParam;
	m_RingBuffer.Write((char*)lParam,&lSize);
	//要尽快复制内存数据返回。
	if(m_RecBufFile)
	{
		fwrite((char *)lParam,wParam,1,m_RecBufFile);
	}
}


void CTelMateDemoDlg::OnHangups(WPARAM wParam, LPARAM lParam)
{
	AddStatus("对方挂机");
}

void CTelMateDemoDlg::OnOffHooks(WPARAM wParam, LPARAM lParam)
{
	AddStatus("对方摘机");
}

void CTelMateDemoDlg::OnGetDTMF(WPARAM wParam, LPARAM lParam)
{
	CString Str;
//	char chDTMF[2];
//	memset(chDTMF,0,2);
//	chDTMF[0]=(char)lParam;
	Str.Format("DTMF:%c",lParam);
	AddStatus(Str);
}

void CTelMateDemoDlg::OnCallIn(WPARAM wParam, LPARAM lParam)
{
	CString str;
	if(lParam == 0)
	{
		str.Format("来电震铃 次数:%d",wParam);
	}else
	{
		str.Format("来电震铃停止 次数:%d",wParam);
	}
	AddStatus(str);

	char chbuf[60];
	TV_ReceiveCallingID(chbuf,60);
	str.Format("ReciveID=%s",chbuf);
	AddStatus(str);
}

void CTelMateDemoDlg::OnMicStatus(WPARAM wParam, LPARAM lParam)
{
	if(wParam == 1)
	{
		CString str;
		str.Format("检测到麦克风已插入");
		AddStatus(str);
	}else
	{
		CString str;
		str.Format("检测到麦克风拔出");
		AddStatus(str);		
	}
}

void CTelMateDemoDlg::OnDTMFCallIn(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("检测到DTMF来电:%s",(LPTSTR)(LPCTSTR)lParam);
	AddStatus(str);
	
	char chbuf[60];
	TV_ReceiveCallingID(chbuf,60);
	str.Format("ReciveID=%s",chbuf);
	AddStatus(str);
}

void CTelMateDemoDlg::OnPlayFileEnd(WPARAM wParam, LPARAM lParam)
{
	CString str;
	if(lParam == 0)
	{
		str="播放文件结束";
	}else if(lParam == 1)
	{
		str="多文件连播结束";
		OnStopplaynumber();
	}else
		return;
	AddStatus(str);
	OnStopplayfile();
}

void CTelMateDemoDlg::OnFskCallIn(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("检测到FSK来电:%s",(LPTSTR)(LPCTSTR)lParam);
	AddStatus(str);
}

void CTelMateDemoDlg::OnStopCallIn(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("呼入停止,产生一个未接电话");
	AddStatus(str);
}

void CTelMateDemoDlg::OnDialEnd(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("拨号结束...");
	AddStatus(str);
}

void CTelMateDemoDlg::OnTelOffHook(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("电话机摘机..");
	AddStatus(str);

	//设置接受DTMF灵敏度参数,
	//100:表示允许的DTMF声音大小,一般话机能在100以上,
	//但如果对方是手机可能会在100以下,50左右,或者线路对声音影响比较大,可能会使声音比较小,
	//这里就降低允许的声音最小值,以便漏号。
	//5:表示接受的DTMF坚持的时间长度,一般5左右,如果发现声音被干扰太严重而没有检测到号码,可减少次数
	//在接受来电是可以设置为2或3,以便能准确接受来电号码。
	//注意:如果设置太小的声音最小值,太小的时间次数,虽然能提高非常高的灵敏度,但如果在多人说话或有放歌什么的时候可能会误测号码
	//
	//拿着电话机,如果外界干扰严重(如:话机正在放歌的音箱...)出现误测可调整相应参数,灵敏度
	//TV_SetDTMFParam(20,20,0/*无效参数*/,4);
	//TV_SetCheckDTMFLevel(3);//设置DTMF允许的破坏程度,如果有发现误测,可相应的增大此值,有漏测可减少此值,建议为2,3
}

void CTelMateDemoDlg::OnTelHangUp(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("电话机挂机...");
	AddStatus(str);
	//设置接受DTMF灵敏度参数,
	//50:表示允许的DTMF声音大小,一般话机能在100以上,
	//但如果对方是手机可能会在100以下,50左右,或者线路对声音影响比较大,可能会使声音比较小,
	//这里就降低允许的声音最小值,以便漏号。
	//5:表示接受的DTMF坚持的时间长度,一般5左右,如果发现声音被干扰太严重而没有检测到号码,可减少次数
	//在接受来电是可以设置为2或3,以便能准确接受来电号码。
	//注意:如果设置太小的声音最小值,太小的时间次数,虽然能提高非常高的灵敏度,但如果在多人说话或有放歌什么的时候可能会误测号码
	//
	//接受DTMF来电,可以调整相应参数,灵敏度
	//TV_SetDTMFParam(50,50,0/*无效参数*/,3);
	//TV_SetCheckDTMFLevel(1);
}

void CTelMateDemoDlg::OnNoPSTNLine(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("错误,没有接入PSTN外线,请检查...");
	AddStatus(str);
}

void CTelMateDemoDlg::OnRingBack(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("电脑拨号后听到回铃音...");
	AddStatus(str);
}
void CTelMateDemoDlg::OnTelCallOut(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("电话机拨号后听到回铃音...");
	AddStatus(str);
}

void CTelMateDemoDlg::OnBusy(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("检测到忙音...");
	AddStatus(str);
}

void CTelMateDemoDlg::OnFlashEnd(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("拍插簧完成...Flash End");
	AddStatus(str);
}

void CTelMateDemoDlg::OnDialTone(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("拨号音");
	AddStatus(str);
}
void CTelMateDemoDlg::OnTelDial(WPARAM wParam, LPARAM lParam)
{
	CString str;
	str.Format("电话机拨号:%s",(LPTSTR)(LPCTSTR)lParam);
	AddStatus(str);
}

void CTelMateDemoDlg::OnReversed() 
{
	//如果设备,或者线路不支持极性反转功能,不要打开。
	TV_EnableReversedPolarity(m_Reversed.GetCheck());
}

void CTelMateDemoDlg::OnRadiodoid() 
{
	//录来自电话线上的声音。
	//普通状态时的录音方式,如电话机挂机后进入空闲状态等。
	//如果在空闲状态不使用此录音方式,如有来电时将不会显示来电号码。
	//空闲时让耳机不可用,以免耳机的声音被录入,影响线路数据。
	TV_SetRecSource(RS_DOID);
}

void CTelMateDemoDlg::OnRadiomicrec() 
{
	//录来自MIC(电话机话筒或耳机)的声音。
	//设置后将录从电话机话筒或耳机的声音,用在VOIP,语音拨号等状态
	//用VOIP,语音拨号时,如果用电话机请同时设置为电话机不可用,TV_EnableRing(FALSE)使电话机断开PSTN
	TV_SetRecSource(RS_MIC);
	
}

void CTelMateDemoDlg::OnRadiomicspk() 
{	
	//录来自电话线上的声音。
	//进入留言状态的时候可用此方式录音,可以提高对方声音的音量
	//或者用耳机进行通话时录音,比DOID录音方式提高对方音量,降低本地说话音量。
	//只有电脑摘机或耳机接着并且MIC可用时,才能有数据录入。
	TV_SetRecSource(RS_SPK);
	
}

void CTelMateDemoDlg::OnEnablemic() 
{//需要MIC通话时,让MIC可用。
	TV_EnableMic(m_EnableMic.GetCheck());	
}

void CTelMateDemoDlg::OnStartring() 
{	
	TV_StopFlash();
	if(m_StartRing.GetCheck())
	{
		if(!TV_IsRingEnable())
		{
			TV_StartRing();
		}else
		{
			m_StartRing.SetCheck(FALSE);
			AfxMessageBox("Disconnect PSTN first"); 
		}
	}else
	{
		TV_StopRing();
		OnSendcallid();
	}
}

void CTelMateDemoDlg::OnFlash() 
{
	UpdateData(TRUE);
	long lFlashTimes=atoi((LPTSTR)(LPCTSTR)m_FlashTimes);
	if(lFlashTimes > 10)
	{
		if(!TV_StartFlash(lFlashTimes,FALSE))
		{
			AfxMessageBox("flash failed");
		}
	}
}

void CTelMateDemoDlg::OnMenuStartwatch() 
{
	TV_EnableDeviceWatchDog(TRUE);
	
}

void CTelMateDemoDlg::OnMenuStopwatch() 
{
	TV_EnableDeviceWatchDog(FALSE);
	
}

BOOL CTelMateDemoDlg::OnCommand(WPARAM wParam, LPARAM lParam) 
{
	return CDialog::OnCommand(wParam, lParam);
}

void CTelMateDemoDlg::OnStartflash() 
{
	UpdateData(TRUE);
	long lFlashTimes=atoi((LPTSTR)(LPCTSTR)m_FlashTimes);
	if(lFlashTimes > 10)
	{
		if(!TV_StartFlash(lFlashTimes,TRUE))
		{
			AfxMessageBox("failed");
		}
	}	
}

void CTelMateDemoDlg::OnSendcallid() 
{
	//需要带震铃的盒子次能支持,其它的设备不能支持
	UpdateData(TRUE);
	if(!TV_StartCallIDRingInterval((LPTSTR)(LPCTSTR)m_CallID))
	{
		AfxMessageBox("Send CallID Failed");
	}	

⌨️ 快捷键说明

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