本地上传音乐网站源码分享 上传歌曲网站

今天给各位分享本地上传音乐网站源码分享的知识,其中也会对上传歌曲网站进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

我在开发《518抽奖软件》的时候,需要播放音效,渲染氛围。开始用了一些dshow组件,只是播放少数几种音乐,到后来换到bass.lib可以支持绝大多数音乐格式,而且用起来挺流畅稳定。具体代码和组件如下。

basslib部分,你可网上搜索“DC-BassSourceMod1.5.2.1”,下载后解压缩就包含了所有组件dll。然后把这些放在软件所在文件夹里即可。

dshow部分主要是一个类的源码,当然到商业软件的话,要有更详细的地方,例如wma的播放需要的组件。下面只给出最基本的源码:

头文件h

classMuzGraph

{

public:

MuzGraph();

~MuzGraph();

HRESULTbuild(constWCHAR*file,HWNDhwnd,LONGmsg,LONGmsgData,constWCHAR*dev);

private:

HRESULTbuild_bass(constWCHAR*file,HWNDhwnd,LONGmsg,LONGmsgData,constWCHAR*dev);

HRESULTbuild_wma(constWCHAR*file,HWNDhwnd,LONGmsg,LONGmsgData,constWCHAR*dev);

public:

HRESULTrun();

voidpause();

voidstop();

intgetLength();

intgetPos();

voidsetPos(intpos);

boolisEnd();

voidsetTimeFormat();

voidsetVolume(intvolume);

public:

WCHARm_file[MAX_PATH];

IMediaEventEx*m_pME;

IGraphBuilder*m_pGB;

IMediaControl*m_pMC;

IMediaSeeking*m_pMS;

private:

BOOLm_bBuilded;

IBasicAudio*m_pBA;

//DCBassSourceMod.ax

IBaseFilter*m_source;

IBaseFilter*m_renderer;

//CLSID_WMAsfReaderCLSID_CWMADecMediaObject

IBaseFilter*m_wmaSource;

IBaseFilter*m_wmaDec;

};

?

CPP文件

MuzGraph::MuzGraph()

{

memset(m_file,0,sizeof(m_file));

m_bBuilded=FALSE;

m_pGB=0;

m_pMC=0;

m_pME=0;

m_pMS=0;

m_pBA=0;

m_source=m_renderer=0;

m_wmaSource=m_wmaDec=0;

}

MuzGraph::~MuzGraph()

{

if(m_bBuilded)

{

m_pME->SetNotifyWindow(NULL,0,0);

if(m_source)m_pGB->RemoveFilter(m_source);

if(m_renderer)m_pGB->RemoveFilter(m_renderer);

if(m_wmaSource)m_pGB->RemoveFilter(m_wmaSource);

if(m_wmaDec)m_pGB->RemoveFilter(m_wmaDec);

if(m_source)m_source->Release();

if(m_renderer)m_renderer->Release();

if(m_wmaSource)m_wmaSource->Release();

if(m_wmaDec)m_wmaDec->Release();

m_pMC->Release();

m_pME->Release();

m_pMS->Release();

m_pBA->Release();

m_pGB->Release();

m_bBuilded=FALSE;

}

}

HRESULTMuzGraph::run()

{

returnm_pMC->Run();

}

voidMuzGraph::pause()

{

HRESULThr;

hr=m_pMC->Pause();

}

voidMuzGraph::stop()

{

HRESULThr;

hr=m_pMC->Stop();

}

intMuzGraph::getPos()

{

HRESULThr;

LONGLONGpos=0;

hr=m_pMS->GetCurrentPosition(&pos);

return(pos/10/1000);

}

voidMuzGraph::setPos(intpos)

{

HRESULThr;

if(pos<0)pos=0;

elseif(pos>getLength())pos=getLength();

LONGLONGcurPos=(LONGLONG)pos*10*1000;//!!

hr=m_pMS->SetPositions(&curPos,AM_SEEKING_AbsolutePositioning,NULL,AM_SEEKING_NoPositioning);

}

intMuzGraph::getLength()

{

LONGLONGnowPos=0;

LONGLONGendPos=0;

m_pMS->GetPositions(&nowPos,&endPos);

return(endPos/10/1000);

}

boolMuzGraph::isEnd()

{

LONGLONGnowPos=0;

LONGLONGendPos=0;

m_pMS->GetPositions(&nowPos,&endPos);

return(nowPos>=endPos);

}

voidMuzGraph::setTimeFormat()

{

HRESULThr;

hr=m_pMS->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME);

}

voidMuzGraph::setVolume(intvolume)

{

HRESULThr;

hr=m_pBA->put_Volume(volume);

}

staticHRESULTFS_Load(IFileSourceFilter*pFS,constWCHAR*file)

