002
06.10.2002, 00:28 Uhr
Tobi
|
Hi!
oder mit DirectSound
Code: |
#include "stdafx.h" #include "stdio.h" #include "dshow.h"
#pragma comment (lib,"amstrmid.lib") #pragma comment (lib,"strmiids.lib")
IGraphBuilder *GB=NULL; IMediaControl *MC=NULL; IMediaEventEx *ME=NULL; IBasicAudio *BA=NULL; IMediaSeeking *MS=NULL;
|
und als zum Laden einer Datei
Code: |
HRESULT LoadFile(const char *name) { HRESULT hres; //create graphbuilder hres=CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&GB); if(hres!=S_OK) return hres; WCHAR wFile[MAX_PATH]; MultiByteToWideChar(CP_ACP,0,name,-1,wFile,MAX_PATH); //call codec, which will render our audiofile hres=GB->RenderFile(wFile,NULL); if(hres!=S_OK) return hres; //create mediacontrol for play and stop hres=GB->QueryInterface(IID_IMediaControl,(void **)&MC); if(hres!=S_OK) return hres; //cretae mediaevent hres=GB->QueryInterface(IID_IMediaEventEx,(void **)&ME); if(hres!=S_OK) return hres; //create seekingobject for get & set streampointer hres=GB->QueryInterface(IID_IMediaSeeking,(void **)&MS); if(hres!=S_OK) return hres; //call audiointerface hres=GB->QueryInterface(IID_IBasicAudio,(void **)&BA); return hres; }
|
Wenn du eine Datei geladen hast, dann hast du folgende Möglichkeiten:
Code: |
MC->Run();//Abspielen der Datei MC->Stop();//Anhalten __int64 current, end; MS->GetPositions(&cur,&end);//Positonen holen SetPos(__int64 pos) { if(MS->SetPositions(&pos,AM_SEEKING_AbsolutePositioning,NULL,NULL)!=S_OK)return FALSE; return TRUE; }//Position setzen
|
Das ganze basiert auf COM, deshalb
Code: |
//ganz am Anfang: CoInitialize(NULL);
//und beim Beenden des Programms: if(MS!=NULL)MS->Release(); if(BA!=NULL)BA->Release(); if(ME!=NULL)ME->Release(); if(MC!=NULL)MC->Release(); if(GB!=NULL)GB->Release(); CoUninitialize();
|
bisschen viel Code (hoff das ich nix vergessen hab), aber damit geht alles (mp3,wav,mpg...) -- Mit Computern können wir Probleme lösen die wir ohne sie gar nicht erst hätten!
mfg
Tobi |