-
간단한 mp3 플레이어 만들어 보기!@ ( ) - 2009/09/08
안녕하세요 !
간단한 자작 mp3플레이어를 만들수있는 코드와 설명을 하겠습니다.
먼저 directshow SDK 가 깔려있어야 겠죠?
//////////////////////////////////////////////////////////////
#include <dshow.h>
#include <conio.h>
void main()
{
char c = 0;
HRESULT hr;
IGraphBuilder * pFGM;
IMediaControl * pMC;
// COM 라이브러리를 초기화해야 합니다.
hr = CoInitialize(NULL);
if (FAILED(hr))
{
printf("COM 라이브러리를 초기화할 수 없습니다.\n");
return;
}// 필터 그래프 매니저 컴포넌트를 생성하고, 인터페이스를 가져 와야하겠죠?
hr = CoCreateInstance(
CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (LPVOID*)&pFGM);
if (FAILED(hr))
{
printf("필터 그래프 매니저를 생성할 수 없습니다.\n");
return;
}printf("필터 그래프 매니저가 성공적으로 만들어졌습니다.\n");
// 필터 그래프를 만들기 위해 널 렌더링을 실행한다.(디폴트 랜더러가 실행됩니다^^)
hr = pFGM->RenderFile(L"ayaysir - BPM 156.mp3", NULL);
if (FAILED(hr))
{
printf("필터 그래프를 만드는데 실패했습니다.\n");
return;
}printf("필터 그래프가 성공적으로 만들어졌습니다.\n");
// 필터 그래프 매니저로부터 미디어 제어 인터페이스를 가져옵니다.
hr = pFGM->QueryInterface(IID_IMediaControl, (void**)&pMC);
if (FAILED(hr))
{
printf("필터 그래프 매니저로부터 IMediaControl 인터페이스를 가져올 수 없습니다.\n");
return;
}// 아래 루프에서 미디어 제어 인터페이스를 이용하여 미디어 파일을 제어한다.
//IMediaControl * pMC; 변수 선언한것 기억 나시죠?
//이 변수를 가지고 미디어 파일을 제어 한답니다.
//이 기능을 수행하기 위해
//바로 위에서 hr = pFGM->QueryInterface(IID_IMediaControl, (void**)&pMC);
//이런 작업을 해준 것입니다.
while (c != 'q')
{
printf("Commands: r(run/resume), s(stop), p(pause), q(quit)\n");
printf("> ");
c = _getche();switch (c)
{
case 'r':
hr = pMC->Run();
printf("\n미디어 파일을 재생합니다.\n");
if (FAILED(hr))
printf("미디어 파일을 재생할 수 없습니다.\n");
break;case 's':
pMC->Stop();
printf("\n미디어 파일 재생을 중지합니다.\n");
if (FAILED(hr))
printf("미디어 파일 재생을 중지할 수 없습니다.\n");
break;case 'p':
pMC->Pause();
printf("\n미디어 파일 재생을 일시정지합니다.\n");
if (FAILED(hr))
printf("미디어 파일 재생을 일시정지할 수 없습니다.\n");
break;case 'q':
printf("\n프로그램을 종료합니다.\n");
// 특별한 조치를 취하지는 않음.
break;default:
;
}printf("\n");
}// 종료 전에 리소스 해제
pMC->Stop();
pMC->Release();
pFGM->Release();
CoUninitialize();
}
이렇게하면 mp3를 실행하는 간단한 플레이어가 만들어진답니다.
데이터의 흐름은 스트림과 같아서 Source에서 Renderer로 흐르게 되는데
사이에 hr = pFGM->QueryInterface(IID_IMediaControl, (void**)&pMC) 이런 인터페이스를
이용하여 멈추거나 , 재생하거나 하는것이죠^^- TRACKBACK : http://www.swssm.org/trackback.php?id=341
- [prev] ... 1 ... [next]
