MFC:录音同时显示波形

本文介绍了一个MFC应用程序,录音功能封装在CSoundBase类中,而波形显示则在对话框类CDaexp4Dlg上完成。通过消息传递,当CSoundBase类缓冲区满时,将录制的数据发送到CDaexp4Dlg,后者接收到数据后进行波形绘制。详细步骤包括:1) CSoundBase类发送消息,2) CDaexp4Dlg类接收消息并读取数据,3) 绘制波形的函数实现,以及如何处理第一帧数据和画布设置。
摘要由CSDN通过智能技术生成

与大多数的录音同时显示波形的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.h中声明:afx_msg LRESULT OnCardMessage(WPARAM wParam, LPARAM lParam);

daexp4.cpp中定义:LRESULT CDaexp4Dlg::OnCardMessage(WPARAM wParam, LPARAM lParam)
{
RecordData8=(unsigned char*)malloc(wParam);
RecordData=(double*)malloc(wParam*sizeof(double));

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值