본문 바로가기

Project/Note

C언어 : fmod를 이용한 mp3파일 재생 코딩하기

visual studio를 사용하면서
음악 파일을 재생하고 싶다는 분들이 많으셔서
글로 정리해보았습니다.참고하실 분들에게 도움이 되었으면 좋겠습니다.

저 역시 음악을 넣고싶어서 열심히 방법을 찾던 기억이 있어
이런걸 자세히 정리해놓은 글이 있다면 얼마나 좋을까 했지요.

그래서 최대한 간단하게 전달하고자 노력하겠습니다.

기준은 visual studio 2010을 기준으로 제가 전에 만든 윷놀이 코드로 작성할게요.

참고 : 이 포스트는 일단fmod를 사용해본 적이 없는 분들을 기준으로 일단 어떻게 나오든 좋으니
        음악 한번 넣어보자! 하는 분들을 대상으로 작성되었습니다
.
                
        
fmod의 자세한 기능은 설명하지 않았고 어디까지나 한번 사용해보는데 의의가 있습니다.
        fmod의 다른 여러 유용한 기능들은 추후에 다른 포스팅을 통해 작성하겠습니다.



자 그러면 가장먼저 할일은fmod를 설치하는 것입니다.



240



 http://www.fmod.org/



인터넷 주소창에 이 주소를 입력해주세요.
귀찮으시다면 그냥 제가 써둔 링크를 이용해주세요




500



자 그러면 이제 fmod홈페이지가 나오네요.


관련된 여러 정보들을 포함하고있으니
자세한 사용법을 원하시거나
관련문서를 읽고싶으신 분들은
참고하시면 좋겠습니다.




500


일단 우리는 설치파일이 필요하니 다운로드 탭으로 들어가봅시다.



500

API 다운로드 메뉴에서 알맞은 운영체제의 버전을 다운받아 주시면 됩니다.
물론 저를 포함한 많은 분들은 마이크로소프트의 비쥬얼 c++을 사용하지 않을까 싶은데요...
어찌되었건 다운받아 봅시다! 저는 윈도우 버전을 받았습니다
저처럼 마소 비쥬얼 스튜디오를 사용하시는분들은 윈도우버전을 받아주세요


참고 :  
Stable과 Development의 두가지 버전이 있는데
         어느쪽을 받으셔도 상관은 없습니다.
         다만 Stable은 좀더 안정화된 버전이고
        Development는 최신기능이 추가된 버전이라고 할 수 있지요.




604



836
그럼 다운받은 파일을 설치해 주시고

설치가 완료되면 
c드라이브의 program files 경로에서

 FMOD soundsystem을 확인해 주세요.


여기까지 했으면 이제 필요한 라이브러리가 추가된 셈입니다.


확인되었다면 이제 비쥬얼 스튜디오를 실행시켜 주세요
지금부터 음악을 넣어봅시다.
저는 이전 포스트로 올렸던 윷놀이 프로젝트를 불러오겠습니다.



301

프로젝트를 생성하거나 불러온 뒤에 메뉴에서 프로젝트탭의 속성을 클릭해주세요



842

이제 헤더경로와 라이브러리 경로를 지정해줍니다.

이 부분에서는 사용하시는 visual studio 버전에 따라서 조금씩 다를 수 있습니다.

저는 2010을 기준으로 작성하겠습니다.2010의 경우 속성창이 활성화된 후 왼쪽의 메뉴에서 
구성속성
들어가 주세요그리고 VC++ 디렉터리들어가줍니다. 그러면 오른쪽에 
스크린샷과 같은 디렉터리 경로 지정메뉴가 나타날 것입니다.



839


이제 포함 디렉터리를 클릭하고 그 옆에서 경로지정을 해줍시다.옆의 경로를 클릭하고 편집을 클릭합니다.


491


1번 2번  순서대로 클릭해주세요 



666
610

 


  포함 디렉터리의 경로



620

 


라이브러리 디렉터리의 경로




자 그럼 아까 설치했던 FMOD soundSystem쪽으로 경로를 지정해줍니다.
포함 디렉터리와 라이브러리 디렉터리를 수정해주세요
자세한 경로는 스크린샷에 첨부해 두었으니 참고해서 진행하세요.


748


다음은 다시 프로젝트 속성에 들어가서 링커 탭의 입력 메뉴를 선택해주세요
그리고 그 안에서 스크린샷과 같이 추가 종속성을 수정해주세요


