APPLAUSE.zip


이번 시간에는, C 언어에서 소리 및 음악을 재생시키는 방법에 대해서 말씀드리겠습니다. 방법은 여러가지가 있겠지만, 간단히 WinApi 에서 제공하는 PlaySound 함수 호출을 통해서 소리를 재생해 보겠습니다. 참고로 PlaySound 함수는 외부 소리 파일 확장자 중에서는 wav 확장자만 재생 가능합니다. 그리고, 동시에 하나의 소리만 재생할 수 있다는 한계점도 존재합니다.


#include <stdio.h>
#include <windows.h>
#include <mmsystem.h>
#include <conio.h>

#pragma comment(lib, "winmm.lib")

#define SOUND_FILE_NAME ".\\res\\APPLAUSE.wav"

int main(int argc, char* argv[]){
	printf("아무 키나 입력하시면 소리 재생이 멈춥니다.\n");
	PlaySound(TEXT(SOUND_FILE_NAME), NULL, SND_FILENAME | SND_ASYNC | SND_LOOP);
	while (!_kbhit());
	PlaySound(NULL, 0, 0);
	return 0;
}


6 라인

#pragma comment 전처리문을 통해서 laySound 함수 호출을 위한 winmm.lib 라이브러리를 로드합니다.


8 라인

로드할 소리 파일 경로를 미리 매크로로 저장합니다. 이 예제의 경우에는, res 라는 폴더를 만들어서 그 안에 APPLAUSE.wav 라는 소리 파일을 미리 넣어두었습니다. 이 파일은 블로그 우측 상단에 첨부하였습니다.


12 라인

PlaySound 함수를 호출합니다. 참고로 TEXT 매크로는 받은 문자열을 유니코드를 사용해야 한다면 문자열 좌측에 대문자 L 을 붙여주고, 유니코드를 사용하지 않는다면 그대로 사용하게 하는 매크로입니다. PlaySound 함수의 매개변수로는 파일명 (혹은 리소스명) 과 각종 플래그들을 넘겨줍니다. 대표적인 플래그로는 SND_FILENAME (첫 번째 매개변수를 파일명으로 인식), SND_ASYNC (비동기적으로 재생), SND_LOOP (무한 재생) 등이 있고, 원하는 플래그들을 OR (|) 로 연결해서 매개변수로 전달하면 됩니다.


14 라인

PlaySound(NULL, 0, 0) 의 호출을 통해서 현재 재생되고 있는 소리를 멈춥니다.


[실행 결과]




(#pragma comment 전처리문 설명 참고)

https://msdn.microsoft.com/ko-kr/library/7f0aews7.aspx


(TEXT 매크로 설명 참고)

https://msdn.microsoft.com/en-us/library/windows/desktop/dd374074(v=vs.85).aspx


(PlaySound 함수 설명 참고)

https://msdn.microsoft.com/en-us/library/windows/desktop/dd743680(v=vs.85).aspx

by kkikkodev 2015. 5. 25. 15:26