GLBasic forum

Codesnippets => Inline / 3rd party => Topic started by: MrTAToad on 2008-Dec-29

Title: FMOD
Post by: MrTAToad on 2008-Dec-29
Thanks to Schranz0r for sorting the double-pointer problem, the following code shows how to use the latest version of FMOD with currently Windows and Mac (Linux cant be used).

You will need FMOD to be installed (or to get the libraries from somewhere).  The DLL/dylib goes in with the executable.

The test code  is :

Code (glbasic) Select
OK = FMOD_Init(32,0)
LOCAL Snd%
OKs = FMOD_CreateSound("Music.mp3",0,Snd%)

LOCAL chan%
play = FMOD_PlaySound(0,Snd%,0,chan%)

WHILE KEY(57)=0
PRINT OK,10,10
PRINT OKs,10,20
PRINT Snd,10,30
PRINT play,10,40
PRINT chan,10,50
SHOWSCREEN
WEND
FMOD_Close()
END


And the main interface code is :

Code (glbasic) Select
INLINE
#include "fmod.h"

FMOD_SYSTEM *fSystem;
DGArray<FMOD_SOUND*> fsound;
DGArray<FMOD_CHANNEL*> fchannel;
ENDINLINE

FUNCTION FMOD_Init%:maxChannels%,flags%
LOCAL result%

INLINE

result=FMOD_System_Create(&fSystem);
if (result==FMOD_OK)
{
result=FMOD_System_Init(fSystem,maxChannels,flags,0);
}

return result;
ENDINLINE
ENDFUNCTION

FUNCTION FMOD_CreateSound%:fileName$,mode%,BYREF sound%
LOCAL result%

INLINE
FMOD_SOUND* xsound;

result = FMOD_System_CreateSound(fSystem,fileName_Str.c_str(),mode,NULL,&xsound);
if (result==FMOD_OK) { // all ok!

REDIM(fsound(),LEN(fsound())+1);
fsound(LEN(fsound())-1) = xsound;
sound = LEN(fsound())-1; // set the handle to sound
}

return result;
ENDINLINE
ENDFUNCTION

FUNCTION FMOD_PlaySound%:channelID%,sound%,paused%,BYREF channel%
LOCAL result%

INLINE
FMOD_CHANNEL* xchannel;

result=FMOD_System_PlaySound(fSystem,(FMOD_CHANNELINDEX) channelID,fsound(sound),(bool) paused,&xchannel);
if (result==FMOD_OK) { // all ok!

REDIM(fchannel(),LEN(fchannel())+1);
fchannel(LEN(fchannel())-1) = xchannel;
channel = LEN(fchannel())-1; // set the handle to channel
}
return result;
ENDINLINE
ENDFUNCTION

FUNCTION FMOD_Close:
INLINE
return FMOD_System_Close(fSystem);
ENDINLINE
ENDFUNCTION


At the moment its only just enough to get a tune working - but it does work...

For windows users, your project will need to have the following added :

cmp : -L"X:\Programming\GLBasic"
lnk : -L"X:\Programming\GLBasic" -lfmodex_vc

Mac just need :

cmp : -L"X:\Programming\GLBasic" -lfmodex

Linux cant be used because it needs a later version of STDC++, LIBC than included in GLBasic...
Title: Re: FMOD
Post by: Schranz0r on 2008-Dec-29
Nice  :good:
Title: Re: FMOD
Post by: MrTAToad on 2008-Dec-30
Its a shame about the Linux version - but Gernot would need to use a later version of GCC before it'll work...
Title: Re: FMOD
Post by: Kitty Hello on 2008-Dec-30
a newer gcc for linux? Oh dear. I'll try.
Title: Re: FMOD
Post by: MrTAToad on 2008-Dec-30
Yes - the newer FMOD requires STDC++.so.6, which in turn requires a later version of GCC and LIBC.  I think there was also something else needed as well too...