일단 playsound함수를 사용하기위한 여건을 알아봅시다
mmsystem.h를 인클루드합니다
windows.h도 인클루드합니다.
여기서 포인트가 있습니다
#pragma comment(lib,"winmm.lib") 입니다
#pragma매크로는 lib파일을 읽어들이는데에 쓰입니다.
컴파일러 옵션에 들어가서 추가할수도 있지만 위의방법이 더 간편하므로
후자는 설명하지 않겠습니다
(winapi함수라서 리눅스등에서는 돌아가지 않을 수 있음)
이제 인클루드는 다 했으니 유의사항을 알아보죠
PlaySound는 .wav파일만 재생할 수 있습니다
또 치명적인 단점으로는 소리를 겹치게 재생할 수 없다는거죠
하지만 삭막한검은창에 상큼한 소리를 불어넣는게 어디입니까.(퍽)
이제 본격적으로 알아보겠습니다
PlaySound( 를 치면 매개변수를 설명하는 창이 나옵니다
pszSound
연주하고자하는 사운드를 기입하는 문자열(string)이다 최대길이는 NULL문자를 포함해서
256문자이다. 만약 이 매개변수가 NULL이면 재생중인 사운드는 정지한다.(인용 내용)
hmod
로드될어질 리소스를 포함하고 있는 실행가능한 파일의 핸들이다.
이 매개변수는 fdwSound에 SND_RESOURCE가 기입되지 않는한 반드시 NULL이어야한다.
fdwSound
사운드 재생에 대한 플래그 (표시문자)이다. 다음과 같은 값이 정의되어있다.
플래그명 의미
SND_APPLICATION 매개변수 pszSound는 응용프로그램에 등록된 변수명이다.
응용프로그램에 정의된 소리 변수명을 기입하기위해
당신은 이 플래그를 SND_ALIAS 또는 SND_ALIAS_ID와 함께
쓸수 있다.
SND_ALIAS 매개변수 pszSound는 레지스토리나 WIN.INI에 있는
시스템이벤트 변수이다. SND_FILENAME 또는 SND_RESOURCE와
함께 쓰지말아야한다.
SND_ALIAS_ID 매개변수 pszSound는 시스템 이벤트 변수에대해 미리 정의된
변수명이다. 밑에 코멘트를 보십시오.
SND_ASYNC 소리가 비동기로 연주되고 소리가 시작된후 즉시 반환한다
비동기적으로 연주되는 wave형식의 소리를 끝내기 위해서는
매개변수 pszSound 에 NULL을 설정하고 PlaySound를 호출
해야한다
SND_FILENAME 매개변수 pszSound는 파일이름이다. 만약 파일을 발견하지
못했을 경우
SND_NODEFAULT 플래그가 설정되어 있지않다면 기본 소리가
재생된다
SND_LOOP 매개변수 pszSound을 설정하고 PlaySound를 다시
호출하기전까지 반복하며 연주를 한다.
만약 이 플래그가 설정되어있다면
또한 당신은 반드시 SND_ASYNC 플래그도 설정해야한다.
SND_MEMORY 매개변수 pszSound는 메모리에서 로드된 소리의 포인터이다
좀더 많은 정보를 원한다면 Playing WAVE Resources(링크)를
보십시오.
SND_NODEFAULT 어떠한 기본 사운드 이벤트도 사용하지 않는다.
만약 소리가 발견되어지지 않았다면 PlaySound는 기본소리를
재생하지 않고 반환한다라는 것이다
SND_NOSTOP 기입된 사운드 이벤트는 이미 연주되고 있는 사운드 이벤트에게
양보할것이다.
만약[because the resource needed to generate that
sound is busy playing another sound] 사운드가 연주 되어 지지
못하면 함수는 즉시 요구된 사운드의 재생 없이 FALSE를 반환한다
만약 이 플래그가 기입되어 있지 않다면 장치가 새로운 사운드를
연주 하기위해 PlaySound는 현재 재생중인 사운드를 정지하려한다.
SND_NOWAIT 만약 드라이버가 사용중이라면 즉시 사운드의 재생없이 반환한다.
SND_PURGE 사운드들은 정지된다. 만약 pszSound가 NULL이 아니라면
모든 기입된 사운드의 instance 는 정지한다.
만약 pszSound 가 NULL이면 호출(calling task)대신에
모든 사운드를 연주한다.
당신은 반드시 SND_RESOURCE 이벤트를 멈추기위해
instance handle을 기입해야한다
SND_RESOURCE 매개변수 pszSound는 리소스 변수이다.
반드시 hmod는 리소스를 담고 있는 instance이어야한다.
더많은 정보를 보고 싶다면 Playing WAVE Resources(링크)를
보십시오
SND_SYNC 사운드는 동기적으로 연주되고 사운드 이벤트가 완료 된후
PlaySound는 반환한다
이것은 기본 동작이다.
flag매개변수는 여러개를 선택할 수 있습니다.
대신 매개변수사이에 "|"를 써야합니다
(예제)
PlaySound(TEXT("20090214050349.wav"), NULL,SND_FILENAME | SND_ASYNC | SND_LOOP | SND_NODEFAULT);
이제 자주쓰는 flag와예제에대한 설명을 해보겠습니다.
PlaySound(NULL,0,0); //사운드를 정지합니다
SND_ASYNC 재생과 동시에 진행을 할 수 있습니다
SND_LOOP 말그대로 계속 루프합니다.
SND_FILENAME / SND_NODEFAULT 이 둘은 님이 만약 특정 wav파일을 재생하시려고 하면 써주셔야하는 플래그입니다
(예제)
PlaySound(TEXT("20090214050349.wav"), NULL,SND_FILENAME | SND_ASYNC | SND_LOOP | SND_NODEFAULT);
//20090214050349.wav파일을 계속재생시키고 동시에 진행시킵니다
//bgm깔때 씀
PlaySound(TEXT("빵상.wav"), NULL,SND_FILENAME | SND_ASYNC | SND_NODEFAULT);
//빵상.wav파일을 재생하고 동시에 진행시킵니다
//효과음을 넣을때
[출처] 콘솔에 생기를 불어넣자! PlaySound (C언어를 배우자) |작성자 빵집상인