aboutsummaryrefslogtreecommitdiffstats
path: root/alc
Commit message (Collapse)AuthorAgeFilesLines
...
* Commit deferred EAX properties in alcProcessContextChris Robinson2023-03-162-14/+11
|
* Recognize I24 and I32 formats from OboeChris Robinson2023-03-151-1/+15
|
* Allow Oboe to resample when requesting a sample rateChris Robinson2023-03-151-0/+3
|
* Don't change the context's EAX version on every set/get callChris Robinson2023-03-112-44/+9
|
* Don't commit EAX updates in applyAllUpdatesChris Robinson2023-03-111-8/+8
| | | | | | | | | | To avoid alcProcessContext causing deferred EAX properties to be committed. This simplifies updates when EAX has been initialized, but never or rarely used. Committing now always occurs in EAXSet when the property is non-deferred, updating the OpenAL object(s) with it (with OpenAL's updates then being applied based on the context's defer state).
* Add queries for the buffer byte/sample/sec lengthChris Robinson2023-03-071-0/+1
| | | | | | | | | | | | | These used to exist with the now-defunct AL_SOFT_buffer_samples extension, this just restores those queries without extra baggage. The sample length query are necessary when handling ADPCM buffers, since the size/channels*8/bits calculation is incorrect with ADPCM. 'Bits' is usually reported as 4 since most samples in a block are stored as nibbles, but that's only approximate and doesn't account for the block header. The average number of bits per sample in an ADPCM block can't be represented as an integer, so the more blocks there are stored in the buffer, the more inaccurate the calculation becomes.
* Use macros for the likely/unlikely attributesChris Robinson2023-03-017-80/+81
| | | | | The syntax parser for GCC 8 (and earlier?) fails when these attributes are in certain places.
* Add aLaw formats to AL_SOFT_UHJ_exChris Robinson2023-02-271-0/+3
|
* Add AL_SOFT_UHJ_ex to the extension listChris Robinson2023-02-263-10/+8
|
* Add formats for UHJ with muLaw, and ADPCM for 2-channel UHJChris Robinson2023-02-261-1/+11
| | | | | | | | | | ADPCM doesn't seem to be well defined for more than two channels, even though there doesn't seem to be any issue with simply increasing the channel step over interleaved data (ffmpeg refuses to create IMA4 or MSADPCM files with more than two channels, and its decoder behaves oddly different when channels > 2). So IMA4 and MSADPCM can only safely handle 2-channel UHJ. There's no problem with muLaw supporting 2-, 3-, or 4-channel UHJ though.
* Support MSADPCM samples in the mixerChris Robinson2023-02-141-0/+1
|
* Support IMA4 ADPCM as a mixing voice formatChris Robinson2023-02-141-0/+4
|
* Separate decoding and mixing from resamplingChris Robinson2023-02-121-6/+0
|
* Check a string for NULL before calling strtoullChris Robinson2023-02-111-8/+9
|
* Use a span to hold the cubic table referenceChris Robinson2023-02-101-1/+1
|
* Use better panning positions for the frequency shifter effectChris Robinson2023-02-081-2/+7
|
* Use better panning positions for the chorus effectChris Robinson2023-02-081-56/+61
| | | | Also avoid putting larger buffers on the stack.
* Make a table constexprChris Robinson2023-02-071-6/+5
|
* Rename the bsinc table variablesChris Robinson2023-02-071-2/+2
|
* Use an interpolated FIR filter for cubic resamplingChris Robinson2023-02-061-0/+11
| | | | | | Similar to how the bsinc filters work, but optimized for 4-point filtering. At least the SSE version is notably faster than calculating the coefficients in real time.
* Avoid using auto for lambda parametersChris Robinson2023-02-062-2/+2
|
* Improve performance calculating reverb panningChris Robinson2023-02-051-10/+11
|
* Use a cubic resampler for the reverb modulator offsetChris Robinson2023-02-051-17/+61
|
* Don't set an EAX version by default for sourcesChris Robinson2023-02-051-9/+0
| | | | | | | | | Presuming sources start in a neutral state for EAX effects, that is they're not affected by EAX by default, there's no need to set an active EAX state for one until the app sets an EAX property on it. Since the deferred and immediate properties are stored independently per-version, they can always be set to defaults, and simply not have a particular version committed as active until the app sets an EAX property, which will inherently set the active version.
* Distinguish a couple log messagesChris Robinson2023-01-301-3/+3
| | | | And downgrade an ERR to a WARN
* Transpose the ambisonic rotation matrix and helper coefficientsChris Robinson2023-01-261-39/+32
|
* Transpose the ambisonic voice mixing matrixChris Robinson2023-01-251-34/+41
| | | | | To more efficiently prepare the panning coefficients. Also avoid making a stack copy of the matrix to reuse as the target.
* Use explicit arrays for the remix table target mixesChris Robinson2023-01-241-16/+53
| | | | Seems inline initializer lists become garbage when stored in a span.
* Use the object serial ID from PipeWire when availableChris Robinson2023-01-241-21/+47
| | | | | | | | | | | Using the node ID as a target is deprecated in newer versions of PipeWire. The serial ID is a monotonic 64-bit integer ID, incremeneted for every object created, so is guaranteed to always refer to the same target (until it wraps around, which I suppose isn't expected/allowed to happen), compared to the 32-bit node ID which I guess allows reuse. We could instead use the target node's name instead of the serial ID, but an integer is nicer to manage than a string.
* Increase the pitch shifter oversample factor to 8Chris Robinson2023-01-191-38/+37
| | | | | | And use 32-bit float processing. Float precision doesn't seem to be detrimental to the overall quality, while 8x oversampling seems to help against the harmonics.
* Minor code refactor for the frequency shifter effectChris Robinson2023-01-191-47/+50
|
* Improve the output scaling of the pitch shifterChris Robinson2023-01-191-1/+1
| | | | | | For tones than land exactly on a frequency bin, which are subject to the least amount of error when not adjusted, this produces a level that more closely matches the original input.
* Don't return a large-ish array on the stackChris Robinson2023-01-191-15/+17
|
* Slightly improve phase wrapping in the pitch shifterChris Robinson2023-01-191-10/+11
|
* Limit pitch shifter pitch between 0.5 and 2.Chris Robinson2023-01-181-1/+1
| | | | | | The current algorithm isn't designed to go beyond that. The course tuning property is limited to that range as well, though the fine tuning property could potentially extend it out by half a semitone.
* Use constexpr variables instead of macrosChris Robinson2023-01-181-51/+57
|
* Use a variable to handle a long value definitionChris Robinson2023-01-181-2/+3
|
* Make a variable for a reused valueChris Robinson2023-01-172-3/+3
|
* Use a better frequency bin target for pitch shiftingChris Robinson2023-01-172-23/+47
| | | | And slightly adjust the Hann window.
* Change a couple macros to constexpr variablesChris Robinson2023-01-1610-33/+33
|
* Precalculate reused scale factorsChris Robinson2023-01-151-1/+1
|
* clang-tidy cleanups (#800)Rosen Penev2023-01-159-21/+21
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * clang-tidy: use bool literals Found with modernize-use-bool-literals Signed-off-by: Rosen Penev <[email protected]> * clang-tidy: replace std::bind with lambdas Found with modernize-avoid-bind Signed-off-by: Rosen Penev <[email protected]> * clang-tidy: use data() instead of pointer stuff Found with readability-container-data-pointe Signed-off-by: Rosen Penev <[email protected]> * clang-tidy: use empty() Found with readability-container-size-empty Signed-off-by: Rosen Penev <[email protected]> * clang-tidy: remove static in anon namespace Found with readability-static-definition-in-anonymous-namespace Signed-off-by: Rosen Penev <[email protected]> * clang-tidy: remove const return Found with readability-const-return-type Signed-off-by: Rosen Penev <[email protected]> Signed-off-by: Rosen Penev <[email protected]>
* Don't explicitly try to spawn servers by defaultChris Robinson2023-01-142-2/+2
|
* Don't use doubles for upsampling B-Format transformsChris Robinson2023-01-131-3/+3
|
* Avoid using a non-0 span length over nullptrChris Robinson2023-01-131-17/+32
|
* Write proper samples when starting the PulseAudio streamChris Robinson2023-01-131-17/+3
| | | | | Instead of silence, to ensure the number of samples written to PulseAudio is the same as the number mixed/rendered.
* Avoid a dead storeChris Robinson2023-01-131-1/+0
|
* Avoid single-use static class method wrappersChris Robinson2023-01-131-81/+46
|
* Avoid unnecessary uses of make_optionalChris Robinson2023-01-133-28/+30
|
* Rename some members for clarityChris Robinson2023-01-121-22/+22
|