요약  :  visual studio실행 -> 프로젝트 -> 속성 -> 구성속성 -> VC++디렉터리 ->
         포함디렉터리 경로수정  ->라이브러리 디렉터리 경로수정 ->
        (다시)프로젝트 -> 속성 -> 링커 -> 입력 -> 추가 종속성 값에fmodex_vc.lib 입력






842

추가로 fmodex.dll 파일을 반드시 집어넣어야 합니다.

스크린샷에 보이는 경로로 집어넣어주세요
프로젝트 폴더에 현재 작업하는 프로젝트의 Debug폴더에 넣어주시면 됩니다.

이렇게 넣어주는 이유는 프로그램이 실행되었을때
fmod로 작성되었다면 fmod 함수를 사용하는데
이를 관장하는 파일이 fmodex.dll이기 때문입니다.




808


이 파일은 fmod라이브러리가 설치된 폴더에 잘 모셔져 있습니다.
어서 복사해줍시다

귀찮으신분들은 그냥 이 포스트에 올려두겠으니 바로 다운받아서 넣어주세요

fmodex.dll


(다운받아주세요)




경로지정이 완료되었나요?

자 이제야 코딩 좀 해보겠군요^^



620
중간에define으로 정의된 키보드 방향키값은 무시해주세요.^^


중요한건 이제#include <fmod.h> 를 통해 fmod헤더를 선언하는겁니다.


이걸 선언하기 위해서 앞에서 디렉토리 경로를 설정해준거죠.
(경로설정이 제대로 이루어지지 않으면 2010의 경우 매우 친절하게 빨간색 밑줄을 그어줍니다^^)

물론 앞에서 써둔 디렉토리는 fmod기본 설치 직후 설치된 경로에 맞춰서경로지정을 해 준 것입니다.
물론 해당 파일들을 다른 폴더에 옮겨서원하시는대로 경로를 수정해주셔도 됩니다.아무튼 아랫쪽을 봅시다.

FMOD_SYSTEM *g_System; //fmod 선언

FMOD_SOUND *g_Sound[7]; 
//사용할 음악의 갯수를 정하는 포인터 배열 선언

FMOD_CHANNEL *g_channel;

이런 코드들이 있네요.

FMOD_SYSTEM
FMOD_SOUND
FMOD_CHANNEL 

들은 일단 선언하고 시작합시다. 각각의 용도는 주석으로 달아둔 내용과 동일합니다
.

(뒤의 g_~~등의 포인터는 제가 참고한 다른 블로그에서 해당 이름의 포인터를 이용해서
참고하던 제가 그대로 작성했던 것입니다...

당연하지만 보시는 분들은 딱히 이걸 따라하실 필요는 없고...
원하는이름으로 작성하시길^^)



748


작성 후에는 음악파일 선언을 할 함수를 만들어볼까요?
물론 main함수에 그냥 다 선언해도 괜찮겠습니다만...
설마 그렇게 만드시는 분들은 없으시겠죠.
아마 C언어 조금이라도 해보신 분들은 저 스크린샷만봐도바로 응용이 가능하실겁니다.

FMOD_System_CreateSound( ); //fmod라이브러리를 이용한 음악파일선언

속에 앞에서 선언한 fmod선언 포인터를 가져와 뒤에 그에 해당되는 정보를 덧붙여준것이죠.

귀찮으신분들은 역시 그대로 타이핑하여 응용해 보시는것도 좋습니다.
사용하실 음악파일의 이름을
 " 어떤어떤.mp3 " 속에 입력하고 배열번호만 주의하시면 됩니다.

mp3음악파일을 이용하실거라면 확장자를 mp3,
wave확장자를 이용하실 거라면 wave확장자를

달아주면 되겠죠. 게다가 fmod의 경우는 실제로 최첨단 게임등에 사용될만큼강력한 기능들을 제공하므로... 
왠만한 음악파일들은 다 재생할수 있다고 생각하시면 됩니다.

(자세한 지원 확장자는 검색을 해 보시는것이...)

742

자자 소리를 집어넣는데

배경음은 반복되어 재생이 되어야겠고
효과음은 한번만 재생해야 할것 아닌가요?
이때 스크린샷에 나와있는것처럼

FMOD_LOOP_NORMAL //무한재생
FMOD_DEFAULT //1번 재생

을 이용해 그런 부분을 수정해 줄 수 있습니다.
배경음과 효과음이 다른것을 확인하실 수 있겠죠?

(그밖의 자세한 기능들은 다음 포스팅에서 다루어보죠)



721

