mirror of
https://git.code.sf.net/p/quake/quakeforge-old
synced 2024-11-11 23:21:41 +00:00
c3f5581b0a
Unchained, Ultimate, Ultra, Up Yours, Underworld, Underground, Unified, Unity, etc. You know the drill. This takes care of the "standalone" problem with the wrong name, and the recent snafu with multiple developers working on the same files simultaneously...expect me (and probably others) to start locking dirs when updates are taking place. And yes, this update is really as large as it looks. Software only at the moment, but I will have the makefile updated to build the GL builds as well.
177 lines
4.7 KiB
C
177 lines
4.7 KiB
C
/*
|
|
Copyright (C) 1996-1997 Id Software, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
// sound.h -- client sound i/o functions
|
|
|
|
#ifndef __SOUND__
|
|
#define __SOUND__
|
|
|
|
#define DEFAULT_SOUND_PACKET_VOLUME 255
|
|
#define DEFAULT_SOUND_PACKET_ATTENUATION 1.0
|
|
|
|
// !!! if this is changed, it much be changed in asm_i386.h too !!!
|
|
typedef struct
|
|
{
|
|
int left;
|
|
int right;
|
|
} portable_samplepair_t;
|
|
|
|
typedef struct sfx_s
|
|
{
|
|
char name[MAX_QPATH];
|
|
cache_user_t cache;
|
|
} sfx_t;
|
|
|
|
// !!! if this is changed, it much be changed in asm_i386.h too !!!
|
|
typedef struct
|
|
{
|
|
int length;
|
|
int loopstart;
|
|
int speed;
|
|
int width;
|
|
int stereo;
|
|
byte data[1]; // variable sized
|
|
} sfxcache_t;
|
|
|
|
typedef struct
|
|
{
|
|
qboolean gamealive;
|
|
qboolean soundalive;
|
|
qboolean splitbuffer;
|
|
int channels;
|
|
int samples; // mono samples in buffer
|
|
int submission_chunk; // don't mix less than this #
|
|
int samplepos; // in mono samples
|
|
int samplebits;
|
|
int speed;
|
|
unsigned char *buffer;
|
|
} dma_t;
|
|
|
|
// !!! if this is changed, it much be changed in asm_i386.h too !!!
|
|
typedef struct
|
|
{
|
|
sfx_t *sfx; // sfx number
|
|
int leftvol; // 0-255 volume
|
|
int rightvol; // 0-255 volume
|
|
int end; // end time in global paintsamples
|
|
int pos; // sample position in sfx
|
|
int looping; // where to loop, -1 = no looping
|
|
int entnum; // to allow overriding a specific sound
|
|
int entchannel; //
|
|
vec3_t origin; // origin of sound effect
|
|
vec_t dist_mult; // distance multiplier (attenuation/clipK)
|
|
int master_vol; // 0-255 master volume
|
|
} channel_t;
|
|
|
|
typedef struct
|
|
{
|
|
int rate;
|
|
int width;
|
|
int channels;
|
|
int loopstart;
|
|
int samples;
|
|
int dataofs; // chunk starts this many bytes from file start
|
|
} wavinfo_t;
|
|
|
|
void S_Init (void);
|
|
void S_Startup (void);
|
|
void S_Shutdown (void);
|
|
void S_StartSound (int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float fvol, float attenuation);
|
|
void S_StaticSound (sfx_t *sfx, vec3_t origin, float vol, float attenuation);
|
|
void S_StopSound (int entnum, int entchannel);
|
|
void S_StopAllSounds(qboolean clear);
|
|
void S_ClearBuffer (void);
|
|
void S_Update (vec3_t origin, vec3_t v_forward, vec3_t v_right, vec3_t v_up);
|
|
void S_ExtraUpdate (void);
|
|
|
|
sfx_t *S_PrecacheSound (char *sample);
|
|
void S_TouchSound (char *sample);
|
|
void S_ClearPrecache (void);
|
|
void S_BeginPrecaching (void);
|
|
void S_EndPrecaching (void);
|
|
void S_PaintChannels(int endtime);
|
|
void S_InitPaintChannels (void);
|
|
|
|
// picks a channel based on priorities, empty slots, number of channels
|
|
channel_t *SND_PickChannel(int entnum, int entchannel);
|
|
|
|
// spatializes a channel
|
|
void SND_Spatialize(channel_t *ch);
|
|
|
|
// initializes cycling through a DMA buffer and returns information on it
|
|
qboolean SNDDMA_Init(void);
|
|
|
|
// gets the current DMA position
|
|
int SNDDMA_GetDMAPos(void);
|
|
|
|
// shutdown the DMA xfer.
|
|
void SNDDMA_Shutdown(void);
|
|
|
|
// ====================================================================
|
|
// User-setable variables
|
|
// ====================================================================
|
|
|
|
#define MAX_CHANNELS 128
|
|
#define MAX_DYNAMIC_CHANNELS 8
|
|
|
|
|
|
extern channel_t channels[MAX_CHANNELS];
|
|
// 0 to MAX_DYNAMIC_CHANNELS-1 = normal entity sounds
|
|
// MAX_DYNAMIC_CHANNELS to MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS -1 = water, etc
|
|
// MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS to total_channels = static sounds
|
|
|
|
extern int total_channels;
|
|
|
|
//
|
|
// Fake dma is a synchronous faking of the DMA progress used for
|
|
// isolating performance in the renderer. The fakedma_updates is
|
|
// number of times S_Update() is called per second.
|
|
//
|
|
|
|
extern qboolean fakedma;
|
|
extern int fakedma_updates;
|
|
extern int paintedtime;
|
|
extern vec3_t listener_origin;
|
|
extern vec3_t listener_forward;
|
|
extern vec3_t listener_right;
|
|
extern vec3_t listener_up;
|
|
extern volatile dma_t *shm;
|
|
extern volatile dma_t sn;
|
|
extern vec_t sound_nominal_clip_dist;
|
|
|
|
extern cvar_t loadas8bit;
|
|
extern cvar_t bgmvolume;
|
|
extern cvar_t volume;
|
|
|
|
extern qboolean snd_initialized;
|
|
|
|
extern int snd_blocked;
|
|
|
|
void S_LocalSound (char *s);
|
|
sfxcache_t *S_LoadSound (sfx_t *s);
|
|
|
|
wavinfo_t GetWavinfo (char *name, byte *wav, int wavlength);
|
|
|
|
void SND_InitScaletable (void);
|
|
void SNDDMA_Submit(void);
|
|
|
|
void S_AmbientOff (void);
|
|
void S_AmbientOn (void);
|
|
|
|
#endif
|