2010년 2월 24일 수요일

아이폰 게임사운드 구현(FMOD 이용) - 2

1.아이폰 Fmod 프로젝트 생성 및 이벤트 구성

자 그럼 실제 아이폰에서 Fmod를 돌리기 위해서 Fmod designer프로젝트를 만들고
Group 및 Event를 만들어보자.

Fmod 상단메뉴에서 File>New project를 선택하여 프로젝트 이름을 뭍는 창이 뜨면 아래와 같이 원하는 이름을 넣어서 Save를 하도록 한다. 여기서는 iPhoneGame으로 하도록 하겠다.

프로젝트를 만든 후 Fmod 라이브러리에서 사용되어지는 Group과 Event를 만들어야 한다. 여기서는 BGM과 SE 두가지 Group을 사용하는 걸로 만들어 보겠다. 통상 게임에서 이렇게 쓰기때문에 적당한 예라고 생각되어진다. 아래그림처럼 생성하면 되겠다.

다음으로는 실제 사운드 리소스 파일을 등록해야만 한다. Sound definitions탭에서 필요한 Sound definition을 만들어서 게임내에서 사용 할 wav파일 리소스들을 등록한다.

이제 Events탭에서 필요한 그룹 BGM과 SE를 만들고 각각의 이벤트를 추가한다. 아래 그림에서는 BGM그룹에 BGM01이벤트를 하나 만들었고 SE그룹에 SE01,SE02 두개이벤트를 만들어서 추가 하였다. 여기까지 되면 아까 생성한 Sound definition을 만든 Event에 넣어 주어야 한다.

Event에 각 Sound를 매칭 시켜주는 작업은 Sound editor탭에서 해줄 수 있다. 아래 그림에서와 같이 /BGM01부분에 오른쪽 클린한 후 뜨는 팝업메뉴에서 Add sound를 해서 음원을 등록한다. 그리고 Sound instance properties...에서 필요하거나 의도하는 패러미터값을 조정해줄 수 있다. 예를 들면 사운드의 반복재생 여부를 여기서 바꿔 줄 수가 있다..지금의 예제의 경우 BGM01 이벤트에서는 사운드를 반복으로 설정하고 SE01,SE02 이벤트에서는 무반복으로 설정하면 되겠다.

 사운드의 반복여부나 각종 패러미터 값을 Event별로 조정하여 원하는 Evnet를 만든다음 프로젝트를 저장한다. 그런 다음 Fmod designer상단 메뉴 Build에서 Build project를 선택하여  빌드를 한다. 빌드의 결과물로 나오는 파일을 이용해서 게임 어플에서 사용을 하면 되는 것이다.

빌드 결과물 파일 중에 실제 게임에서 사용할 파일은

- 프로젝트명.h
- 프로젝트명.fev
- 프로젝트명.fsb

이다. 이파일들을 XCode 프로젝트에 적당한 부분에 포함시키도록 한다.

여기까지 되었으면 실제 코드를 얘기해보려고 한다.

2. 구현
-------------------------------------FmodIphoneSupport.h-----------------------------------

#import "fmod_event.hpp"

#import "fmod_errors.h"

#import "fmodiphone.h"


@interface FmodIphoneSupport : NSObject {

NSTimer                 *timer;


FMOD::EventSystem       *eventSystem;

FMOD::EventGroup *bgmGroup;

FMOD::Event             *bgmEvent;

FMOD::EventGroup *seGroup;

FMOD::Event             *seEvent;


float bgmVolume;

float seVolume;

}


- (void)initializeFMOD;

- (void)initFMOD:(FMOD_IPHONE_SESSIONCATEGORY)sessionCategory externalAudioPlaying:(bool *)bpExternalAudioPlaying;

- (void)LoadGroups;

- (void)freeFMOD;

- (void)timerUpdate:(NSTimer *)timer;


- (FMOD::EventSystem *)getSystem;

- (FMOD::EventGroup *)getSEGroup;

- (FMOD::EventGroup *)getBGMGroup;

- (FMOD::Event *)getBGMEvent;

- (FMOD::Event *)getSEEvent;


- (float)getBGMVolume;

- (void)setBGMVolume:(float)vol;

- (float)getSEVolume;

- (void)setSEVolume:(float)vol;


- (void)playBGM:(int)bgmEventNum;

- (void)stopBGM;

- (void)playSE:(int)seEventNum;

- (void)stopAllSE;


@end


--------------------------------------------------------------------------------------------
클래스 구성은 위와 같게 하면 기본적인 기능은 구현이 가능하겠다.



아 Fmod 에 대해 간단히 정리 해볼겸 시작했는데 이거 보통 일이 아닌 듯 하다...
실제 구현 부분에 대해서는 3편에서 얘기 하도록 하겠다..


댓글 없음:

댓글 쓰기