// SONIC ROBO BLAST 2 //----------------------------------------------------------------------------- // Copyright (C) 1993-1996 by id Software, Inc. // Copyright (C) 1998-2000 by DooM Legacy Team. // Copyright (C) 1999-2016 by Sonic Team Junior. // // This program is free software distributed under the // terms of the GNU General Public License, version 2. // See the 'LICENSE' file for more details. //----------------------------------------------------------------------------- /// \file s_sound.h /// \brief The not so system specific sound interface #ifndef __S_SOUND__ #define __S_SOUND__ #include "i_sound.h" #include "sounds.h" #include "m_fixed.h" #include "command.h" #include "tables.h" // angle_t // mask used to indicate sound origin is player item pickup #define PICKUP_SOUND 0x8000 extern consvar_t stereoreverse; extern consvar_t cv_soundvolume, cv_closedcaptioning, cv_digmusicvolume, cv_midimusicvolume; extern consvar_t cv_numChannels; #ifdef SNDSERV extern consvar_t sndserver_cmd, sndserver_arg; #endif #ifdef MUSSERV extern consvar_t musserver_cmd, musserver_arg; #endif extern CV_PossibleValue_t soundvolume_cons_t[]; //part of i_cdmus.c extern consvar_t cd_volume, cdUpdate; #if defined (macintosh) && !defined (HAVE_SDL) typedef enum { music_normal, playlist_random, playlist_normal } playmode_t; extern consvar_t play_mode; #endif typedef enum { SF_TOTALLYSINGLE = 1, // Only play one of these sounds at a time...GLOBALLY SF_NOMULTIPLESOUND = 2, // Like SF_NOINTERRUPT, but doesnt care what the origin is SF_OUTSIDESOUND = 4, // Volume is adjusted depending on how far away you are from 'outside' SF_X4AWAYSOUND = 8, // Hear it from 4x the distance away SF_X8AWAYSOUND = 16, // Hear it from 8x the distance away SF_NOINTERRUPT = 32, // Only play this sound if it isn't already playing on the origin SF_X2AWAYSOUND = 64, // Hear it from 2x the distance away } soundflags_t; typedef struct { fixed_t x, y, z; angle_t angle; } listener_t; typedef struct { // sound information (if null, channel avail.) sfxinfo_t *sfxinfo; // origin of sound const void *origin; // handle of the sound being played INT32 handle; } channel_t; typedef struct { channel_t *c; sfxinfo_t *s; UINT16 t; UINT8 b; } caption_t; #define NUMCAPTIONS 8 #define MAXCAPTIONTICS (2*TICRATE) #define CAPTIONFADETICS 20 extern caption_t closedcaptions[NUMCAPTIONS]; void S_StartCaption(sfxenum_t sfx_id, INT32 cnum, UINT16 lifespan); void S_ResetCaptions(void); // register sound vars and commands at game startup void S_RegisterSoundStuff(void); // // Initializes sound stuff, including volume // Sets channels, SFX and music volume, allocates channel buffer, sets S_sfx lookup. // void S_Init(INT32 sfxVolume, INT32 digMusicVolume, INT32 midiMusicVolume); // // Per level startup code. // Kills playing sounds at start of level, determines music if any, changes music. // void S_StopSounds(void); void S_ClearSfx(void); void S_Start(void); // // Basically a W_GetNumForName that adds "ds" at the beginning of the string. Returns a lumpnum. // lumpnum_t S_GetSfxLumpNum(sfxinfo_t *sfx); // // Start sound for thing at using from sounds.h // void S_StartSound(const void *origin, sfxenum_t sound_id); // Will start a sound at a given volume. void S_StartSoundAtVolume(const void *origin, sfxenum_t sound_id, INT32 volume); // Stop sound for thing at void S_StopSound(void *origin); // Start music track, arbitrary, given its name, and set whether looping // note: music flags 12 bits for tracknum (gme, other formats with more than one track) // 13-15 aren't used yet // and the last bit we ignore (internal game flag for resetting music on reload) #define S_ChangeMusicInternal(a,b) S_ChangeMusic(a,0,b) void S_ChangeMusic(const char *mmusic, UINT16 mflags, boolean looping); // Get music type musictype_t S_MusicType(); // Set Speed of Music boolean S_SpeedMusic(float speed); // Get Length of Music UINT32 S_GetMusicLength(void); // Set LoopPoint of Music boolean S_SetMusicLoopPoint(UINT32 looppoint); // Get LoopPoint of Music UINT32 S_GetMusicLoopPoint(void); // Set Position of Music boolean S_SetMusicPosition(UINT32 position); // Get Position of Music UINT32 S_GetMusicPosition(void); // Stops the music. void S_StopMusic(void); // Stop and resume music, during game PAUSE. void S_PauseAudio(void); void S_ResumeAudio(void); // Gets general music status boolean S_MusicPlaying(void); // Gets music pause status boolean S_MusicPaused(void); // Gets currently playing music name const char *S_MusicName(void); // Checks if music name exists boolean S_MusicExists(const char *mname, boolean checkMIDI, boolean checkDigi); // // Updates music & sounds // void S_UpdateSounds(void); FUNCMATH fixed_t S_CalculateSoundDistance(fixed_t px1, fixed_t py1, fixed_t pz1, fixed_t px2, fixed_t py2, fixed_t pz2); void S_SetDigMusicVolume(INT32 volume); void S_SetMIDIMusicVolume(INT32 volume); void S_SetSfxVolume(INT32 volume); INT32 S_OriginPlaying(void *origin); INT32 S_IdPlaying(sfxenum_t id); INT32 S_SoundPlaying(void *origin, sfxenum_t id); void S_StartSoundName(void *mo, const char *soundname); void S_StopSoundByID(void *origin, sfxenum_t sfx_id); void S_StopSoundByNum(sfxenum_t sfxnum); #ifndef HW3SOUND #define S_StartAttackSound S_StartSound #define S_StartScreamSound S_StartSound #endif #ifdef MUSICSLOT_COMPATIBILITY // For compatibility with code/scripts relying on older versions // This is a list of all the "special" slot names and their associated numbers const char *compat_special_music_slots[16]; #endif #endif