• ||
    간단한 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]
 
삼성전자 소프트웨어 멤버십
과제 Tech Note 입니다.

최근 글