Je dois écrire un programme qui peut lire le fichier .ogg Vorbis à l'aide de IGraphBuilder ou de toute autre API Windows directement (en C++/Win32 API)?Comment lire les fichiers ogg Vorbis en utilisant IGraphBuilder
J'ai essayé avec IGraphBuilder mais cela ne fonctionne pas pour moi. Exemple de code:
IMediaControl *pControl = NULL;
IGraphBuilder *pGraph= NULL;
IMediaEventEx *pEvent= NULL;
IMediaPosition *pMediaPosition= NULL;
hr = ::CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr)) {
return false;
}
hr = pGraph->AddFilter(pFilter, L"Out");
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pGraph->QueryInterface(IID_IMediaPosition, (void**)&pMediaPosition);
// Build the graph.
hr = pGraph->RenderFile(mFilePath.c_str()/*"C:\\sample.ogg file"*/, NULL);
/* here hr = 0x80040265 so SUCCEEDED(hr) didnt allow it to enter in if condition*/
if (SUCCEEDED(hr)) {
// Run the graph.
hr = pControl->Run();
if (SUCCEEDED(hr)) {
// Wait for completion.
long evCode;
pEvent->WaitForCompletion(INFINITE, &evCode);
}
}
// Clean up in reverse order.
SAFE_RELEASE(pEvent);
SAFE_RELEASE(pControl);
SAFE_RELEASE(pGraph);
pGraph = NULL;
::CoUninitialize();
NOTE: déclaration ci-dessus hr = pGraph->RenderFile()
retourné les hr = 0x80040265 et l'état if (SUCCEEDED(hr))
ne marche permettent de jouer.
Si je n'utilise pas cette condition, alors pControl->Run()
est exécuté avec le retour ID_OK. Mais rien n'a joué avec le haut-parleur. Veuillez suggérer la solution/méthode.
Que signifie "ça ne marche pas pour moi"? Les erreurs? Des licornes dansent? Autre chose? –
Merci pour la réponse. La fonction RenderFile() a renvoyé hr = 0x80040265. J'ai ajouté la question pour plus de clarté. – KrishPS
Dans le cas de 'IGraphBuilder :: RenderFile()', ce HRESULT correspond à 'VFW_E_UNSUPPORTED_STREAM', ce qui signifie que votre configuration ne supporte pas la lecture de fichiers Ogg Vorbis. Vous devrez installer un filtre qui permet à DirectShow de lire les fichiers Ogg Vorbis, tels que [celui officiel de Xiph] (https://xiph.org/dshow/). – andlabs