aboutsummaryrefslogtreecommitdiffstats
path: root/OpenAL32/alSource.c
Commit message (Collapse)AuthorAgeFilesLines
* Use a different method for HRTF mixingChris Robinson2014-11-221-13/+2
| | | | | | | | | | | | | | | | | | | | | | | This new method mixes sources normally into a 14-channel buffer with the channels placed all around the listener. HRTF is then applied to the channels given their positions and written to a 2-channel buffer, which gets written out to the device. This method has the benefit that HRTF processing becomes more scalable. The costly HRTF filters are applied to the 14-channel buffer after the mix is done, turning it into a post-process with a fixed overhead. Mixing sources is done with normal non-HRTF methods, so increasing the number of playing sources only incurs normal mixing costs. Another benefit is that it improves B-Format playback since the soundfield gets mixed into speakers covering all three dimensions, which then get filtered based on their locations. The main downside to this is that the spatial resolution of the HRTF dataset does not play a big role anymore. However, the hope is that with ambisonics- based panning, the perceptual position of panned sounds will still be good. It is also an option to increase the number of virtual channels for systems that can handle it, or maybe even decrease it for weaker systems.
* Support B-Format source rotation with AL_ORIENTATIONChris Robinson2014-10-311-7/+99
|
* Rename the source's Orientation to DirectionChris Robinson2014-10-311-9/+9
|
* Rename activesource to voiceChris Robinson2014-08-211-34/+33
|
* Use an array of objects for active sources instead of pointersChris Robinson2014-08-211-43/+32
|
* Use a NULL source for inactive activesourcesChris Robinson2014-08-211-25/+29
| | | | Also only access the activesource's source field once per update.
* Update COPYING to the latest ↵François Cami2014-08-181-2/+2
| | | | https://www.gnu.org/licenses/old-licenses/lgpl-2.0.txt to fix the FSF' address Fix the FSF' address in the source
* Fix some lock ordering to avoid potential deadlocksChris Robinson2014-08-031-8/+8
|
* Use an ATOMIC_INIT macro instead of ATOMIC_LOAD_UNSAFEChris Robinson2014-08-031-3/+3
|
* Make the source's buffer queue head and current queue item atomicChris Robinson2014-07-311-55/+67
|
* Always set the active source's update methodChris Robinson2014-07-261-5/+7
| | | | | | | If the source is stopped, changes its buffer, then played again quickly, the source will never be removed from the active source list causing the update method to remain as it was. If the buffer was changed between mono and multi- channel, this causes it to use the wrong method.
* Explicitly pass the address of atomics and parameters that can be modifiedChris Robinson2014-07-261-27/+27
|
* Add macros for generic atomic functionalityChris Robinson2014-07-221-27/+27
|
* Add a source radius property that determines the directionality of a soundChris Robinson2014-07-111-0/+2
| | | | | | | | | At 0 distance from the listener, the sound is omni-directional. As the source and listener become 'radius' units apart, the sound becomes more directional. With HRTF, an omni-directional sound is handled using 0-delay, pass-through filter coefficients, which is blended with the real delay and coefficients as needed to become more directional.
* Avoid aliasing an int arrayChris Robinson2014-07-051-4/+4
|
* Add an option to get the length of a source's full queueChris Robinson2014-05-251-0/+95
| | | | | This simplifies keeping track how much a source has buffered in its queue, which reduces a bunch of unnecessary book keeping the app would have to do.
* Use the first non-0-length buffer when starting a sourceChris Robinson2014-05-221-1/+1
|
* Apply high-pass source filters as neededChris Robinson2014-05-171-0/+12
|
* Add a couple asserts to ensure a proper bufferChris Robinson2014-05-141-0/+3
| | | | | | It should not be possible for a playing or paused source to not have a valid buffer, but Clang's static analyzer doesn't know that. Hopefully an assert will convince it.
* Make RefCount a non-integer typeChris Robinson2014-05-141-3/+3
| | | | | It should only be accessed through the appropriate functions to ensure proper atomicity.
* Add HF Reference as a filter propertyChris Robinson2014-05-141-0/+4
|
* Make LOWPASSFREQREF a float valueChris Robinson2014-05-111-2/+2
|
* Store the filter reference frequency in the sourceChris Robinson2014-05-111-0/+2
|
* Avoid locking the mixer when unqueueing buffersChris Robinson2014-05-111-4/+16
|
* Avoid accessing the source's buffer queue head multiple timesChris Robinson2014-05-111-17/+16
|
* Use a struct to store the source's direct gain/gainhf propertiesChris Robinson2014-05-111-6/+6
|
* Avoid locking the mixer while queueing buffers onto a source.Chris Robinson2014-05-101-24/+34
|
* Add a missing pointer initChris Robinson2014-05-101-3/+3
|
* Explicit init the source queue and current_buffer pointersChris Robinson2014-05-101-0/+3
|
* Use a RWLock to help protect the source's buffer queueChris Robinson2014-05-101-35/+56
| | | | | In some instances this allows to to remove the device/mixer lock, or reduce how long it's held.
* Don't explicitly store the BuffersInQueueChris Robinson2014-05-101-9/+14
|
* Store the current buffer queue item, rather than played buffer countChris Robinson2014-05-101-77/+63
|
* Better pack HRTF mixing propertiesChris Robinson2014-05-031-3/+3
|
* Add gain stepping to the send mixersChris Robinson2014-03-231-1/+9
|
* Move the step counter and moving flag to DirectParamsChris Robinson2014-03-231-2/+2
|
* Store the HrtfState directly in the DirectParamsChris Robinson2014-03-231-25/+15
|
* Store some source mixing parameters in the active source structChris Robinson2014-03-191-16/+19
|
* Use a separate struct for tracking active sourcesChris Robinson2014-03-181-8/+18
|
* Add an extension to support MSADPCM buffer formatsChris Robinson2014-03-041-0/+23
|
* Store the original frame size alignment in the bufferChris Robinson2014-03-031-4/+6
|
* Fix retrieving source propertiesChris Robinson2013-12-091-6/+6
|
* Use C99 inline in more placesChris Robinson2013-11-041-0/+3
|
* Rename alcGetLatency to ALCdevice_GetLatencyChris Robinson2013-11-021-2/+2
|
* Use an ALCbackend object to access playback backendsChris Robinson2013-10-271-2/+2
| | | | | | | This is the start of a backend redesign. Currently, a wrapper object is used to avoid having to redo all the backends at once, but they should slowly be converted to derive from ALCbackend instead. The ALCbackend interface can change as needed.
* Return only true or false from the source getters and settersChris Robinson2013-10-071-112/+105
|
* Remove al_try from alSource.cChris Robinson2013-10-071-325/+304
|
* Use a simpler U64 macro to make 64-bit constantsChris Robinson2013-10-061-1/+1
|
* Use a separate value for the maximum buffer channelsChris Robinson2013-07-231-1/+1
| | | | | | | Unlike the device, input buffers are accessed based on channel numbers instead of enums. This means the maximum number of channels they hold depends on the number of channels any one format can have, rather than the total number of recognized channels. Currently, this is 8 for 7.1.
* Silence some clang warningsChris Robinson2013-06-051-2/+2
|
* Simplify al_try codeChris Robinson2013-03-241-15/+13
|