如何在程序中实现MP3音乐文件的播放呀?急! 如何在程序中实现MP3音乐文件的播放呀?急! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以用VC的WINDOWS MEDIA PLAYER控件! use dshow! IGraphBuilder * pGraph; IMediaControl *pMediaControl; IMediaPosition *pMediaPos; IMediaEvent *pEvent; IVideoWindow *pVW = NULL; REFTIME length; WCHAR path[MAX_PATH]; TCHAR filepath[MAX_PATH]; strcpy(filepath,szFilename); MultiByteToWideChar(CP_ACP, 0, filepath, -1, path, MAX_PATH); CoInitialize(NULL); HRESULT hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pGraph); if(FAILED(hr)) { AfxMessageBox("DirectShow initialize failed!"); return; } else { pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVW); pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); pGraph->QueryInterface(IID_IMediaPosition,(void **)&pMediaPos); pGraph->RenderFile(path, NULL); pMediaPos->get_Duration(&length); pVW->put_Owner((OAHWND)m_hWnd); hr = pVW->put_MessageDrain((OAHWND)m_hWnd); pVW->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS); pVW->SetWindowPosition(0,0,472,320); pMediaControl->Run(); } pGraph->Release(); CoUninitialize(); 直接用Media Play Control控件,挺方便的,我就是用它m_media.SetFileName("C:\\01.mp3");m_media.Start(); //-----------------------------------------------------------------------------// Purpose: Play Mp3 File// Input : sFileName - Mp3 File Name// Output : void WINAPI//-----------------------------------------------------------------------------void WINAPI PlayMp3File(CString sFileName){ MCI_OPEN_PARMS mciopenparms; MCI_PLAY_PARMS mciplayparms; mciopenparms.lpstrElementName= sFileName; mciopenparms.lpstrDeviceType=NULL; mciopenparms.dwCallback=NULL; MCIERROR e = mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD)(LPVOID)&mciopenparms); DWORD m_count=mciopenparms.wDeviceID; mciplayparms.dwCallback= NULL;//(DWORD)GetSafeHwnd(); DWORD cdlen=getinfo(MCI_STATUS_LENGTH,m_count); DWORD cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen),MCI_HMS_SECOND(cdlen)); mciplayparms.dwFrom=0; mciplayparms.dwTo=cdto; e = mciSendCommand(mciopenparms.wDeviceID,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD)(LPVOID)& mciplayparms); }//-----------------------------------------------------------------------------// Purpose: Get The Play Item's Status//-----------------------------------------------------------------------------DWORD WINAPI getinfo(DWORD item,DWORD& m_count){ MCI_STATUS_PARMS mcistatusparms; mcistatusparms.dwCallback=NULL;//(DWORD)GetSafeHwnd(); mcistatusparms.dwItem=item; mcistatusparms.dwReturn=0; mciSendCommand(m_count,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms); return mcistatusparms.dwReturn;}但是这样做只能处理mp3后缀的文件,否则不行(就算文件内容为mp3,但是后缀不对的话也不行) VC在属性表单中如何获取它下面是哪个属性页是当前活动的? VC 连接数据库 编辑框控件让它的内容自动显示最底一行? 真诚求购----1990年"北京希望高级电脑技术公司"的<编译原理与实践>. 有关AVI或MPEG文件格式的问题 怎么将对话框设为不可见? 简单的加密解密问题?? 怎样在win2000 NTFS 分区里使用Ghost来备份分区? 如何实现变量共享的问题??? 使用DBGrid表,有没有得到每一个的onclick的方法 菜鸟提问!!!,如何使右键具有动作相应!! 送分给小弟!闲人勿进!谢谢
IGraphBuilder * pGraph;
IMediaControl *pMediaControl;
IMediaPosition *pMediaPos;
IMediaEvent *pEvent;
IVideoWindow *pVW = NULL;
REFTIME length;
WCHAR path[MAX_PATH]; TCHAR filepath[MAX_PATH];
strcpy(filepath,szFilename);
MultiByteToWideChar(CP_ACP, 0, filepath, -1, path, MAX_PATH); CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&pGraph);
if(FAILED(hr))
{
AfxMessageBox("DirectShow initialize failed!");
return;
}
else
{
pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVW);
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
pGraph->QueryInterface(IID_IMediaPosition,(void **)&pMediaPos); pGraph->RenderFile(path, NULL);
pMediaPos->get_Duration(&length); pVW->put_Owner((OAHWND)m_hWnd);
hr = pVW->put_MessageDrain((OAHWND)m_hWnd);
pVW->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS); pVW->SetWindowPosition(0,0,472,320); pMediaControl->Run();
}
pGraph->Release();
CoUninitialize();
m_media.SetFileName("C:\\01.mp3");
m_media.Start();
// Purpose: Play Mp3 File
// Input : sFileName - Mp3 File Name
// Output : void WINAPI
//-----------------------------------------------------------------------------
void WINAPI PlayMp3File(CString sFileName)
{
MCI_OPEN_PARMS mciopenparms;
MCI_PLAY_PARMS mciplayparms;
mciopenparms.lpstrElementName= sFileName;
mciopenparms.lpstrDeviceType=NULL;
mciopenparms.dwCallback=NULL;
MCIERROR e = mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO,(DWORD)(LPVOID)&mciopenparms);
DWORD m_count=mciopenparms.wDeviceID;
mciplayparms.dwCallback= NULL;//(DWORD)GetSafeHwnd();
DWORD cdlen=getinfo(MCI_STATUS_LENGTH,m_count);
DWORD cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen),MCI_HMS_SECOND(cdlen));
mciplayparms.dwFrom=0;
mciplayparms.dwTo=cdto;
e = mciSendCommand(mciopenparms.wDeviceID,MCI_PLAY,MCI_TO|MCI_FROM,(DWORD)(LPVOID)& mciplayparms);
}
//-----------------------------------------------------------------------------
// Purpose: Get The Play Item's Status
//-----------------------------------------------------------------------------
DWORD WINAPI getinfo(DWORD item,DWORD& m_count)
{
MCI_STATUS_PARMS mcistatusparms;
mcistatusparms.dwCallback=NULL;//(DWORD)GetSafeHwnd();
mcistatusparms.dwItem=item;
mcistatusparms.dwReturn=0;
mciSendCommand(m_count,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms);
return mcistatusparms.dwReturn;
}但是这样做只能处理mp3后缀的文件,否则不行(就算文件内容为mp3,但是后缀不对的话也不行)