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】