// One lock is automatically granted while the sfx is
// playing (and removed when stopped). Locks can also be
- int locks; // added by S_PrecacheSound and S_ServerSounds.
- // A SFX with no lock and no SFXFLAG_PERMANENTLOCK is
- // freed at level change by S_ServerSounds.
+ int locks; // added by S_PrecacheSound.
+ // A SFX with no lock, no SFXFLAG_PERMANENTLOCK, and not precached after a level change is freed
unsigned int flags; // cf SFXFLAG_* defines
unsigned int loopstart; // in sample frames. equals total_length if not looped
typedef struct channel_s
{
- short listener_volume [SND_LISTENERS]; // 0-255 volume per speaker
- int master_vol; // 0-255 master volume
+ int listener_volume [SND_LISTENERS]; // 0-65536 volume per speaker
+ int master_vol; // 0-65536 master volume
sfx_t *sfx; // sfx number
unsigned int flags; // cf CHANNELFLAG_* defines
int pos; // sample position in sfx, negative values delay the start of the sound playback
vec3_t origin; // origin of sound effect
vec_t dist_mult; // distance multiplier (attenuation/clipK)
void *fetcher_data; // Per-channel data for the sound fetching function
+ int prologic_invert;// whether a sound is played on the surround channels in prologic
} channel_t;
// Sound fetching functions
snd_fetcher_getfmt_t getfmt;
};
-// 0 to NUM_AMBIENTS - 1 = water, etc
-// NUM_AMBIENTS to NUM_AMBIENTS + MAX_DYNAMIC_CHANNELS - 1 = normal entity sounds
-// NUM_AMBIENTS + MAX_DYNAMIC_CHANNELS to total_channels = static sounds
-#define MAX_DYNAMIC_CHANNELS 512
-#define MAX_CHANNELS 1028
-
extern unsigned int total_channels;
extern channel_t channels[MAX_CHANNELS];
extern qboolean simsound;
+#define STREAM_BUFFER_DURATION 0.3f // in seconds
+#define STREAM_BUFFER_FILL 0.2f // in seconds
+#define STREAM_BUFFER_SIZE(format_ptr) ((int)ceil (STREAM_BUFFER_DURATION * (format_ptr)->speed) * (format_ptr)->width * (format_ptr)->channels)
+
+// We work with 1 sec sequences, so this buffer must be able to contain
+// 1 sec of sound of the highest quality (48 KHz, 16 bit samples, stereo)
+extern unsigned char resampling_buffer [48000 * 2 * 2];
+
+
// ====================================================================
// Architecture-independent functions
// ====================================================================
// Release the exclusive lock on "snd_renderbuffer"
void SndSys_UnlockRenderBuffer (void);
+// if the sound system can generate events, send them
+void SndSys_SendKeyEvents(void);
+
// exported for capturevideo so ogg can see all channels
typedef struct portable_samplepair_s
{
int sample[SND_LISTENERS];
} portable_sampleframe_t;
-// LordHavoc: was 512, expanded to 2048
-#define PAINTBUFFER_SIZE 2048
typedef struct listener_s
{