| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
A base that contains the API-agnostic data, with ALCdevice and ALCcontext being
for AL-specific data.
|
| |
|
|
|
|
|
|
|
|
| |
For the second-order decoder. Since the delays are adjusted to avoid most high
frequency phase cancelation, the energy-based scaling with the number of
channels used creates a significant HF increase. Using the RMS-based scaling
seems to create a more level response, though it's not perfect either. More
testing and measurements may be needed.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
If pthread_setschedparam fails or is unavailable.
|
|
|
|
|
|
|
|
| |
The inverted atomic flag replaces test_and_set+clear with test_and_clear+set,
essentially inverting the flag status. This makes more logical sense for
flagging dirty state, which is less confusing than flagging clean state. The
one caveat is ATOMIC_FLAG_INIT (or default construction in C++20) initializes
the state to true rather than false.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
For HOA signals, the number of responses used with slightly varying delays
causes noticeable attenuation in the higher frequencies because of destructive
phase interference. This is not a result of minimum phase alignment (attempts
to compensate for minimum phase had negligible results), nor does it affect
first-order signals (which only has 4 unique responses on each side).
This alternate alignment is only used when doing second-order rendering for
HRTF output, which is not the default with HRTF. It's likely not very ideal,
but it's necessary to prevent second-order rendering with HRTF from sounding
muffled.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Also add the SOFT moniker to the new macros
|
| |
|
|
|
|
|
| |
This should also have an adjustment for the shelf filter. Although it's not
clear what the appropriate adjustments should be.
|
|
|
|
| |
Currently only 2-channel UHJ, which gets treated as stereo.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
This uses a bit more memory (each voice needs to hold buffers for the
deinterleaved samples of each channel, instead of just one buffer for the
current channel being mixed on the device), but it will allow for handling
formats that need or prefer their channels decoded together.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
And vice-versa.
|
|
|
|
|
|
|
|
|
|
|
|
| |
NULL devices are still checked, but invalid non-NULL device handles will invoke
undefined behavior, as will attempting to close the device while the function
is being executed (modifying the device state while the function is being
called was inadvertently already UB, and will now remain so).
This change is solely so alcRenderSamplesSOFT can be used in a buffer callback,
and other places that need functions to be real-time safe. The verification
requires locking to access the device list, which isn't allowed in a real-time
callback.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
It will not be called while the device is running. If the first call succeeds,
a subsequent call that happens to fail must leave the existing device state as
it was so it can be resumed.
This is a rough first pass. It will fail when trying to re-open the same device
which can only be opened once (for instance, with direct hardware access, on
hardware that doesn't do its own mixing). Some backends won't guarantee the new
device is usable until the reset() or start() call.
|
| |
|
| |
|
|
|
|
| |
Also don't keep trying to find the path+name if it fails the first time.
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is mostly for the SampleConverter, used by some capture backends. When
recording at really low rates, like 5512hz, with a device capturing at a higher
rate like 44100hz or 48000hz, it hits the filter's downscaling limit and
produces pure silence.
In such cases, it's better to just accept some aliasing noise so that the app
will still get some recognizable audio. The alternative would be to scale the
desired rate by 2x, 3x, etc until it's above the bsinc limit, then take every
2nd, 3rd, etc sample of the result as if by an extra simpler resampler pass.
|
| |
|
|
|
|
|
|
|
|
| |
Port names seem to be structured as <device_name:channel_name> or
<app_name:channel_name>. I'm not sure if this is always the case, but it seems
some other apps expect something like this.
Also fix the port selection to exclude MIDI ports and allow non-physical ports.
|
| |
|
|
|
|
| |
Hopefully Oboe will retain any unread samples and let them be read.
|
| |
|
| |
|
| |
|