您所在的位置: 首页>>读书频道>>设计开发>>C++>>

11.2.2 播放WAVE文件

http://book.51cto.com  2008-05-03 17:16  明日科技 宋坤 刘锐宁  人民邮电出版社  我要评论(0)
  • 摘要:《Visual C++程序设计自学手册》主要是以初学者学习程序开发为中心,由浅入深地全面介绍使用Visual C++ 6.0开发程序的各种技术。本章讲述了多媒体技术,就位图文件、WAVE文件、AVI文件和Flash动画进行简单的介绍,其中需要重点掌握的是位图文件的各种操作。本节讲了播放WAVE文件
  • 标签:播放  WAVE  文件  Visual C++程序设计自学手册

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】

回书目   上一节   下一节
赛门铁克诺顿误杀Windows系统文件 导致百万系统崩溃
深入Vista应用程序开发
Ruby on Rails 社区网站开发
ASP.NET从入门到精通
Java完全自学宝典
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有