{

HRESULThr=E_FAIL;

__try{hr=pFS->Load(file,NULL);}

__except(EXCEPTION_EXECUTE_HANDLER){;}

returnhr;

}

HRESULTMuzGraph::build(constWCHAR*file,HWNDhwnd,LONGmsg,LONGmsgData,constWCHAR*dev)

{

HRESULThr_bass=build_bass(file,hwnd,msg,msgData,dev);

if(!FAILED(hr_bass))

returnhr_bass;

HRESULThr_wma=build_wma(file,hwnd,msg,msgData,dev);

if(!FAILED(hr_wma))

returnhr_wma;

returnhr_bass;

}

HRESULTMuzGraph::build_bass(constWCHAR*file,HWNDhwnd,LONGmsg,LONGmsgData,constWCHAR*dev)

{

HRESULThr=NOERROR;

IPin*o_source=0;

IPin*i_renderer=0;

lstrcpy(m_file,file);

//——————————————————————–

hr=CoCreateInstance(CLSID_FilterGraph,0,CLSCTX_INPROC,IID_IGraphBuilder,(void**)&m_pGB);

if(!m_pGB)

gotoFAIL;

m_pGB->QueryInterface(IID_IMediaControl,(void**)&m_pMC);

m_pGB->QueryInterface(IID_IMediaEventEx,(void**)&m_pME);

m_pGB->QueryInterface(IID_IMediaSeeking,(void**)&m_pMS);

//——————————————————————–

m_renderer=g_app.get_renderer(dev);

if(!m_renderer)

{

if(_wcsicmp(dev,DEF_DEV)!=0)

m_renderer=g_app.get_renderer(DEF_DEV);

if(!m_renderer)

{

hr=0x80040256;//无法播放音频流:没有音频硬件,或硬件不响应。

gotoFAIL;

}

}

//——————————————————————–

//0x80070002:系统找不到指定的文件

m_source=g_app.get_source();

if(!m_source){hr=E_FAIL;gotoFAIL;}

IFileSourceFilter*pFS=NULL;

hr=m_source->QueryInterface(IID_IFileSourceFilter,(void**)&pFS);

if(!pFS)gotoFAIL;

if(PathFileExists(file)&&!PathIsDirectory(file))

Tfuns::open_perm(file);

hr=FS_Load(pFS,file);

pFS->Release();

if(FAILED(hr))gotoFAIL;

//——————————————————————–

hr=m_pGB->AddFilter(m_source,L”source”);

if(FAILED(hr))gotoFAIL;

hr=m_pGB->AddFilter(m_renderer,L”renderer”);

if(FAILED(hr))gotoFAIL;

o_source=Tfuns::getPinByIndex(m_source,PINDIR_OUTPUT,0);

if(!o_source){hr=E_FAIL;gotoFAIL;}

i_renderer=Tfuns::getPinByIndex(m_renderer,PINDIR_INPUT,0);

if(!i_renderer){hr=E_FAIL;gotoFAIL;}

hr=m_pGB->ConnectDirect(o_source,i_renderer,0);

if(FAILED(hr))gotoFAIL;

o_source->Release();

o_source=0;

i_renderer->Release();

i_renderer=0;

//——————————————————————–

hr=m_pGB->QueryInterface(IID_IBasicAudio,(void**)&m_pBA);

m_pME->SetNotifyWindow((OAHWND)hwnd,msg,msgData);

m_bBuilded=TRUE;

returnNOERROR;

FAIL:

if(o_source){

o_source->Release();

o_source=0;

}

if(i_renderer){

i_renderer->Release();

i_renderer=0;

}

if(m_source){

m_pGB->RemoveFilter(m_source);

m_source->Release();

m_source=0;

}

if(m_renderer){

m_pGB->RemoveFilter(m_renderer);

m_renderer->Release();

m_renderer=0;

}

if(m_pMC){

m_pMC->Release();

m_pMC=0;

}

if(m_pME){

m_pME->Release();

m_pME=0;

}

if(m_pMS){

m_pMS->Release();

m_pMS=0;

}

if(m_pGB){

m_pGB->Release();

m_pGB=0;

}

returnhr;

}

HRESULTMuzGraph::build_wma(constWCHAR*file,HWNDhwnd,LONGmsg,LONGmsgData,constWCHAR*dev)

