127 lines
3.0 KiB
C
Raw Normal View History

2007-11-13 18:02:18 -08:00
#ifndef _AL_SOURCE_H_
#define _AL_SOURCE_H_
#define AL_NUM_SOURCE_PARAMS 128
#define MAX_SENDS 2
#include "alFilter.h"
#include "alu.h"
2007-11-13 18:02:18 -08:00
#include "AL/al.h"
2007-12-17 16:02:34 -08:00
#define AL_DIRECT_FILTER 0x20005
#define AL_AUXILIARY_SEND_FILTER 0x20006
#define AL_AIR_ABSORPTION_FACTOR 0x20007
#define AL_ROOM_ROLLOFF_FACTOR 0x20008
#define AL_CONE_OUTER_GAINHF 0x20009
#define AL_DIRECT_FILTER_GAINHF_AUTO 0x2000A
#define AL_AUXILIARY_SEND_FILTER_GAIN_AUTO 0x2000B
#define AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO 0x2000C
2007-11-13 18:02:18 -08:00
#ifdef __cplusplus
extern "C" {
#endif
2010-01-11 05:37:20 -08:00
typedef enum {
POINT = 0,
LINEAR,
2010-01-11 06:19:54 -08:00
COSINE,
2010-01-11 05:37:20 -08:00
RESAMPLER_MAX
} resampler_t;
extern resampler_t DefaultResampler;
2007-11-13 18:02:18 -08:00
typedef struct ALbufferlistitem
{
struct ALbuffer *buffer;
2007-11-13 18:02:18 -08:00
struct ALbufferlistitem *next;
} ALbufferlistitem;
typedef struct ALsource
2007-11-13 18:02:18 -08:00
{
ALfloat flPitch;
ALfloat flGain;
ALfloat flOuterGain;
ALfloat flMinGain;
ALfloat flMaxGain;
ALfloat flInnerAngle;
ALfloat flOuterAngle;
ALfloat flRefDistance;
ALfloat flMaxDistance;
ALfloat flRollOffFactor;
ALfloat vPosition[3];
ALfloat vVelocity[3];
ALfloat vOrientation[3];
ALboolean bHeadRelative;
ALboolean bLooping;
ALenum DistanceModel;
2007-11-13 18:02:18 -08:00
2010-01-11 05:37:20 -08:00
resampler_t Resampler;
2007-11-13 18:02:18 -08:00
ALenum state;
ALuint position;
ALuint position_fraction;
2008-08-15 17:43:07 -07:00
struct ALbuffer *Buffer;
2007-11-13 18:02:18 -08:00
struct ALbufferlistitem *queue; // Linked list of buffers in queue
ALuint BuffersInQueue; // Number of buffers in queue
2009-07-07 21:01:41 -07:00
ALuint BuffersPlayed; // Number of buffers played on this loop
2007-11-13 18:02:18 -08:00
ALfilter DirectFilter;
2007-12-18 15:10:21 -08:00
struct {
struct ALeffectslot *Slot;
2007-12-18 15:10:21 -08:00
ALfilter WetFilter;
} Send[MAX_SENDS];
2007-12-18 15:10:21 -08:00
ALboolean DryGainHFAuto;
ALboolean WetGainAuto;
ALboolean WetGainHFAuto;
ALfloat OuterGainHF;
ALfloat AirAbsorptionFactor;
ALfloat RoomRolloffFactor;
ALfloat DopplerFactor;
2007-11-13 18:02:18 -08:00
ALint lOffset;
ALint lOffsetType;
// Source Type (Static, Streaming, or Undetermined)
ALint lSourceType;
// Current gains, which are ramped while mixed
ALfloat DryGains[OUTPUTCHANNELS];
2009-04-11 20:04:46 -07:00
ALfloat WetGains[MAX_SENDS];
ALboolean FirstStart;
// Current target parameters used for mixing
ALboolean NeedsUpdate;
struct {
ALfloat DryGains[OUTPUTCHANNELS];
ALfloat WetGains[MAX_SENDS];
ALfloat Pitch;
struct {
FILTER iirFilter;
ALfloat history[OUTPUTCHANNELS];
} Send[MAX_SENDS];
FILTER iirFilter;
ALfloat history[OUTPUTCHANNELS*2];
} Params;
// Index to itself
ALuint source;
struct ALsource *next;
2007-11-13 18:02:18 -08:00
} ALsource;
ALvoid ReleaseALSources(ALCcontext *Context);
2007-11-13 18:02:18 -08:00
#ifdef __cplusplus
}
#endif
#endif