| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is the start of the refactoring for holding separable per-version EAX
effects. Currently the effect state is stored in the effect object, which is
instantiated per-type. This makes it impossible for different effects to be
assigned on different EAX versions for a given effect slot (e.g. if the app
sets a Chorus effect on EAX4 Slot0, it would fail to get or set the EAX1/2/3
reverb properties since it's a Chorus effect object).
Seperate per-version effects will allow for switching the OpenAL effect by
switching versions. This will provide an extra benefit in being able to delay
OpenAL effect initialization until some EAX version has been set, avoiding an
extraneous reverb and/or chorus processor for apps that only query some EAX
properties but don't set anything (or which only use Slot0, leaving Slot1 with
a defaulted Chorus effect running).
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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 AL_BUFFER query should only return the buffer that was set on a static
source, but some apps used it to detect when a current buffer of a streaming
source changed instead of AL_BUFFERS_PROCESSED.
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
Instead of recalculating it all the time, even for sources that don't use
callback buffers.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
A null effect slot can't be deleted, so we don't need to make sure it's set to
change before returning.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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]>
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
This starts a source at a particular device clock time, rounded to the nearest
sample (really, 4th sample for SIMD reasons), allowing to start a sound at a
particular point in the output instead of the next update.
Unlike using negative offsets, this is not affected by pitch/velocity.
|
| |
|
| |
|
|
|
|
|
|
| |
This allows a voice/source to start with a delay, more accurately than simply
waiting to call alSourcePlay. The delay is affected by pitch and velocity,
making it useful to simulate distant sounds that take time to be heard.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
If src_occlusion_mb is 0, it'll be multiplied with whatever the ratio ends up
being, which will result in 0 anyway. A number of uses also already check the
occlusion value before calling the method.
|
| |
|
|
|
|
|
|
|
| |
* Fix possible C2084 compiler error
Guiddef.h uses a separate header guard to define the GUID operators, in the current codebase this won't cause any issue, but i got such error while fiddling a bit with the program and including something that ended up including all the various windows headers, that ended up including Guiddef.h, causing the error as by not finding the macro declared, it ended up declaring the inline operators as well.
* Update api.h
|