由于要播放设备录音文件的需要,自己写了一个音频WAV文件的播放类,有兴趣的可以自己查些资料,进行学习!WINDOWS媒体库的功能很多,除了能播放WAV文件,还能播放MP3,CD光盘类的文件。好了,直接看代码吧!
使用PlayWav指定WAV文件就可以播放了。方式如下:
CAudio m_Audio;
m_Audio.PlayWav(AfxGetApp()->GetMainWnd(), "c://1.wav");
CAudio类头文件内容Audio.h
#if !defined(AFX_AUDIO_H__30973135_DE7F_4E41_A6B7_E1AA31A159B3__INCLUDED_)
#define AFX_AUDIO_H__30973135_DE7F_4E41_A6B7_E1AA31A159B3__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Audio.h : header file
//
//音频播放类,只针对WAV文件
#include"mmsystem.h"
#include"dbt.h"
#pragma comment(lib,"winmm.lib")
/
// CAudio window
class CAudio : public CWnd
{
// Construction
public:
CAudio();
// Attributes
public:
MCIDEVICEID m_MDevID;//设备ID
// Operations
public:
bool Open(CString strFileName); //打开音频设备
bool Play(CWnd *pWnd); //开始播放
bool Stop(); //停止播放
bool Close(); //关闭音频设备
void PlayWav(CWnd *pWnd,CString strFileName);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAudio)
//}}AFX_VIRTUAL
// Implementation
public:
virtual ~CAudio();
// Generated message map functions
protected:
//{{AFX_MSG(CAudio)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_AUDIO_H__30973135_DE7F_4E41_A6B7_E1AA31A159B3__INCLUDED_)
CAudio类源文件内容Audio.cpp
// Audio.cpp : implementation file
//
#include "stdafx.h"
#include "ATFWMNP.h"
#include "Audio.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/
// CAudio
CAudio::CAudio()
{
}
CAudio::~CAudio()
{
}
BEGIN_MESSAGE_MAP(CAudio, CWnd)
//{{AFX_MSG_MAP(CAudio)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/
// CAudio message handlers
//打开音频设备
bool CAudio::Open(CString strFileName)
{
unsigned long re;
MCI_OPEN_PARMS OpenParms;
//设置参数
OpenParms.lpstrDeviceType=(LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
OpenParms.lpstrElementName= strFileName;
OpenParms.wDeviceID=0;
//打开设备
re=mciSendCommand(NULL,MCI_OPEN,MCI_WAIT|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&OpenParms);
m_MDevID=OpenParms.wDeviceID;
if(re)
{
return false;
}
return true;
}
//开始播放
bool CAudio::Play(CWnd *pWnd)
{
unsigned long re;
MCI_PLAY_PARMS PlayParms;
//设置参数
PlayParms.dwCallback=(DWORD)pWnd->m_hWnd;
//发送命令
re=mciSendCommand(m_MDevID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&PlayParms);
if(re)
{
return false;
}
return true;
}
//停止播放
bool CAudio::Stop()
{
unsigned long re;
//发送命令
re=mciSendCommand(m_MDevID,MCI_STOP,MCI_WAIT,NULL);
if(re)
{
return false;
}
return true;
}
//关闭音频设备
bool CAudio::Close()
{
unsigned long re;
//发送命令
re=mciSendCommand(m_MDevID,MCI_CLOSE,NULL,NULL);
if(re)
{
return false;
}
return false;
}
//播放文件
void CAudio::PlayWav(CWnd *pWnd,CString strFileName)
{
Close();
if(Open(strFileName))
{
Play(pWnd);
}
}