在php播放mp3,用DirectShow播放MP3
它是使用DirectShow播放MP3的封装类,要使用该功能,您需要安装DirectMedia SDK,你可以随便使用该代码,希望对您有用。该封装类只有一个文件:mp3.h,源代码如下:// MP3.h#include #include #include class Mp3{private:IBaseFilter*pif;IGraphBuilder *pigb;IMediaContr...
它是使用DirectShow播放MP3的封装类,要使用该功能,您需要安装DirectMedia SDK,你可以随便使用该代码,希望对您有用。
该封装类只有一个文件:mp3.h,源代码如下:
// MP3.h
#include
#include
#include
class Mp3
{
private:
IBaseFilter * pif;
IGraphBuilder * pigb;
IMediaControl * pimc;
IMediaEventEx * pimex;
bool ready;
public:
Mp3();
~Mp3();
void Load(LPSTR filename);
void Cleanup();
void Play();
void Pause();
void Stop();
};
// MP3.cpp
#include "Mp3.h"
Mp3::Mp3()
{
pif = NULL;
pigb = NULL;
pimc = NULL;
pimex = NULL;
ready = false;
CoInitialize(NULL);
}
Mp3::~Mp3()
{
Cleanup();
}
void Mp3::Cleanup()
{
CoUninitialize();
if (pimc)
pimc->Stop();
if(pif)
{
pif->Release();
pif = NULL;
}
if(pigb)
{
pigb->Release();
pigb = NULL;
}
if(pimc)
{
pimc->Release();
pimc = NULL;
}
if(pimex)
{
pimex->Release();
pimex = NULL;
}
}
void Mp3::Load(LPSTR szFile)
{
WCHAR wFile[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, szFile, -1, wFile, MAX_PATH);
if (SUCCEEDED(CoCreateInstance( CLSID_FilterGraph,
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(void **)&this->pigb)))
{
pigb->QueryInterface(IID_IMediaControl, (void **)&pimc);
pigb->QueryInterface(IID_IMediaEventEx, (void **)&pimex);
if (SUCCEEDED(pigb->RenderFile(wFile, NULL)))
{
ready = true;
}
}
}
void Mp3::Play()
{
if (ready)
{
pimc->Run();
}
}
void Mp3::Pause()
{
if (ready)
{
pimc->Pause();
}
}
void Mp3::Stop()
{
if (ready)
{
pimc->Stop();
}
}
//Alan
//-----
//alankemp@
来源:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)