Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 165 lines (131 sloc) 4.298 kb
372afde @tbradshaw The original Quake 2 sources as originally released under the GPL lic…
tbradshaw authored
1 /*
2 Copyright (C) 1997-2001 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 // snd_loc.h -- private sound functions
21
22 // !!! if this is changed, the asm code must change !!!
23 typedef struct
24 {
25 int left;
26 int right;
27 } portable_samplepair_t;
28
29 typedef struct
30 {
31 int length;
32 int loopstart;
33 int speed; // not needed, because converted on load?
34 int width;
35 int stereo;
36 byte data[1]; // variable sized
37 } sfxcache_t;
38
39 typedef struct sfx_s
40 {
41 char name[MAX_QPATH];
42 int registration_sequence;
43 sfxcache_t *cache;
44 char *truename;
45 } sfx_t;
46
47 // a playsound_t will be generated by each call to S_StartSound,
48 // when the mixer reaches playsound->begin, the playsound will
49 // be assigned to a channel
50 typedef struct playsound_s
51 {
52 struct playsound_s *prev, *next;
53 sfx_t *sfx;
54 float volume;
55 float attenuation;
56 int entnum;
57 int entchannel;
58 qboolean fixed_origin; // use origin field instead of entnum's origin
59 vec3_t origin;
60 unsigned begin; // begin on this sample
61 } playsound_t;
62
63 typedef struct
64 {
65 int channels;
66 int samples; // mono samples in buffer
67 int submission_chunk; // don't mix less than this #
68 int samplepos; // in mono samples
69 int samplebits;
70 int speed;
71 byte *buffer;
72 } dma_t;
73
74 // !!! if this is changed, the asm code must change !!!
75 typedef struct
76 {
77 sfx_t *sfx; // sfx number
78 int leftvol; // 0-255 volume
79 int rightvol; // 0-255 volume
80 int end; // end time in global paintsamples
81 int pos; // sample position in sfx
82 int looping; // where to loop, -1 = no looping OBSOLETE?
83 int entnum; // to allow overriding a specific sound
84 int entchannel; //
85 vec3_t origin; // only use if fixed_origin is set
86 vec_t dist_mult; // distance multiplier (attenuation/clipK)
87 int master_vol; // 0-255 master volume
88 qboolean fixed_origin; // use origin instead of fetching entnum's origin
89 qboolean autosound; // from an entity->sound, cleared each frame
90 } channel_t;
91
92 typedef struct
93 {
94 int rate;
95 int width;
96 int channels;
97 int loopstart;
98 int samples;
99 int dataofs; // chunk starts this many bytes from file start
100 } wavinfo_t;
101
102
103 /*
104 ====================================================================
105
106 SYSTEM SPECIFIC FUNCTIONS
107
108 ====================================================================
109 */
110
111 // initializes cycling through a DMA buffer and returns information on it
112 qboolean SNDDMA_Init(void);
113
114 // gets the current DMA position
115 int SNDDMA_GetDMAPos(void);
116
117 // shutdown the DMA xfer.
118 void SNDDMA_Shutdown(void);
119
120 void SNDDMA_BeginPainting (void);
121
122 void SNDDMA_Submit(void);
123
124 //====================================================================
125
126 #define MAX_CHANNELS 32
127 extern channel_t channels[MAX_CHANNELS];
128
129 extern int paintedtime;
130 extern int s_rawend;
131 extern vec3_t listener_origin;
132 extern vec3_t listener_forward;
133 extern vec3_t listener_right;
134 extern vec3_t listener_up;
135 extern dma_t dma;
136 extern playsound_t s_pendingplays;
137
138 #define MAX_RAW_SAMPLES 8192
139 extern portable_samplepair_t s_rawsamples[MAX_RAW_SAMPLES];
140
141 extern cvar_t *s_volume;
142 extern cvar_t *s_nosound;
143 extern cvar_t *s_loadas8bit;
144 extern cvar_t *s_khz;
145 extern cvar_t *s_show;
146 extern cvar_t *s_mixahead;
147 extern cvar_t *s_testsound;
148 extern cvar_t *s_primary;
149
150 wavinfo_t GetWavinfo (char *name, byte *wav, int wavlength);
151
152 void S_InitScaletable (void);
153
154 sfxcache_t *S_LoadSound (sfx_t *s);
155
156 void S_IssuePlaysound (playsound_t *ps);
157
158 void S_PaintChannels(int endtime);
159
160 // picks a channel based on priorities, empty slots, number of channels
161 channel_t *S_PickChannel(int entnum, int entchannel);
162
163 // spatializes a channel
164 void S_Spatialize(channel_t *ch);
Something went wrong with that request. Please try again.