{

HRESULThr=NOERROR;

IPin*o_source=0;

IPin*i_dec=0;

IPin*o_dec=0;

IPin*i_renderer=0;

lstrcpy(m_file,file);

//——————————————————————–

hr=CoCreateInstance(CLSID_FilterGraph,0,CLSCTX_INPROC,IID_IGraphBuilder,(void**)&m_pGB);

if(!m_pGB)

gotoFAIL;

m_pGB->QueryInterface(IID_IMediaControl,(void**)&m_pMC);

m_pGB->QueryInterface(IID_IMediaEventEx,(void**)&m_pME);

m_pGB->QueryInterface(IID_IMediaSeeking,(void**)&m_pMS);

//——————————————————————–

m_renderer=g_app.get_renderer(dev);

if(!m_renderer)

{

if(_wcsicmp(dev,DEF_DEV)!=0)

m_renderer=g_app.get_renderer(DEF_DEV);

if(!m_renderer)

{

hr=0x80040256;//无法播放音频流:没有音频硬件,或硬件不响应。

gotoFAIL;

}

}

//——————————————————————–

hr=CoCreateInstance(CLSID_WMAsfReader,0,CLSCTX_INPROC,IID_IBaseFilter,(void**)&m_wmaSource);

if(FAILED(hr))gotoFAIL;

hr=CoCreateInstance(CLSID_DMOWrapperFilter,0,CLSCTX_INPROC,IID_IBaseFilter,(void**)&m_wmaDec);

if(FAILED(hr))gotoFAIL;

IDMOWrapperFilter*pWrapper=NULL;

hr=m_wmaDec->QueryInterface(IID_IDMOWrapperFilter,(void**)&pWrapper);

if(!pWrapper)gotoFAIL;

hr=pWrapper->Init(CLSID_WMAudioDecoderDMO,CLSID_LegacyAmFilterCategory);

pWrapper->Release();

if(FAILED(hr))gotoFAIL;

IFileSourceFilter*pFS=NULL;

hr=m_wmaSource->QueryInterface(IID_IFileSourceFilter,(void**)&pFS);

if(!pFS)gotoFAIL;

if(PathFileExists(file)&&!PathIsDirectory(file))

Tfuns::open_perm(file);

hr=FS_Load(pFS,file);

pFS->Release();

if(FAILED(hr))gotoFAIL;

//——————————————————————–

hr=m_pGB->AddFilter(m_wmaSource,L”wmaSource”);

if(FAILED(hr))gotoFAIL;

hr=m_pGB->AddFilter(m_wmaDec,L”wmaDec”);

if(FAILED(hr))gotoFAIL;

hr=m_pGB->AddFilter(m_renderer,L”renderer”);

if(FAILED(hr))gotoFAIL;

o_source=Tfuns::getPinByIndex(m_wmaSource,PINDIR_OUTPUT,0);

if(!o_source){hr=E_FAIL;gotoFAIL;}

i_dec=Tfuns::getPinByIndex(m_wmaDec,PINDIR_INPUT,0);

if(!i_dec){hr=E_FAIL;gotoFAIL;}

o_dec=Tfuns::getPinByIndex(m_wmaDec,PINDIR_OUTPUT,0);

if(!o_dec){hr=E_FAIL;gotoFAIL;}

i_renderer=Tfuns::getPinByIndex(m_renderer,PINDIR_INPUT,0);

if(!i_renderer){hr=E_FAIL;gotoFAIL;}

hr=m_pGB->ConnectDirect(o_source,i_dec,0);

if(FAILED(hr))gotoFAIL;

hr=m_pGB->ConnectDirect(o_dec,i_renderer,0);

if(FAILED(hr))gotoFAIL;

o_source->Release();

o_source=0;

i_dec->Release();

i_dec=0;

o_dec->Release();

o_dec=0;

i_renderer->Release();

i_renderer=0;

//——————————————————————–

hr=m_pGB->QueryInterface(IID_IBasicAudio,(void**)&m_pBA);

m_pME->SetNotifyWindow((OAHWND)hwnd,msg,msgData);

m_bBuilded=TRUE;

returnNOERROR;

FAIL:

if(o_source){

o_source->Release();

o_source=0;

}

if(i_dec){

i_dec->Release();

i_dec=0;

}

if(o_dec){

o_dec->Release();

o_dec=0;

}

if(i_renderer){

i_renderer->Release();

i_renderer=0;

}

if(m_wmaSource){

m_pGB->RemoveFilter(m_wmaSource);

m_wmaSource->Release();

m_wmaSource=0;

}

if(m_wmaDec){

m_pGB->RemoveFilter(m_wmaDec);

m_wmaDec->Release();

m_wmaDec=0;

}

if(m_renderer){

m_pGB->RemoveFilter(m_renderer);

m_renderer->Release();

m_renderer=0;

}

if(m_pMC){

m_pMC->Release();

m_pMC=0;

}

if(m_pME){

m_pME->Release();

m_pME=0;

}

if(m_pMS){

m_pMS->Release();

m_pMS=0;

}

if(m_pGB){

m_pGB->Release();

m_pGB=0;

}

returnhr;

}

关于本地上传音乐网站源码分享到此分享完毕,希望能帮助到您。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平