| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
|
|
|
|
| |
Testing with Generic Software shows that the reverb room rolloff factor applies
to the currently selected distance model, not necessarily an inverse distance
model as described in the EFX docs. Though it should be noted, Generic Software
completely ignores AL_EFFECTSLOT_AUXILIARY_SEND_AUTO, never applies the cones
to the wet gain, and doesn't clamp to AL_MIX_GAIN and AL_MAX_GAIN for the wet
gains. It's unclear if the reverb or source room rolloff factors, or the
initial decay, should be imfluenced by the min or max gain properties.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Even though they're protected by a SeqLock of sorts, it's still UB to read and
write non-atomic vars from different threads. It's fine to do relaxed reads and
writes given the lock though, to help alleviate the cost.
|
|
|
|
|
|
| |
With gcc, mingw uses gnu_printf. With clang, printf is used as it does
not support gnu_printf. Use the internal header to match this properly.
Signed-off-by: Rosen Penev <[email protected]>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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).
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* feat(ALC_SOFT_system_events): Add alcEventIsSupportedSOFT method in ALC_SOFT_system_events unreleased extension
The purpose of this addition (to my collection) are allow to retrieve which events are supported and if events are fully supported or if some case isn't managed for some reason
For exemple only some backends provide system events:
* pipewire -> Full support of extension
* wasapi -> Full support of extension
* pulseaudio -> Support of add and remove devices events only
* coreaudio -> Support of default device change only
* feat(ALC_SOFT_system_events): Fix typo in alext.h
Cf following review : https://github.com/kcat/openal-soft/pull/938#discussion_r1404509828
* feat(ALC_SOFT_system_events): Remove ALC_EVENT_NOT_SUPPORTED_SOFT token
Cf following discussions between this comment : https://github.com/kcat/openal-soft/pull/938#issuecomment-1825876452 to this comment : https://github.com/kcat/openal-soft/pull/938#issuecomment-1826419406
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
This ultimately is to properly distinguish and clarify formats being 32-bit
integer and 32-bit float.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Rather than relying on a fixed-size buffer
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
And clean up some comments
|
| |
|
| |
|
|
|
|
|
| |
While the common use case, convolution can do more than just reverb, and it
nicely shortens the name.
|
|
|
|
| |
Only affects ambisonic (B-Format and UHJ) formats
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
This helps ensure COM is initialized and deinitialized in order relative to
other objects (e.g. ComPtr).
|
|
|
|
|
| |
Otherwise, stopping and restarting without resetting could leave it with
invalid pointers.
|
|
|
|
| |
It's based on the original/stream size, not the ALCdevice's.
|
| |
|
| |
|
| |
|
| |
|
| |
|