105 lines
2.7 KiB
C
105 lines
2.7 KiB
C
/* fmod.c */
|
|
/* Copyright (c) Taylor Daley, 2023. */
|
|
/* NetHack may be freely redistributed. See license for details. */
|
|
|
|
#ifdef SND_LIB_FMOD
|
|
|
|
#include "hack.h"
|
|
#include "fmod.h"
|
|
|
|
static FMOD_SYSTEM *systemvar;
|
|
static FMOD_SOUND *soundvar;
|
|
static FMOD_CHANNEL *channel1;
|
|
static FMOD_CHANNEL *channelMus;
|
|
|
|
static void fmod_init_nhsound(void);
|
|
static void fmod_exit_nhsound(const char *);
|
|
static void fmod_achievement(schar, schar, int32_t);
|
|
static void fmod_soundeffect(char *, int32_t, int32_t);
|
|
static void fmod_hero_playnotes(int32_t instrument, const char *str, int32_t volume);
|
|
static void fmod_play_usersound(char *, int32_t, int32_t);
|
|
static void fmod_ambience(int32_t, int32_t, int32_t);
|
|
static void fmod_verbal(char *, int32_t, int32_t, int32_t, int32_t);
|
|
|
|
struct sound_procs fmod_procs = {
|
|
SOUNDID(fmod),
|
|
SOUND_TRIGGER_USERSOUNDS | 0,
|
|
fmod_init_nhsound,
|
|
fmod_exit_nhsound,
|
|
fmod_achievement,
|
|
fmod_soundeffect,
|
|
fmod_hero_playnotes,
|
|
fmod_play_usersound,
|
|
fmod_ambience,
|
|
fmod_verbal
|
|
};
|
|
|
|
static void
|
|
fmod_init_nhsound(void)
|
|
{
|
|
/* Initialize external sound library */
|
|
FMOD_System_Create(&systemvar, FMOD_VERSION);
|
|
FMOD_System_Init(systemvar, 32, FMOD_INIT_NORMAL, 0);
|
|
}
|
|
|
|
static void
|
|
fmod_exit_nhsound(const char *reason)
|
|
{
|
|
/* Close / Terminate external sound library */
|
|
FMOD_System_Close(systemvar);
|
|
FMOD_System_Release(systemvar);
|
|
}
|
|
|
|
/* fulfill SNDCAP_ACHIEVEMENTS */
|
|
static void
|
|
fmod_achievement(schar ach1, schar ach2, int32_t repeat)
|
|
{
|
|
// to be added in future
|
|
}
|
|
|
|
/* fulfill SNDCAP_SOUNDEFFECTS */
|
|
static void
|
|
fmod_soundeffect(char *desc, int32_t seid, int32_t volume)
|
|
{
|
|
// to be added in future
|
|
}
|
|
|
|
/* fulfill SNDCAP_HEROMUSIC */
|
|
static void fmod_hero_playnotes(int32_t instrument, const char *str, int32_t volume)
|
|
{
|
|
// to be added in future
|
|
}
|
|
|
|
/* fulfill SOUND_TRIGGER_USERSOUNDS */
|
|
static void
|
|
fmod_play_usersound(char *filename, int32_t volume UNUSED, int32_t idx UNUSED)
|
|
{
|
|
FMOD_System_CreateSound(systemvar, filename, FMOD_CREATESAMPLE, 0,
|
|
&soundvar);
|
|
if (strstr(filename, "music_") != NULL) {
|
|
FMOD_Channel_Stop(channelMus);
|
|
FMOD_System_PlaySound(systemvar, soundvar, 0, 0, &channelMus);
|
|
FMOD_Channel_SetMode(channelMus, FMOD_LOOP_NORMAL);
|
|
} else {
|
|
FMOD_Channel_Stop(channel1);
|
|
FMOD_System_PlaySound(systemvar, soundvar, 0, 0, &channel1);
|
|
}
|
|
}
|
|
|
|
static void
|
|
fmod_ambience(int32_t ambienceid, int32_t ambience_action,
|
|
int32_t hero_proximity)
|
|
{
|
|
// to be added in future
|
|
}
|
|
|
|
static void
|
|
fmod_verbal(char *text, int32_t gender, int32_t tone,
|
|
int32_t vol, int32_t moreinfo)
|
|
{
|
|
// to be added in future
|
|
}
|
|
|
|
#endif /* SND_LIB_FMOD */
|
|
/* end of fmod.c */
|