FMODEX (SOUND_LIBRARY) FMOD DLL 다운 및 오류 수정
FMOD 사이트는
입니다. 접속하시면 다운을 받을 수 있습니다.
사운드 라이브러리 FOMD_API 입니다. Direct_Sound가 쓰기엔 불편한 점이 있습니다. 일단 FMOD를 직접 사용해 보시면 꽤나 편하다는 것을 느끼실 수 있을겁니다. FMOD를 설치를 하면 추가 해야 할 사항이 3가지가 있습니다.
1. 디렉터리 추가
상단 메뉴에서 프로젝트 -> 클릭 하시면 제일 아래 메뉴 Projectname속성 클릭 -> 속성 창이 뜹니다. 그러면 메뉴중에
c/c++ -> 일반 -> 추가 포함 디렉터리 -> 경로를 지정해주면 되는데 확장자가 inc를 지정해주셔야 합니다.
저의 경로는 "C:\Program Files\FMOD SoundSystem\FMOD Programmers API Win32\api\inc" 입니다.""를 잊지 맙시다.
2. 라이브러리 추가.
마찬가지로 상단메뉴 프로젝트 -> ProjcetName속성 클릭 -> 속성 창이 뜹니다. 그러면 메뉴중에 링커 클릭-> 일반 ->
오른쪽 메뉴 중에서 추가 라이브러리 디렉터리 경로를 적으시면 됩니다. 저의 경로는
"C:\Program Files\FMOD SoundSystem\FMOD Programmers API Win32\api\lib" 입니다. 이번 건 확장자 lib입니다.
3. FMOD 설치 하시면 설치 폴더 안에 api폴더가 있는데 api폴더 안으로 들어가셔서 fmodex.dll 복사.
그 다음에 진행중인 프로젝트 폴더 안에 fmodex.dll 붙여넣기 하시고 실행 시켰을 때 창이 뜨면서fmodex.dll 파일을 찾을 수 없다고 메시지가 뜨면 디버그 안에다가 복사를 한번 해주세요. 아마 이러면 잘 돌아갈 겁니다.
자 이렇게 세 가지 사항을 추가를 하시고 본격적으로 진행중인 프로젝트에 사운드를 틀어봅시다.
우선 코드에 기본적으로 선언해야 할 해더파일이 있습니다.
#include <fmod.hpp>
#include <fmod_errors.h>
#pragma comment( lib, "fmodex_vc.lib" )
위 해더파일들을 기본적으로 선언해 주시고요.
FMOD::System * System;
FMOD::Sound* SoundName;
FMOD::Channel* channel;
윗 세 줄이 기본적으로 사운드를 틀기 위해 선언한 타입별 변수입니다.
::를 봐서 아시겠지만 FMOD안에 포함이 된 System, Sound, Channel 들 입니다.
FMOD::System
System은 음악을 틀기 위한 기기라고 생각하시면 됩니다.
FMOD::Sound
효과음의 갯수만큼 선언해주시면 됩니다. 폭발음, 탄을 쏠 때이 효과음이라던가 그 효과음의 갯수만큼 선언을 해 주시면 됩니다.
FMOD::Channel
채널을 컨트롤 하여 사운드의 볼륨을 설정해 줄 수 있습니다.
자 그럼 본격적으로 소스 한번 적어볼게요.
먼저 사운드를 생성하는 겁니다.
저의 경우
LOADSoundAll() 이라는 함수에서 사운드를 생성합니다.
함수안의 내용은
LOADSoundAll()
{
FMOD_RESULT result;
result = FMOD::System_Create( &System );
ERRCHECK( result );
result= System->init( 100, FMOD_INIT_NORMAL, 0 );
ERRCHECK( result );
result = System->createSound( "../data/sound/stage1.wav", FMOD_DEFAULT, 0, &initSound );
ERRCHECK( result );
result = System->createSound("../data/sound/stage1.wav", FMOD_DEFAULT, 0, &Stage_1_Sound );
ERRCHECK( result );
result = System->createSound("../data/sound/Type1.wav", FMOD_DEFAULT, 0, &fireSound );
ERRCHECK( result );
result = System->createSound("../data/sound/Type2.wav", FMOD_DEFAULT, 0, &laserSound );
ERRCHECK( result );
result = System->createSound( "../data/sound/Destroy.wav", FMOD_DEFAULT, 0, &DestroySound );
ERRCHECK( result );
result = System->createSound("../data/sound/Stage2.wav", FMOD_DEFAULT, 0, &explosionSound );
ERRCHECK( result );
}
이렇게 사운드를 생성합니다.
중요한 부분은 함수 안의 변수 선언부.
FMOD_RESULT result;
result = FMOD::System_Create( &System );
이렇게 해야지만 사운드를 생성할 수 있습니다.
한마디로 사운드를 생성하는 변수 타입이 FMOD_RESULT 라는 녀석이죠.
함수안의 윗 두줄 밑으로는 이해하기가 편합니다.
createSound안에 경로 적어주시면 되고 createSound의 3번째 인자는 FMOD::Sound의 변수명입니다. 효과음 이름이죠. 반드시 주소값( & )과 함께 써야합니다.
그리고 사운드 파일이 없다거나 잘못된 사운드 파일일 경우에 에러체크를 해줘야 합니다.
ERRCHECK( result )가 있는데
이녀석은 제가 따로 만든 함수입니다.
함수를 보면
ERRCHECH( FMOD_RESULT result )
{
if( result != FMOD_OK )
{
char str 256;
sprintf( str, "FMOD error! (%d) %s\n", reuslt, FMOD_ErrorSting( result ) );
MessageBox( NULL, str, "TEST", MB_OK );
}
}
이렇게 에러를 체크합니다. 에러체크는 안해줘도 별 상관은 없지만, 사운드 파일이 없다거나 그럴 때 메시지를 띄워주는게 좋은 습관이 아닌가 생각을 합니다.
저 함수안에서는 문자열 str 의 크기를 반드시 256으로 선언해줘야 합니다. 안 그러면 에러가 납니다.
다음으로 사운드를 재생시켜야 합니다.
전 PlaySound()라는 함수에서 재생을 합니다.
소스를 살펴보면
PlaySounc( char* sound_name )
{
FMOD_RESULT result;
if ( sound_name == "stage_1" )
{
initSound->release();
result = System->playSound( FMOD_CHANNEL_FREE, Stage_1_Sound, FALSE, &channel );
channel->setVolume( 1.f );
ERRCHECK( result );
}
else if ( sound_name == "normal_bullet" )
{
result = System->playSound( FMOD_CHANNEL_FREE, fireSound, FALSE, &channel );
channel->setVolume( 0.5f );
ERRCHECK( result );
}
else if ( sound_name == "user_laser" )
{
result = System->playSound( FMOD_CHANNEL_FREE, laserSound, FALSE, &channel );
channel->setVolume( 0.5f );
ERRCHECK( result );
}
else if ( sound_name == "destroy" )
{
result = System->playSound( FMOD_CHANNEL_FREE, DestroySound, FALSE, &channel );
channel->setVolume( 0.25f );
ERRCHECK( result );
}
else if ( sound_name == "explosion_sound" )
{
result = System->playSound( FMOD_CHANNEL_FREE, explosionSound, FALSE, &channel );
channel->setVolume( 1.f );
ERRCHECK( result );
}
}
이렇게 사운드를 재생해주는 함수에서 재생을 해 줍니다.
위 코드를 보면 chnnel->setVolume( 1.f );
이렇게 되어있습니다. 괄호안의 수치는 0.1f부터 1.0까지 수치를 주면 됩니다.
당연한 말이지만 수치가 크면 클수록 사운드의 크기도 커집니다. 프로젝트 안의 옵션중에 사운드 크기를 조절하는 기능을 추가할려면 저 안의 수치에 변수를 두면 좋겠죠^^.
에레체크는 항상 해 줍시다. 항상입니다. 항상~~~
[출처] FMODEX (SOUND_LIBRARY) FMOD DLL 다운 및 오류 수정.|작성자 파란
'Programming > FMOD' 카테고리의 다른 글
NDC10_장용석_fmod를 이용한 사운드 프로그래밍 (0) | 2011.04.09 |
---|---|
FMOD를 이용한 사운드 프로그래밍 (0) | 2011.04.09 |
[Link] FMOD 알아가기 (0) | 2011.04.08 |