| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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).
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
The syntax parser for GCC 8 (and earlier?) fails when these attributes are in
certain places.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Also avoid putting larger buffers on the stack.
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
And downgrade an ERR to a WARN
|
| |
|
|
|
|
|
| |
To more efficiently prepare the panning coefficients. Also avoid making a stack
copy of the matrix to reuse as the target.
|
|
|
|
| |
Seems inline initializer lists become garbage when stored in a span.
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
|
|
|
| |
And slightly adjust the Hann window.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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]>
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Instead of silence, to ensure the number of samples written to PulseAudio is
the same as the number mixed/rendered.
|
| |
|
| |
|
| |
|
| |
|