API / MFC/DirectShow

음원 재생 기능

행복하면 2010. 3. 17. 11:43
간단한 음원 재생 기능을 구현 하는 소스에 대해서 설명을 해 보겠습니다.

일단 말그대로 재생 종료 밖에 없기 때문에

아주 간단한 소스가 됩니다.

기본 버튼은 밑의 그림 처럼 열기, 시작, 종료 3개의 버튼 밖에 없습니다.


여기에서
열기 버튼은 button1로 되어 있으며,
시작 버튼은 button2, 종료 버튼은 button3으로 되어 있습니다.

소스 상으로 간단히 보면,

BOOL CtteessDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	........................

	CoInitialize(NULL); // COM 초기화
	CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, 
		         IID_IGraphBuilder, (void **)&pGraph); // COM 컴포넌트 생성
	

	// 인터페이스를 가져오기 위해 사용되는 함수
	pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); 
	pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);

	........................

	return TRUE;
	
}


OnInitDialog() 함수에서 간단한 초기화 및 생성을 시켜 주는 함수를 사용합니다.

그리고 button1이 클릭되어 졌을 때 파일을 찾아서 열어 주어야 되기 때문에,


void CtteessDlg::OnBnClickedButton1()
{
	CFileDialog fDlg(TRUE,_T("MP3"),_T("*.MP3"),
 				OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
 				_T("MP3 파일 (*.MP3)"));

 	fDlg.DoModal();

	CString str(_T(""));
	
	//지정된 파일을 렌더링 하는 필터 그래프를 생성
	pGraph->RenderFile(fDlg.GetPathName(), NULL);
}


위와 같은 소스를 작성하였습니다.

그리고 button2에서 시작을 하기 위해서

void CtteessDlg::OnBnClickedButton2()
{
	// 필터 그래프를 실행하여 미디어 재생
	pControl->Run();	
}



소스를 작성 하고,

종료를 하기 위해서


void CtteessDlg::OnDestroy()
{
	CDialog::OnDestroy();
	// 필터 그래프 동작 중지
	pControl->Stop();
	
	// 참조 해제
	pControl->Release();
	pEvent->Release();
	pGraph->Release();

	// COM 해제
	CoUninitialize();
}

void CtteessDlg::OnBnClickedButton3()
{
	OnCancel();
}


이렇게 해 주어 생성 한 것을 모두 해제 시키면서 종료를 하도록 구현하였습니다.