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

📄 telmatedemodlg.cpp

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

void CTelMateDemoDlg::OnPauseplay() 
{
	if(m_lPlayFileID >= 0)
		TV_PausePlayFile(m_lPlayFileID);			
}

void CTelMateDemoDlg::OnResume() 
{
	if(m_lPlayFileID >= 0)
		TV_ResumePlayFile(m_lPlayFileID);			
}

void CTelMateDemoDlg::OnStopring() 
{
	TV_StopRing();
}

void CTelMateDemoDlg::OnMicspk() 
{
	TV_EnableMicSpk(m_MicSpk.GetCheck());		
}

void CTelMateDemoDlg::OnMenuGetdevicefunc() 
{
	CString str="设备名称:";
	int iDeviceID=TV_GetDeviceID();
	if(iDeviceID > 0)
	{
		switch(iDeviceID)
		{
		case DEVICE_TYPE_TELMATEI:
			str+="I型电话伴侣(A6)";
			break;
		case DEVICE_TYPE_TELMATEII:
			str+="II型电话伴侣(V6)";
			break;
		case DEVICE_TYPE_RECBOXS:
			str+="单路录音盒此开发包不支持开发";
			break;
		case DEVICE_TYPE_RECBOXT:
			str+="二路录音盒此开发包不支持开发";
			break;
		case DEVICE_TYPE_RECBOXF:
			str+"四路录音盒此开发包不支持开发";
			break;
		case DEVICE_TYPE_RECBOXE:
			str+="八路录音盒此开发包不支持开发";
			break;
		case DEVICE_TYPE_TELMATEV2:
			str+="电话伴侣V2";
			break;
		case DEVICE_TYPE_TELMATEV3:
			str+="电话伴侣V3";
			break;
		case DEVICE_TYPE_TELMATEE2:
			str+="电话伴侣2路外线";
			break;
		case DEVICE_TYPE_TELMATEV7:
			str+="电话伴侣V7带耳机";
			break;
		case DEVICE_TYPE_TELMATEV8:
			str+="电话伴侣V8带震铃";
			break;
		case DEVICE_TYPE_TELMATEV5:
			str+="电话伴侣V5带耳机(座席)//不再提供,对应的提供DEVICE_TYPE_BRIDGEA3";
			break;
		case DEVICE_TYPE_BRIDGEA1:
			str+="玻瑞器A1";
			break;
		case DEVICE_TYPE_BRIDGEA2:
			str+="玻瑞器A2";
			break;
		case DEVICE_TYPE_BRIDGEA3:
			str+="玻瑞器A3";
			break;
		case DEVICE_TYPE_BRIDGEA4:
			str+="玻瑞器A4";
			break;
		case DEVICE_TYPE_BRIDGEB1:
			str+="玻瑞器B1";
			break;
		case DEVICE_TYPE_BRIDGEB2:
			str+="玻瑞器B2";
			break;
		case DEVICE_TYPE_BRIDGEB3:
			str+="玻瑞器B3";
			break;
		case DEVICE_TYPE_BRIDGEB4:
			str+="玻瑞器B4";
			break;
		case DEVICE_TYPE_TELMATEOEM:
			str+="V6OEM设备";
			break;
		default:
			str+="未知设备";
			break;
		}

		str+="\r\n";
		str+="功能列表:\r\n";
		int iFuncMode=TV_GetDeviceFuncMode();
	
		if(iFuncMode & DEVICE_FM_TEL)
			str+="可接入电话机\r\n";
		if(iFuncMode & DEVICE_FM_MICSPK)
			str+="设备带有耳机麦克风插口\r\n";
		if(iFuncMode & DEVICE_FM_TELRING)
			str+="可以让电话机震铃\r\n";
		if(iFuncMode & DEVICE_FM_DISABLEPSTN)
			str+="可用TV_EnableRing()来控制电话机断开PSTN\r\n";
		if(iFuncMode & DEVICE_FM_RPOLARITY)
			str+="具有级性反转检测对方摘机的功能\r\n";
		if(iFuncMode & DEVICE_FM_PSTNREC)
			str+="具有PSTN通话录音功能\r\n";
		if(iFuncMode & DEVICE_FM_PSTNOFFHOOK)
			str+="具有电脑摘机功能,摘机后就可以用电脑拨号、来电留言,如果有耳机可以用耳机通话器等功能了\r\n";
		if(iFuncMode & DEVICE_FM_PSTNCALLID)
			str+="接收来电号码\r\n";
		if(iFuncMode & DEVICE_FM_VOIP)
			str+="具有实现VOIP功能,网络语音跟PSTN数据转发。\r\n";

		AfxMessageBox(str);
	}else
	{
		AfxMessageBox("取的设备类型失败");
		return ;
	}

}

