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

📄 freqtest.cpp

📁 包括语音识别和数字TTS 设置语音识别内容的列表
💻 CPP
字号:
// FreqTest.cpp : implementation file
//

#include "stdafx.h"
#include "TelMateDemo.h"
#include "FreqTest.h"
#include <io.h>
#include <fcntl.h>
#include <sys/stat.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CFreqTest dialog


CFreqTest::CFreqTest(CWnd* pParent /*=NULL*/)
	: CDialog(CFreqTest::IDD, pParent)
{
	//{{AFX_DATA_INIT(CFreqTest)
	m_External = _T("");
	//}}AFX_DATA_INIT
}


void CFreqTest::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CFreqTest)
	DDX_Control(pDX, IDC_STOP, m_Stop);
	DDX_Control(pDX, IDC_START, m_Start);
	DDX_Control(pDX, IDC_LIST, m_FreqList);
	DDX_Text(pDX, IDC_EXTERNAL, m_External);
	DDV_MaxChars(pDX, m_External, 10);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CFreqTest, CDialog)
	//{{AFX_MSG_MAP(CFreqTest)
	ON_BN_CLICKED(IDC_START, OnStart)
	ON_BN_CLICKED(IDC_STOP, OnStop)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_DIAL, OnDial)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CFreqTest message handlers

BOOL CFreqTest::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	DWORD dwStyle = m_FreqList.GetExtendedStyle();
	dwStyle |= LVS_EX_FULLROWSELECT;
	dwStyle|=LVS_EX_GRIDLINES;
	dwStyle|=LVS_EX_FLATSB;
	dwStyle|=LVS_EX_HEADERDRAGDROP;
	dwStyle|=LVS_EX_TRACKSELECT;
	m_FreqList.SetExtendedStyle(dwStyle);
	m_FreqList.ModifyStyle(0,LVS_NOLABELWRAP|LVS_ICON,0);
	m_FreqList.InsertColumn(0,(LPTSTR)(LPCTSTR)"频率",LVCFMT_CENTER,100);
	m_FreqList.InsertColumn(1,(LPTSTR)(LPCTSTR)"概率",LVCFMT_CENTER,100);	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CFreqTest::OnStart() 
{
	if(TV_IsTalkState())
	{
		MessageBox("正在通话,不能进行频率分析,请先挂机!","错误",MB_OK|MB_ICONWARNING);
		return;
	}else if(TV_GetPcState() || TV_GetTelState())
	{
		MessageBox("话机已被摘机,不能进行频率分析,请先挂机!","错误",MB_OK|MB_ICONWARNING);
		return;
	}
	m_FreqList.DeleteAllItems();
	m_lAnaTimes = 0;
	m_iAnaTimes = 0;
	TV_OffHookCtrl(1);
	m_RecDelayTimer=SetTimer(2,1000,NULL);
	m_Start.EnableWindow(FALSE);
	m_Stop.EnableWindow(TRUE);
}

void CFreqTest::OnStop() 
{
	TV_StopRecordFile(1);
	TV_HangUpCtrl(1);
	DeleteFile("c:\\temp.pcm");
	if(m_RecTimer != NULL)
	{
		KillTimer(m_RecTimer);
		m_RecTimer =NULL;
	}
	if(m_RecDelayTimer != NULL)
	{
		KillTimer(m_RecDelayTimer);
		m_RecDelayTimer = NULL;
	}
	if(m_DialTimer != NULL)
	{
		KillTimer(m_DialTimer);
		m_DialTimer = NULL;
	}
	TV_Event Event;
	while(TV_GetEvent(1,&Event))
	{
	}
	m_Start.EnableWindow(TRUE);
	m_Stop.EnableWindow(FALSE);	
}

void CFreqTest::OnTimer(UINT nIDEvent) 
{
	TV_Event Event;
	TV_GetEvent(1,&Event);
	if(nIDEvent == m_DialTimer)//开始拨叫内线电路
	{
		KillTimer(nIDEvent);
		m_DialTimer = NULL;
		TV_StartDial(1,(LPTSTR)(LPCTSTR)m_ExterString);
		m_RecDelayTimer=SetTimer(2,1000,NULL);
	}
	else if(nIDEvent == m_RecDelayTimer)
	{
		KillTimer(nIDEvent);
		m_RecDelayTimer = NULL;
		StartRec();
	}else if(nIDEvent == m_RecTimer)
	{
		KillTimer(nIDEvent);
		m_RecTimer = NULL;
		TV_StopRecordFile(1);
//		TV_HangUpCtrl(1);
		StartAna();
	}	
	CDialog::OnTimer(nIDEvent);
}

void CFreqTest::StartRec()
{
	TV_StartRecordFile(1,(LPTSTR)(LPCTSTR)("c:\\temp.pcm"),0,0x1000000L);
	m_RecTimer=SetTimer(3,1000,NULL);
}

void CFreqTest::StartAna()
{
	int iFromFile=_open((LPTSTR)(LPCTSTR)("c:\\temp.pcm"),_O_BINARY|_O_RDWR,_S_IREAD|_S_IWRITE);
	if(iFromFile == -1)
	{
		MessageBox("openfromfilefail");
		return;
	}
	int inum=512;
	unsigned char buf[512];
	while(TRUE)
	{
		memset(buf,0,inum);
		int iNum=_read(iFromFile,buf,inum);
		if(iNum<=0)
			break;
		int iret=VS_GetSigFreq(buf,inum);
		if(iret > 0)
			AddAnaRet(iret);
	}	
	//m_Static.SetWindowText("分析数据完毕");
	m_iAnaTimes ++;
	if(m_iAnaTimes >= 15)
	{
		OnStop();			
	}
	else
	{
		StartRec();
	}
	//m_Start.EnableWindow(TRUE);
	//m_Stop.EnableWindow(FALSE);
}


void CFreqTest::AddAnaRet(int iret)
{
	int L=m_FreqList.GetItemCount();
	m_lAnaTimes++;
	CString cStr,gStr;
	int idata;
	bool bSign=false;
	cStr.Format("%d赫兹",iret);
	for(int i=0;i<L;i++)
	{
		CString Str=m_FreqList.GetItemText(i,0);
		idata=m_FreqList.GetItemData(i);
		if(Str == cStr)
		{
			idata++;
			m_FreqList.SetItemData(i,idata);
			bSign=true;
		}
		gStr.Format("%.2f",(float)idata*100/(float)m_lAnaTimes);
		gStr+="%";
		m_FreqList.SetItemText(i,1,(LPTSTR)(LPCTSTR)gStr);
	}
	if(!bSign)
	{
		m_FreqList.InsertItem(i,(LPTSTR)(LPCTSTR)cStr);
		m_FreqList.SetItemData(i,1);
		CString gStr;
		gStr.Format("%.2f",1.0*100/(float)m_lAnaTimes);
		gStr+="%";
		m_FreqList.SetItemText(i,1,(LPTSTR)(LPCTSTR)gStr);
	}
}

void CFreqTest::OnDial() 
{
	UpdateData(TRUE);
	TV_StartDial(1,(LPTSTR)(LPCTSTR)m_External);

}

⌨️ 快捷键说明

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