언어 WINAPI 에서.. 소리재생하는 방법..
2005.06.07 04:50
예 일단 프로젝트에 winmm.lib 이라는 라이브러리를 추가한 후에, 다시 프로젝트에서 MMC.H 파일과 MMC.CPP 파일을 만듭니다.
그리고 MMC.H 파일에 다음을 삽입해주세요
#pragma once
#include "StdAfx.h"
#include <mmsystem.h>
class playMedia {
protected:
MCIDEVICEID wDeviceID;
public:
void ShowError(DWORD err);
BOOL play(CString file);
BOOL play();
};
그리고 MMC.CPP 파일에는 다음을 삽입해주세요
#include "StdAfx.h"
#include "MMC.H"
BOOL playMedia::play(CString file)
{
DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;
MCI_PLAY_PARMS mciPlayParms;
mciOpenParms.lpstrDeviceType = "MPEGVideo";
mciOpenParms.lpstrElementName = file;
if( dwReturn = mciSendCommand(NULL,MCI_OPEN,MCI_NOTIFY | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_WAIT,(DWORD)&mciOpenParms))
{
ShowError(dwReturn);
return false;
}
wDeviceID = mciOpenParms.wDeviceID;
//HWND hWnd = CWnd::FromHandle(CWindow::GetWindow(GW_OWNER));
mciOpenParms.dwCallback = (DWORD)AfxGetMainWnd()->GetSafeHwnd();
mciPlayParms.dwCallback = (DWORD)AfxGetMainWnd()->GetSafeHwnd();
if(dwReturn = mciSendCommand(wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD)&mciPlayParms))
{
ShowError(dwReturn);
mciSendCommand(wDeviceID,MCI_CLOSE,0,NULL);
return false;
}
return true;
}
void playMedia::ShowError(DWORD err)
{
char buf[256];
mciGetErrorString(err,buf,sizeof(buf));
AfxMessageBox(buf,MB_OK | MB_ICONEXCLAMATION);
}
그 후에 음악을 재생시킬 파일에 맨위에 다음을 입력해주세요
playMedia g_Media;
그리고 음악을 재생시킬 함수 안에는
m_Media.play(" I do - 비.mp3");
I do - 비.mp3 안에 재생시키실 파일 이름을 적어주시면 됩니다.~
그리고 DirectX에서 재생하는 방법은 약간 저수준 방식입니다.
덕분에 지지직 거리는 음이나, 노이즈등 여러 효과를 넣을 수 있게 되었죠.
DirectX에서는 사운드 버퍼라는 것을 통해 사용자가 직접 음악 파일의 내용을 불러와서 그 안에 채워서 재생하는 방식입니다.
물론 현재 제가 가르쳐드린 방식도 그런 방식이지만, 그 내부 처리는 생략한 것 입니다.
그럼 즐거운 프로그래밍 하세요 ~//
그리고 MMC.H 파일에 다음을 삽입해주세요
#pragma once
#include "StdAfx.h"
#include <mmsystem.h>
class playMedia {
protected:
MCIDEVICEID wDeviceID;
public:
void ShowError(DWORD err);
BOOL play(CString file);
BOOL play();
};
그리고 MMC.CPP 파일에는 다음을 삽입해주세요
#include "StdAfx.h"
#include "MMC.H"
BOOL playMedia::play(CString file)
{
DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;
MCI_PLAY_PARMS mciPlayParms;
mciOpenParms.lpstrDeviceType = "MPEGVideo";
mciOpenParms.lpstrElementName = file;
if( dwReturn = mciSendCommand(NULL,MCI_OPEN,MCI_NOTIFY | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT | MCI_WAIT,(DWORD)&mciOpenParms))
{
ShowError(dwReturn);
return false;
}
wDeviceID = mciOpenParms.wDeviceID;
//HWND hWnd = CWnd::FromHandle(CWindow::GetWindow(GW_OWNER));
mciOpenParms.dwCallback = (DWORD)AfxGetMainWnd()->GetSafeHwnd();
mciPlayParms.dwCallback = (DWORD)AfxGetMainWnd()->GetSafeHwnd();
if(dwReturn = mciSendCommand(wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD)&mciPlayParms))
{
ShowError(dwReturn);
mciSendCommand(wDeviceID,MCI_CLOSE,0,NULL);
return false;
}
return true;
}
void playMedia::ShowError(DWORD err)
{
char buf[256];
mciGetErrorString(err,buf,sizeof(buf));
AfxMessageBox(buf,MB_OK | MB_ICONEXCLAMATION);
}
그 후에 음악을 재생시킬 파일에 맨위에 다음을 입력해주세요
playMedia g_Media;
그리고 음악을 재생시킬 함수 안에는
m_Media.play(" I do - 비.mp3");
I do - 비.mp3 안에 재생시키실 파일 이름을 적어주시면 됩니다.~
그리고 DirectX에서 재생하는 방법은 약간 저수준 방식입니다.
덕분에 지지직 거리는 음이나, 노이즈등 여러 효과를 넣을 수 있게 되었죠.
DirectX에서는 사운드 버퍼라는 것을 통해 사용자가 직접 음악 파일의 내용을 불러와서 그 안에 채워서 재생하는 방식입니다.
물론 현재 제가 가르쳐드린 방식도 그런 방식이지만, 그 내부 처리는 생략한 것 입니다.
그럼 즐거운 프로그래밍 하세요 ~//
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
27 | DirectX를.. 이해가 불가능..;; | Yeah~☆ | 2005.06.26 | 10 |
26 | 삭제 [1] | AY아이 | 2005.06.25 | 181 |
25 | 간단한 C언어 함수 'for' 에 대한질문 [6] | 창조자 | 2005.06.23 | 90 |
24 | 프로그래밍언어 코볼이 [5] | jaeho | 2005.06.21 | 199 |
» | WINAPI 에서.. 소리재생하는 방법.. | 하앙e | 2005.06.07 | 58 |
22 | 삭제 | AY아이 | 2005.06.07 | 167 |
21 | 비주얼 베이직에서 자료형에 관해... | 하앙e | 2005.06.06 | 21 |
20 | 비주얼 베이직에서 자료형에 관해... [3] | 승사마 | 2005.06.05 | 72 |
19 | 프로그래밍 언어중에 | 하앙e | 2005.06.04 | 6 |
18 | 질문입니다. | 비밀소년 | 2005.06.03 | 4 |
17 | 궁금사항인데물겠습니다... | 비밀소년 | 2005.06.03 | 3 |
16 | 궁금사항인데물겠습니다... | 비밀소년 | 2005.06.03 | 5 |
15 | 프로그래밍 언어중에 [4] | jaeho | 2005.06.03 | 171 |
14 | 질문입니다. | 하앙e | 2005.06.01 | 3 |
13 | 질문입니다. | 글라오스 | 2005.06.01 | 80 |
12 | 배우려는 학생으로서 질문하나하겠습니다. | 하앙e | 2005.05.30 | 7 |
11 | 배우려는 학생으로서 질문하나하겠습니다. [3] | 불타는빨간머리 | 2005.05.30 | 106 |
10 | 궁금사항인데물겠습니다... [1] | 딸기맛식빵 | 2005.05.30 | 71 |
9 | 궁금사항인데물겠습니다... [2] | 딸기맛식빵 | 2005.05.30 | 88 |
8 | Win 32 API 에서 도형에 색깔을.. 어떻게 넣죠?.. | 하앙e | 2005.05.30 | 20 |