본문 바로가기

Programming/SDL

SDL Mixer 예제

반응형
* 헤더 파일 *
#include<SDL/SDL_mixer.h>

*** 배경음 ***

음악 초기화

Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 2048);

• 44.1khz 샘플링 주파수 사용. 일반적으로 게임의 경우는 22.05khz 도 충분합니다.
• MIX_DEFAULT_FORMAT: 16 비트 샘플링
• 스테레오 채널.
• 오디오 버퍼의 크기는 2048 바이트. 크기가 너무 작으면, 소리가 튈 수 있습니다.
버퍼를 너무 크게 하면 메모리 소요량이 많아지고,
재생 시작 시점에 밀릴 수 있습니다. 따라서, 적절하게 조절이 필요합니다.

음악 로딩 및 해제

*로딩

Mix_Music *bgm = Mix_LoadMUS("BGM/footballbgm.mp3");

* 이건 마지막에 해재해줄때

Mix_FreeMusic(bgm);

음악 재생

Mix_PlayMusic( bgm, -1 );

• 로드된 bgm 을 재생
• loops는 음악의 재생 횟수.
• loops = -1 이면 무한 반복 재생.
• loops = 0이면 정지.

음악 정지 및 재개

Mix_PauseMusic();

Mix_ResumeMusic();

*** 효 과 음 ***

효과음 로딩

Mix_Chunk *Mix_LoadWAV(char *file);
void Mix_FreeChunk(Mix_Chunk *chunk);

ex)

Mix_Chunk *walk1 = Mix_LoadWAV("Effect/walk1-1.wav");
Mix_Chunk *walk2 = Mix_LoadWAV("Effect/walk1-2.wav");
Mix_Chunk *walk3 = Mix_LoadWAV("Effect/walk2-1.wav");

배경음은 Mix_Music 이지만, 효과음은 Mix_Chunk 이라는 것을 알 수 있다.

* 효과음 재생 *

int Mix_PlayChannel(int channel,
Mix_Chunk *chunk, int loops);

ex)

케이스 문

case SDLK_1: Mix_PlayChannel(-1, walk1, 0); break;
case SDLK_2: Mix_PlayChannel(-1, walk2, 0); break;
case SDLK_3: Mix_PlayChannel(-1, walk3, 0); break;

• channel: 플레이할 채널을 선택. -1이면 할당되지 않는 채널을 임의로 사용.
• loops: 효과음 파일의 반복 횟수를 지정. +1 만큼 반복합니다.
따라서 여기서는 한번만 재생.