이제 음악들이 선언되었으므로
선언된 음악을 재생할 함수들을 마련합시다.

선언은 CreateSound를 이용하지만
재생은 PlaySound 함수를 이용합니다.

FMOD_System_PlaySound( ); 함수를 유용하게 이용합시다.

그외에도 이것저것 여러가지 내용들이 많은데일단은 넘어가겠습니다.

(다음에 기능만 정리해서 포스팅하겠습니다
)

620

선언함수도 만들었고 재생함수도 만들었으니
 이제 main함수로 와서 작업해 봐야죠?

main함수에 먼저 음악파일을 선언한 함수를 불러줍시다.
저의 경우는 배경음 재생을 따로 함수로 안만들고 그냥 main에 집어넣어버렸는데
별로 좋은 방식은 아닙니다 그냥 배경음도 따로 함수만드시는것이 깔끔합니다.



511
자 선언도 완료되었겠다.
 
이제 필요할때마다
 만들어둔 음악재생 함수 호출해서
 가져다 쓰면 되겠군요?

(main함수 외에 다른함수에서 호출할 경우
 해당 함수에도 음악선언함수를 호출해야겠죠?)

드디어 재밌는 순간이 오는군요.


707



어찌되었건 이렇게 해서 음악을 넣은 코딩을 완료한 다음에
빌드해줍니다. 

그리고 바로 CTRL + F5 를 눌러서 확인.....

하면 좋겠지만 그러지 마세요

일단 실행은 되어도 음악재생은 안될 것입니다.
왜일까요? 

당연히 아직
 음악파일들을 프로젝트 폴더에 안집어넣었으니까그렇지요!



842




자 이제 선언해둔 재생함수에 해당되는 음악파일들을 모조리 

Debug 폴더에 집어넣읍시다!

스크린샷은 위에서 사용한것을 재사용했습니다


(아까 fmodex_vc.lib 입력하고fmodex.dll을 넣어준 경로와 동일합니다)




600



<<이건 어떻게 보면 팁이라고 할 수 있습니다.>>

msvcr
파일도 넣어줘야 합니다. 음악 재생을 위해서 필수적으로 필요합니다.

fmod를 설치하면 자동으로 설치되긴 합니다만
여러분은 C를 이용해서 뭔가 만든 다음에 그냥 혼자 감상만 하지는 않겠죠?
누군가에게 보여준다거나 업로드해본다거나 하시겠죠?

그러나 다른 사람의 컴퓨터에 msvcr파일이 없다면 여러분들이 열심히 코딩해서
음악까지 재생되는 프로그램을 만들어두어도그 사람의 컴퓨터에서는 재생이 안됩니다.
따라서 이 파일을 debug폴더에 넣어주셔야 합니다

그리고debug폴더만 따로 복사해서 옮기면 다른 컴퓨터에서도 잘 작동이 되죠^^
(물론 음악파일들이 있기때문에 폴더채로 복사해야 합니다.)

msvcr파일은 인터넷 검색으로 쉽게 구할수 있지만


역시 귀찮으신분들을 위해서 파일을 바로 올려놓겠습니다.


msvcp100d.dll
msvcr100.dll
msvcr100d.dll


(다운받아주세요)


필요한 파일은 컴퓨터마다 다릅니다만
저같은 경우는 귀찮아서3가지 파일을 모두 집어넣었습니다.
다수를 대상으로 하는 배포를 고려한다면
모두 넣는게 좋을듯 합니다.

 
(용량에 극도로 민감하신분들은 자세히 알아보시고 필요한 파일만 넣으세요)




536


그리고 음악파일도 넣고 필요한 dll파일들도 넣어주었다면이제 실행해 봅시다.



(이 경우에도 exe실행파일로 실행해야지 그냥 빌드하고
 ctrl+f5로 확인하려 하면 음악재생은 안됩니다)




744



(C언어 배우시는분들은 너무나 익숙할 검은 콘솔창입니다^^)

적용이 잘 되었다면 음악이 재생되는 감동을 느끼실 수 있을 것입니다.

참고하시라고 지금 스샷으로 보여드린 코드로 작성된
윷놀이 파일을 아래에 올려두겠습니다.물론 전체코드는 없습니다^^;

그냥 음악이 재생된다는것 정도 확인하실수 있을겁니다

single.alz
single.a00

(참고해보세요)
분할압축입니다.





자 이번 포스팅은 여기까지입니다.
다음번에는 fmod함수의 여러 기능들을
좀더 자세히 살펴보도록 합시다!