aboutsummaryrefslogtreecommitdiffstats
path: root/alc/effects
Commit message (Collapse)AuthorAgeFilesLines
* Be less messy with PFFFTChris Robinson2023-12-092-26/+14
| | | | | Remove a 1-element array for an over-allocated struct array. Also add a wrapper struct for C++.
* Clean up some more clang-tidy warningsChris Robinson2023-12-082-9/+9
|
* Fix some clang-tidy warningsChris Robinson2023-12-082-23/+24
|
* Adjust the secondary early reflectionsChris Robinson2023-12-021-6/+7
| | | | | | | | | | | | | | This reduces the delay to provide a direct (no delay) line from the early reflections to the late reverb delay buffer. This also reduces the early reflection output gain by half. The reasoning here is that EFX seems to expect only one set of initial reflections, while we use two. And being close enough in time, nearly doubles the amount of output energy. This does seem to improve the "harshness" of certain reverbs, smoothing the difference between reverbs, and makes it more like other implementations (still some work to do on late reverb, though).
* Avoid extra multipliesChris Robinson2023-12-011-3/+3
|
* Fix some commentsChris Robinson2023-11-251-3/+2
|
* Do proper spatial reflection in reverbChris Robinson2023-11-221-16/+55
| | | | | | Instead of "bouncing" the lines by indexing backwards for a not-quite-spatial- opposite, do a proper mix that moves each line response to its true spatial opposite position.
* Compensate the late delay tap by the early delay bufferChris Robinson2023-11-221-1/+5
|
* Don't combine both early reflection taps for the late reverbChris Robinson2023-11-211-2/+3
| | | | | | | | | | | | | | | | | | | It doesn't make much sense to include both early reflections to feed the late reverb, since it increases the total energy in the reverb decay. This better fits with the design described in papers for this type of reverb, and seems to better match volume levels of hardware EAX/EFX reverb (though there are still some apparent differences). Note that this adds a bit more delay to the late reverb, specifically EARLY_LINE_LENGTHS[0] * density_mult. This can be compensated for somewhat by reducing the late reverb delay by that amount (clamping to a minimum of 0). Alternatively, adjust the delay lines for the second early tap to have a zero- delay pass-through line with 3 delay lines (as opposed to the current 4 delay lines), as suggested by the paper "ADAPTING ARTIFICIAL REVERBERATION ARCHITECTURES FOR B-FORMAT SIGNAL PROCESSING". Although doing so may require additional adjustments to the delay lengths and gains to avoid the 0-length lines accumulating unattenuated copies of the signal for the early reflection output.
* Support 32-bit int sample storageChris Robinson2023-11-151-0/+1
|
* Use PFFFT for the pitch shifterChris Robinson2023-10-251-13/+36
|
* Use a byte for the channel indexChris Robinson2023-10-221-2/+2
|
* Remove an outdated commentChris Robinson2023-10-201-3/+0
|
* Avoid some unique and wrapper typesChris Robinson2023-10-151-58/+33
|
* Use the same stereo angles in convolution as normal mixingChris Robinson2023-10-151-19/+15
|
* Use a span for a known array length instead of a raw pointerChris Robinson2023-10-158-16/+16
|
* Ensure some variables are the sameChris Robinson2023-10-151-21/+21
| | | | And clean up some comments
* Avoid an extra copy to calculate the convolution FFTChris Robinson2023-10-141-6/+5
|
* Read the correct half-frequency binChris Robinson2023-10-141-1/+1
|
* Add convolution effect properties to rotate ambisonic responsesChris Robinson2023-10-121-3/+23
|
* Attenuate the convolution filter instead of the filter resultChris Robinson2023-10-111-9/+8
|
* Make and use a separate zconvolve method without scalingChris Robinson2023-10-111-8/+7
| | | | | | When you're doing hundreds or thousands of separate zconvolve calls into the same buffer, it's more efficient to do the multiply once at the end instead of in each call.
* Use PFFFT for the convolution effectChris Robinson2023-10-061-40/+92
|
* Replace some more unnecessary angles with vectorsChris Robinson2023-09-181-47/+77
|
* Store channel positions as vectors instead of anglesChris Robinson2023-09-145-11/+11
| | | | To avoid extraneous conversions between angles and vectors
* Approximate sin for the reverb modulator LFOChris Robinson2023-09-111-2/+7
| | | | | | | Reverb needs to prioritize efficiency since it's expected that an app may use multiple reverb effects simultaneously, and each individual effect may process twice during a pipeline transition. Approximating sin helps by replacing a per- sample libc call that we don't need to be perfectly accurate.
* Combine multiple divisions into oneChris Robinson2023-09-101-8/+11
|
* Include the early and late reverb gain for the decay fade timerChris Robinson2023-09-051-3/+30
|
* Use a more accurate ring modulator waveform generatorChris Robinson2023-08-291-37/+76
| | | | | | This restricts available frequencies to fit an integer number of samples per cycle, but ensures no unintended harmonics from misaligned samples w.r.t. sawtooth and square waveforms.
* Avoid some large stack buffersChris Robinson2023-08-281-27/+18
|
* Fix some typos (#872)Dirk Stolle2023-07-041-2/+2
|
* Use inline variables instead of functions with static variablesChris Robinson2023-06-141-12/+12
|
* Avoid using al::vector unnecessarilyChris Robinson2023-05-122-5/+5
|
* Use deduction guides instead of helper functions for spansChris Robinson2023-05-052-5/+5
|
* Use std::byte instead of a custom al::byteChris Robinson2023-05-041-2/+1
|
* Simplify effect state buffer handling someChris Robinson2023-04-0414-49/+47
|
* Use macros for the likely/unlikely attributesChris Robinson2023-03-011-2/+2
| | | | | The syntax parser for GCC 8 (and earlier?) fails when these attributes are in certain places.
* Support MSADPCM samples in the mixerChris Robinson2023-02-141-0/+1
|
* Support IMA4 ADPCM as a mixing voice formatChris Robinson2023-02-141-0/+4
|
* 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
|
* Improve performance calculating reverb panningChris Robinson2023-02-051-10/+11
|
* Use a cubic resampler for the reverb modulator offsetChris Robinson2023-02-051-17/+61
|
* 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.