与大多数的录音同时显示波形的MFC程序不同,下面要说明的是录音功能单独封装在一个名为CSoundBase类中,界面类为CDaexp4Dlg,它是基于对话框界面程序的主界面,负责波形输出。下面来说一下具体步骤。
1. 将CSoundBase类中录得的数据传递给CDaexp4Dlg类
(1)在CSoundBase类发送消息
在CSoundBase类中的数据缓冲区满消息处理函数中void CSoundBase::OnWIM_DATA(WPARAM wParam, LPARAM lParam)添加语句: PostMessage(m_wnd, WM_MYMESSAGE,dwBytesRecorded,(LPARAM)pSaveBuffer);其中m_wnd是HWND型的窗口句柄,由录音函数传入,需要添加的地方有: void CDaexp4Dlg::OnRecord()
{
CDaexp4Dlg* pWnd=(CDaexp4Dlg*)AfxGetMainWnd(); //得到父窗体的指针
。。。。。。
if(m_pPlayer->Record(TEXT("waveTest.wav"),&waveFormat,pWnd->GetSafeHwnd()) == FALSE)
。。。。。。
}
在CSoundBase类中定义HWND m_wnd;并在Record函数中进行赋值m_wnd=h_wnd;即可。
WM_MYMESSAGE为发送的消息,其定义在StdAfx.h中#define WM_MYMESSAGE WM_USER+100
dwBytesRecorded为数据长度。
pSaveBuffer为要发送的数据段的起始地址。
(2)CDaexp4Dlg类接收消息,读取数据
在消息映射表中添加消息响应函数
BEGIN_MESSAGE_MAP(CDaexp4Dlg, CDialog)
//{
{AFX_MSG_MAP(CDaexp4Dlg)
。。。
ON_MESSAGE(WM_MYMESSAGE,OnCardMessage)
。。。
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
声明并编写该函数
daexp4.cpp中定义:LRESULT CDaexp4Dlg::OnCardMessage(WPARAM wParam, LPARAM lParam)
{
RecordData8=(unsigned char*)malloc(wParam);
RecordData=(double*)malloc(wParam*sizeof(double));