|
11.2.2 播放WAVE文件
WAVE音频文件是比较常用的音频文件,对于音频的播放可以有多种方法,下面使用mciSendCommand函数播放WAVE文件。 例如: 播放WAVE文件的应用程序设计步骤如下。 ch1105实例位置:mr\11\sl\05 (1)创建一个基于对话框的应用程序。 (2)向对话框中添加一个群组框控件、一个编辑框控件和两个按钮控件 (3)在对话框的源文件WavePlayDlg.cpp中加入多媒体库的头文件引用及多媒体静态库的链接。
#include #pragma comment(lib, "winmm.lib")
| (4)在函数OnInitDialog中将编辑框控件设置为不可用。代码如下:
BOOL CWavePlayDlg::OnInitDialog() { ……//此处代码省略 GetDlgItem(IDC_PATH)->EnableWindow(false); return TRUE; }
| (5)处理“选择文件” 按钮的单击事件,实现添加将要播放文件的路径。代码如下:
void CWavePlayDlg::OnAddpath() { CFileDialog file(TRUE,NULL,NULL,NULL,"文件(*.wav)|*.wav||"); if(file.DoModal()==IDOK) { CString strname=file.GetPathName(); GetDlgItem(IDC_PATH)->SetWindowText(strname); } }
| (6)处理“播放” 按钮的单击事件,使用mciSendCommand函数向音频设备发送打开设备、设置播放参数、播放文件等指令。代码如下:
void CWavePlayDlg::OnPlay() { CString tmp; GetDlgItem(IDC_PATH)->GetWindowText(tmp); if(tmp.IsEmpty()) { MessageBox("清选择播放文件"); return; } MCIDEVICEID m_nDeviceID; MCIDEVICEID m_nElementID; MCI_OPEN_PARMS mciOpenParms;mciOpenParms.lpstrDeviceType=(LPSTR)MCI_DEVTYPE_WAVEFORM_AUDIO; mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_WAIT, (DWORD)(LPVOID)&mciOpenParms); m_nDeviceID=mciOpenParms.wDeviceID; MCI_OPEN_PARMS mciOpen; memset(&mciOpen,0,sizeof(MCI_OPEN_PARMS)); mciOpen.lpstrElementName=tmp; mciSendCommand(m_nDeviceID,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpen); m_nElementID=mciOpen.wDeviceID; MCI_PLAY_PARMS mciPlay; mciPlay.dwCallback=(DWORD)this->GetSafeHwnd(); if(mciSendCommand(m_nElementID,MCI_PLAY,MCI_NOTIFY, (DWORD)(LPVOID)&mciPlay)!=MMSYSERR_ERROR) { mciSendCommand(m_nDeviceID, MCI_CLOSE, 0, NULL); } }
| (7)通过类向导添加关闭窗体消息的实现函数DestroyWindow,在该函数中实现关闭音频设备。
BOOL CWavePlayDlg::DestroyWindow() { mciSendCommand(m_nDeviceID, MCI_CLOSE, 0, NULL); return CDialog::DestroyWindow(); }
| (8)程序运行效果如图11.5所示。
 图11.5 WAVE文件播放
【责任编辑: 阚书 TEL:(010)68476606】
|