怎么将MP3转成WAV(用directshow)
这是我在论坛上找的一段代码,可是运行后没反应
bool mp3towav()
{
CoInitialize(0);
HRESULT hr;
IGraphBuilder *pGB = NULL;
hr=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void**)&pGB);
IBaseFilter *pFileReader = NULL;
IBaseFilter *pMpeg1Stream= NULL;
IBaseFilter *pMp3Decoder = NULL;
IBaseFilter *pWaveDest = NULL;
IBaseFilter *pFileWriter = NULL;
IFileSinkFilter* pSink = NULL;
IPin *pin = NULL;
IPin *pOut = NULL;
if (FAILED(hr))return false;
hr = CoCreateInstance(CLSID_AsyncReader,NULL,CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void**)&pFileReader);
hr = CoCreateInstance(CLSID_MPEG1Splitter, NULL, CLSCTX_INPROC_SERVER,IID_IBaseFilter, (void**)&pMpeg1Stream);
hr = CoCreateInstance(CLSID_MP3Decoder, NULL, CLSCTX_INPROC_SERVER,IID_IBaseFilter, (void**)&pMp3Decoder);
hr = CoCreateInstance(CLSID_WavDest, NULL, CLSCTX_INPROC_SERVER,IID_IBaseFilter, (void**)&pWaveDest);
hr = CoCreateInstance(CLSID_FileWriter, NULL, CLSCTX_INPROC_SERVER,IID_IBaseFilter, (void**)&pFileWriter);
//if (FAILED(hr))return false;
pFileWriter->QueryInterface(IID_IFileSinkFilter, (void**)&pSink);
pSink->SetFileName(L"b.wav", NULL);
pSink->Release();
hr = pGB->AddSourceFilter(L"a.mp3",NULL,&pFileReader);
hr = pGB->AddFilter(pFileReader,NULL);
hr = pGB->AddFilter(pMpeg1Stream, NULL);
hr = pGB->AddFilter(pMp3Decoder, NULL);
hr = pGB->AddFilter(pWaveDest, NULL);
hr = pGB->AddFilter(pFileWriter, NULL);
hr = pFileReader->FindPin(L"Output", &pOut);
hr = pMpeg1Stream->FindPin(L"Input", &pin);
hr = pGB->Connect(pOut, pin);
hr = pMpeg1Stream->FindPin(L"Audio", &pOut);
hr = pMp3Decoder->FindPin(L"In", &pin);
hr = pGB->Connect(pOut, pin);
hr= pMp3Decoder->FindPin(L"Out", &pOut);
hr= pWaveDest->FindPin(L"In",&pin);
hr= pGB->Connect(pOut,pin);
hr= pWaveDest->FindPin(L"Out", &pOut);
hr= pFileWriter->FindPin(L"in",&pin);
hr= pGB->Connect(pOut,pin);
//pGB->ConnectDirect(pOut,pin,
pFileReader->Release();
pMpeg1Stream->Release();
pMp3Decoder->Release();
pWaveDest->Release();
pFileWriter->Release();
return true;
}