Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

825 linhas
28 KiB

  1. #ifndef AL_AL_H
  2. #define AL_AL_H
  3. #ifdef ANDROID
  4. #include <android/log.h>
  5. #ifndef LOGI
  6. #define LOGI(...) __android_log_print(ANDROID_LOG_INFO,"OpenAL",__VA_ARGS__)
  7. #endif
  8. #ifndef LOGE
  9. #define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,"OpenAL",__VA_ARGS__)
  10. #endif
  11. #endif
  12. #if defined(__cplusplus)
  13. extern "C" {
  14. #endif
  15. #if defined(AL_LIBTYPE_STATIC)
  16. #define AL_API
  17. #elif defined(_WIN32) && !defined(_XBOX)
  18. #if defined(AL_BUILD_LIBRARY)
  19. #define AL_API __declspec(dllexport)
  20. #else
  21. #define AL_API __declspec(dllimport)
  22. #endif
  23. #else
  24. #if defined(AL_BUILD_LIBRARY) && defined(HAVE_GCC_VISIBILITY)
  25. #define AL_API __attribute__((visibility("protected")))
  26. #else
  27. #define AL_API extern
  28. #endif
  29. #endif
  30. #if defined(_WIN32)
  31. #define AL_APIENTRY __cdecl
  32. #else
  33. #define AL_APIENTRY
  34. #endif
  35. #if defined(TARGET_OS_MAC) && TARGET_OS_MAC
  36. #pragma export on
  37. #endif
  38. /*
  39. * The OPENAL, ALAPI, ALAPIENTRY, AL_INVALID, AL_ILLEGAL_ENUM, and
  40. * AL_ILLEGAL_COMMAND macros are deprecated, but are included for
  41. * applications porting code from AL 1.0
  42. */
  43. #define OPENAL
  44. #define ALAPI AL_API
  45. #define ALAPIENTRY AL_APIENTRY
  46. #define AL_INVALID (-1)
  47. #define AL_ILLEGAL_ENUM AL_INVALID_ENUM
  48. #define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION
  49. #define AL_VERSION_1_0
  50. #define AL_VERSION_1_1
  51. /** 8-bit boolean */
  52. typedef char ALboolean;
  53. /** character */
  54. typedef char ALchar;
  55. /** signed 8-bit 2's complement integer */
  56. typedef signed char ALbyte;
  57. /** unsigned 8-bit integer */
  58. typedef unsigned char ALubyte;
  59. /** signed 16-bit 2's complement integer */
  60. typedef short ALshort;
  61. /** unsigned 16-bit integer */
  62. typedef unsigned short ALushort;
  63. /** signed 32-bit 2's complement integer */
  64. typedef int ALint;
  65. /** unsigned 32-bit integer */
  66. typedef unsigned int ALuint;
  67. /** non-negative 32-bit binary integer size */
  68. typedef int ALsizei;
  69. /** enumerated 32-bit value */
  70. typedef int ALenum;
  71. /** 32-bit IEEE754 floating-point */
  72. typedef float ALfloat;
  73. /** 64-bit IEEE754 floating-point */
  74. typedef double ALdouble;
  75. #ifdef OPENAL_FIXED_POINT
  76. /* Apportable tries to define int64_t and int32_t if it thinks it is needed.
  77. * But this is breaking in a complex project involving both pure C and C++
  78. * something is triggering redefinition errors. The workaround seems to be just using stdint.h.
  79. */
  80. #include <stdint.h>
  81. /** Types and Macros for fixed-point math */
  82. #ifndef INT64_MAX
  83. typedef long long int64_t;
  84. #define INT64_MAX 9223372036854775807LL
  85. #endif
  86. #ifndef INT32_MAX
  87. typedef int int32_t;
  88. #define INT32_MAX 2147483647
  89. #endif
  90. // FIXME(apportable) make this int32_t
  91. typedef int64_t ALfp;
  92. typedef int64_t ALdfp;
  93. #define ONE (1<<OPENAL_FIXED_POINT_SHIFT)
  94. #define TWO (2<<OPENAL_FIXED_POINT_SHIFT)
  95. #define float2ALfp(x) ((ALfp)((x) * (1<<OPENAL_FIXED_POINT_SHIFT) + ((x)>=0 ? 0.5 : -0.5)))
  96. #define ALfp2float(x) ((float)(x) / (1<<OPENAL_FIXED_POINT_SHIFT))
  97. #define double2ALdfp(x) ((ALdfp)((x) * (1<<OPENAL_FIXED_POINT_SHIFT) + ((x)>=0 ? 0.5 : -0.5)))
  98. #define ALdfp2double(x) ((double)(x) / (1<<OPENAL_FIXED_POINT_SHIFT))
  99. #define int2ALfp(x) ((ALfp)(x) << OPENAL_FIXED_POINT_SHIFT)
  100. #define ALfp2int(x) ((ALint)((x) >> OPENAL_FIXED_POINT_SHIFT))
  101. #define int2ALdfp(x) ((ALdfp)(x) << OPENAL_FIXED_POINT_SHIFT)
  102. #define ALdfp2int(x) ((ALint)((x) >> OPENAL_FIXED_POINT_SHIFT))
  103. #define ALfpMult(x,y) ((ALfp)((((int64_t)(x))*((int64_t)(y)))>>OPENAL_FIXED_POINT_SHIFT))
  104. #define ALfpDiv(x,y) ((ALfp)(((int64_t)(x) << OPENAL_FIXED_POINT_SHIFT) / (y)))
  105. #define ALdfpMult(x,y) ALfpMult(x,y)
  106. #define ALdfpDiv(x,y) ALfpDiv(x,y)
  107. #define __isnan(x) (0)
  108. #define __cos(x) (float2ALfp(cos(ALfp2float(x))))
  109. #define __sin(x) (float2ALfp(sin(ALfp2float(x))))
  110. #define __log10(x) (float2ALfp(log10(ALfp2float(x))))
  111. #define __atan(x) (float2ALfp(atan(ALfp2float(x))))
  112. #define toALfpConst(x) ((x)*(1<<OPENAL_FIXED_POINT_SHIFT))
  113. #else
  114. typedef float ALfp;
  115. typedef double ALdfp;
  116. #define float2ALfp(x) (x)
  117. #define ALfp2float(x) (x)
  118. #define double2ALdfp(x) (x)
  119. #define ALdfp2double(x) (x)
  120. #define int2ALfp(x) ((ALfp)(x))
  121. #define ALfp2int(x) ((ALint)(x))
  122. #define int2ALdfp(x) ((ALdfp)(x))
  123. #define ALdfp2int(x) ((ALint)(x))
  124. #define ALfpMult(x,y) ((x)*(y))
  125. #define ALfpDiv(x,y) ((x)/(y))
  126. #define ALdfpMult(x,y) ALfpMult((x),(y))
  127. #define ALdfpDiv(x,y) ALfpDiv((x),(y))
  128. #define __isnan(x) (0)
  129. #define __cos(x) cos((x))
  130. #define __sin(x) sin((x))
  131. #define __log10(x) log10((x))
  132. #define __atan(x) atan((x))
  133. #define toALfpConst(x) (x)
  134. #endif
  135. /** void type (for opaque pointers only) */
  136. typedef void ALvoid;
  137. /* Enumerant values begin at column 50. No tabs. */
  138. /* "no distance model" or "no buffer" */
  139. #define AL_NONE 0
  140. /* Boolean False. */
  141. #define AL_FALSE 0
  142. /** Boolean True. */
  143. #define AL_TRUE 1
  144. /** Indicate Source has relative coordinates. */
  145. #define AL_SOURCE_RELATIVE 0x202
  146. /**
  147. * Directional source, inner cone angle, in degrees.
  148. * Range: [0-360]
  149. * Default: 360
  150. */
  151. #define AL_CONE_INNER_ANGLE 0x1001
  152. /**
  153. * Directional source, outer cone angle, in degrees.
  154. * Range: [0-360]
  155. * Default: 360
  156. */
  157. #define AL_CONE_OUTER_ANGLE 0x1002
  158. /**
  159. * Specify the pitch to be applied at source.
  160. * Range: [0.5-2.0]
  161. * Default: 1.0
  162. */
  163. #define AL_PITCH 0x1003
  164. /**
  165. * Specify the current location in three dimensional space.
  166. * OpenAL, like OpenGL, uses a right handed coordinate system,
  167. * where in a frontal default view X (thumb) points right,
  168. * Y points up (index finger), and Z points towards the
  169. * viewer/camera (middle finger).
  170. * To switch from a left handed coordinate system, flip the
  171. * sign on the Z coordinate.
  172. * Listener position is always in the world coordinate system.
  173. */
  174. #define AL_POSITION 0x1004
  175. /** Specify the current direction. */
  176. #define AL_DIRECTION 0x1005
  177. /** Specify the current velocity in three dimensional space. */
  178. #define AL_VELOCITY 0x1006
  179. /**
  180. * Indicate whether source is looping.
  181. * Type: ALboolean?
  182. * Range: [AL_TRUE, AL_FALSE]
  183. * Default: FALSE.
  184. */
  185. #define AL_LOOPING 0x1007
  186. /**
  187. * Indicate the buffer to provide sound samples.
  188. * Type: ALuint.
  189. * Range: any valid Buffer id.
  190. */
  191. #define AL_BUFFER 0x1009
  192. /**
  193. * Indicate the gain (volume amplification) applied.
  194. * Type: ALfloat.
  195. * Range: ]0.0- ]
  196. * A value of 1.0 means un-attenuated/unchanged.
  197. * Each division by 2 equals an attenuation of -6dB.
  198. * Each multiplicaton with 2 equals an amplification of +6dB.
  199. * A value of 0.0 is meaningless with respect to a logarithmic
  200. * scale; it is interpreted as zero volume - the channel
  201. * is effectively disabled.
  202. */
  203. #define AL_GAIN 0x100A
  204. /*
  205. * Indicate minimum source attenuation
  206. * Type: ALfloat
  207. * Range: [0.0 - 1.0]
  208. *
  209. * Logarthmic
  210. */
  211. #define AL_MIN_GAIN 0x100D
  212. /**
  213. * Indicate maximum source attenuation
  214. * Type: ALfloat
  215. * Range: [0.0 - 1.0]
  216. *
  217. * Logarthmic
  218. */
  219. #define AL_MAX_GAIN 0x100E
  220. /**
  221. * Indicate listener orientation.
  222. *
  223. * at/up
  224. */
  225. #define AL_ORIENTATION 0x100F
  226. /**
  227. * Source state information.
  228. */
  229. #define AL_SOURCE_STATE 0x1010
  230. #define AL_INITIAL 0x1011
  231. #define AL_PLAYING 0x1012
  232. #define AL_PAUSED 0x1013
  233. #define AL_STOPPED 0x1014
  234. /**
  235. * Buffer Queue params
  236. */
  237. #define AL_BUFFERS_QUEUED 0x1015
  238. #define AL_BUFFERS_PROCESSED 0x1016
  239. /**
  240. * Source buffer position information
  241. */
  242. #define AL_SEC_OFFSET 0x1024
  243. #define AL_SAMPLE_OFFSET 0x1025
  244. #define AL_BYTE_OFFSET 0x1026
  245. /*
  246. * Source type (Static, Streaming or undetermined)
  247. * Source is Static if a Buffer has been attached using AL_BUFFER
  248. * Source is Streaming if one or more Buffers have been attached using alSourceQueueBuffers
  249. * Source is undetermined when it has the NULL buffer attached
  250. */
  251. #define AL_SOURCE_TYPE 0x1027
  252. #define AL_STATIC 0x1028
  253. #define AL_STREAMING 0x1029
  254. #define AL_UNDETERMINED 0x1030
  255. /** Sound samples: format specifier. */
  256. #define AL_FORMAT_MONO8 0x1100
  257. #define AL_FORMAT_MONO16 0x1101
  258. #define AL_FORMAT_STEREO8 0x1102
  259. #define AL_FORMAT_STEREO16 0x1103
  260. /**
  261. * source specific reference distance
  262. * Type: ALfloat
  263. * Range: 0.0 - +inf
  264. *
  265. * At 0.0, no distance attenuation occurs. Default is
  266. * 1.0.
  267. */
  268. #define AL_REFERENCE_DISTANCE 0x1020
  269. /**
  270. * source specific rolloff factor
  271. * Type: ALfloat
  272. * Range: 0.0 - +inf
  273. *
  274. */
  275. #define AL_ROLLOFF_FACTOR 0x1021
  276. /**
  277. * Directional source, outer cone gain.
  278. *
  279. * Default: 0.0
  280. * Range: [0.0 - 1.0]
  281. * Logarithmic
  282. */
  283. #define AL_CONE_OUTER_GAIN 0x1022
  284. /**
  285. * Indicate distance above which sources are not
  286. * attenuated using the inverse clamped distance model.
  287. *
  288. * Default: +inf
  289. * Type: ALfloat
  290. * Range: 0.0 - +inf
  291. */
  292. #define AL_MAX_DISTANCE 0x1023
  293. /**
  294. * Sound samples: frequency, in units of Hertz [Hz].
  295. * This is the number of samples per second. Half of the
  296. * sample frequency marks the maximum significant
  297. * frequency component.
  298. */
  299. #define AL_FREQUENCY 0x2001
  300. #define AL_BITS 0x2002
  301. #define AL_CHANNELS 0x2003
  302. #define AL_SIZE 0x2004
  303. /**
  304. * Buffer state.
  305. *
  306. * Not supported for public use (yet).
  307. */
  308. #define AL_UNUSED 0x2010
  309. #define AL_PENDING 0x2011
  310. #define AL_PROCESSED 0x2012
  311. /** Errors: No Error. */
  312. #define AL_NO_ERROR AL_FALSE
  313. /**
  314. * Invalid Name paramater passed to AL call.
  315. */
  316. #define AL_INVALID_NAME 0xA001
  317. /**
  318. * Invalid parameter passed to AL call.
  319. */
  320. #define AL_INVALID_ENUM 0xA002
  321. /**
  322. * Invalid enum parameter value.
  323. */
  324. #define AL_INVALID_VALUE 0xA003
  325. /**
  326. * Illegal call.
  327. */
  328. #define AL_INVALID_OPERATION 0xA004
  329. /**
  330. * No mojo.
  331. */
  332. #define AL_OUT_OF_MEMORY 0xA005
  333. /** Context strings: Vendor Name. */
  334. #define AL_VENDOR 0xB001
  335. #define AL_VERSION 0xB002
  336. #define AL_RENDERER 0xB003
  337. #define AL_EXTENSIONS 0xB004
  338. /** Global tweakage. */
  339. /**
  340. * Doppler scale. Default 1.0
  341. */
  342. #define AL_DOPPLER_FACTOR 0xC000
  343. /**
  344. * Tweaks speed of propagation.
  345. */
  346. #define AL_DOPPLER_VELOCITY 0xC001
  347. /**
  348. * Speed of Sound in units per second
  349. */
  350. #define AL_SPEED_OF_SOUND 0xC003
  351. /**
  352. * Distance models
  353. *
  354. * used in conjunction with DistanceModel
  355. *
  356. * implicit: NONE, which disances distance attenuation.
  357. */
  358. #define AL_DISTANCE_MODEL 0xD000
  359. #define AL_INVERSE_DISTANCE 0xD001
  360. #define AL_INVERSE_DISTANCE_CLAMPED 0xD002
  361. #define AL_LINEAR_DISTANCE 0xD003
  362. #define AL_LINEAR_DISTANCE_CLAMPED 0xD004
  363. #define AL_EXPONENT_DISTANCE 0xD005
  364. #define AL_EXPONENT_DISTANCE_CLAMPED 0xD006
  365. /**
  366. * Priority
  367. *
  368. * Apportable Extension.
  369. * Used to prevent dynamic throttling of this source.
  370. *
  371. */
  372. #define AL_PRIORITY 0xE001
  373. #define AL_PRIORITY_SLOTS 0xE002
  374. /*
  375. * Renderer State management
  376. */
  377. AL_API void AL_APIENTRY alEnable( ALenum capability );
  378. AL_API void AL_APIENTRY alDisable( ALenum capability );
  379. AL_API ALboolean AL_APIENTRY alIsEnabled( ALenum capability );
  380. /*
  381. * State retrieval
  382. */
  383. AL_API const ALchar* AL_APIENTRY alGetString( ALenum param );
  384. AL_API void AL_APIENTRY alGetBooleanv( ALenum param, ALboolean* data );
  385. AL_API void AL_APIENTRY alGetIntegerv( ALenum param, ALint* data );
  386. AL_API void AL_APIENTRY alGetFloatv( ALenum param, ALfloat* data );
  387. AL_API void AL_APIENTRY alGetDoublev( ALenum param, ALdouble* data );
  388. AL_API ALboolean AL_APIENTRY alGetBoolean( ALenum param );
  389. AL_API ALint AL_APIENTRY alGetInteger( ALenum param );
  390. AL_API ALfloat AL_APIENTRY alGetFloat( ALenum param );
  391. AL_API ALdouble AL_APIENTRY alGetDouble( ALenum param );
  392. /*
  393. * Error support.
  394. * Obtain the most recent error generated in the AL state machine.
  395. */
  396. AL_API ALenum AL_APIENTRY alGetError( void );
  397. /*
  398. * Extension support.
  399. * Query for the presence of an extension, and obtain any appropriate
  400. * function pointers and enum values.
  401. */
  402. AL_API ALboolean AL_APIENTRY alIsExtensionPresent( const ALchar* extname );
  403. AL_API void* AL_APIENTRY alGetProcAddress( const ALchar* fname );
  404. AL_API ALenum AL_APIENTRY alGetEnumValue( const ALchar* ename );
  405. /*
  406. * LISTENER
  407. * Listener represents the location and orientation of the
  408. * 'user' in 3D-space.
  409. *
  410. * Properties include: -
  411. *
  412. * Gain AL_GAIN ALfloat
  413. * Position AL_POSITION ALfloat[3]
  414. * Velocity AL_VELOCITY ALfloat[3]
  415. * Orientation AL_ORIENTATION ALfloat[6] (Forward then Up vectors)
  416. */
  417. /*
  418. * Set Listener parameters
  419. */
  420. AL_API void AL_APIENTRY alListenerf( ALenum param, ALfloat value );
  421. AL_API void AL_APIENTRY alListener3f( ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
  422. AL_API void AL_APIENTRY alListenerfv( ALenum param, const ALfloat* values );
  423. AL_API void AL_APIENTRY alListeneri( ALenum param, ALint value );
  424. AL_API void AL_APIENTRY alListener3i( ALenum param, ALint value1, ALint value2, ALint value3 );
  425. AL_API void AL_APIENTRY alListeneriv( ALenum param, const ALint* values );
  426. /*
  427. * Get Listener parameters
  428. */
  429. AL_API void AL_APIENTRY alGetListenerf( ALenum param, ALfloat* value );
  430. AL_API void AL_APIENTRY alGetListener3f( ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3 );
  431. AL_API void AL_APIENTRY alGetListenerfv( ALenum param, ALfloat* values );
  432. AL_API void AL_APIENTRY alGetListeneri( ALenum param, ALint* value );
  433. AL_API void AL_APIENTRY alGetListener3i( ALenum param, ALint *value1, ALint *value2, ALint *value3 );
  434. AL_API void AL_APIENTRY alGetListeneriv( ALenum param, ALint* values );
  435. /**
  436. * SOURCE
  437. * Sources represent individual sound objects in 3D-space.
  438. * Sources take the PCM data provided in the specified Buffer,
  439. * apply Source-specific modifications, and then
  440. * submit them to be mixed according to spatial arrangement etc.
  441. *
  442. * Properties include: -
  443. *
  444. * Gain AL_GAIN ALfloat
  445. * Min Gain AL_MIN_GAIN ALfloat
  446. * Max Gain AL_MAX_GAIN ALfloat
  447. * Position AL_POSITION ALfloat[3]
  448. * Velocity AL_VELOCITY ALfloat[3]
  449. * Direction AL_DIRECTION ALfloat[3]
  450. * Head Relative Mode AL_SOURCE_RELATIVE ALint (AL_TRUE or AL_FALSE)
  451. * Reference Distance AL_REFERENCE_DISTANCE ALfloat
  452. * Max Distance AL_MAX_DISTANCE ALfloat
  453. * RollOff Factor AL_ROLLOFF_FACTOR ALfloat
  454. * Inner Angle AL_CONE_INNER_ANGLE ALint or ALfloat
  455. * Outer Angle AL_CONE_OUTER_ANGLE ALint or ALfloat
  456. * Cone Outer Gain AL_CONE_OUTER_GAIN ALint or ALfloat
  457. * Pitch AL_PITCH ALfloat
  458. * Looping AL_LOOPING ALint (AL_TRUE or AL_FALSE)
  459. * MS Offset AL_MSEC_OFFSET ALint or ALfloat
  460. * Byte Offset AL_BYTE_OFFSET ALint or ALfloat
  461. * Sample Offset AL_SAMPLE_OFFSET ALint or ALfloat
  462. * Attached Buffer AL_BUFFER ALint
  463. * State (Query only) AL_SOURCE_STATE ALint
  464. * Buffers Queued (Query only) AL_BUFFERS_QUEUED ALint
  465. * Buffers Processed (Query only) AL_BUFFERS_PROCESSED ALint
  466. */
  467. /* Create Source objects */
  468. AL_API void AL_APIENTRY alGenSources( ALsizei n, ALuint* sources );
  469. /* Delete Source objects */
  470. AL_API void AL_APIENTRY alDeleteSources( ALsizei n, const ALuint* sources );
  471. /* Verify a handle is a valid Source */
  472. AL_API ALboolean AL_APIENTRY alIsSource( ALuint sid );
  473. /*
  474. * Set Source parameters
  475. */
  476. AL_API void AL_APIENTRY alSourcef( ALuint sid, ALenum param, ALfloat value );
  477. AL_API void AL_APIENTRY alSource3f( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
  478. AL_API void AL_APIENTRY alSourcefv( ALuint sid, ALenum param, const ALfloat* values );
  479. AL_API void AL_APIENTRY alSourcei( ALuint sid, ALenum param, ALint value );
  480. AL_API void AL_APIENTRY alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 );
  481. AL_API void AL_APIENTRY alSourceiv( ALuint sid, ALenum param, const ALint* values );
  482. /*
  483. * Get Source parameters
  484. */
  485. AL_API void AL_APIENTRY alGetSourcef( ALuint sid, ALenum param, ALfloat* value );
  486. AL_API void AL_APIENTRY alGetSource3f( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
  487. AL_API void AL_APIENTRY alGetSourcefv( ALuint sid, ALenum param, ALfloat* values );
  488. AL_API void AL_APIENTRY alGetSourcei( ALuint sid, ALenum param, ALint* value );
  489. AL_API void AL_APIENTRY alGetSource3i( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
  490. AL_API void AL_APIENTRY alGetSourceiv( ALuint sid, ALenum param, ALint* values );
  491. /*
  492. * Source vector based playback calls
  493. */
  494. /* Play, replay, or resume (if paused) a list of Sources */
  495. AL_API void AL_APIENTRY alSourcePlayv( ALsizei ns, const ALuint *sids );
  496. /* Stop a list of Sources */
  497. AL_API void AL_APIENTRY alSourceStopv( ALsizei ns, const ALuint *sids );
  498. /* Rewind a list of Sources */
  499. AL_API void AL_APIENTRY alSourceRewindv( ALsizei ns, const ALuint *sids );
  500. /* Pause a list of Sources */
  501. AL_API void AL_APIENTRY alSourcePausev( ALsizei ns, const ALuint *sids );
  502. /*
  503. * Source based playback calls
  504. */
  505. /* Play, replay, or resume a Source */
  506. AL_API void AL_APIENTRY alSourcePlay( ALuint sid );
  507. /* Stop a Source */
  508. AL_API void AL_APIENTRY alSourceStop( ALuint sid );
  509. /* Rewind a Source (set playback postiton to beginning) */
  510. AL_API void AL_APIENTRY alSourceRewind( ALuint sid );
  511. /* Pause a Source */
  512. AL_API void AL_APIENTRY alSourcePause( ALuint sid );
  513. /*
  514. * Source Queuing
  515. */
  516. AL_API void AL_APIENTRY alSourceQueueBuffers( ALuint sid, ALsizei numEntries, const ALuint *bids );
  517. AL_API void AL_APIENTRY alSourceUnqueueBuffers( ALuint sid, ALsizei numEntries, ALuint *bids );
  518. /**
  519. * BUFFER
  520. * Buffer objects are storage space for sample data.
  521. * Buffers are referred to by Sources. One Buffer can be used
  522. * by multiple Sources.
  523. *
  524. * Properties include: -
  525. *
  526. * Frequency (Query only) AL_FREQUENCY ALint
  527. * Size (Query only) AL_SIZE ALint
  528. * Bits (Query only) AL_BITS ALint
  529. * Channels (Query only) AL_CHANNELS ALint
  530. */
  531. /* Create Buffer objects */
  532. AL_API void AL_APIENTRY alGenBuffers( ALsizei n, ALuint* buffers );
  533. /* Delete Buffer objects */
  534. AL_API void AL_APIENTRY alDeleteBuffers( ALsizei n, const ALuint* buffers );
  535. /* Verify a handle is a valid Buffer */
  536. AL_API ALboolean AL_APIENTRY alIsBuffer( ALuint bid );
  537. /* Specify the data to be copied into a buffer */
  538. AL_API void AL_APIENTRY alBufferData( ALuint bid, ALenum format, const ALvoid* data, ALsizei size, ALsizei freq );
  539. /*
  540. * Set Buffer parameters
  541. */
  542. AL_API void AL_APIENTRY alBufferf( ALuint bid, ALenum param, ALfloat value );
  543. AL_API void AL_APIENTRY alBuffer3f( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
  544. AL_API void AL_APIENTRY alBufferfv( ALuint bid, ALenum param, const ALfloat* values );
  545. AL_API void AL_APIENTRY alBufferi( ALuint bid, ALenum param, ALint value );
  546. AL_API void AL_APIENTRY alBuffer3i( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 );
  547. AL_API void AL_APIENTRY alBufferiv( ALuint bid, ALenum param, const ALint* values );
  548. /*
  549. * Get Buffer parameters
  550. */
  551. AL_API void AL_APIENTRY alGetBufferf( ALuint bid, ALenum param, ALfloat* value );
  552. AL_API void AL_APIENTRY alGetBuffer3f( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
  553. AL_API void AL_APIENTRY alGetBufferfv( ALuint bid, ALenum param, ALfloat* values );
  554. AL_API void AL_APIENTRY alGetBufferi( ALuint bid, ALenum param, ALint* value );
  555. AL_API void AL_APIENTRY alGetBuffer3i( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
  556. AL_API void AL_APIENTRY alGetBufferiv( ALuint bid, ALenum param, ALint* values );
  557. /*
  558. * Global Parameters
  559. */
  560. AL_API void AL_APIENTRY alDopplerFactor( ALfloat value );
  561. AL_API void AL_APIENTRY alDopplerVelocity( ALfloat value );
  562. AL_API void AL_APIENTRY alSpeedOfSound( ALfloat value );
  563. AL_API void AL_APIENTRY alDistanceModel( ALenum distanceModel );
  564. /*
  565. * Pointer-to-function types, useful for dynamically getting AL entry points.
  566. */
  567. typedef void (AL_APIENTRY *LPALENABLE)( ALenum capability );
  568. typedef void (AL_APIENTRY *LPALDISABLE)( ALenum capability );
  569. typedef ALboolean (AL_APIENTRY *LPALISENABLED)( ALenum capability );
  570. typedef const ALchar* (AL_APIENTRY *LPALGETSTRING)( ALenum param );
  571. typedef void (AL_APIENTRY *LPALGETBOOLEANV)( ALenum param, ALboolean* data );
  572. typedef void (AL_APIENTRY *LPALGETINTEGERV)( ALenum param, ALint* data );
  573. typedef void (AL_APIENTRY *LPALGETFLOATV)( ALenum param, ALfloat* data );
  574. typedef void (AL_APIENTRY *LPALGETDOUBLEV)( ALenum param, ALdouble* data );
  575. typedef ALboolean (AL_APIENTRY *LPALGETBOOLEAN)( ALenum param );
  576. typedef ALint (AL_APIENTRY *LPALGETINTEGER)( ALenum param );
  577. typedef ALfloat (AL_APIENTRY *LPALGETFLOAT)( ALenum param );
  578. typedef ALdouble (AL_APIENTRY *LPALGETDOUBLE)( ALenum param );
  579. typedef ALenum (AL_APIENTRY *LPALGETERROR)( void );
  580. typedef ALboolean (AL_APIENTRY *LPALISEXTENSIONPRESENT)(const ALchar* extname );
  581. typedef void* (AL_APIENTRY *LPALGETPROCADDRESS)( const ALchar* fname );
  582. typedef ALenum (AL_APIENTRY *LPALGETENUMVALUE)( const ALchar* ename );
  583. typedef void (AL_APIENTRY *LPALLISTENERF)( ALenum param, ALfloat value );
  584. typedef void (AL_APIENTRY *LPALLISTENER3F)( ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
  585. typedef void (AL_APIENTRY *LPALLISTENERFV)( ALenum param, const ALfloat* values );
  586. typedef void (AL_APIENTRY *LPALLISTENERI)( ALenum param, ALint value );
  587. typedef void (AL_APIENTRY *LPALLISTENER3I)( ALenum param, ALint value1, ALint value2, ALint value3 );
  588. typedef void (AL_APIENTRY *LPALLISTENERIV)( ALenum param, const ALint* values );
  589. typedef void (AL_APIENTRY *LPALGETLISTENERF)( ALenum param, ALfloat* value );
  590. typedef void (AL_APIENTRY *LPALGETLISTENER3F)( ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3 );
  591. typedef void (AL_APIENTRY *LPALGETLISTENERFV)( ALenum param, ALfloat* values );
  592. typedef void (AL_APIENTRY *LPALGETLISTENERI)( ALenum param, ALint* value );
  593. typedef void (AL_APIENTRY *LPALGETLISTENER3I)( ALenum param, ALint *value1, ALint *value2, ALint *value3 );
  594. typedef void (AL_APIENTRY *LPALGETLISTENERIV)( ALenum param, ALint* values );
  595. typedef void (AL_APIENTRY *LPALGENSOURCES)( ALsizei n, ALuint* sources );
  596. typedef void (AL_APIENTRY *LPALDELETESOURCES)( ALsizei n, const ALuint* sources );
  597. typedef ALboolean (AL_APIENTRY *LPALISSOURCE)( ALuint sid );
  598. typedef void (AL_APIENTRY *LPALSOURCEF)( ALuint sid, ALenum param, ALfloat value);
  599. typedef void (AL_APIENTRY *LPALSOURCE3F)( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
  600. typedef void (AL_APIENTRY *LPALSOURCEFV)( ALuint sid, ALenum param, const ALfloat* values );
  601. typedef void (AL_APIENTRY *LPALSOURCEI)( ALuint sid, ALenum param, ALint value);
  602. typedef void (AL_APIENTRY *LPALSOURCE3I)( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 );
  603. typedef void (AL_APIENTRY *LPALSOURCEIV)( ALuint sid, ALenum param, const ALint* values );
  604. typedef void (AL_APIENTRY *LPALGETSOURCEF)( ALuint sid, ALenum param, ALfloat* value );
  605. typedef void (AL_APIENTRY *LPALGETSOURCE3F)( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
  606. typedef void (AL_APIENTRY *LPALGETSOURCEFV)( ALuint sid, ALenum param, ALfloat* values );
  607. typedef void (AL_APIENTRY *LPALGETSOURCEI)( ALuint sid, ALenum param, ALint* value );
  608. typedef void (AL_APIENTRY *LPALGETSOURCE3I)( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
  609. typedef void (AL_APIENTRY *LPALGETSOURCEIV)( ALuint sid, ALenum param, ALint* values );
  610. typedef void (AL_APIENTRY *LPALSOURCEPLAYV)( ALsizei ns, const ALuint *sids );
  611. typedef void (AL_APIENTRY *LPALSOURCESTOPV)( ALsizei ns, const ALuint *sids );
  612. typedef void (AL_APIENTRY *LPALSOURCEREWINDV)( ALsizei ns, const ALuint *sids );
  613. typedef void (AL_APIENTRY *LPALSOURCEPAUSEV)( ALsizei ns, const ALuint *sids );
  614. typedef void (AL_APIENTRY *LPALSOURCEPLAY)( ALuint sid );
  615. typedef void (AL_APIENTRY *LPALSOURCESTOP)( ALuint sid );
  616. typedef void (AL_APIENTRY *LPALSOURCEREWIND)( ALuint sid );
  617. typedef void (AL_APIENTRY *LPALSOURCEPAUSE)( ALuint sid );
  618. typedef void (AL_APIENTRY *LPALSOURCEQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, const ALuint *bids );
  619. typedef void (AL_APIENTRY *LPALSOURCEUNQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, ALuint *bids );
  620. typedef void (AL_APIENTRY *LPALGENBUFFERS)( ALsizei n, ALuint* buffers );
  621. typedef void (AL_APIENTRY *LPALDELETEBUFFERS)( ALsizei n, const ALuint* buffers );
  622. typedef ALboolean (AL_APIENTRY *LPALISBUFFER)( ALuint bid );
  623. typedef void (AL_APIENTRY *LPALBUFFERDATA)( ALuint bid, ALenum format, const ALvoid* data, ALsizei size, ALsizei freq );
  624. typedef void (AL_APIENTRY *LPALBUFFERF)( ALuint bid, ALenum param, ALfloat value);
  625. typedef void (AL_APIENTRY *LPALBUFFER3F)( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
  626. typedef void (AL_APIENTRY *LPALBUFFERFV)( ALuint bid, ALenum param, const ALfloat* values );
  627. typedef void (AL_APIENTRY *LPALBUFFERI)( ALuint bid, ALenum param, ALint value);
  628. typedef void (AL_APIENTRY *LPALBUFFER3I)( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 );
  629. typedef void (AL_APIENTRY *LPALBUFFERIV)( ALuint bid, ALenum param, const ALint* values );
  630. typedef void (AL_APIENTRY *LPALGETBUFFERF)( ALuint bid, ALenum param, ALfloat* value );
  631. typedef void (AL_APIENTRY *LPALGETBUFFER3F)( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
  632. typedef void (AL_APIENTRY *LPALGETBUFFERFV)( ALuint bid, ALenum param, ALfloat* values );
  633. typedef void (AL_APIENTRY *LPALGETBUFFERI)( ALuint bid, ALenum param, ALint* value );
  634. typedef void (AL_APIENTRY *LPALGETBUFFER3I)( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
  635. typedef void (AL_APIENTRY *LPALGETBUFFERIV)( ALuint bid, ALenum param, ALint* values );
  636. typedef void (AL_APIENTRY *LPALDOPPLERFACTOR)( ALfloat value );
  637. typedef void (AL_APIENTRY *LPALDOPPLERVELOCITY)( ALfloat value );
  638. typedef void (AL_APIENTRY *LPALSPEEDOFSOUND)( ALfloat value );
  639. typedef void (AL_APIENTRY *LPALDISTANCEMODEL)( ALenum distanceModel );
  640. #if defined(TARGET_OS_MAC) && TARGET_OS_MAC
  641. #pragma export off
  642. #endif
  643. #if defined(__cplusplus)
  644. } /* extern "C" */
  645. #endif
  646. #endif /* AL_AL_H */