/* * FMOD PLAYBACK, LINKED DYNAMICALLY * THIS TOTALLY WON'T BUILD ON ITS OWN, I SWEAR. * YOU'D HAVE TO KNOW HOW TO LINK IT AND STUFF BY YOURSELF. */ #include "globaldef.h" #ifdef FMOD #include FMOD_SYSTEM *fmod_system; FMOD_SOUND *fmod_sound; FMOD_CHANNEL *fmod_channel = 0; FMOD_RESULT fmod_result; static byte fmod_track; static byte fmod_loop; static float fmod_volume = 1.0f; static qboolean fmod_initialised = false; char fmod_file[MAX_OSPATH]; void FmodEx_Play(byte track, qboolean looping) { if(!fmod_initialised) return; if (fmod_track == track) return; fmod_track = track; fmod_loop = looping; fmod_volume = bgmvolume->value; sprintf(fmod_file, "%s/music/track%d.ogg", com_gamedir, fmod_track); if(fmod_loop == true) fmod_result = FMOD_System_CreateSound (fmod_system, fmod_file, FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL | FMOD_CREATESTREAM, 0, &fmod_sound); else fmod_result = FMOD_System_CreateSound (fmod_system, fmod_file, FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_OFF | FMOD_CREATESTREAM, 0, &fmod_sound); if (fmod_result != FMOD_OK) { Con_Printf("FmodEx: Can't load %s!\n", fmod_file); return; } FMOD_System_PlaySound (fmod_system, FMOD_CHANNEL_FREE, fmod_sound, 0, &fmod_channel); FMOD_Channel_SetVolume(fmod_channel, fmod_volume); } void FmodEx_Stop(void) { FMOD_Sound_Release (fmod_sound); } void FmodEx_Pause(void) { FMOD_Channel_SetPaused(fmod_channel, true); } void FmodEx_Resume(void) { FMOD_Channel_SetPaused(fmod_channel, false); } void FmodEx_Update(void) { if(fmod_volume != bgmvolume->value) { fmod_volume = bgmvolume->value; FMOD_Channel_SetVolume(fmod_channel, fmod_volume); } } static void FmodEx_f (void) { char *command; int i; if (Cmd_Argc() < 2) return; command = Cmd_Argv (1); if (Q_strcasecmp(command, "play") == 0) FmodEx_Play((byte)Q_atoi(Cmd_Argv (2)), false); else if (Q_strcasecmp(command, "pause") == 0) FmodEx_Pause(); else if (Q_strcasecmp(command, "resume") == 0) FmodEx_Resume(); else if (Q_strcasecmp(command, "stop") == 0) FmodEx_Stop(); } int FmodEx_Init(void) { unsigned int version; if (FMOD_System_Create (&fmod_system)){ Con_Printf ("FMOD_System_Create failed!\n"); return 0;} if (FMOD_System_GetVersion (fmod_system, &version)){ Con_Printf ("FMOD_System_GetVersion failed!\n"); return 0;} if (FMOD_System_Init (fmod_system, 1, FMOD_INIT_NORMAL, NULL)){ Con_Printf ("FMOD_System_Init failed!\n"); return 0; } Cmd_AddCommand ("fmod", FmodEx_f); Con_Printf("FmodEx Initialised.\n"); fmod_initialised = true; return 1; } void FmodEx_Shutdown(void) { FMOD_Sound_Release (fmod_sound); FMOD_System_Close (fmod_system); FMOD_System_Release (fmod_system); Con_Printf("FmodEx Shutdown.\n"); } #endif