aboutsummaryrefslogtreecommitdiffstats
path: root/alc/effects
Commit message (Collapse)AuthorAgeFilesLines
* 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.
* 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-166-18/+18
|
* Rename some members for clarityChris Robinson2023-01-121-22/+22
|
* Rename some lambda parameters to avoid shadowing warningsChris Robinson2023-01-055-15/+15
|
* Add and use mixers that process one input and output channelChris Robinson2023-01-054-8/+8
|
* Simplify handling effect output for spatial effectsChris Robinson2023-01-045-83/+140
| | | | | | | | | | | | Effects are given a 3D ambisonic buffer of the same order as the device, for processing surround sound. Effects that pass input channels to matching output channels as it processes them don't need to mix each input channel to all output channels. At most, an input channel may mix to a different output channel, if the target buffer uses a different channel layout, and need a gain adjustment, if it uses a different scaling. With a 2D output buffer, a number of channels can be skipped altogether.
* Handle UHJ better with convolution reverbChris Robinson2023-01-011-44/+66
| | | | | | It's now decoded to B-Format while being FFT'd, and processed as B-Format. Again, not that UHJ should really ever be used for convolution, but it's a valid format someone may want to use despite the overhead from converting it.
* Avoid some explicit casts and referencesChris Robinson2023-01-011-2/+1
|
* Avoid duplicate code to update the reverb delay linesChris Robinson2022-12-221-14/+7
|
* Include the reverb delay times in the fade sample countChris Robinson2022-12-201-24/+15
|
* Make sure to update the input filters with partial updatesChris Robinson2022-12-201-1/+11
|
* Clean up some reverb mixing loopsChris Robinson2022-12-191-21/+18
|
* Turn a static member function into a lambda where it's usedChris Robinson2022-12-191-31/+29
| | | | And clean up some parameters
* Remove a redundant commentChris Robinson2022-12-181-4/+1
|
* Use a size_t for the reverb decay fade countChris Robinson2022-12-181-2/+2
|
* Clear the old reverb pipeline buffer when it's doneChris Robinson2022-12-171-9/+46
|
* Rework reverb fading to toggle between pipelinesChris Robinson2022-12-171-475/+360
| | | | | | | | | | | | When non-simple properties are changed, the active reverb pipeline is switched and the new parameters set on that one. The main process function will then be set to fade out input on the old pipeline, fade in input on the new pipeline, then process and mix both pipelines. After some number of samples (calculated from its decay time), the old pipeline will stop processing. This should improve the transition from a highly reverberant environment by not harshly interpolating to the new environment, as well as better handle changes to the all-pass and T60 filters.
* Avoid manually specifying FFT template parametersChris Robinson2022-12-142-5/+5
|
* Avoid using a macro to wrap standard attributesChris Robinson2022-12-061-1/+1
|
* Avoid some uses of the LIKELY/UNLIKELY macrosChris Robinson2022-12-051-1/+1
|