jedi-academy/code/client/snd_local_console.h
2013-04-23 15:21:39 +10:00

128 lines
3.5 KiB
C

// snd_local.h -- private sound definations
#ifndef SND_LOCAL_H
#define SND_LOCAL_H
// Following #define is ONLY for MP JKA code.
// They want to keep qboolean pure enum in that code, so all
// sound code uses sboolean.
#define sboolean int
#include "../game/q_shared.h"
#include "../qcommon/qcommon.h"
#include "snd_public.h"
#include "../mp3code/mp3struct.h"
#include "openal/al.h"
#include "openal/alc.h"
typedef int streamHandle_t;
//from SND_AMBIENT
extern void AS_Init( void );
extern void AS_Free( void );
typedef struct {
int format;
int size;
int width;
int rate;
int samples;
} wavinfo_t;
extern wavinfo_t GetWavInfo(byte *data);
#define SFX_FLAG_UNLOADED (1 << 0)
#define SFX_FLAG_LOADING (1 << 1)
#define SFX_FLAG_RESIDENT (1 << 2)
#define SFX_FLAG_DEFAULT (1 << 3)
#define SFX_FLAG_DEMAND (1 << 4)
#define SFX_FLAG_VOICE (1 << 5)
typedef struct sfx_s {
int iFlags;
int iSoundLength; // length in bytes
int iLastTimeUsed; // last time sound was played in ms
int iFileCode; // CRC of the file name
streamHandle_t iStreamHandle; // handle to the sound file when reading
void* pSoundData; // buffer to hold sound as we are loading it
char* pLipSyncData; // buffer to hold lip sync information on characters
// store the total number of samples in the first 4 bytes
// followed by the actual lipsync data in the remaining bytes
ALuint Buffer;
//char* sSoundName; // added for debugging
} sfx_t;
typedef struct
{
int entnum; // to allow overriding a specific sound
int entchannel; // to allow overriding a specific sound
int master_vol; // 0-255 volume before spatialization
float fLastVolume; // 0-1 last volume sent to AL
vec3_t origin; // sound location
bool bOriginDirty; // does the AL position need to be updated
sfx_t *thesfx; // sfx structure
int loopChannel; // index into loopSounds (if appropriate)
bool bPlaying; // Set to true when a sound is playing on this channel / source
bool b2D; // Signifies a 2d sound
bool bLooping; // Signifies if this channel / source is playing a looping sound
ALuint alSource; // Open AL Source
unsigned int iLastPlayTime; // Last time a sound was played on this channel
} channel_t;
extern cvar_t *s_nosound;
extern cvar_t *s_allowDynamicMusic;
extern cvar_t *s_show;
extern cvar_t *s_testsound;
extern cvar_t *s_separation;
extern int* s_entityWavVol;
int Sys_GetFileCode( const char* sSoundName );
int S_GetFileCode( const char* sSoundName );
qboolean S_StartLoadSound( sfx_t *sfx );
qboolean S_EndLoadSound( sfx_t *sfx );
void S_InitLoad(void);
void S_CloseLoad(void);
void S_UpdateLoading(void);
// New stuff from VV
void S_LoadSound( sfxHandle_t sfxHandle );
// picks a channel based on priorities, empty slots, number of channels
channel_t *S_PickChannel(int entnum, int entchannel);
//////////////////////////////////
//
// new stuff from TA codebase
void SND_update(sfx_t *sfx);
void SND_setup();
int SND_FreeOldestSound(sfx_t *pButNotThisOne = NULL);
void SND_TouchSFX(sfx_t *sfx);
void S_DisplayFreeMemory(void);
void S_memoryLoad(sfx_t *sfx);
void S_PreProcessLipSync(sfx_t *sfx);
bool Sys_StreamIsReading(streamHandle_t handle);
int Sys_StreamOpen(int code, streamHandle_t *handle);
bool Sys_StreamRead(void* buffer, int size, int pos, streamHandle_t handle);
void Sys_StreamClose(streamHandle_t handle);
bool Sys_StreamIsError(streamHandle_t handle);
//
//////////////////////////////////
#endif // #ifndef SND_LOCAL_H