úÎ św¤ ˘      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b cdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ąportable provisionalsven.panne@aedion.deThe abstract context type. The abstract device type. 64-bit IEEE754 floating-point 32-bit IEEE754 floating-point Enumerated 32-bit value )Non-negatitve 32-bit binary integer size Unsigned 32-bit integer Signed 32-bit 2's complement integer Unsigned 16-bit integer Signed 16-bit 2's complement integer Unsigned 8-bit integer Signed 8-bit 2's complement integer  Character 8-bit boolean 64-bit IEEE754 floating-point 32-bit IEEE754 floating-point Enumerated 32-bit value )Non-negatitve 32-bit binary integer size Unsigned 32-bit integer Signed 32-bit 2's complement integer Unsigned 16-bit integer Signed 16-bit 2's complement integer Unsigned 8-bit integer Signed 8-bit 2's complement integer  Character 8-bit boolean 5 allows the application (i.e. the client program) to 8 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! &¤ĽŚ§¨ ŠŞŤŹ­Ž&¤ĽŚ§¨ ŠŞŤŹ­Žportable provisionalsven.panne@aedion.deUŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙UŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙portable provisionalsven.panne@aedion.deportable provisionalsven.panne@aedion.de  portable provisionalsven.panne@aedion.de  portable provisionalsven.panne@aedion.de      portable provisionalsven.panne@aedion.deJTo verify that a given extension is available for the current context and ' the device it is associated with, use . For invalid + and unsupported string tokens it contains Ł. Using   as the E device is acceptable. The extension name is not case sensitive: The M implementation will convert the name to all upper-case internally (and will ) express extension names in upper-case). portable provisionalsven.panne@aedion.de@ allows the application (i.e. the client program) to connect to 5 a device (i.e. the server). If the function returns  , then no sound  driver/'device has been found. The argument to  specifies a 2 certain device or device configuration. If it is  , the E implementation will provide an implementation specific default, see  . Otherwise it is   an implementation-dependent  string. You can use # to get a list of the known OpenAL  devices. Notes for Windows:4 There are 3 possible device strings, each having a 5 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  .openalrc 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-num> (see below) after loading one of these files take precedence , over any bindings done via the argument to . MThe 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. C An non-negative integer value, i.e. a sequence of decimal digits,  evaluating to itself. 4 A (signed) floating point value, as recoginzed by C's atof() , evaluating  to itself.  A pointer value of the form #pnum, where num can be an octal, 1 decimal or hexadecimal value, as recoginzed by C`s strtol() , evaluating 9 to itself. This kind of expression is currently unused. ' A 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 7 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...). The E 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  expression1. The whole expression evaluates to the value of   expression, too. 2 A conjunction of boolean expressions of the form (and  expression...).  Each  expression7 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  libraryName) has to evaluate to a string. This tries @ to load the dynamic library with up to 3 special entry points:  alExtension_032820006 (pointing to a mandatory NULL-terminated sequence of 6 pairs of pointers to names and extension functions), alExtInit_03282000 (an ( optional initialization function), and alExtFini_03282000 (an optional M cleanup function). If the extension could be loaded successfully, the whole  expression evaluates to true, otherwise to false. 0Some symbols have a special meaning for OpenAL:  devices Has the form (devspec...), where devspec is either a  symbol/string specifying a device or (device  device-param...), G specifying a device with additional parameters. These optional device % parameters are stored in a variable  device-params, but are currently A unused. The first device which can successfully opened is used.  direction Type string or symbol: "read" specifies that the device K should be an input device, everything else means output device (default).  sampling-rate6 Type 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, alsa" backend only: Specifies the ALSA ) output device, defaults to the value of  alsa-device. alsa-in-device Type string, alsa" 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-select Type boolean, native backend on Linux only: If #t, B 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, native$ 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, native 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-debug Type boolean, native backend on Darwin only: If  set to #f', be a bit verbose on stderr about what's going on in the  backend. source-rolloff-factor5 Type integer or float: Value of the initial rolloff  factor for sources, default is 1.0. listener-position4 List of 3 integers or floats: Value of the initial  listener position, default is (0 0 0). listener-velocity4 List of 3 integers or floats: Value of the initial  listener velocity, default is (0 0 0). listener-orientation4 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:    "',((sampling-rate 8000) (native-backend-debug #f))" Note:F The information above has been reverse-engineered from the OpenAL SI - and could be inaccurate. Any corrections and/or additions are highly  welcome.  Contains  0 the specifier string for the default device or   if # there is no sound support at all. 4Contains the specifier string for the given device. 9Contains a list of specifiers for all available devices. portable provisionalsven.panne@aedion.de JThe application can choose to specify certain attributes for a context at G context-creation time. Attributes not specified explicitly are set to $ implementation dependent defaults. !-A hint indicating how many sources should be % capable of supporting stereo data "-A hint indicating how many sources should be # capable of supporting mono data #'Flag, indicating a synchronous context $"Refresh intervals, in units of Hz %0Frequency for mixing output buffer, in units of  Hz &@Frequency, specified in samples per second, i.e. units of Hertz [Hz]. I Note that the underlying OpenAL API currently uses integral frequencies A only, but we want to mirror physical reality here more closely. 'KCreate a context for a given device and given attributes. Context creation M will fail in the following cases: a) if the application requests attributes M that, by themselves, can not be provided b) if the combination of specified D attributes can not be provided c) if a specified attribute, or the N combination of attributes, does not match the default values for unspecified ' attributes If context creation fails,   will be returned, otherwise    the new context. Note that ' does not set the current + context, this must be done separately via (. ( Contains  : the current context with respect to OpenAL operation, or   D if there is no current context. Setting it to the latter is useful N when shutting OpenAL down. The state variable applies to the device that the K context was created for. For each OS process (usually this means for each I application), only one context can be current at any given time. All AL L commands apply to the current context. Commands that affect objects shared D among contexts (e.g. buffers) have side effects on other contexts. )JThe current context is the only context accessible to state changes by AL H commands (aside from state changes affecting shared objects). However, I multiple contexts can be processed at the same time. To indicate that a M context should be processed (i.e. that internal execution state like offset F increments are supposed to be performed), the application has to use  ). Repeated calls to ) are legal, and do not O affect a context that is already marked as processing. The default state of a  context created by ' is that it is processing. *GThe application can suspend any context from processing (including the N current one). To indicate that a context should be suspended from processing O (i.e. that internal execution state like offset increments is not supposed to ) be changed), the application has to use *. Repeated calls to  *8 are legal, and do not affect a context that is already  marked as suspended. +FDestroy the given context. Note that the the correct way to destroy a + context is to first release it by setting ( to   @. Applications should not attempt to destroy a current context, . doing so will not work and will result in an ALCInvalidOperation error. , Contains  $ the device of the given context or   if the context  is invalid. -EContains the attribute list for the current context of the specified  device.  !"#$%&'()*+,-& %$#"!'()*+,- %$#"!!"#$%&'()*+,-portable provisionalsven.panne@aedion.de.General ALC error categories. 5IALC errors consist of a general error category and a description of what  went wrong. 7JOpenAL detects only a subset of those conditions that could be considered M errors. This is because in many cases error checking would adversely impact > the performance of an error-free program. The state variable 7 is O used to obtain error information. When an error is detected by ALC, a flag is K set and the error code is recorded. Further errors, if they occur, do not ! affect this recorded code. When 7" is read, the error for the given J device is returned and the flag is cleared, so that a further error will # again record its code. If reading 7 returns [] then there has . been no detectable error since the last time 7 (or since the ALC  was initialized). KWhen an error flag is set, results of ALC operations are undefined only if  /: has occurred. In other cases, the command generating the I error is ignored so that it has no effect on ALC state or output buffer M contents. If the error generating command returns a value, it returns zero. J If the generating command modifies values through a pointer argument, no I change is made to these values. These error semantics apply only to ALC < errors, not to system errors such as memory access errors. ./01234567 56.43210/7 .43210//012345667portable provisionalsven.panne@aedion.de81Contains a list of available context extensions. 9KThe application is expected to verify the applicability of an extension or C core function entry point before requesting it by name, by use of  0. Extension entry points can be retrieved using  9;. Entry points can be device specific, but are not context  specific. Using  1 as the device does not guarantee that the entry H point is returned, even if available for one of the available devices. : Enumeration/<token values are device independent, but tokens defined for ; extensions might not be present for a given device. Using   as the A device is legal, but only the tokens defined by the AL core are L guaranteed. Availability of extension tokens depends on the ALC extension. ; Contains the "major.minor"1 specification revision for this implementation. 89:;89:;89:;portable provisionalsven.panne@aedion.de  portable provisionalsven.panne@aedion.de<EValid sound formats. An implementation may expose other formats, see  Sound.OpenAL.ALC.Extensions. for information on determining if additional  formats are supported. <=>?@AB<@?>=AB<@?>==>?@ABportable provisionalsven.panne@aedion.deC=Each source can be in one of four possible execution states: G,  F, E, D. Sources that are either F or E ) are considered active. Sources that are D or G are considered  inactive. Only F- sources are included in the processing. The N implementation is free to skip those processing stages for sources that have O no effect on the output (e.g. mixing for a source muted by zero gain, but not O sample offset increments). Depending on the current state of a source certain H (e.g. repeated) state transition commands are legal NOPs: they will be ! ignored, no error is generated. CDEFG!CGFEDDEFG!portable provisionalsven.panne@aedion.de"#"#portable provisionalsven.panne@aedion.de$$%&'()*+,-./0123456789:;<=>?@ABCDEFG$$)('&%%&'()*EDCBA@?>=<;:9876543210/.-,++,-./0123456789:;<=>?@ABCDEFG portable provisionalsven.panne@aedion.deHGeneral AL error categories. NHAL errors consist of a general error category and a description of what  went wrong. PJOpenAL detects only a subset of those conditions that could be considered M errors. This is because in many cases error checking would adversely impact > the performance of an error-free program. The state variable P  is N used to obtain error information. When an error is detected by AL, a flag is K set and the error code is recorded. Further errors, if they occur, do not ! affect this recorded code. When P $ is read, the error is returned and M the flag is cleared, so that a further error will again record its code. If  reading P  returns []) then there has been no detectable error  since the last time P $ (or since the AL was initialized). JWhen an error flag is set, results of AL operations are undefined only if  I : has occurred. In other cases, the command generating the H error is ignored so that it has no effect on AL state or output buffer M contents. If the error generating command returns a value, it returns zero. J If the generating command modifies values through a pointer argument, no H change is made to these values. These error semantics apply only to AL < errors, not to system errors such as memory access errors. HIJKLMNOP NOHMLKJIP HMLKJIIJKLMNOOP portable provisionalsven.panne@aedion.deQA scalar amplitude multiplier. RR 6 contains the current location of the listener in the H world coordinate system. Any 3-tuple of valid float values is allowed. N Implementation behavior on encountering NaN and infinity is not defined. The  initial position is (H !I ! 0 0 0). SS 8 contains current velocity (speed and direction) of the E listener in the world coordinate system. Any 3-tuple of valid float 1 values is allowed, and the initial velocity is (J "K " 0 0 0).  S  does not affect R . OpenAL does not F calculate the velocity from subsequent position updates, nor does it D adjust the position over time based on the specified velocity. Any H such calculation is left to the application. For the purposes of sound H processing, position and velocity are independent parameters affecting " different aspects of the sounds. S 7 is taken into account by the driver to synthesize the H Doppler effect perceived by the listener for each source, based on the K velocity of both source and listener, and the Doppler related parameters. TT > contains a scalar amplitude multiplier, which is effectively J applied to all sources in the current context. The initial value 1 means # that the sound is unattenuated. A T  value of 0.5 is equivalent M to an attenuation of 6dB. The value zero equals silence (no output). Driver O implementations are free to optimize this case and skip mixing and processing F stages where applicable. The implementation is in charge of ensuring O artifact-free (click-free) changes of gain values and is free to defer actual O modification of the sound samples, within the limits of acceptable latencies. A T : larger than 1 (amplification) is permitted. However, the K implementation is free to clamp the total gain (effective gain per source 0 times listener gain) to 1 to prevent overflow. UU  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 J expects two vectors that are linearly independent. These vectors are not G expected to be normalized. If the two vectors are linearly dependent, 4 behavior is undefined. The initial orientation is (J "K " 0 0 (-1),  J "K "? 0 1 0), i.e. looking down the Z axis with the Y axis pointing  upwards. QRSTURSQTUQRSTU portable provisionalsven.panne@aedion.deV!Contains the name of the vendor. W2Contains information about the specific renderer. VWVWVW portable provisionalsven.panne@aedion.de XJOpenAL currently supports six modes of operation with respect to distance J attenuation, including one that is similar to the IASIG I3DL2 model. The @ application chooses one of these models (or chooses to disable 9 distance-dependent attenuation) on a per-context basis. *The distance used in the formulas for the "clamped" modes below is clamped  to be in the range between referenceDistance and  maxDistance: clamped distance =  max(referenceDistance, min(distance,  maxDistance)) NThe linear models are not physically realistic, but do allow full attenuation M of a source beyond a specified distance. The OpenAL implementation is still 0 free to apply any range clamping as necessary. KWith all the distance models, if the formula can not be evaluated then the M source will not be attenuated. For example, if a linear model is being used  with referenceDistance equal to  maxDistance, then the gain equation will N have a divide-by-zero error in it. In this case, there is no attenuation for  that source. YDExponential Distance clamped model, which is the exponential model, 2 extended to guarantee that for distances below referenceDistance,  gain is clamped. ZGExponential distance rolloff model, modeling an exponential dropoff in ? gain as distance increases between the source and listener. gain = (distance / referenceDistance) ** (-  rolloffFactor) [FLinear Distance clamped model, which is the linear model, extended to & guarantee that for distances below referenceDistance, gain is clamped. \DLinear distance rolloff model, modeling a linear dropoff in gain as 5 distance increases between the source and listener. gain = (1 -  rolloffFactor * (distance - referenceDistance) /  ( maxDistance - referenceDistance)) ]AInverse Distance clamped model, which is essentially the inverse J distance rolloff model, extended to guarantee that for distances below  referenceDistance2, gain is clamped. This mode is equivalent to the  IASIG I3DL2 distance model. ^GInverse distance rolloff model, which is equivalent to the IASIG I3DL2 ! model with the exception that referenceDistance does not imply any  clamping. gain = referenceDistance / (referenceDistance +   rolloffFactor * (distance - referenceDistance)) The referenceDistance/ parameter used here is a per-source attribute D which is the distance at which the listener will experience gain K (unless the implementation had to clamp effective gain to the available  dynamic range).  rolloffFactor) is per-source parameter the application J can use to increase or decrease the range of a source by decreasing or I increasing the attenuation, respectively. The default value is 1. The , implementation is free to optimize for a  rolloffFactor value of 0, C which indicates that the application does not wish any distance ) attenuation on the respective source. _ABypass all distance attenuation calculation for all sources. The : implementation is expected to optimize this situation. `1Contains the current per-context distance model. XYZ[\]^_` X_^]\[ZY` X_^]\[ZYYZ[\]^_` portable provisionalsven.panne@aedion.deabababportable provisionalsven.panne@aedion.decThe abstract buffer type. LA dummy buffer. cdecdecdeportable provisionalsven.panne@aedion.dejIA special case of buffer state is the actual sound sample data stored in I association with the buffer. Applications can specify sample data using  j. FThe data specified is copied to an internal software, or if possible, E hardware buffer. The implementation is free to apply decompression, M conversion, resampling, and filtering as needed. The internal format of the ? buffer is not exposed to the application, and not accessible. HBuffers containing audio data with more than one channel will be played I without 3D spatialization features, these formats are normally used for K background music. Applications should always check for an error condition J after attempting to specify buffer data in case an implementation has to  generate an  ALOutOfMemory or a conversion related ALInvalidValue error. K The application is free to reuse the memory specified by the data pointer  once j; is set. The implementation has to dereference, e.g. copy,  the data while accessing j execution. <=>?@cfghij chi<@?>=fgjfgghiijportable provisionalsven.panne@aedion.der1Contains the name of the default capture device. s<Contains the specifier string for the given capture device. tAContains a list of specifiers for all available capture devices. klmnopqrst klmnopqrst klmnopqrst#portable provisionalsven.panne@aedion.de:  !"#$%&'()*+,-./0123456789:;klmnopqrstportable provisionalsven.panne@aedion.deu+Contains the list of available extensions. v(Contains a version string in the format "\<spec major number\>./<spec  minor number> <#optional vendor version information>/". wKTo verify that a given extension is available for the current context, use  w8. For invalid and unsupported string tokens it contains  ŁD. The extension name is not case sensitive: The implementation will K convert the name to all upper-case internally (and will express extension  names in upper-case). x=To retrieving function entry addresses, applications can use  x. It contains  nullFunPtr" if no entry point with the given 4 name can be found. Implementations are free to use  nullFunPtr if an M entry point is present, but not applicable for the current context. However J the specification does not guarantee this behavior. Applications can use  x< to obtain core API entry points, not just extensions. This L is the recommended way to dynamically load and unload OpenAL DLLs as sound  drivers. yHTo obtain enumeration values for extensions, the application has to use  y> of an extension token. Enumeration values are defined within L the OpenAL name space and allocated according to specification of the core < API and the extensions, thus they are context-independent. yA contains 0 if the enumeration can not be found. The presence of K an enum value does not guarantee the applicability of an extension to the O current context. A non-zero value indicates merely that the implementation is N aware of the existence of this extension. Implementations should not attempt K to use 0 to indicate that the extensions is not supported for the current  context. uvwxyuwxyvuvwxyportable provisionalsven.panne@aedion.dezz: is a simple scaling of source and listener velocities to H exaggerate or deemphasize the Doppler (pitch) shift resulting from the  calculation. Setting z' to a negative value will result in an  ALInvalidValue= error, the command is then ignored. The default value is 1. 4 The implementation is free to optimize the case of z containing 0 zero, as this effectively disables the effect. {{> allows the application to change the reference (propagation) K speed used in the Doppler calculation. The source and listener velocities F should be expressed in the same units as the speed of sound. Setting  {/ to a negative or zero value will result in an ALInvalidValue M error, the command is ignored then. The default value is 343.3 (appropriate B for velocity units of meters and air as the propagation medium). z{z{z{portable provisionalsven.panne@aedion.de|HSpecifies what should happen when the end of a buffer queue is reached. ,When first created, a source will be in the ‚ state. If a  buffer is then attached using !, then the source will enter the  C state. If the first buffer attached to a source is attached using  ›!, then the source will enter the € state. A source of % either state will be reset to state ‚ by setting its  to   A, and attaching any buffer to a streaming source will change the  state to 7. Attempting to queue a buffer on a static source will  result in an ALInvalidOperation error. ƒ*The entity to which the source attributes ‡,  ˆ and • are to be interpreted. †The abstract buffer type. ‡‡: contains the current location of the source in the world B coordinate system. Any 3-tuple of valid float values is allowed. N Implementation behavior on encountering NaN and infinity is not defined. The  initial position is (H !I ! 0 0 0). ˆˆ8 contains current velocity (speed and direction) of the M source in the world coordinate system. Any 3-tuple of valid float values is ' allowed, and the initial velocity is (J "K " 0 0 0). ˆ does  not affect ‡.. OpenAL does not calculate the velocity from N subsequent position updates, nor does it adjust the position over time based M on the specified velocity. Any such calculation is left to the application. M For the purposes of sound processing, position and velocity are independent 7 parameters affecting different aspects of the sounds. ˆ7 is taken into account by the driver to synthesize the H Doppler effect perceived by the listener for each source, based on the K velocity of both source and listener, and the Doppler related parameters. ‰‰> contains a scalar amplitude multiplier for the given source. = The initial value 1 means that the sound is unattenuated. A ‰ L value of 0.5 is equivalent to an attenuation of 6dB. The value zero equals L silence (no output). Driver implementations are free to optimize this case O and skip mixing and processing stages where applicable. The implementation is M in charge of ensuring artifact-free (click-free) changes of gain values and N is free to defer actual modification of the sound samples, within the limits  of acceptable latencies. A ‰: larger than 1 (amplification) is permitted. However, the K implementation is free to clamp the total gain (effective gain per source 0 times listener gain) to 1 to prevent overflow. ŠIf Š contains „", it indicates indicates that the  values specified by ‡, ˆ and • are to H be interpreted relative to the listener position. The initial value is  …@, indicating that those source attributes are to be interpreted ; relative to the world, i.e. they are considered absolute. ‹‹@ indicates whether a source is ready to queue buffers, ready to N use a static buffer, or is in an undetermined state where it can be used for & either streaming or static playback. ŒIf Œ contains }(, it indicates that the source will not  be in the D5 state once it reaches the end of last buffer in the ? buffer queue. Instead, the source will immediately promote to G and  F. The initial value is ~. Œ can be changed on a F source in any execution state. In particular, it can be changed on a  F source. - contains the current buffer object. Setting  to   a 4 buffer object makes it the head entry in the source's queue. Setting  for a source in the D or G state empties the entire A queue, then appends the one buffer specified (or none at all if    was specified). For a source in the F or E state, setting  will result  in the ALInvalidOperation error state being set.  can be applied only  to sources in the G and D states. Specifying an invalid 2 buffer name (either because the buffer name doesn't exist or because that  buffer can'9t be attached to the specified source) will result in an  ALInvalidValue= error while specifying an invalid source name results in an   ALInvalidName error. Setting  to   is a legal way to release - the current buffer queue on a source in the G or D state, I whether the source has just one entry (current buffer) or more. Setting   to   still causes an ALInvalidOperation for any source in  the F or E2 state, consequently it cannot be used to mute or % stop a source. The initial value is  . ŽŽ8 contains the number of buffers in the queue of a given L 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  . 6 contains the number of buffers that have been played N by a given source. Indirectly, this gives the index of the buffer currently N playing. It can be used to determine how much slots are needed for unqueuing  them. On a source in the D( state, all buffers are processed. On a  source in the G2 state, no buffers are processed, all buffers are  pending. It will contain 0 if  has been set to  . : contains two scalar amplitude thresholds between 0 and 1 N (included): The minimum guaranteed gain for this source and the maximum gain H permitted, with initial values 0 and 1, respectively At the end of the N processing of various attenuation factors such as distance based attenuation  and ‰=, the effective gain calculated is compared to these values: JIf the effective gain is lower than the minimum gain, the minimum gain is " applied. This happens before the  listenerGain is applied. If a zero minimum = gain is set, then the effective gain will not be corrected. KIf the effective gain is higher than the maximum gain, the maximum gain is " applied. This happens before the  listenerGain is applied. If the   listenerGain; times the maximum gain still exceeds the maximum gain the K implementation can handle, the implementation is free to clamp. If a zero O maximum gain is set, then the source is effectively muted. The implementation L is free to optimize for this situation, but no optimization is required or  recommended as setting ‰% to zero is the proper way to mute a  source. ‘‘8 is used for distance attenuation calculations based on M 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. ’’8 is used for distance attenuation calculations based on ; inverse distance with rolloff. For distances smaller than “ (and, . depending on the distance model, larger than ‘ ), this will ? scale the distance attenuation over the applicable range. See  Sound.OpenAL.AL.Attenuation0 for details how the attenuation is computed as 5 a function of the distance. The initial value is 1. In particular, ’/ can be set to zero for those sources that are H supposed to be exempt from distance attenuation. The implementation is N encouraged to optimize this case, bypassing distance attenuation calculation  entirely on a persource basis. ““8 is used for distance attenuation calculations based on I 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 H larger than the minimum gain, the minimum gain will have no effect. No F culling is supported. The initial value is the largest representable  . ””? contains the desired pitch shift, where 1 (the initial value) K equals identity. Each reduction by 50 percent equals a pitch shift of -12 L semitones (one octave reduction). Each doubling equals a pitch shift of 12 M semitones (one octave increase). Zero is not a legal value. Implementations F may clamp the actual output pitch range to any values subject to the  implementation's own limits. •If •# does not contain the zero vector (J "K " 0 0 0), the N source is directional. The sound emission is presumed to be symmetric around N the direction vector (cylinder symmetry). Sources are not oriented in full 3 = degrees of freedom, only two angles are effectively needed. FThe zero vector is the initial value, indicating that a source is not M directional. Specifying a non-zero vector will make the source directional. O Specifying a zero vector for a directional source will effectively mark it as  nondirectional. ––; contains the inner and outer angles of the sound cone, in O degrees. The default of 360 for the inner cone angle means that it covers the N entire world, which is equivalent to an omni-directional source. The default O of 360 for the outer cone angle means that it covers the entire world. If the K inner angle is also 360, then the zone for angle-dependent attenuation is  zero. —— contains the factor with which ‰ is multiplied N to determine the effective gain outside the cone defined by the outer angle. 6 The effective gain applied outside the outer cone is ‰ times  — . Changing ‰" affects all directions, i.e. the O 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. ˜˜A contains the playback position, expressed in seconds (the value . will loop back to zero for looping sources).  When setting ˜4 on a source which is already playing, the playback M will jump to the new offset unless the new offset is out of range, in which  case an ALInvalidValue6 error is set. If the source is not playing, then the $ offset will be applied on the next ž call. LThe position is relative to the beginning of all the queued buffers for the J source, and any queued buffers traversed by a set call will be marked as  processed. MThis value is based on byte position, so a pitch-shifted source will have an O exaggerated playback speed. For example, you can be 0.5 seconds into a buffer G having taken only 0.25 seconds to get there if the pitch is set to 2. ™™; contains the playback position, expressed in samples (the M value will loop back to zero for looping sources). For a compressed format, I this value will represent an exact offset within the uncompressed data.  When setting ™+ on a source which is already playing, the M playback will jump to the new offset unless the new offset is out of range,  in which case an ALInvalidValue- 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. LThe position is relative to the beginning of all the queued buffers for the J source, and any queued buffers traversed by a set call will be marked as  processed. šš? contains the playback position, expressed in bytes (the value L will loop back to zero for looping sources). For a compressed format, this N value may represent an approximate offset within the compressed data buffer.  When setting š4 on a source which is already playing, the playback M will jump to the new offset unless the new offset is out of range, in which  case an ALInvalidValue6 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. LThe position is relative to the beginning of all the queued buffers for the J source, and any queued buffers traversed by a set call will be marked as  processed. ›@The application can queue up one or multiple buffer names using  ›;. The buffers will be queued in the sequence in which they  appear in the list. FThis command is legal on a source in any playback state (to allow for , streaming, queuing has to be possible on a F source). LAll buffers in a queue must have the same format and attributes. An attempt K to mix formats or other buffer attributes will result in a failure and an  ALInvalidValue@ error will be thrown. If the queue operation fails, the source J queue will remain unchanged (even if some of the buffers could have been  queued). œLOnce a queue entry for a buffer has been appended to a queue and is pending M processing, it should not be changed. Removal of a given queue entry is not O possible unless either the source is stopped (in which case then entire queue L is considered processed), or if the queue entry has already been processed  (F or E* source). A playing source will enter the D J state if it completes playback of the last buffer in its queue (the same H behavior as when a single buffer has been attached to a source and has  finished playback). The œ7 command removes a number of buffers entries that have F finished processing, in the order of appearance, from the queue. The  operation will fail with an ALInvalidValue error if more buffers are H requested than available, leaving the destination arguments unchanged. LContains the current execution state of the given source. The initial state  of any source is G. Note that the G3 state is not necessarily identical to the initial M state in which a source is created, because the other source attributes are 2 not automatically reset to their initial values. G merely indicates + that the source can be executed using the ž command. A D or  G? source can be reset into the default configuration by using a M sequence of source commands as necessary. As the application has to specify M all relevant state anyway to create a useful source configuration, no reset  command is provided. žž applied to an G# source will promote the source to F, M thus the data found in the buffer will be fed into the processing, starting  at the beginning. ž applied to a F source will restart the K source from the beginning. It will not affect the configuration, and will  leave the source in F- state, but reset the sampling offset to the  beginning. ž applied to a E% source will resume processing using & the source state as preserved at the Ÿ operation. ž applied to a  D source will propagate it to G then to F  immediately. ŸŸ applied to an G source is a legal NOP. Ÿ applied to a  F! source will change its state to E. The source is exempt from - processing, its current state is preserved. Ÿ applied to a E  source is a legal NOP. Ÿ applied to a D source is a legal NOP.    applied to an G source is a legal NOP.   applied to a  F! source will change its state to D. The source is exempt 2 from processing, its current state is preserved.   applied to a E ! source will change its state to D%, with the same consequences as on a  F source.   applied to a D source is a legal NOP. ĄĄ applied to an G source is a legal NOP. Ą applied to  a F! source will change its state to D then G. The L source is exempt from processing: its current state is preserved, with the E exception of the sampling offset, which is reset to the beginning. Ą  applied to a E! source will change its state to G , with the  same consequences as on a F source. Ą applied to an D  source promotes the source to G', resetting the sampling offset to the  beginning. +CDEFG|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą+†‡ˆ‰ƒ…„Š‚€‹|~}ŒŽ‘’“”•–—˜™š›œCGFEDžŸ Ą&|~}}~‚€€‚ƒ…„„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą$portable provisionalsven.panne@aedion.deb<=>?@CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`cfghijuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą%portable provisionalsven.panne@aedion.de˛MNOPJKHIQRSTUVWXYZ[\]^  !"#$%&'()*+,-./0123456789:;<=>?@CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`cfghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą_&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKKLMNOPQRSTUVWXYZZ[\]^_`abcdefghijk l m n o p q r r s t u v w x y z { | } ~  €  ‚ ƒ „ …†‡ˆ‰‰ŠŠ‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙      !"#$%&'()*+,-./012345S6789:;<=>?@ABCDl8EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcd; !e !e "f "fg hi hj hk hl mn mo mp mq mr ms mt mu mv mw mx my mz m{|OpenAL-1.3.1.2Sound.OpenAL.ALC.ContextSound.OpenAL.ALC.DeviceSound.OpenAL.ALC.BasicTypesSound.OpenAL.AL.BasicTypesSound.OpenAL.ALC.ExtensionsSound.OpenAL.ALC.ErrorsSound.OpenAL.AL.FormatSound.OpenAL.AL.SourceSound.OpenAL.AL.ErrorsSound.OpenAL.AL.ListenerSound.OpenAL.AL.StringQueriesSound.OpenAL.AL.AttenuationSound.OpenAL.AL.ALbooleanSound.OpenAL.AL.BufferInternalSound.OpenAL.AL.BufferSound.OpenAL.ALC.CaptureSound.OpenAL.AL.ExtensionsSound.OpenAL.AL.DopplerSound.OpenAL.Configghc-primGHC.BoolSound.OpenAL.ConstantsSound.OpenAL.AL.PeekPokeSound.OpenAL.ALC.ALCbooleanSound.OpenAL.ALC.StringSound.OpenAL.ALC.QueryUtilsbase Data.MaybeSound.OpenAL.AL.SourceStateSound.OpenAL.AL.StringSound.OpenAL.AL.QueryUtilsOpenGL-2.2.2.0'Graphics.Rendering.OpenGL.GL.VertexSpec'Graphics.Rendering.OpenGL.GL.CoordTransSound.OpenAL.ALCSound.OpenAL.AL Sound.OpenALContextDevice ALCdoubleALCfloatALCenumALCsizeiALCuintALCint ALCushortALCshortALCubyteALCbyteALCchar ALCbooleanALdoubleALfloatALenumALsizeiALuintALintALushortALshortALubyteALbyteALchar ALboolean closeDevicealcIsExtensionPresent openDevicedefaultDeviceSpecifierdeviceSpecifierallDeviceSpecifiersContextAttribute StereoSources MonoSourcesSyncRefresh Frequency createContextcurrentContextprocessContextsuspendContextdestroyContextcontextsDevice allAttributesALCErrorCategoryALCOutOfMemoryALCInvalidContextALCInvalidDeviceALCInvalidOperationALCInvalidValueALCInvalidEnumALCError alcErrors alcExtensionsalcProcAddress alcEnumValue alcVersionFormatStereo16Stereo8Mono16Mono8 marshalFormatunmarshalFormat SourceStateStoppedPausedPlayingInitialALErrorCategory ALOutOfMemory ALInvalidNameALInvalidOperationALInvalidValue ALInvalidEnumALErroralErrorsGainlistenerPositionlistenerVelocity listenerGain orientationalVendor alRenderer DistanceModelExponentDistanceClampedExponentDistanceLinearDistanceClampedLinearDistanceInverseDistanceClampedInverseDistance NoAttenuation distanceModelmarshalALbooleanunmarshalALbooleanBuffer marshalBufferunmarshalBuffer BufferData MemoryRegion bufferData NumSamplescaptureOpenDevice captureStartcaptureNumSamplescaptureSamples captureStopcaptureCloseDevicecaptureDefaultDeviceSpecifiercaptureDeviceSpecifierallCaptureDeviceSpecifiers alExtensions alVersionalIsExtensionPresent alProcAddress alEnumValue dopplerFactor speedOfSound LoopingModeLoopingOneShot SourceType StreamingStatic UndeterminedSourceRelativeListenerWorldSourcesourcePositionsourceVelocity sourceGainsourceRelative sourceType loopingModebuffer buffersQueuedbuffersProcessed gainBoundsreferenceDistance rolloffFactor maxDistancepitch direction coneAngles coneOuterGain secOffset sampleOffset byteOffset queueBuffersunqueueBuffers sourceStateplaypausestoprewindTrueFalsealcDestroyContextalcMakeContextCurrentalcProcessContext ALCcontext ALCdevice nullDevice marshalDeviceunmarshalDevice nullContextmarshalContextunmarshalContextal_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_SAMPLESpoke1peek1peek3peek6marshalALCbooleanunmarshalALCboolean withALCString peekALCStringpeekALCStringsNothingIntQueryCaptureSamples MinorVersion MajorVersion AllAttributesAttributesSize StringQueryCaptureDeviceSpecifierCaptureDefaultDeviceSpecifier ExtensionsDeviceSpecifierDefaultDeviceSpecifier getString getStringRawmarshalIntQuery getInteger getIntegervJustunmarshalSourceState withALString peekALString StringNameVersionRendererVendorGetPNameGetSourceState GetByteOffsetGetSampleOffset GetSecOffsetGetConeOuterGainGetConeOuterAngleGetConeInnerAngle GetDirectionGetPitchGetMaxDistanceGetRolloffFactorGetReferenceDistance GetMaxGain GetMinGainGetBuffersProcessedGetBuffersQueued GetBuffer GetLooping GetSourceTypeGetSourceRelativeGetOrientationGetGain GetVelocity GetPositionGetSpeedOfSoundGetDopplerFactorGetDistanceModelmarshalGetPNameVertex3Vector3 nullBuffer*Graphics.Rendering.OpenGL.GL.BufferObjects isObjectNamedeleteObjectNamesgenObjectNames ObjectName%Graphics.Rendering.OpenGL.GL.StateVar$~!$~ makeStateVarmakeSettableStateVar$=!setmakeGettableStateVarget HasGetterGettableStateVar$= HasSetterSettableStateVarStateVar