본문 바로가기
Programming/FMOD

API에서 FMOD 사용법

by 황금표정 2012. 2. 10.


먼저 FMOD에 대해서 간단히 설명하자면, FMOD는 사운드 엔진입니다.
상용화를 제외하면 무료이지요 ~

먼저 FMOD를 사용하기 위해선 다운을 받아야겠죠?
http://www.fmod.org/index.php/download
에 들어가서


Development에 Windows를 다운로드합니다.


다운로드가 끝나면 설치를 해주세요 ^^ (특별히 설정할건 없습니다.)



이렇게 설치를 해줍니다.


설치가 끝나면
C:\Program Files (x86)\FMOD SoundSystem\FMOD Programmers API Windows\api
폴더에 inc 폴더, fmodexL.dll, fmodex.dll
lib 폴더안에 fmodex_vc 라이브러리 파일이 필요합니다.
이 파일들을 복사해서 따로 담아두시던가 어딘가에 복사해두세요 ^^

자, 그럼 사운드를 넣어볼 프로그램 폴더로 가봅시다.



이렇게 체크해둔 파일을 자기 프로젝트 폴더에 같이 넣어줍니다.

그 다음에 소스코드 창으로 갑니다.

소스코드의 include 부분에
아래 세 줄을 입력해줍니다.

#include "inc/fmod.hpp"
#pragma comment (lib, "fmodex_vc.lib")

using namespace FMOD;


 



일단 위 까지의 과정이 FMOD를 사용하기위한 등록과정입니다.
위의 과정은 프로젝트를 만들때마다 해주어야하는 필수과정입니다.


사운드를 편하게 관리하고 사용하려면 enum문을 사용하는것이 좋습니다.
왜냐하면 사운드를 1~2개를 사용하는것이 아니기 때문에 배열로써 사용을 하게됩니다.
지금 당장 이해가 안되도 사용하는 방법을 보시면 아실거에요 (아마도...)



전역변수에 아래 세 줄을 추가해 줍니다.
이 세 줄은 사운드 출력에 아주 중요한 변수들입니다.
Sound*   g_pSound[SD_END]에서 SD_END는 위에 enum문 선언한 곳 안에서의 SD_END입니다.





프로그램이 시작되는 부분 ( 저는 Setup 함수 ) 에서

System_Create(&g_pSystem);
g_pSystem->init(1, FMOD_INIT_NORMAL, 0);
g_pSystem->createSound(파일경로, FMOD_HARDWAR, 0, &g_pSound[배열번째]);

세줄이 핵심인데, 먼저 System_Create는 사운드 시스템을 생성하는 코드이고
그 아랫줄에 init하는곳이 채널수와 사운드 모드설정하는부분이다 마지막 인자 0은 그냥 0이다. (뭔지는 정확하게 모름)
createSound함수가 이제 실질적으로 사운드 파일이있는 경로에 파일을 불러와서 위에서 선언해두었던
g_pSound[]배열에 넣어두게 되는것이다. 결론 적으로 사운드가 10개면 10개의 배열을 생성하게 되는것이고,
100개면 100개의 배열을 생성하는 것 입니다.



여기서 중요한 한가지가 있는데 init에서 현재 채널수를 1개로 해놓고 사운드를 재생하다보면 아마 다른사운드랑 중첩이 되면
사운드가 끊기게 되는 현상을 겪게되는데 이 현상은 사운드를 재생할 채널수가 부족해서 나타나는 현상이다.
채널수를 여유있게 늘려주면 위의 현상은 해결된다.

그리고 타이머를 선언해서 주기적으로 Update함수를 호출해주고,
그 함수 안에서 g_pSystem->update(); 코드를 넣어준다.
사운드시스템을 업데이트해주지 않으면 일정 사운드 반복 후 사운드가 정지되는 현상이 나타나게된다.

그리고 사운드를 재생하기전에
g_pChannel->setVolume(0.5); 코드를 넣어주면
볼륨을 조절할 수 있다. 0.0 ~ 1.0까지 볼륨조절이 가능하다.


마지막으로 사운드를 재생하는 코드는
g_pSystem->playSound(FMOD_CHANNEL_FREE , g_pSound[eSound] , 0 , &g_pChannel );
이다.
첫번째 인자는 채널을 자동으로 알아서 찾는다는 것이고,
두번째 인자는 재생할 사운드이다. 우리는 위에서 사운드를 배열로 선언해놨기때문에
g_pSound[사운드재생할번호]를 입력해주면된다.
세번째 인자는 일단 0으로 해두면된다. (아마 정지하고 관련된것인걸로...)
마지막 인자는 채널이다.



마지막으로 사운드를 다 사용하고 난뒤에,
g_pSystem->release();
g_pSystem->close();
코드로 제거를 해줘야합니다.


이렇게하면 기본적인 사운드는 재생할 수 있다.
자세한건 여러가지 검색으로 찾아보길 바랍니다^^



여기 블로그에 1번부터 6번글 까지 읽어보시면 많은 도움이 될겁니다^^
http://sayzy.blog.me/70071678225
반응형