void CTelMateDemoDlg::OnClose() 
{
	OnClosedev();
	CDialog::OnClose();
}

void CTelMateDemoDlg::OnPlayfilevol() 
{
	UpdateData(TRUE);
	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();
	if(str.GetLength() > 0)
	{
		int iVolume=atoi((LPTSTR)(LPCTSTR)m_Volume2);
		if(m_lPlayFileVolID >= 0)
		{
			TV_StopPlayFile(m_lPlayFileVolID);
		}

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

void CTelMateDemoDlg::OnStopplayfilevol() 
{
	if(m_lPlayFileVolID >= 0)
	{
		TV_StopPlayFile(m_lPlayFileVolID);
		m_lPlayFileVolID = -1;
	}		
}

void CTelMateDemoDlg::OnSetvolume2() 
{
	UpdateData(TRUE);	
	int iVolume=atoi((LPTSTR)(LPCTSTR)m_Volume2);
	if(iVolume <= 0)
	{
		return;
	}
	if(m_lPlayFileVolID >= 0)
	{
		TV_ModifyPlayFileVol(m_lPlayFileVolID,iVolume);
	}		
}

static void word2str(unsigned char *str, WORD n) 
{
	str[0] = (unsigned char)(n     ) & 0xff;
	str[1] = (unsigned char)(n >> 8) & 0xff;
}

static void dword2str(unsigned char *str, DWORD n)
{
	str[0] = (unsigned char)(n		 ) & 0xff;
	str[1] = (unsigned char)(n	>>	8) & 0xff;
	str[2] = (unsigned char)(n	>> 16) & 0xff;
	str[3] = (unsigned char)(n	>> 24) & 0xff;
}


#define HEADER_LEN		44
#define OUT4CC(s)	memcpy(&Buffer[len], s, 4); len += 4;	
#define OUTDWORD(n)	dword2str(&Buffer[len], n); len += 4;
#define OUTWORD(n)	word2str(&Buffer[len], n); len += 2;


void CTelMateDemoDlg::OnMenuRewriteheader() 
{
	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();
	if(!str.IsEmpty())
	{
		CFile file;
		CFileException e;
		if(file.Open(str,CFile::modeReadWrite|CFile::typeBinary,&e))
		{
			file.SeekToBegin();
			long lDataLen=file.GetLength()-44;
			if(lDataLen <= 0)
			{
				file.Close();
				MessageBox("没有足够语音数据");
			}else
			{
				int len=0;
				unsigned char Buffer[HEADER_LEN];
				memset(Buffer, 0, HEADER_LEN);
				OUT4CC("RIFF");
				OUTDWORD(lDataLen + HEADER_LEN-8);
				OUT4CC("WAVE");
				OUT4CC("fmt ");
				OUTDWORD(16);
				OUTWORD(6);
				OUTWORD(1);
				OUTDWORD(8000);
				int nBlockAlign=1;
				int nBit=8;
				nBlockAlign = 1;
				OUTDWORD(8000*nBlockAlign);
				OUTWORD(nBlockAlign);
				OUTWORD(nBit);
				OUT4CC("data");
				OUTDWORD(lDataLen);
				file.Write(Buffer,HEADER_LEN);
				file.Close();
			}
		}else
		{
			MessageBox("打开文件失败");
		}
	}
}

void CTelMateDemoDlg::OnEnableremote() 
{
	if(!TV_GetPcState())
	{
		MessageBox("还没有电脑摘机,该功能启动无效");
		return ;
	}
	OnRadiomicspk();//修改录音方式为线上录音。
	
	OnEcho();//启动回音抵消

	TV_EnableReceiveRemoteDTMF(TRUE);//设置接受对方按键状态


	m_DisableRemote.EnableWindow(TRUE);
	m_EnableRemote.EnableWindow(FALSE);
}

void CTelMateDemoDlg::OnDisableremote() 
{
	TV_EnableReceiveRemoteDTMF(FALSE);
	
	m_DisableRemote.EnableWindow(FALSE);
	m_EnableRemote.EnableWindow(TRUE);

}

void CTelMateDemoDlg::OnMenuConvert() 
{
	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();
	if(!str.IsEmpty())
	{
		CFile file;
		CFileException e;
		if(file.Open(str,CFile::modeReadWrite|CFile::typeBinary,&e))
		{
			file.SeekToBegin();
			long lDataLen=file.GetLength()-HEADER_LEN;
			if(lDataLen <= 0)
			{
				file.Close();
				MessageBox("没有足够语音数据");
			}else
			{
				char chHeader[HEADER_LEN];
				file.Read(chHeader,HEADER_LEN);
				
				if(chHeader[0x14] != 6)//文件不是ALAW格式
				{
					file.Close();
					MessageBox("文件不是ALAW格式");
					return ;
				}

				char *pSrcBuf=new char[lDataLen];
				short int *pDestBuf=new short int[lDataLen];
				ASSERT(pSrcBuf && pDestBuf);//确认分配了内存

				lDataLen= file.Read(pSrcBuf,lDataLen);

				TV_ALaw2Linear(pSrcBuf,lDataLen,pDestBuf);//转换格式

				//重写文件头为线性的格式
				lDataLen*=2;//数据多了一倍
				file.Seek(HEADER_LEN,CFile::begin);
				file.Write(pDestBuf,lDataLen);//写入数据到文件
				
				file.SeekToBegin();//准备写文件头

				int len=0;
				unsigned char Buffer[HEADER_LEN];
				memset(Buffer, 0, HEADER_LEN);
				OUT4CC("RIFF");
				OUTDWORD(lDataLen + HEADER_LEN-8);
				OUT4CC("WAVE");
				OUT4CC("fmt ");
				OUTDWORD(16);
				OUTWORD(1);//线性格式
				OUTWORD(1);
				OUTDWORD(8000);
				int nBlockAlign=1;
				int nBit=16;//16位
				nBlockAlign = 2;//16/8=2
				OUTDWORD(8000*nBlockAlign);
				OUTWORD(nBlockAlign);
				OUTWORD(nBit);
				OUT4CC("data");
				OUTDWORD(lDataLen);
				file.Write(Buffer,HEADER_LEN);
				file.Close();

				delete[] pSrcBuf;//释放内存
				delete[] pDestBuf;

				MessageBox("转换完成");
			}
		}else
		{
			MessageBox("打开文件失败");
		}
	}	
}

void CTelMateDemoDlg::OnStartspeech() 
{
	//使用本地录音
	TV_EnableRing(FALSE);//断开电话机和PSTN连接
	TV_SetRecSource(RS_MIC);//设置为电话机话筒录音方式

	CDemoSpeech ds;
	ds.DoModal();
}

void CTelMateDemoDlg::OnPlaynumber() 
{
	CInputText	Input;
	if(Input.DoModal() == IDOK)
	{
		CString str=Input.m_strInputText;
		//初始化成功后已经初始化(TV_InitPlayStringList)语音文件列表了,所以这里不需要初始化
		if(TV_StartPlayString((LPTSTR)(LPCTSTR)str) < 0)
		{
			AfxMessageBox("播放字符失败");
		}else
		{
			CString tStr="开始播放字符:";
			tStr+=str;
			AddStatus(tStr);
			TV_OpenDoPlay();
			m_PlayNumber.EnableWindow(FALSE);
			m_StopPlayNumber.EnableWindow(TRUE);
		}
	}
}

void CTelMateDemoDlg::OnPlaymulti() 
{
	CSelectMulti	Select;
	if(Select.DoModal() == IDOK)
	{
		if(TV_StartPlayMultiFile((LPTSTR)(LPCTSTR)Select.m_strFileList) < 0)
		{
			AfxMessageBox("播放多文件失败");
		}else
		{
			AddStatus("开始多文件连播");
			TV_OpenDoPlay();
			m_PlayMulti.EnableWindow(FALSE);
			m_StopPlayMulti.EnableWindow(TRUE);
		}
	}
}

void CTelMateDemoDlg::OnStopplaymulti() 
{
	TV_StopPlayMultiFile();
	m_PlayMulti.EnableWindow(TRUE);
	m_StopPlayMulti.EnableWindow(FALSE);
}

void CTelMateDemoDlg::OnStopplaynumber() 
{
	TV_StopPlayString();	
	m_PlayNumber.EnableWindow(TRUE);
	m_StopPlayNumber.EnableWindow(FALSE);
}

void CTelMateDemoDlg::OnShowurl() 
{
	ShellExecute(NULL,_T("open"),"http://www.quanova.com/products_sdk.asp",NULL,NULL,SW_SHOWNORMAL);
}

void CTelMateDemoDlg::OnMenuAudiovolume() 
{
	CAudioVolume audio;
	audio.DoModal();
}

⌨️ 快捷键说明

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