|
|
1.1 ! root 1: /* ! 2: Copyright (C) 1996-1997 Id Software, Inc. ! 3: ! 4: This program is free software; you can redistribute it and/or ! 5: modify it under the terms of the GNU General Public License ! 6: as published by the Free Software Foundation; either version 2 ! 7: of the License, or (at your option) any later version. ! 8: ! 9: This program is distributed in the hope that it will be useful, ! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of ! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! 12: ! 13: See the GNU General Public License for more details. ! 14: ! 15: You should have received a copy of the GNU General Public License ! 16: along with this program; if not, write to the Free Software ! 17: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ! 18: ! 19: */ ! 20: // sound.h -- client sound i/o functions ! 21: ! 22: #ifndef __SOUND__ ! 23: #define __SOUND__ ! 24: ! 25: // !!! if this is changed, it much be changed in asm_i386.h too !!! ! 26: typedef struct ! 27: { ! 28: int left; ! 29: int right; ! 30: } portable_samplepair_t; ! 31: ! 32: typedef struct sfx_s ! 33: { ! 34: char name[MAX_QPATH]; ! 35: cache_user_t cache; ! 36: } sfx_t; ! 37: ! 38: // !!! if this is changed, it much be changed in asm_i386.h too !!! ! 39: typedef struct ! 40: { ! 41: int length; ! 42: int loopstart; ! 43: int speed; ! 44: int width; ! 45: int stereo; ! 46: byte data[1]; // variable sized ! 47: } sfxcache_t; ! 48: ! 49: typedef struct ! 50: { ! 51: qboolean gamealive; ! 52: qboolean soundalive; ! 53: qboolean splitbuffer; ! 54: int channels; ! 55: int samples; // mono samples in buffer ! 56: int submission_chunk; // don't mix less than this # ! 57: int samplepos; // in mono samples ! 58: int samplebits; ! 59: int speed; ! 60: unsigned char *buffer; ! 61: } dma_t; ! 62: ! 63: // !!! if this is changed, it much be changed in asm_i386.h too !!! ! 64: typedef struct ! 65: { ! 66: sfx_t *sfx; // sfx number ! 67: int leftvol; // 0-255 volume ! 68: int rightvol; // 0-255 volume ! 69: int end; // end time in global paintsamples ! 70: int pos; // sample position in sfx ! 71: int looping; // where to loop, -1 = no looping ! 72: int entnum; // to allow overriding a specific sound ! 73: int entchannel; // ! 74: vec3_t origin; // origin of sound effect ! 75: vec_t dist_mult; // distance multiplier (attenuation/clipK) ! 76: int master_vol; // 0-255 master volume ! 77: } channel_t; ! 78: ! 79: typedef struct ! 80: { ! 81: int rate; ! 82: int width; ! 83: int channels; ! 84: int loopstart; ! 85: int samples; ! 86: int dataofs; // chunk starts this many bytes from file start ! 87: } wavinfo_t; ! 88: ! 89: void S_Init (void); ! 90: void S_Startup (void); ! 91: void S_Shutdown (void); ! 92: void S_StartSound (int entnum, int entchannel, sfx_t *sfx, vec3_t origin, float fvol, float attenuation); ! 93: void S_StaticSound (sfx_t *sfx, vec3_t origin, float vol, float attenuation); ! 94: void S_StopSound (int entnum, int entchannel); ! 95: void S_StopAllSounds(qboolean clear); ! 96: void S_ClearBuffer (void); ! 97: void S_Update (vec3_t origin, vec3_t v_forward, vec3_t v_right, vec3_t v_up); ! 98: void S_ExtraUpdate (void); ! 99: ! 100: sfx_t *S_PrecacheSound (char *sample); ! 101: void S_TouchSound (char *sample); ! 102: void S_ClearPrecache (void); ! 103: void S_BeginPrecaching (void); ! 104: void S_EndPrecaching (void); ! 105: void S_PaintChannels(int endtime); ! 106: void S_InitPaintChannels (void); ! 107: ! 108: // picks a channel based on priorities, empty slots, number of channels ! 109: channel_t *SND_PickChannel(int entnum, int entchannel); ! 110: ! 111: // spatializes a channel ! 112: void SND_Spatialize(channel_t *ch); ! 113: ! 114: // initializes cycling through a DMA buffer and returns information on it ! 115: qboolean SNDDMA_Init(void); ! 116: ! 117: // gets the current DMA position ! 118: int SNDDMA_GetDMAPos(void); ! 119: ! 120: // shutdown the DMA xfer. ! 121: void SNDDMA_Shutdown(void); ! 122: ! 123: // ==================================================================== ! 124: // User-setable variables ! 125: // ==================================================================== ! 126: ! 127: #define MAX_CHANNELS 128 ! 128: #define MAX_DYNAMIC_CHANNELS 8 ! 129: ! 130: ! 131: extern channel_t channels[MAX_CHANNELS]; ! 132: // 0 to MAX_DYNAMIC_CHANNELS-1 = normal entity sounds ! 133: // MAX_DYNAMIC_CHANNELS to MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS -1 = water, etc ! 134: // MAX_DYNAMIC_CHANNELS + NUM_AMBIENTS to total_channels = static sounds ! 135: ! 136: extern int total_channels; ! 137: ! 138: // ! 139: // Fake dma is a synchronous faking of the DMA progress used for ! 140: // isolating performance in the renderer. The fakedma_updates is ! 141: // number of times S_Update() is called per second. ! 142: // ! 143: ! 144: extern qboolean fakedma; ! 145: extern int fakedma_updates; ! 146: extern int paintedtime; ! 147: extern vec3_t listener_origin; ! 148: extern vec3_t listener_forward; ! 149: extern vec3_t listener_right; ! 150: extern vec3_t listener_up; ! 151: extern volatile dma_t *shm; ! 152: extern volatile dma_t sn; ! 153: extern vec_t sound_nominal_clip_dist; ! 154: ! 155: extern cvar_t loadas8bit; ! 156: extern cvar_t bgmvolume; ! 157: extern cvar_t volume; ! 158: ! 159: extern qboolean snd_initialized; ! 160: ! 161: extern int snd_blocked; ! 162: ! 163: void S_LocalSound (char *s); ! 164: sfxcache_t *S_LoadSound (sfx_t *s); ! 165: ! 166: wavinfo_t GetWavinfo (char *name, byte *wav, int wavlength); ! 167: ! 168: void SND_InitScaletable (void); ! 169: void SNDDMA_Submit(void); ! 170: ! 171: void S_AmbientOff (void); ! 172: void S_AmbientOn (void); ! 173: ! 174: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.