播放mp3的3种方式
1.使用Windows Media Player控件
首先插入Windows Media Player控件,把该控件拖到对话框上。并将该控件命名为m_wmpplayer。
void CMusicDlg::OnButton1()
{
// TODO: Add your control notification handler code here
CString filename;
CFileDialog dlg(TRUE);
if(dlg.DoModal()==IDOK)
{
filename=dlg.GetPathName();
m_wmpplayer.SetUrl(filename);
}
}
2.使用MCI
包含头文件#include <Vfw.h>,库文件vfw32.lib
HWND m_Audio;
m_Audio = MCIWndCreate(this->GetSafeHwnd(),AfxGetInstanceHandle(),WS_CHILD | WS_VISIBLE|MCIWNDF_NOMENU,NULL);
void CMusicDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CString filename;
CFileDialog dlg(TRUE);
if(dlg.DoModal()==IDOK)
{
filename=dlg.GetPathName();
MCIWndOpen(m_Audio,filename.GetBuffer(0),0);
filename.ReleaseBuffer();
MCIWndPlay(m_Audio);
}
}
3.使用DirectShow
需要安装DirectX
包含头文件#include <DShow.h>,库文件strmiids.lib
IGraphBuilder* pGBuilder;
IMediaControl* pMControl;
IMediaPosition* pMPos;
CoInitialize(NULL); //初始化COM
//创建各个对象
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(void **)&pGBuilder);
pGBuilder->QueryInterface(IID_IMediaControl,(void **)&pMControl);
pGBuilder->QueryInterface(IID_IMediaPosition,(void **)&pMPos);
void CMusicDlg::OnButton3()
{
// TODO: Add your control notification handler code here
CString filename;
CFileDialog dlg(TRUE);
if(dlg.DoModal()==IDOK)
{
filename=dlg.GetPathName();
WCHAR wstrSoundPath[MAX_PATH];//存储UNICODE形式的路径
MultiByteToWideChar(CP_ACP,0,filename.GetBuffer(0),-1,wstrSoundPath,MAX_PATH);
filename.ReleaseBuffer();
pGBuilder->RenderFile(wstrSoundPath,NULL);//调入文件
//播放MP3文件
pMPos->put_CurrentPosition(0);//移动到文件头
pMControl->Run(); //播放
}
}
#define SAFE_RELEASE(p) if( NULL != p ) { p->Release(); p = NULL;}
BOOL CMusicDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
//释放对象
SAFE_RELEASE(pMControl);
SAFE_RELEASE(pMPos);
SAFE_RELEASE(pGBuilder);
CoUninitialize(); //释放COM
return CDialog::DestroyWindow();
}