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