Name AL_SOFT_source_spatialize Contributors Chris Robinson Contact Chris Robinson (chris.kcat 'at' gmail.com) Status Complete Dependencies This extension is for OpenAL 1.1. Overview This extension provides more control over the spatialization behavior of sources. By default, OpenAL will spatialize sources playing a mono buffer and not spatialize sources playing a multi-channel buffer. Spatialization features include positional panning, distance attenuation, cone-related attenuation, and doppler effects. This extension allows such features to be enabled and disabled per-source independently of the buffer format. Issues Q: Most 3D audio systems don't allow panning non-mono sources due to problems with correctly rendering the soundfield in 3D space. How is this dealt with? A: When a spatialized source plays a non-mono buffer and has a non-0 distance from the listener, the channels are down-mixed to mono and panned as appropriate (that is, all channels occupy the same spot in 3D space). An exception is the LFE channel of buffer formats that include one. The LFE input is sent separately to LFE output as normal, rather than being down-mixed and panned. It is still influenced by distance and cone attenuation however. When such a source occupies the same position as the listener, it is played with separated channels as if it was not spatialized (including being unaffected by listener orientation). But it still receives doppler effects and cone-related attenuation. Q: When a multi-channel source is down-mixed for spatialization, is any extra attenuation applied from multiple channels occupying the same space? A: Typically down-mixing multi-channel to mono sees a gain correction of 1/num_channels to preserve peak amplitude, or sqrt(1/num_channels) to preserve the apparent loudness. However, not applying the given correction gives full control to the application to do what it wants without OpenAL in the way. This extension does not apply gain correction when down-mixing a panned multi-channel source. This allows applications better control over how (if at all) to attenuate when channels mix together. Q: What happens to a mono source that is played without spatizalization? A: A mono source without spatialization will not have distance or cone attenuation, directional panning, or doppler effects, as expected. Its perceived location may either be centered (i.e. equal energy from all directions) or front-center, but its perceived location should be consistent with a 0-distance spatialized mono source. New Procedures and Functions None. New Tokens Accepted as the parameter of alSourcei, alSourceiv, alGetSourcei, and alGetSourceiv: AL_SOURCE_SPATIALIZE_SOFT 0x1214 Accepted as the of the AL_SOURCE_SPATIALIZE_SOFT property: AL_AUTO_SOFT 0x0002 Additions to Specification Controlling Source Spatialization A source may have spatialization features applied depending on its AL_SOURCE_SPATIALIZE_SOFT property. Valid values for the property are AL_FALSE, AL_TRUE, and AL_AUTO_SOFT. When set to AL_FALSE, spatialization features are never applied to the source. When set to AL_TRUE, they are always applied. When set to AL_AUTO_SOFT, they are applied if playing a buffer with one channel, and not if the buffer has more than one channel. The default is AL_AUTO_SOFT. When spatialization features are applied on a source playing a non-mono buffer, if the source occupies the same 3D position as the listener the buffer's channels are placed around the listener according to the format (e.g. a stereo buffer has the left channel 30 degrees left of front, and the right channel 30 degrees right of front). This panning is NOT effected by the source direction or listener orientation. If the source does not occupy the same 3D position as the listener, the proper panning direction is calculated and all channels of the buffer will be panned to that direction (effectively down-mixing the buffer to mono dynamically). The buffer's channels will also receive a gain correction of 1/num_channels when panned, to preserve peak amplitude of the mixed channels. An exception is the LFE channel in buffer formats that include one. The LFE channel may be sent to the LFE output as normal and not be part of the panned mix, however it is still attenuated according to the source distance and cone. Errors An AL_INVALID_VALUE error is generated if the value specified for AL_SOURCE_SPATIALIZE_SOFT is not AL_FALSE, AL_TRUE, or AL_AUTO_SOFT.