| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
| |
Add pitch shifter effect using standard phase vocoder, based on work of Stephan Bernsee. Only mono signal processing by now.
|
| |
|
|
|
|
|
| |
It wasn't properly removing all duplicates on insertion, and didn't remove the
first effect slot when removing them.
|
| |
|
| |
|
|
|
|
| |
Also avoid using the generic V/V0 macros for them
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
Unfortunately does not include the Lookup* functions, which need the full type
declaration to offset the pointer.
|
| |
|
|
|
|
| |
And make the ID a simple index into it (1-base, to avoid ID 0).
|
| |
|
| |
|
|
|
|
| |
Also don't use inheritance with FPUCtl.
|
|
|
|
|
| |
Also keep all free property update structs together in the context instead of
per-object.
|
| |
|
|
|
|
|
|
|
|
| |
The HF absorption is applied given the source distance, as relative to the
source's immediate environment, with additional absorption being applied given
the room/reverb environment. This does double up the amount of absorption
compared to the dry path, but it can be assumed the initial reflections travel
a longer distance.
|
|
|
|
|
|
|
|
| |
This properly accounts for the room rolloff factor for normal air absorption
(which makes it none by default, like distance attenuation), and uses the
reverb's decay time, decay hf ratio, decay hf limit, and room air absorption
properties to calculate an initial hf decay with the WetGainAuto flag. This
mirrors the behavior of the initial distance decay.
|
| |
|
|
|
|
|
|
|
|
| |
If the requested number of mono and stereo sources exceeds 256, the source
limit will be expanded. Any config file setting overrides this. If the device
is reset to have fewer sources than are currently allocated, excess sources
will remain and be usable as normal, but no more can be generated until enough
are delated to go back below the limit.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
They were causing GCC's built-in atomic cmpxchg to complain.
|
| |
|
|
|
|
|
|
|
|
| |
Note that this now also causes all playing sources to update when an effect
slot is updated. This is a bit wasteful, as it should only need to re-update
sources that are using the effect slot (and only when a relevant property is
changed), but it's good enough. Especially with deferring since all playing
sources are going to get updated on the process call anyway.
|
|
|
|
|
|
|
|
| |
This allows us to not have to play around with trying to avoid duplicate state
pointers, since the reference count will ensure they're deleted as appropriate.
The only caveat is that the mixer is not allowed to decrement references, since
that can cause the object to be freed (which the mixer code is not allowed to
do).
|
|
|
|
|
| |
This is mostly just reorganizing the effects to call the Construct method which
initializes the ref count.
|
|
|
|
|
| |
The source's voice holds a copy of the last properties it received, so listener
updates can make sources recalculate internal properties from that stored copy.
|
| |
|
|
|
|
|
| |
It's been disabled forever, and I have no idea how to make it work properly.
Better to just redo it when making something that works.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
If an unapplied update was superceded, it would be placed in the freelist with
its effect state object intact. This would cause another update with the same
effect state object to be placed into the freelist as well, or worse, cause it
to get deleted while in use when the container had its effect state cleared.
|
|
|
|
|
| |
This fixes a potential missed state change if an update with a new state got
replaced with one that doesn't.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This necessitates a change in how source updates are handled. Rather than just
being able to update sources when a dependent object state is changed (e.g. a
listener gain change), now all source updates must be proactively provided.
Consequently, apps that do not utilize any deferring (AL_SOFT_defer_updates or
alcSuspendContext/alcProcessContext) may utilize more CPU since it'll be
filling out more update containers for the mixer thread to use.
The upside is that there's less blocking between the app's calling thread and
the mixer thread, particularly for vectors and other multi-value properties
(filters and sends). Deferring behavior when used is also improved, since
updates that shouldn't be applied yet are simply not provided. And when they
are provided, the mixer doesn't have to ignore them, meaning the actual
deferring of a context doesn't have to synchrnously force an update -- the
process call will send any pending updates, which the mixer will apply even if
another deferral occurs before the mixer runs, because it'll still be there
waiting on the next mixer invocation.
There is one slight bug introduced by this commit. When a listener change is
made, or changes to multiple sources while updates are being deferred, it is
possible for the mixer to run while the sources are prepping their updates,
causing some of the source updates to be seen before the other. This will be
fixed in short order.
|
| |
|
| |
|
| |
|