본문 바로가기
C++/WinAPI

[WinAPI] sound

by sihyeong 2022. 12. 17.

PlaySound()

  • 가장 기본적인 sound 함수
  • #include <mmsystem.h>
    #pragma comment(lib,"winmm.lib")를 필요로 한다.
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")

 

BOOL PlaySound(
   LPCTSTR pszSound,
   HMODULE hmod,
   DWORD   fdwSound
);

 

PlaySound(L"filepath.wav", 0, SND_FILENAME | SND_ASYNC);

 

SND_ASYNC 사운드는 비동기적으로 재생되며 PlaySound 는 사운드가 시작된 직후에 반환됩니다. 비동기적으로 재생되는 파형 사운드를 종료하려면 pszSound 를 NULL 로 설정하여 PlaySound 를 호출합니다 .
SND_FILENAME pszSound 매개 변수는 파일 이름입니다. 파일을 찾을 수 없으면 SND_NODEFAULT 플래그가 설정되어 있지 않으면 함수는 기본 사운드를 재생합니다 .

 

https://learn.microsoft.com/ko-kr/previous-versions/dd743680(v=vs.85)?f1url=%3FappId%3DDev16IDEF1%26l%3DKO-KR%26k%3Dk(PLAYSOUNDAPI%252FPlaySoundW)%3Bk(PlaySoundW)%3Bk(DevLang-C%252B%252B)%3Bk(TargetOS-Windows)%26rd%3Dtrue 

 

PlaySound function (Windows)

Table of contents PlaySound function Article 06/06/2016 4 minutes to read In this article --> The PlaySound function plays a sound specified by the given file name, resource, or system event. (A system event may be associated with a sound in the registry o

learn.microsoft.com

 

MCI

  • playsound보단 복잡한 작업을 할 수 있다.
  • 재생 시 특유의 프레임 드랍이 있어서 주로 배경음 재생할 때 사용한다.
  • wav만 재생할 수 있는 playsound의 단점을 해결할 수 있다.
  • direct sound가 mci 상위호환이라 direct sound를 배우는게 좋긴하다.
#pragma comment(lib, "winmm.lib")
#include <mmsystem.h">
#include <Digitalv.h>

 

MCI_OPEN_PARMS m_mciOpenParms;
MCI_PLAY_PARMS m_mciPlayParms;
DWORD m_dwDeviceID;
MCI_OPEN_PARMS mciOpen;
MCI_PLAY_PARMS mciPlay;

int dwID;

mciOpen.lpstrElementName = L"soundfilepath.mp3"; // 파일 경로 입력
mciOpen.lpstrDeviceType = L"mpegvideo";	// mp3

mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE,
    (DWORD)(LPVOID)&mciOpen);

dwID = mciOpen.wDeviceID;

mciSendCommand(dwID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, // play & repeat
    (DWORD)(LPVOID)&m_mciPlayParms);
        
mciSendCommandW(dwID, MCI_PAUSE, MCI_NOTIFY,
(DWORD)(LPVOID)&m_mciPlayParms);     */// Pause

    mciSendCommandW(dwID, MCI_RESUME, 0, NULL);       // resume

    mciSendCommandW(dwID, MCI_CLOSE, 0, NULL);        // stop
  • mciSendCommand()를 통해 원하는 동작을 수행한다.
  • open -( play - pause - resume - stop)과 같이 open 후 해당 정보를 토대로 play, pause, resume, stop 동작을 수행한다.

 

https://learn.microsoft.com/ko-kr/previous-versions/dd757160(v=vs.85)?f1url=%3FappId%3DDev16IDEF1%26l%3DKO-KR%26k%3Dk(MCIAPI%252FmciSendCommand)%3Bk(mciSendCommand)%3Bk(DevLang-C%252B%252B)%3Bk(TargetOS-Windows)%26rd%3Dtrue 

 

mciSendCommand function (Windows)

Table of contents mciSendCommand function Article 06/06/2016 2 minutes to read In this article --> The mciSendCommand function sends a command message to the specified MCI device. Syntax MCIERROR mciSendCommand(  MCIDEVICEID IDDevice,  UINT       

learn.microsoft.com

 

'C++ > WinAPI' 카테고리의 다른 글

[WinAPI] 키 입력 관리  (0) 2022.11.15
[WinAPI] DC, BITMAP, 더블버퍼링  (0) 2022.11.15
[WinAPI] 윈도우 크기 지정  (0) 2022.11.15
[WinAPI] 그리기  (0) 2022.11.13
[WinAPI] Win32API 기본  (0) 2022.11.13