1#ifndef AL_ALC_H 2#define AL_ALC_H 3 4#if defined(__cplusplus) 5extern "C" { 6#endif 7 8#if defined(_WIN32) && !defined(_XBOX) 9 /* _OPENAL32LIB is deprecated */ 10 #if defined(AL_BUILD_LIBRARY) || defined (_OPENAL32LIB) 11 #define ALC_API __declspec(dllexport) 12 #else 13 #define ALC_API __declspec(dllimport) 14 #endif 15#else 16 #if defined(AL_BUILD_LIBRARY) && defined(HAVE_GCC_VISIBILITY) 17 #define ALC_API __attribute__((visibility("default"))) 18 #else 19 #define ALC_API extern 20 #endif 21#endif 22 23#if defined(_WIN32) 24 #define ALC_APIENTRY __cdecl 25#else 26 #define ALC_APIENTRY 27#endif 28 29#if defined(TARGET_OS_MAC) && TARGET_OS_MAC 30 #pragma export on 31#endif 32 33/* 34 * The ALCAPI, ALCAPIENTRY, and ALC_INVALID macros are deprecated, but are 35 * included for applications porting code from AL 1.0 36 */ 37#define ALCAPI ALC_API 38#define ALCAPIENTRY ALC_APIENTRY 39#define ALC_INVALID 0 40 41 42#define ALC_VERSION_0_1 1 43 44typedef struct ALCdevice_struct ALCdevice; 45typedef struct ALCcontext_struct ALCcontext; 46 47 48/** 8-bit boolean */ 49typedef char ALCboolean; 50 51/** character */ 52typedef char ALCchar; 53 54/** signed 8-bit 2's complement integer */ 55typedef char ALCbyte; 56 57/** unsigned 8-bit integer */ 58typedef unsigned char ALCubyte; 59 60/** signed 16-bit 2's complement integer */ 61typedef short ALCshort; 62 63/** unsigned 16-bit integer */ 64typedef unsigned short ALCushort; 65 66/** signed 32-bit 2's complement integer */ 67typedef int ALCint; 68 69/** unsigned 32-bit integer */ 70typedef unsigned int ALCuint; 71 72/** non-negative 32-bit binary integer size */ 73typedef int ALCsizei; 74 75/** enumerated 32-bit value */ 76typedef int ALCenum; 77 78/** 32-bit IEEE754 floating-point */ 79typedef float ALCfloat; 80 81/** 64-bit IEEE754 floating-point */ 82typedef double ALCdouble; 83 84/** void type (for opaque pointers only) */ 85typedef void ALCvoid; 86 87 88/* Enumerant values begin at column 50. No tabs. */ 89 90/* Boolean False. */ 91#define ALC_FALSE 0 92 93/* Boolean True. */ 94#define ALC_TRUE 1 95 96/** 97 * followed by <int> Hz 98 */ 99#define ALC_FREQUENCY 0x1007 100 101/** 102 * followed by <int> Hz 103 */ 104#define ALC_REFRESH 0x1008 105 106/** 107 * followed by AL_TRUE, AL_FALSE 108 */ 109#define ALC_SYNC 0x1009 110 111/** 112 * followed by <int> Num of requested Mono (3D) Sources 113 */ 114#define ALC_MONO_SOURCES 0x1010 115 116/** 117 * followed by <int> Num of requested Stereo Sources 118 */ 119#define ALC_STEREO_SOURCES 0x1011 120 121/** 122 * errors 123 */ 124 125/** 126 * No error 127 */ 128#define ALC_NO_ERROR ALC_FALSE 129 130/** 131 * No device 132 */ 133#define ALC_INVALID_DEVICE 0xA001 134 135/** 136 * invalid context ID 137 */ 138#define ALC_INVALID_CONTEXT 0xA002 139 140/** 141 * bad enum 142 */ 143#define ALC_INVALID_ENUM 0xA003 144 145/** 146 * bad value 147 */ 148#define ALC_INVALID_VALUE 0xA004 149 150/** 151 * Out of memory. 152 */ 153#define ALC_OUT_OF_MEMORY 0xA005 154 155 156/** 157 * The Specifier string for default device 158 */ 159#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 160#define ALC_DEVICE_SPECIFIER 0x1005 161#define ALC_EXTENSIONS 0x1006 162 163#define ALC_MAJOR_VERSION 0x1000 164#define ALC_MINOR_VERSION 0x1001 165 166#define ALC_ATTRIBUTES_SIZE 0x1002 167#define ALC_ALL_ATTRIBUTES 0x1003 168 169/** 170 * ALC_ENUMERATE_ALL_EXT enums 171 */ 172#define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012 173#define ALC_ALL_DEVICES_SPECIFIER 0x1013 174 175/** 176 * Capture extension 177 */ 178#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310 179#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311 180#define ALC_CAPTURE_SAMPLES 0x312 181 182 183/* 184 * Context Management 185 */ 186ALC_API ALCcontext * ALC_APIENTRY alcCreateContext( ALCdevice *device, const ALCint* attrlist ); 187 188ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent( ALCcontext *context ); 189 190ALC_API void ALC_APIENTRY alcProcessContext( ALCcontext *context ); 191 192ALC_API void ALC_APIENTRY alcSuspendContext( ALCcontext *context ); 193 194ALC_API void ALC_APIENTRY alcDestroyContext( ALCcontext *context ); 195 196ALC_API ALCcontext * ALC_APIENTRY alcGetCurrentContext( void ); 197 198ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice( ALCcontext *context ); 199 200 201/* 202 * Device Management 203 */ 204ALC_API ALCdevice * ALC_APIENTRY alcOpenDevice( const ALCchar *devicename ); 205 206ALC_API ALCboolean ALC_APIENTRY alcCloseDevice( ALCdevice *device ); 207 208 209/* 210 * Error support. 211 * Obtain the most recent Context error 212 */ 213ALC_API ALCenum ALC_APIENTRY alcGetError( ALCdevice *device ); 214 215 216/* 217 * Extension support. 218 * Query for the presence of an extension, and obtain any appropriate 219 * function pointers and enum values. 220 */ 221ALC_API ALCboolean ALC_APIENTRY alcIsExtensionPresent( ALCdevice *device, const ALCchar *extname ); 222 223ALC_API void * ALC_APIENTRY alcGetProcAddress( ALCdevice *device, const ALCchar *funcname ); 224 225ALC_API ALCenum ALC_APIENTRY alcGetEnumValue( ALCdevice *device, const ALCchar *enumname ); 226 227 228/* 229 * Query functions 230 */ 231ALC_API const ALCchar * ALC_APIENTRY alcGetString( ALCdevice *device, ALCenum param ); 232 233ALC_API void ALC_APIENTRY alcGetIntegerv( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *data ); 234 235 236/* 237 * Capture functions 238 */ 239ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice( const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize ); 240 241ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice( ALCdevice *device ); 242 243ALC_API void ALC_APIENTRY alcCaptureStart( ALCdevice *device ); 244 245ALC_API void ALC_APIENTRY alcCaptureStop( ALCdevice *device ); 246 247ALC_API void ALC_APIENTRY alcCaptureSamples( ALCdevice *device, ALCvoid *buffer, ALCsizei samples ); 248 249/* 250 * Pointer-to-function types, useful for dynamically getting ALC entry points. 251 */ 252typedef ALCcontext * (ALC_APIENTRY *LPALCCREATECONTEXT) (ALCdevice *device, const ALCint *attrlist); 253typedef ALCboolean (ALC_APIENTRY *LPALCMAKECONTEXTCURRENT)( ALCcontext *context ); 254typedef void (ALC_APIENTRY *LPALCPROCESSCONTEXT)( ALCcontext *context ); 255typedef void (ALC_APIENTRY *LPALCSUSPENDCONTEXT)( ALCcontext *context ); 256typedef void (ALC_APIENTRY *LPALCDESTROYCONTEXT)( ALCcontext *context ); 257typedef ALCcontext * (ALC_APIENTRY *LPALCGETCURRENTCONTEXT)( void ); 258typedef ALCdevice * (ALC_APIENTRY *LPALCGETCONTEXTSDEVICE)( ALCcontext *context ); 259typedef ALCdevice * (ALC_APIENTRY *LPALCOPENDEVICE)( const ALCchar *devicename ); 260typedef ALCboolean (ALC_APIENTRY *LPALCCLOSEDEVICE)( ALCdevice *device ); 261typedef ALCenum (ALC_APIENTRY *LPALCGETERROR)( ALCdevice *device ); 262typedef ALCboolean (ALC_APIENTRY *LPALCISEXTENSIONPRESENT)( ALCdevice *device, const ALCchar *extname ); 263typedef void * (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname ); 264typedef ALCenum (ALC_APIENTRY *LPALCGETENUMVALUE)(ALCdevice *device, const ALCchar *enumname ); 265typedef const ALCchar* (ALC_APIENTRY *LPALCGETSTRING)( ALCdevice *device, ALCenum param ); 266typedef void (ALC_APIENTRY *LPALCGETINTEGERV)( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *dest ); 267typedef ALCdevice * (ALC_APIENTRY *LPALCCAPTUREOPENDEVICE)( const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize ); 268typedef ALCboolean (ALC_APIENTRY *LPALCCAPTURECLOSEDEVICE)( ALCdevice *device ); 269typedef void (ALC_APIENTRY *LPALCCAPTURESTART)( ALCdevice *device ); 270typedef void (ALC_APIENTRY *LPALCCAPTURESTOP)( ALCdevice *device ); 271typedef void (ALC_APIENTRY *LPALCCAPTURESAMPLES)( ALCdevice *device, ALCvoid *buffer, ALCsizei samples ); 272 273#if defined(TARGET_OS_MAC) && TARGET_OS_MAC 274 #pragma export off 275#endif 276 277#if defined(__cplusplus) 278} 279#endif 280 281#endif /* AL_ALC_H */ 282