X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=sound.h;h=512ae9cf24036062d2b07e946d60a6fea04a1623;hb=85a33377d64ae8438e6582a7b8472f5a4bd41942;hp=b571be4e98e1b9cfb2cb165c3e67fe0b64433ae8;hpb=a845e9f59600c6443cfca0517d9c30ee9f0904b9;p=xonotic%2Fdarkplaces.git diff --git a/sound.h b/sound.h index b571be4e..512ae9cf 100644 --- a/sound.h +++ b/sound.h @@ -32,12 +32,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define DEFAULT_SOUND_PACKET_ATTENUATION 1.0 // Channel flags -#define CHANNELFLAG_NONE 0 -#define CHANNELFLAG_FORCELOOP (1 << 0) // force looping even if the sound is not looped -#define CHANNELFLAG_LOCALSOUND (1 << 1) // INTERNAL USE. Not settable by S_SetChannelFlag -#define CHANNELFLAG_PAUSED (1 << 2) -#define CHANNELFLAG_FULLVOLUME (1 << 3) // isn't affected by the general volume - +// These channel flags can be used for sound() builtins, with SOUNDFLAG_* names +#define CHANNELFLAG_NONE 0 +#define CHANNELFLAG_RELIABLE (1 << 0) // send as reliable message (only used on server) +#define CHANNELFLAG_FORCELOOP (1 << 1) // force looping even if the sound is not looped +#define CHANNELFLAG_LOCALSOUND (1 << 2) // INTERNAL USE. Not settable by S_SetChannelFlag +#define CHANNELFLAG_PAUSED (1 << 3) // pause status +#define CHANNELFLAG_FULLVOLUME (1 << 4) // isn't affected by the general volume // ==================================================================== // Types and variables @@ -45,10 +46,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. typedef struct sfx_s sfx_t; +extern cvar_t mastervolume; extern cvar_t bgmvolume; extern cvar_t volume; extern cvar_t snd_initialized; extern cvar_t snd_staticvolume; +extern cvar_t snd_mutewhenidle; // ==================================================================== @@ -56,18 +59,44 @@ extern cvar_t snd_staticvolume; // ==================================================================== void S_Init (void); +void S_Terminate (void); + void S_Startup (void); void S_Shutdown (void); +void S_UnloadAllSounds_f (void); void S_Update(const matrix4x4_t *listenermatrix); void S_ExtraUpdate (void); -sfx_t *S_PrecacheSound (const char *sample, qboolean complain, qboolean lock); -void S_ServerSounds (char serversound [][MAX_QPATH], unsigned int numsounds); -void S_UnlockSfx (sfx_t *sfx); +sfx_t *S_PrecacheSound (const char *sample, qboolean complain, qboolean levelsound); +float S_SoundLength(const char *name); +void S_ClearUsed (void); +void S_PurgeUnused (void); +qboolean S_IsSoundPrecached (const sfx_t *sfx); +sfx_t *S_FindName(const char *name); + +// these define the "engine" channel namespace +#define CHAN_MIN_AUTO -128 +#define CHAN_MAX_AUTO 0 +#define CHAN_MIN_SINGLE 1 +#define CHAN_MAX_SINGLE 127 +#define IS_CHAN_AUTO(n) ((n) >= CHAN_MIN_AUTO && (n) <= CHAN_MAX_AUTO) +#define IS_CHAN_SINGLE(n) ((n) >= CHAN_MIN_SINGLE && (n) <= CHAN_MAX_SINGLE) +#define IS_CHAN(n) (IS_CHAN_AUTO(n) || IS_CHAN_SINGLE(n)) + +// engine channel == network channel +#define CHAN_ENGINE2NET(c) (c) +#define CHAN_NET2ENGINE(c) (c) + +// engine view of channel encodes the auto flag into the channel number (see CHAN_ constants below) +// user view uses the flags bitmask for it +#define CHAN_USER2ENGINE(c) (c) +#define CHAN_ENGINE2USER(c) (c) +#define CHAN_ENGINE2CVAR(c) (abs(c)) // S_StartSound returns the channel index, or -1 if an error occurred int S_StartSound (int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float fvol, float attenuation); +int S_StartSound_StartPosition_Flags (int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float fvol, float attenuation, float startposition, int flags, float fspeed); qboolean S_LocalSound (const char *s); void S_StaticSound (sfx_t *sfx, vec3_t origin, float fvol, float attenuation); @@ -75,9 +104,17 @@ void S_StopSound (int entnum, int entchannel); void S_StopAllSounds (void); void S_PauseGameSounds (qboolean toggle); -void S_StopChannel (unsigned int channel_ind); +void S_StopChannel (unsigned int channel_ind, qboolean lockmutex, qboolean freesfx); qboolean S_SetChannelFlag (unsigned int ch_ind, unsigned int flag, qboolean value); void S_SetChannelVolume (unsigned int ch_ind, float fvol); +void S_SetChannelSpeed (unsigned int ch_ind, float fspeed); +float S_GetChannelPosition (unsigned int ch_ind); +float S_GetEntChannelPosition(int entnum, int entchannel); + +void S_BlockSound (void); +void S_UnblockSound (void); +int S_GetSoundRate (void); +int S_GetSoundChannels (void); #endif