úÎ!ş'¤1Ę      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l mnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­Ž Ż ° ą ˛ ł´ľ ś ˇ ¸ š ş ť ź ˝ ž ż ŔÁÂĂÄĹĆÇČÉ(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe ąĘËĚÍ(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeIOpenALThe abstract context type.OpenALThe abstract device type.OpenAL64-bit IEEE754 floating-pointOpenAL32-bit IEEE754 floating-pointOpenALEnumerated 32-bit value OpenAL(Non-negatitve 32-bit binary integer size OpenALUnsigned 32-bit integer OpenAL$Signed 32-bit 2's complement integer OpenALUnsigned 16-bit integer OpenAL$Signed 16-bit 2's complement integerOpenALUnsigned 8-bit integerOpenAL#Signed 8-bit 2's complement integerOpenAL CharacterOpenAL 8-bit booleanOpenAL64-bit IEEE754 floating-pointOpenAL32-bit IEEE754 floating-pointOpenALEnumerated 32-bit valueOpenAL(Non-negatitve 32-bit binary integer sizeOpenALUnsigned 32-bit integerOpenAL$Signed 32-bit 2's complement integerOpenALUnsigned 16-bit integerOpenAL$Signed 16-bit 2's complement integerOpenALUnsigned 8-bit integerOpenAL#Signed 8-bit 2's complement integerOpenAL CharacterOpenAL 8-bit booleanOpenALm allows the application (i.e. the client program) to disconnect from a device (i.e. the server). It returns Î for success and Ď for failure. Once closed, the  is invalid.Note:; Older OpenAL implementations will always report a success!(ĐŃŇÓ ÔŐÖ×ŘŮÚŰÜ(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe!N    (c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe#ÝŢß(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe$‚  (c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe&Eŕá(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe'˛Uâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙      !"#$%&'()*+,-./0123456(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe*k78(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe1íOpenALqTo verify that a given extension is available for the current context and the device it is associated with, use 9. For invalid and unsupported string tokens it contains Ď. Using 9 as the device is acceptable. The extension name is not case sensitive: The implementation will convert the name to all upper-case internally (and will express extension names in upper-case).:;<=>?@ABCDEFGHIJK(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe–œ OpenAL u allows the application (i.e. the client program) to connect to a device (i.e. the server). If the function returns 9?, then no sound driver/device has been found. The argument to  ? specifies a certain device or device configuration. If it is 9L, the implementation will provide an implementation specific default, see !. Otherwise it is L2 an implementation-dependent string. You can use #, to get a list of the known OpenAL devices.Notes for Windows:h There are 3 possible device strings, each having a deprecated equivalent for legacy applications only:"Generic Hardware" (legacy string: "DirectSound3D")"Generic Software" (legacy string:  "DirectSound")"Generic Software Fallback" (legacy string:  "MMSYSTEM")Notes for Linux/*nix: If an  .openalrcN file is present in the user's home directory, it is loaded first, otherwise  /etc/openalrc% is tried. The bindings (if any) of devices,  direction,  sampling-rate, and  speaker-numj (see below) after loading one of these files take precedence over any bindings done via the argument to  .qThe syntax of these files is lisp-based and a sequence of expressions, where an expression is one the following: A boolean value of the form #f or #t, which evaluate to false and true, respectively.XAn non-negative integer value, i.e. a sequence of decimal digits, evaluating to itself.6A (signed) floating point value, as recoginzed by C's atof(), evaluating to itself.A pointer value of the form #pnum, where numF can be an octal, decimal or hexadecimal value, as recoginzed by C`s strtol()E, evaluating to itself. This kind of expression is currently unused.jA string, i.e. a sequence of printable/whitespace characters between double quotes, evaluating to itself.}A symbol, i.e. a sequence of almost all characters which don't form a simple expression like the ones mentioned below, e.g. foo, bar1, 3baz?, ... The symbol evaluates to the value currently bound to it.#A function application of the form (symbol  expression...)J. The function bound to the symbol is applied to the evaluated arguments.A quotation of the form (quote  expression) or ' expression!, evaluating to the unevaluated  expression itself.A definition of the form (define symbol  expression) , binding symbol to the value of  expression2. The whole expression evaluates to the value of  expression, too.1A conjunction of boolean expressions of the form (and  expression...). Each  expression8 is evaluated in turn, and if one of them evaluates to false', the value of the whole expression is false. Otherwise the value is true.+An extension loading mechanism of the form (load-extension  libraryName), where  libraryNamej has to evaluate to a string. This tries to load the dynamic library with up to 3 special entry points: alExtension_03282000l (pointing to a mandatory NULL-terminated sequence of pairs of pointers to names and extension functions), alExtInit_03282000- (an optional initialization function), and alExtFini_03282000t (an optional cleanup function). If the extension could be loaded successfully, the whole expression evaluates to true, otherwise to false./Some symbols have a special meaning for OpenAL: devices Has the form (devspec...), where devspec3 is either a symbol/string specifying a device or (device  device-param...)n, specifying a device with additional parameters. These optional device parameters are stored in a variable  device-paramsT, but are currently unused. The first device which can successfully opened is used. directionType string or symbol: "read"e specifies that the device should be an input device, everything else means output device (default). sampling-rateTType integer or float: Specifies the internal mixing frequency, default is 44.1kHz. speaker-num\Type integer or float: Specifies the number of speakers, which can be 1, 2 (default), or 4. alsa-device Type string, alsa backend only: Specifies both alsa-out-device and alsa-in-device , default  "plughw:0,0".alsa-out-device Type string, alsaK backend only: Specifies the ALSA output device, defaults to the value of  alsa-device.alsa-in-device Type string, alsaJ backend only: Specifies the ALSA input device, defaults to the value of  alsa-device.native-in-device Type string, native backend on IRIX only.native-out-device Type string, native backend on IRIX only.native-rear-out-device Type string, native backend on IRIX only.native-use-selectType boolean, native backend on Linux only: If #tD, wait up to 0.8sec for the device to become ready for writing. If #f{, just try to write and hope it won't hang forever. The latter might be necessary for some drivers which don't implement select() , like some Aureal drivers. lin-dsp-path Type string, nativeF backend on Linux only: Path to DSP device for writing, tried before /dev/sound/dsp and  /dev/sound if set.lin-dsp-read-path Type string, nativeF backend on Linux only: Path to DSP device for reading, tried before /dev/sound/dsp and  /dev/sound# if set. Defaults to the value of  lin-dsp-path.native-backend-debugType boolean, native$ backend on Darwin only: If set to #fC, be a bit verbose on stderr about what's going on in the backend.source-rolloff-factorTType integer or float: Value of the initial rolloff factor for sources, default is 1.0.listener-positionRList of 3 integers or floats: Value of the initial listener position, default is (0 0 0).listener-velocityRList of 3 integers or floats: Value of the initial listener velocity, default is (0 0 0).listener-orientation]List of 6 integers or floats: Value of the initial listener orientation (at/up), default is (0 0 -1 0 1 0).The string given to   has to be of the form '((symbol  expression) ...)&, which means basically a sequence of define expressions. Example: 4"'((sampling-rate 8000) (native-backend-debug #f))" Note:• The information above has been reverse-engineered from the OpenAL SI and could be inaccurate. Any corrections and/or additions are highly welcome.!OpenAL Contains L0 the specifier string for the default device or 9& if there is no sound support at all."OpenAL3Contains the specifier string for the given device.#OpenAL8Contains a list of specifiers for all available devices. !"# !"#(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeĽE$OpenAL0Contains a list of available context extensions.%OpenALThe application is expected to verify the applicability of an extension or core function entry point before requesting it by name, by use of 1. Extension entry points can be retrieved using %L. Entry points can be device specific, but are not context specific. Using 9x as the device does not guarantee that the entry point is returned, even if available for one of the available devices.&OpenALƒEnumeration/token values are device independent, but tokens defined for extensions might not be present for a given device. Using 9” as the device is legal, but only the tokens defined by the AL core are guaranteed. Availability of extension tokens depends on the ALC extension.'OpenALContains the "major.minor1" specification revision for this implementation.$%&'$%&'(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeť.(OpenALGeneral ALC error categories./OpenALUALC errors consist of a general error category and a description of what went wrong.1OpenALŐOpenAL detects only a subset of those conditions that could be considered errors. This is because in many cases error checking would adversely impact the performance of an error-free program. The state variable 1ż is used to obtain error information. When an error is detected by ALC, a flag is set and the error code is recorded. Further errors, if they occur, do not affect this recorded code. When 1 is read, the error for the given device is returned and the flag is cleared, so that a further error will again record its code. If reading 1 returns []> then there has been no detectable error since the last time 1% (or since the ALC was initialized).LWhen an error flag is set, results of ALC operations are undefined only if .˙ž has occurred. In other cases, the command generating the error is ignored so that it has no effect on ALC state or output buffer contents. If the error generating command returns a value, it returns zero. If the generating command modifies values through a pointer argument, no change is made to these values. These error semantics apply only to ALC errors, not to system errors such as memory access errors. ()*+,-./01 /0()*+,-.1(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeîV8OpenAL´The application can choose to specify certain attributes for a context at context-creation time. Attributes not specified explicitly are set to implementation dependent defaults.9OpenAL5Frequency for mixing output buffer, in units of Hz:OpenAL!Refresh intervals, in units of Hz;OpenAL&Flag, indicating a synchronous context<OpenALOA hint indicating how many sources should be capable of supporting mono data=OpenALQA hint indicating how many sources should be capable of supporting stereo data>OpenAL@Frequency, specified in samples per second, i.e. units of Hertz Hz‹. Note that the underlying OpenAL API currently uses integral frequencies only, but we want to mirror physical reality here more closely.?OpenAL˙žCreate a context for a given device and given attributes. Context creation will fail in the following cases: a) if the application requests attributes that, by themselves, can not be provided b) if the combination of specified attributes can not be provided c) if a specified attribute, or the combination of attributes, does not match the default values for unspecified attributes If context creation fails, 9 will be returned, otherwise L the new context. Note that ? does not< set the current context, this must be done separately via @.@OpenAL Contains L; the current context with respect to OpenAL operation, or 9˙ľ if there is no current context. Setting it to the latter is useful when shutting OpenAL down. The state variable applies to the device that the context was created for. For each OS process (usually this means for each application), only one context can be current at any given time. All AL commands apply to the current context. Commands that affect objects shared among contexts (e.g. buffers) have side effects on other contexts.AOpenAL˙oThe current context is the only context accessible to state changes by AL commands (aside from state changes affecting shared objects). However, multiple contexts can be processed at the same time. To indicate that a context should be processed (i.e. that internal execution state like offset increments are supposed to be performed), the application has to use A. Repeated calls to Az are legal, and do not affect a context that is already marked as processing. The default state of a context created by ? is that it is processing.BOpenAL˙ The application can suspend any context from processing (including the current one). To indicate that a context should be suspended from processing (i.e. that internal execution state like offset increments is not supposed to be changed), the application has to use B. Repeated calls to BM are legal, and do not affect a context that is already marked as suspended.COpenALqDestroy the given context. Note that the the correct way to destroy a context is to first release it by setting @ to 9n. Applications should not attempt to destroy a current context, doing so will not work and will result in an + error.DOpenAL Contains L$ the device of the given context or 9 if the context is invalid.EOpenALMContains the attribute list for the current context of the specified device.89:;<=>?@ABCDE>89:;<=?@ABCDE(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeůlIOpenAL=Each source can be in one of four possible execution states: J, K, L, M. Sources that are either K or L* are considered active. Sources that are M or J are considered inactive. Only K˙ sources are included in the processing. The implementation is free to skip those processing stages for sources that have no effect on the output (e.g. mixing for a source muted by zero gain, but not sample offset increments). Depending on the current state of a source certain (e.g. repeated) state transition commands are legal NOPs: they will be ignored, no error is generated.IJKLMM(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeúń$NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopq (c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeţnNOpenAL Contains the name of the vendor.OOpenAL1Contains information about the specific renderer.NONO (c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe%MPOpenALA scalar amplitude multiplier.QOpenALQâ contains the current location of the listener in the world coordinate system. Any 3-tuple of valid float values is allowed. Implementation behavior on encountering NaN and infinity is not defined. The initial position is ( 0 0 0).ROpenALRŽ contains current velocity (speed and direction) of the listener in the world coordinate system. Any 3-tuple of valid float values is allowed, and the initial velocity is ( 0 0 0). R does not affect Q˙M. OpenAL does not calculate the velocity from subsequent position updates, nor does it adjust the position over time based on the specified velocity. Any such calculation is left to the application. For the purposes of sound processing, position and velocity are independent parameters affecting different aspects of the sounds.RÉ is taken into account by the driver to synthesize the Doppler effect perceived by the listener for each source, based on the velocity of both source and listener, and the Doppler related parameters.SOpenALSŤ contains a scalar amplitude multiplier, which is effectively applied to all sources in the current context. The initial value 1 means that the sound is unattenuated. A S˙› value of 0.5 is equivalent to an attenuation of 6dB. The value zero equals silence (no output). Driver implementations are free to optimize this case and skip mixing and processing stages where applicable. The implementation is in charge of ensuring artifact-free (click-free) changes of gain values and is free to defer actual modification of the sound samples, within the limits of acceptable latencies.A S´ larger than 1 (amplification) is permitted. However, the implementation is free to clamp the total gain (effective gain per source times listener gain) to 1 to prevent overflow.TOpenALT˙Ů contains an "at" vector and an "up" vector, where the "at" vector represents the "forward" direction of the listener and the orthogonal projection of the "up" vector into the subspace perpendicular to the "at" vector represents the "up" direction for the listener. OpenAL expects two vectors that are linearly independent. These vectors are not expected to be normalized. If the two vectors are linearly dependent, behavior is undefined. The initial orientation is ( 0 0 (-1), H 0 1 0), i.e. looking down the Z axis with the Y axis pointing upwards.PQRSTQRPST(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe)˜UOpenALFValid sound formats. An implementation may expose other formats, see Sound.OpenAL.ALC.ExtensionsE for information on determining if additional formats are supported.UVWXYrZ (c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe?[OpenALGeneral AL error categories.aOpenALTAL errors consist of a general error category and a description of what went wrong.cOpenALŐOpenAL detects only a subset of those conditions that could be considered errors. This is because in many cases error checking would adversely impact the performance of an error-free program. The state variable cž is used to obtain error information. When an error is detected by AL, a flag is set and the error code is recorded. Further errors, if they occur, do not affect this recorded code. When cz is read, the error is returned and the flag is cleared, so that a further error will again record its code. If reading c returns []> then there has been no detectable error since the last time c# (or since the AL was initialized).KWhen an error flag is set, results of AL operations are undefined only if `˙œ has occurred. In other cases, the command generating the error is ignored so that it has no effect on AL state or output buffer contents. If the error generating command returns a value, it returns zero. If the generating command modifies values through a pointer argument, no change is made to these values. These error semantics apply only to AL errors, not to system errors such as memory access errors. [\]^_`abc ab[\]^_`c(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe@Žsj(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeCkOpenALThe abstract buffer type.tOpenALA dummy buffer.kuvwl(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe,ęmOpenALGSpecifies what should happen when the end of a buffer queue is reached.pOpenAL,When first created, a source will be in the q, state. If a buffer is then attached using ~", then the source will enter the rD state. If the first buffer attached to a source is attached using Œ!, then the source will enter the s9 state. A source of either state will be reset to state q by setting its ~ to 9K, and attaching any buffer to a streaming source will change the state to rE. Attempting to queue a buffer on a static source will result in an ^ error.tOpenAL*The entity to which the source attributes x, y and † are to be interpreted.wOpenALThe abstract buffer type.xOpenALxŕ contains the current location of the source in the world coordinate system. Any 3-tuple of valid float values is allowed. Implementation behavior on encountering NaN and infinity is not defined. The initial position is ( 0 0 0).yOpenALyŹ contains current velocity (speed and direction) of the source in the world coordinate system. Any 3-tuple of valid float values is allowed, and the initial velocity is ( 0 0 0). y does not affect x˙L. OpenAL does not calculate the velocity from subsequent position updates, nor does it adjust the position over time based on the specified velocity. Any such calculation is left to the application. For the purposes of sound processing, position and velocity are independent parameters affecting different aspects of the sounds.yÉ is taken into account by the driver to synthesize the Doppler effect perceived by the listener for each source, based on the velocity of both source and listener, and the Doppler related parameters.zOpenALz{ contains a scalar amplitude multiplier for the given source. The initial value 1 means that the sound is unattenuated. A z˙œ value of 0.5 is equivalent to an attenuation of 6dB. The value zero equals silence (no output). Driver implementations are free to optimize this case and skip mixing and processing stages where applicable. The implementation is in charge of ensuring artifact-free (click-free) changes of gain values and is free to defer actual modification of the sound samples, within the limits of acceptable latencies.A z´ larger than 1 (amplification) is permitted. However, the implementation is free to clamp the total gain (effective gain per source times listener gain) to 1 to prevent overflow.{OpenALIf { contains v7, it indicates indicates that the values specified by x, y and †Q are to be interpreted relative to the listener position. The initial value is uz, indicating that those source attributes are to be interpreted relative to the world, i.e. they are considered absolute.|OpenAL|ł indicates whether a source is ready to queue buffers, ready to use a static buffer, or is in an undetermined state where it can be used for either streaming or static playback.}OpenALIf } contains o3, it indicates that the source will not be in the Mt state once it reaches the end of last buffer in the buffer queue. Instead, the source will immediately promote to J and K. The initial value is n. }\ can be changed on a source in any execution state. In particular, it can be changed on a K source.~OpenAL~- contains the current buffer object. Setting ~ to LJ a buffer object makes it the head entry in the source's queue. Setting ~for a source in the M or J[ state empties the entire queue, then appends the one buffer specified (or none at all if 9 was specified).For a source in the K or L state, setting ~ will result in the ^ error state being set. ~( can be applied only to sources in the J and M° states. Specifying an invalid buffer name (either because the buffer name doesn't exist or because that buffer can't be attached to the specified source) will result in an ]> error while specifying an invalid source name results in an _ error. Setting ~ to 9H is a legal way to release the current buffer queue on a source in the J or MR state, whether the source has just one entry (current buffer) or more. Setting ~ to 9 still causes an ^ for any source in the K or LW state, consequently it cannot be used to mute or stop a source. The initial value is 9.OpenAL contains the number of buffers in the queue of a given source. This includes those not yet played, the one currently playing, and the ones that have been played already. It will contain 0 if ~ has been set to 9.€OpenAL€ě contains the number of buffers that have been played by a given source. Indirectly, this gives the index of the buffer currently playing. It can be used to determine how much slots are needed for unqueuing them. On a source in the M7 state, all buffers are processed. On a source in the JQ state, no buffers are processed, all buffers are pending. It will contain 0 if ~ has been set to 9.OpenAL˙# contains two scalar amplitude thresholds between 0 and 1 (included): The minimum guaranteed gain for this source and the maximum gain permitted, with initial values 0 and 1, respectively At the end of the processing of various attenuation factors such as distance based attenuation and z<, the effective gain calculated is compared to these values:lIf the effective gain is lower than the minimum gain, the minimum gain is applied. This happens before the S[ is applied. If a zero minimum gain is set, then the effective gain will not be corrected.mIf the effective gain is higher than the maximum gain, the maximum gain is applied. This happens before the S is applied. If the S˙9 times the maximum gain still exceeds the maximum gain the implementation can handle, the implementation is free to clamp. If a zero maximum gain is set, then the source is effectively muted. The implementation is free to optimize for this situation, but no optimization is required or recommended as setting z- to zero is the proper way to mute a source.‚OpenAL‚Ä is used for distance attenuation calculations based on inverse distance with rolloff. Depending on the distance model it will also act as a distance threshold below which gain is clamped. See Sound.OpenAL.AL.Attenuation% for details. The initial value is 1.ƒOpenALƒs is used for distance attenuation calculations based on inverse distance with rolloff. For distances smaller than „5 (and, depending on the distance model, larger than ‚M), this will scale the distance attenuation over the applicable range. See Sound.OpenAL.AL.Attenuationd for details how the attenuation is computed as a function of the distance. The initial value is 1.In particular, ƒä can be set to zero for those sources that are supposed to be exempt from distance attenuation. The implementation is encouraged to optimize this case, bypassing distance attenuation calculation entirely on a persource basis.„OpenAL„­ is used for distance attenuation calculations based on inverse distance with rolloff, if the inverse clamped distance model is used. In this case, distances greater than „ will be clamped to „. „> based clamping is applied before minimum gain clamping (see ), so if the effective gain at „“ is larger than the minimum gain, the minimum gain will have no effect. No culling is supported. The initial value is the largest representable .…OpenAL…˙† contains the desired pitch shift, where 1 (the initial value) equals identity. Each reduction by 50 percent equals a pitch shift of -12 semitones (one octave reduction). Each doubling equals a pitch shift of 12 semitones (one octave increase). Zero is not a legal value. Implementations may clamp the actual output pitch range to any values subject to the implementation's own limits.†OpenALIf †# does not contain the zero vector (ĺ 0 0 0), the source is directional. The sound emission is presumed to be symmetric around the direction vector (cylinder symmetry). Sources are not oriented in full 3 degrees of freedom, only two angles are effectively needed.ňThe zero vector is the initial value, indicating that a source is not directional. Specifying a non-zero vector will make the source directional. Specifying a zero vector for a directional source will effectively mark it as nondirectional.‡OpenAL‡˙x contains the inner and outer angles of the sound cone, in degrees. The default of 360 for the inner cone angle means that it covers the entire world, which is equivalent to an omni-directional source. The default of 360 for the outer cone angle means that it covers the entire world. If the inner angle is also 360, then the zone for angle-dependent attenuation is zero.ˆOpenALˆ contains the factor with which z“ is multiplied to determine the effective gain outside the cone defined by the outer angle. The effective gain applied outside the outer cone is z times ˆ . Changing zŒ affects all directions, i.e. the source is attenuated in all directions, for any position of the listener. The application has to change ˆ- as well if a different behavior is desired.‰OpenAL‰n contains the playback position, expressed in seconds (the value will loop back to zero for looping sources). When setting ‰Š on a source which is already playing, the playback will jump to the new offset unless the new offset is out of range, in which case an ]Z error is set. If the source is not playing, then the offset will be applied on the next  call.ĄThe position is relative to the beginning of all the queued buffers for the source, and any queued buffers traversed by a set call will be marked as processed.âThis value is based on byte position, so a pitch-shifted source will have an exaggerated playback speed. For example, you can be 0.5 seconds into a buffer having taken only 0.25 seconds to get there if the pitch is set to 2.ŠOpenALŠĐ contains the playback position, expressed in samples (the value will loop back to zero for looping sources). For a compressed format, this value will represent an exact offset within the uncompressed data. When setting ŠŠ on a source which is already playing, the playback will jump to the new offset unless the new offset is out of range, in which case an ]Z error is set. If the source is not playing, then the offset will be applied on the next  call. A ‘, ’, or a second ; call will reset the offset to the beginning of the buffer.ĄThe position is relative to the beginning of all the queued buffers for the source, and any queued buffers traversed by a set call will be marked as processed.‹OpenAL‹Ř contains the playback position, expressed in bytes (the value will loop back to zero for looping sources). For a compressed format, this value may represent an approximate offset within the compressed data buffer. When setting ‹Š on a source which is already playing, the playback will jump to the new offset unless the new offset is out of range, in which case an ]Z error is set. If the source is not playing, then the offset will be applied on the next  call. A ‘, ’, or a second ; call will reset the offset to the beginning of the buffer.ĄThe position is relative to the beginning of all the queued buffers for the source, and any queued buffers traversed by a set call will be marked as processed.ŒOpenALAThe application can queue up one or multiple buffer names using ŒO. The buffers will be queued in the sequence in which they appear in the list.rThis command is legal on a source in any playback state (to allow for streaming, queuing has to be possible on a K source).˜All buffers in a queue must have the same format and attributes. An attempt to mix formats or other buffer attributes will result in a failure and an ]“ error will be thrown. If the queue operation fails, the source queue will remain unchanged (even if some of the buffers could have been queued).OpenAL˙6Once a queue entry for a buffer has been appended to a queue and is pending processing, it should not be changed. Removal of a given queue entry is not possible unless either the source is stopped (in which case then entire queue is considered processed), or if the queue entry has already been processed (K or L* source). A playing source will enter the M§ state if it completes playback of the last buffer in its queue (the same behavior as when a single buffer has been attached to a source and has finished playback).The § command removes a number of buffers entries that have finished processing from the queue, returning the buffers that were unqueued. The operation will fail with an ]b error if more buffers are requested than available, leaving the destination arguments unchanged.ŽOpenAL^Contains the current execution state of the given source. The initial state of any source is J.Note that the J˛ state is not necessarily identical to the initial state in which a source is created, because the other source attributes are not automatically reset to their initial values. J= merely indicates that the source can be executed using the  command. A M or Jî source can be reset into the default configuration by using a sequence of source commands as necessary. As the application has to specify all relevant state anyway to create a useful source configuration, no reset command is provided.OpenAL applied to an J# source will promote the source to Kb, thus the data found in the buffer will be fed into the processing, starting at the beginning.  applied to a Ky source will restart the source from the beginning. It will not affect the configuration, and will leave the source in K9 state, but reset the sampling offset to the beginning.  applied to a LK source will resume processing using the source state as preserved at the  operation.  applied to a M source will propagate it to J then to K immediately.OpenAL applied to an J source is a legal NOP.  applied to a K! source will change its state to LI. The source is exempt from processing, its current state is preserved.  applied to a L source is a legal NOP.  applied to a M source is a legal NOP.‘OpenAL‘ applied to an J source is a legal NOP. ‘ applied to a K! source will change its state to MI. The source is exempt from processing, its current state is preserved. ‘ applied to a L" source will change its state to M&, with the same consequences as on a K source. ‘ applied to a M source is a legal NOP.’OpenAL’ applied to an J source is a legal NOP. ’ applied to a K! source will change its state to M then J—. The source is exempt from processing: its current state is preserved, with the exception of the sampling offset, which is reset to the beginning. ’ applied to a L! source will change its state to J&, with the same consequences as on a K source. ’ applied to an M source promotes the source to J2, resetting the sampling offset to the beginning.+IJKLMmnopqrstvuwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’+wxyztvu{pqrs|mno}~€‚ƒ„…†‡ˆ‰Š‹ŒIJKLMŽ‘’(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe[R ˘OpenAL˙ OpenAL currently supports six modes of operation with respect to distance attenuation, including one that is similar to the IASIG I3DL2 model. The application chooses one of these models (or chooses to disable distance-dependent attenuation) on a per-context basis.gThe distance used in the formulas for the "clamped" modes below is clamped to be in the range between ‚ and „:clamped distance = max(‚, min(distance, „))ĘThe linear models are not physically realistic, but do allow full attenuation of a source beyond a specified distance. The OpenAL implementation is still free to apply any range clamping as necessary.žWith all the distance models, if the formula can not be evaluated then the source will not be attenuated. For example, if a linear model is being used with ‚ equal to „y, then the gain equation will have a divide-by-zero error in it. In this case, there is no attenuation for that source.ŁOpenALzBypass all distance attenuation calculation for all sources. The implementation is expected to optimize this situation.¤OpenALhInverse distance rolloff model, which is equivalent to the IASIG I3DL2 model with the exception that ‚ does not imply any clamping.gain = ‚ / (‚ + ƒ * (distance - ‚))The ‚Ń parameter used here is a per-source attribute which is the distance at which the listener will experience gain (unless the implementation had to clamp effective gain to the available dynamic range). ƒč is per-source parameter the application can use to increase or decrease the range of a source by decreasing or increasing the attenuation, respectively. The default value is 1. The implementation is free to optimize for a ƒx value of 0, which indicates that the application does not wish any distance attenuation on the respective source.ĽOpenALŽInverse Distance clamped model, which is essentially the inverse distance rolloff model, extended to guarantee that for distances below ‚P, gain is clamped. This mode is equivalent to the IASIG I3DL2 distance model.ŚOpenALxLinear distance rolloff model, modeling a linear dropoff in gain as distance increases between the source and listener.gain = (1 - ƒ * (distance - ‚) / („ - ‚))§OpenALlLinear Distance clamped model, which is the linear model, extended to guarantee that for distances below ‚, gain is clamped.¨OpenAL…Exponential distance rolloff model, modeling an exponential dropoff in gain as distance increases between the source and listener.gain = (distance / ‚) ** (- ƒ)ŠOpenALvExponential Distance clamped model, which is the exponential model, extended to guarantee that for distances below ‚, gain is clamped.ŞOpenAL0Contains the current per-context distance model. ˘Ł¤ĽŚ§¨ŠŞ ˘Ł¤ĽŚ§¨ŠŞ (c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafevÁŽOpenAL*Contains the list of available extensions.ŻOpenAL(Contains a version string in the format "<spec major number>./<spec minor number> '<optional vendor version information>/".°OpenALLTo verify that a given extension is available for the current context, use °9. For invalid and unsupported string tokens it contains ĎĽ. The extension name is not case sensitive: The implementation will convert the name to all upper-case internally (and will express extension names in upper-case).ąOpenAL>To retrieving function entry addresses, applications can use ą. It contains xV if no entry point with the given name can be found. Implementations are free to use xŸ if an entry point is present, but not applicable for the current context. However the specification does not guarantee this behavior. Applications can use ą‘ to obtain core API entry points, not just extensions. This is the recommended way to dynamically load and unload OpenAL DLLs as sound drivers.˛OpenALITo obtain enumeration values for extensions, the application has to use ˛Ĺ of an extension token. Enumeration values are defined within the OpenAL name space and allocated according to specification of the core API and the extensions, thus they are context-independent.˛˙} contains 0 if the enumeration can not be found. The presence of an enum value does not guarantee the applicability of an extension to the current context. A non-zero value indicates merely that the implementation is aware of the existence of this extension. Implementations should not attempt to use 0 to indicate that the extensions is not supported for the current context.ZjlŽŻ°ą˛Ž°ą˛ŻjZl(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe„ŃłOpenALł˜ is a simple scaling of source and listener velocities to exaggerate or deemphasize the Doppler (pitch) shift resulting from the calculation. Setting ł( to a negative value will result in an ]q error, the command is then ignored. The default value is 1. The implementation is free to optimize the case of ł; containing zero, as this effectively disables the effect.´OpenAL´Đ allows the application to change the reference (propagation) speed used in the Doppler calculation. The source and listener velocities should be expressed in the same units as the speed of sound. Setting ´/ to a negative or zero value will result in an ] error, the command is ignored then. The default value is 343.3 (appropriate for velocity units of meters and air as the propagation medium).ł´ł´ (c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe•gšOpenAL“A special case of buffer state is the actual sound sample data stored in association with the buffer. Applications can specify sample data using š.˙The data specified is copied to an internal software, or if possible, hardware buffer. The implementation is free to apply decompression, conversion, resampling, and filtering as needed. The internal format of the buffer is not exposed to the application, and not accessible.˙3Buffers containing audio data with more than one channel will be played without 3D spatialization features, these formats are normally used for background music. Applications should always check for an error condition after attempting to specify buffer data in case an implementation has to generate an ` or a conversion related ]Y error. The application is free to reuse the memory specified by the data pointer once šU is set. The implementation has to dereference, e.g. copy, the data while accessing š execution. UVWXYkľśˇ¸š kˇ¸UVWXYľśš(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeš<ÇOpenAL0Contains the name of the default capture device.ČOpenAL;Contains the specifier string for the given capture device.ÉOpenAL@Contains a list of specifiers for all available capture devices. ŔÁÂĂÄĹĆÇČÉ ŔÁÂĂÄĹĆÇČÉ(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafe›ď:  !"#$%&'()*+,-./0189:;<=>?@ABCDEŔÁÂĂÄĹĆÇČÉ(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafež:eIJKLMNOPQRSTUVWXYZ[\]^_`abcjklmnopqrstvuwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’˘Ł¤ĽŚ§¨ŠŞŽŻ°ą˛ł´ľśˇ¸š(c) Sven Panne 2003-2016BSD3 Sven Panne <svenpanne@gmail.com>stableportableSafeĄ1ťyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ  !"#$%&'()*+,-./0189:;<=>?@ABCDEIJKLMNOPQRSTUVWXYZ[\]^_`abcjklmnopqrstvuwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’˘Ł¤ĽŚ§¨ŠŞŽŻ°ą˛ł´ľśˇ¸šŔÁÂĂÄĹĆÇČÉ‘ ! ! " "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNNOPQRSTUVWXYZ[W\]^_`abcdefghij k l m n o p qrstuvw x y z { | } ~ ~  €  ‚ ƒ „ …†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉ Ę Ë Ě Í ÎĎĐ Ń Ń Ň Ň Ó Ô Ő Ö × Ř ŮÚŰÜÝŢßŕáâăäĺćçčéęčéëěěííîďđńňóôőö÷řůúűüýţ˙      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]G^_`abcdefSTghij]xklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰bŠ‹Œ‡ŽS‘’“‘’”‘’•‘’–‘’—‘’˜‘’™š›œš›š›žš›Ÿš› š›Ąš›˘š›Łš›¤š›¤š›Ľš›Ľš›Śš›§š›¨š›Šš›ŞŤ%OpenAL-1.7.0.5-BenqhZXxt14F0aV8wXNCqR Sound.OpenALSound.OpenAL.ALC.ContextSound.OpenAL.ALC.DeviceSound.OpenAL.ALC.BasicTypesSound.OpenAL.AL.BasicTypesSound.OpenAL.ALC.ExtensionsSound.OpenAL.ALC.ErrorsSound.OpenAL.AL.SourceSound.OpenAL.AL.StringQueriesSound.OpenAL.AL.ListenerSound.OpenAL.AL.BufferSound.OpenAL.AL.ExtensionsSound.OpenAL.AL.ErrorsSound.OpenAL.AL.AttenuationSound.OpenAL.AL.DopplerSound.OpenAL.ALC.CaptureSound.OpenAL.AL.PeekPokeSound.OpenAL.ConfigSound.OpenAL.ALC.StringSound.OpenAL.AL.StringSound.OpenAL.ConstantsSound.OpenAL.ALC.ALCbooleanSound.OpenAL.ALC.QueryUtilsSound.OpenAL.AL.SourceStateSound.OpenAL.AL.QueryUtilsSound.OpenAL.AL.FormatSound.OpenAL.AL.ALbooleanSound.OpenAL.AL.BufferInternalSound.OpenAL.ALCSound.OpenAL.AL%OpenGL-3.0.3.0-5JxmNnfgYwZCXJSdWQYdVD#Graphics.Rendering.OpenGL.GL.TensorVertex3Vector3ContextDevice ALCdoubleALCfloatALCenumALCsizeiALCuintALCint ALCushortALCshortALCubyteALCbyteALCchar ALCbooleanALdoubleALfloatALenumALsizeiALuintALintALushortALshortALubyteALbyteALchar ALboolean closeDevicealcIsExtensionPresent openDevicedefaultDeviceSpecifierdeviceSpecifierallDeviceSpecifiers alcExtensionsalcProcAddress alcEnumValue alcVersionALCErrorCategoryALCInvalidEnumALCInvalidValueALCInvalidOperationALCInvalidDeviceALCInvalidContextALCOutOfMemoryALCError alcErrors$fEqALCErrorCategory$fOrdALCErrorCategory$fShowALCErrorCategory $fEqALCError $fOrdALCError$fShowALCErrorContextAttribute FrequencyRefreshSync MonoSources StereoSources createContextcurrentContextprocessContextsuspendContextdestroyContextcontextsDevice allAttributes$fEqContextAttribute$fOrdContextAttribute$fShowContextAttribute SourceStateInitialPlayingPausedStoppedalVendor alRendererGainlistenerPositionlistenerVelocity listenerGain orientationFormatMono8Mono16Stereo8Stereo16unmarshalFormatALErrorCategory ALInvalidEnumALInvalidValueALInvalidOperation ALInvalidName ALOutOfMemoryALErroralErrors$fEqALErrorCategory$fOrdALErrorCategory$fShowALErrorCategory $fEqALError $fOrdALError $fShowALErrorunmarshalALbooleanBufferunmarshalBuffer LoopingModeOneShotLooping SourceType UndeterminedStatic StreamingSourceRelativeWorldListenerSourcesourcePositionsourceVelocity sourceGainsourceRelative sourceType loopingModebuffer buffersQueuedbuffersProcessed gainBoundsreferenceDistance rolloffFactor maxDistancepitch direction coneAngles coneOuterGain secOffset sampleOffset byteOffset queueBuffersunqueueBuffers sourceStateplaypausestoprewind$fGeneratableObjectNameSource$fObjectNameSource$fStorableSource $fEqSource $fOrdSource $fShowSource$fEqSourceRelative$fOrdSourceRelative$fShowSourceRelative$fEqSourceType$fOrdSourceType$fShowSourceType$fEqLoopingMode$fOrdLoopingMode$fShowLoopingMode DistanceModel NoAttenuationInverseDistanceInverseDistanceClampedLinearDistanceLinearDistanceClampedExponentDistanceExponentDistanceClamped distanceModel$fEqDistanceModel$fOrdDistanceModel$fShowDistanceModel alExtensions alVersionalIsExtensionPresent alProcAddress alEnumValue dopplerFactor speedOfSound BufferData MemoryRegion bufferData$fEqMemoryRegion$fOrdMemoryRegion$fShowMemoryRegion$fEqBufferData$fOrdBufferData$fShowBufferData NumSamplescaptureOpenDevice captureStartcaptureNumSamplescaptureSamples captureStopcaptureCloseDevicecaptureDefaultDeviceSpecifiercaptureDeviceSpecifierallCaptureDeviceSpecifierspoke1peek1peek3peek6ghc-prim GHC.TypesTrueFalse ALCcontext ALCdevicealcDestroyContextalcMakeContextCurrentalcProcessContext nullDevice marshalDeviceunmarshalDevice nullContextmarshalContextunmarshalContext withALCString peekALCStringpeekALCStrings withALString peekALStringal_FALSEal_TRUE al_NO_ERRORal_INVALID_NAMEal_INVALID_ENUMal_INVALID_VALUEal_INVALID_OPERATIONal_OUT_OF_MEMORYal_DISTANCE_MODELal_DOPPLER_FACTORal_SPEED_OF_SOUND al_VERSION al_RENDERER al_VENDOR al_EXTENSIONSal_NONEal_INVERSE_DISTANCEal_INVERSE_DISTANCE_CLAMPEDal_LINEAR_DISTANCEal_LINEAR_DISTANCE_CLAMPEDal_EXPONENT_DISTANCEal_EXPONENT_DISTANCE_CLAMPED al_POSITION al_VELOCITYal_GAINal_ORIENTATIONal_SOURCE_RELATIVEal_SOURCE_TYPE al_LOOPING al_BUFFERal_BUFFERS_QUEUEDal_BUFFERS_PROCESSED al_MIN_GAIN al_MAX_GAINal_REFERENCE_DISTANCEal_ROLLOFF_FACTORal_MAX_DISTANCEal_PITCH al_DIRECTIONal_CONE_INNER_ANGLEal_CONE_OUTER_ANGLEal_CONE_OUTER_GAIN al_SEC_OFFSETal_SAMPLE_OFFSETal_BYTE_OFFSETal_SOURCE_STATEal_UNDETERMINED al_STATIC al_STREAMING al_INITIAL al_PLAYING al_PAUSED al_STOPPED al_FREQUENCYal_SIZEal_BITS al_CHANNELSal_FORMAT_MONO8al_FORMAT_MONO16al_FORMAT_STEREO8al_FORMAT_STEREO16 alc_FALSEalc_TRUE alc_FREQUENCY alc_REFRESHalc_SYNCalc_MONO_SOURCESalc_STEREO_SOURCES alc_NO_ERRORalc_INVALID_DEVICEalc_INVALID_CONTEXTalc_INVALID_ENUMalc_INVALID_VALUEalc_INVALID_OPERATIONalc_OUT_OF_MEMORYalc_DEFAULT_DEVICE_SPECIFIERalc_DEVICE_SPECIFIERalc_EXTENSIONS$alc_CAPTURE_DEFAULT_DEVICE_SPECIFIERalc_CAPTURE_DEVICE_SPECIFIERalc_ATTRIBUTES_SIZEalc_ALL_ATTRIBUTESalc_MAJOR_VERSIONalc_MINOR_VERSIONalc_CAPTURE_SAMPLESmarshalALCbooleanunmarshalALCbooleanbase GHC.MaybeNothingIntQueryAttributesSize AllAttributes MajorVersion MinorVersionCaptureSamples StringQuery ExtensionsDefaultDeviceSpecifierDeviceSpecifierCaptureDefaultDeviceSpecifierCaptureDeviceSpecifier getString getStringRawmarshalIntQuery getInteger getIntegervJustunmarshalSourceState StringNameVersionVendorRendererGetPNameGetDistanceModelGetDopplerFactorGetSpeedOfSound GetPosition GetVelocityGetGainGetOrientationGetSourceRelative GetSourceType GetLooping GetBufferGetBuffersQueuedGetBuffersProcessed GetMinGain GetMaxGainGetReferenceDistanceGetRolloffFactorGetMaxDistanceGetPitch GetDirectionGetConeInnerAngleGetConeOuterAngleGetConeOuterGain GetSecOffsetGetSampleOffset GetByteOffsetGetSourceStatemarshalGetPName marshalFormatmarshalALboolean nullBufferbufferID marshalBufferGHC.Ptr nullFunPtr(ObjectName-1.1.0.1-AedGNnLlNl9ubQmZO6XjjData.ObjectName ObjectName isObjectNamedeleteObjectNamedeleteObjectNamesGeneratableObjectName genObjectNamegenObjectNames#StateVar-1.2-FLi81f6WAjpAfDzv1Vm8MU Data.StateVar HasGetterget HasUpdate$~$~! HasSetter$=GettableStateVarSettableStateVarStateVar makeStateVar mapStateVarmakeSettableStateVarmakeGettableStateVar$=!