I have the following example from the fmod api docs.
/*===============================================================================================
PlaySound Example
Copyright (c), Firelight Technologies Pty, Ltd 2004-2011.
This example shows how to simply load and play multiple sounds. This is about the simplest
use of FMOD.
This makes FMOD decode the into memory when it loads. If the sounds are big and possibly take
up a lot of ram, then it would be better to use the FMOD_CREATESTREAM flag so that it is
streamed in realtime as it plays.
===============================================================================================*/
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include "fmod.h"
#include "fmod_errors.h"
void ERRCHECK(FMOD_RESULT result)
{
if (result != FMOD_OK)
{
printf("FMOD error! (%d) %s\n", result, FMOD_ErrorString(result));
exit(-1);
}
}
int main(int argc, char *argv[])
{
FMOD_SYSTEM *system;
FMOD_SOUND *sound1, *sound2, *sound3;
FMOD_CHANNEL *channel = 0;
FMOD_RESULT result;
int key;
unsigned int version;
/*
Create a System object and initialize.
*/
result = FMOD_System_Create(&system);
ERRCHECK(result);
result = FMOD_System_GetVersion(system, &version);
ERRCHECK(result);
if (version < FMOD_VERSION)
{
printf("Error! You are using an old version of FMOD %08x. This program requires %08x\n", version, FMOD_VERSION);
return 0;
}
result = FMOD_System_Init(system, 32, FMOD_INIT_NORMAL, NULL);
ERRCHECK(result);
result = FMOD_System_CreateSound(system, "../media/drumloop.wav", FMOD_HARDWARE, 0, &sound1);
ERRCHECK(result);
result = FMOD_Sound_SetMode(sound1, FMOD_LOOP_OFF); /* drumloop.wav has embedded loop points which automatically makes looping turn on, */
ERRCHECK(result); /* so turn it off here. We could have also just put FMOD_LOOP_OFF in the above CreateSound call. */
result = FMOD_System_CreateSound(system, "../media/jaguar.wav", FMOD_SOFTWARE, 0, &sound2);
ERRCHECK(result);
result = FMOD_System_CreateSound(system, "../media/swish.wav", FMOD_HARDWARE, 0, &sound3);
ERRCHECK(result);
printf("===================================================================\n");
printf("PlaySound Example. Copyright (c) Firelight Technologies 2004-2011.\n");
printf("===================================================================\n");
printf("\n");
printf("Press '1' to play a mono sound using hardware mixing\n");
printf("Press '2' to play a mono sound using software mixing\n");
printf("Press '3' to play a stereo sound using hardware mixing\n");
printf("Press 'Esc' to quit\n");
printf("\n");
/*
Main loop.
*/
do
{
if (_kbhit())
{
key = _getch();
switch (key)
{
case '1' :
{
result = FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sound1, 0, &channel);
ERRCHECK(result);
break;
}
case '2' :
{
result = FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sound2, 0, &channel);
ERRCHECK(result);
break;
}
case '3' :
{
result = FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sound3, 0, &channel);
ERRCHECK(result);
break;
}
}
}
FMOD_System_Update(system);
{
unsigned int ms = 0;
unsigned int lenms = 0;
int playing = 0;
int paused = 0;
int channelsplaying = 0;
if (channel)
{
FMOD_SOUND *currentsound = 0;
result = FMOD_Channel_IsPlaying(channel, &playing);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
{
ERRCHECK(result);
}
result = FMOD_Channel_GetPaused(channel, &paused);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
{
ERRCHECK(result);
}
result = FMOD_Channel_GetPosition(channel, &ms, FMOD_TIMEUNIT_MS);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
{
ERRCHECK(result);
}
FMOD_Channel_GetCurrentSound(channel, ¤tsound);
if (currentsound)
{
result = FMOD_Sound_GetLength(currentsound, &lenms, FMOD_TIMEUNIT_MS);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
{
ERRCHECK(result);
}
}
}
result = FMOD_Sound_GetLength(sound1, &lenms, FMOD_TIMEUNIT_MS);
if ((result != FMOD_OK) && (result != FMOD_ERR_INVALID_HANDLE) && (result != FMOD_ERR_CHANNEL_STOLEN))
{
ERRCHECK(result);
}
FMOD_System_GetChannelsPlaying(system, &channelsplaying);
printf("Time %02d:%02d:%02d/%02d:%02d:%02d : %s : Channels Playing %2d\r", ms / 1000 / 60, ms / 1000 % 60, ms / 10 % 100, lenms / 1000 / 60, lenms / 1000 % 60, lenms / 10 % 100, paused ? "Paused " : playing ? "Playing" : "Stopped", channelsplaying);
}
Sleep(10);
} while (key != 27);
printf("\n");
/*
Shut down
*/
result = FMOD_Sound_Release(sound1);
ERRCHECK(result);
result = FMOD_Sound_Release(sound2);
ERRCHECK(result);
result = FMOD_Sound_Release(sound3);
ERRCHECK(result);
result = FMOD_System_Close(system);
ERRCHECK(result);
result = FMOD_System_Release(system);
ERRCHECK(result);
return 0;
}
I'm trying to compile it with the following but it doesn't seem to be working. This is my output...
c:\Users\-r.s-\Desktop\fmod>gcc -c -o test.o test.c -I"C:\Program Files (x86)\FM
OD SoundSystem\FMOD Programmers API Windows\api\inc"
c:\Users\-r.s-\Desktop\fmod>gcc -o test.exe test.o -L"C:\Program Files (x86)\FMO
D SoundSystem\FMOD Programmers API Windows\api\lib"
test.o:test.c:(.text+0x413): undefined reference to `FMOD_System_Create@4'
test.o:test.c:(.text+0x436): undefined reference to `FMOD_System_GetVersion@8'
test.o:test.c:(.text+0x499): undefined reference to `FMOD_System_Init@16'
test.o:test.c:(.text+0x4d4): undefined reference to `FMOD_System_CreateSound@20'
test.o:test.c:(.text+0x4f8): undefined reference to `FMOD_Sound_SetMode@8'
test.o:test.c:(.text+0x533): undefined reference to `FMOD_System_CreateSound@20'
test.o:test.c:(.text+0x56e): undefined reference to `FMOD_System_CreateSound@20'
test.o:test.c:(.text+0x643): undefined reference to `FMOD_System_PlaySound@20'
test.o:test.c:(.text+0x67f): undefined reference to `FMOD_System_PlaySound@20'
test.o:test.c:(.text+0x6bb): undefined reference to `FMOD_System_PlaySound@20'
test.o:test.c:(.text+0x6d8): undefined reference to `FMOD_System_Update@4'
test.o:test.c:(.text+0x722): undefined reference to `FMOD_Channel_IsPlaying@8'
test.o:test.c:(.text+0x757): undefined reference to `FMOD_Channel_GetPaused@8'
test.o:test.c:(.text+0x794): undefined reference to `FMOD_Channel_GetPosition@12
'
test.o:test.c:(.text+0x7c9): undefined reference to `FMOD_Channel_GetCurrentSoun
d@8'
test.o:test.c:(.text+0x7ed): undefined reference to `FMOD_Sound_GetLength@12'
test.o:test.c:(.text+0x82a): undefined reference to `FMOD_Sound_GetLength@12'
test.o:test.c:(.text+0x85f): undefined reference to `FMOD_System_GetChannelsPlay
ing@8'
test.o:test.c:(.text+0x9a8): undefined reference to `FMOD_Sound_Release@4'
test.o:test.c:(.text+0x9c4): undefined reference to `FMOD_Sound_Release@4'
test.o:test.c:(.text+0x9e0): undefined reference to `FMOD_Sound_Release@4'
test.o:test.c:(.text+0x9fc): undefined reference to `FMOD_System_Close@4'
test.o:test.c:(.text+0xa18): undefined reference to `FMOD_System_Release@4'
collect2: ld returned 1 exit status
c:\Users\-r.s-\Desktop\fmod>
It seems you are missing the FMOD library from your linker line, you need -lfmodex to link in libfmodex.a to your project.