6071 Commits

Author SHA1 Message Date
Chris Robinson
45378fe687 Remove the unused FOAOut EffectTarget 2019-02-22 22:03:04 -08:00
Chris Robinson
5b35e60a98 Apply ambisonic upsampling on reverb output as needed
This isn't the greatest thing since it splits the A-to-B-Format transform from
the panning transform. The A-to-B and HF scale mixes are also not as optimal as
they could be, since they can't use the main mixer functions (wrong buffer line
length).

It does, however, get rid of the final use of the FOAOut buffer, so the
upsampling post-process is no longer needed.
2019-02-22 21:53:45 -08:00
Chris Robinson
6a3c10d850 Ensure reverb fading doesn't end with less than 4 samples 2019-02-22 02:15:22 -08:00
Chris Robinson
6a2cf96448 Avoid some unnecessary local variables 2019-02-22 01:00:57 -08:00
Chris Robinson
01ac6e2e56 Combine reverb transform matrices one column at a time 2019-02-21 19:05:20 -08:00
Chris Robinson
7a9d67934f Mix B-Format sources directly to the dry buffer
Now the only thing that utilizes FOAOut is reverb output.
2019-02-21 17:48:08 -08:00
Chris Robinson
1eea3cb2d1 Remove RESTRICT from the bandsplitter process method
The compiler can see there's no aliasing with the local variables, and the
input/output buffers are handled sequentially one element at a time anyway.
2019-02-21 17:37:02 -08:00
Chris Robinson
169a11dffc Add some preliminary fields for mix-time ambisonic upsampling 2019-02-21 04:57:56 -08:00
Chris Robinson
8ac2d34706 Allow processing some effects in higher order ambisonics
Reverb notably is still only first-order (any higher order channels are
dropped, and it writes to FOAOut). But others, like the equalizer, work on all
available channels.
2019-02-21 04:23:01 -08:00
Chris Robinson
a964890537 Add helpers to get the channel count from an ambisonic order 2019-02-21 04:05:49 -08:00
Chris Robinson
a35255291f Fix unused parameter warning 2019-02-21 03:54:12 -08:00
Chris Robinson
8d2d7c63da Get rid of the MAX_EFFECT_CHANNELS macro 2019-02-21 03:52:54 -08:00
Chris Robinson
462e320847 Make sure the B2A matrix has enough values for the input count 2019-02-21 03:31:24 -08:00
Chris Robinson
d95e144c48 Remove some now-unnecessary ReverbState fields 2019-02-21 03:07:36 -08:00
Chris Robinson
4b4041319d Pass the number of input channels to EffectState::process 2019-02-21 02:57:39 -08:00
Chris Robinson
7e00f646d9 Add a method to get the row of an ambisonic identity transform 2019-02-21 02:13:30 -08:00
Chris Robinson
615446d6d5 Ensure the device's mAmbiOrder is always set appropriately
The Dry target is always ambisonic, so set its order correctly.
2019-02-21 01:23:11 -08:00
Chris Robinson
3966665ca3 Store effect slots in groups of 64
Now that their wet buffers are allocated dynamically, the ALeffectslot object
itself is rather small.
2019-02-20 22:00:26 -08:00
Chris Robinson
c43381d811 Allocate the effect slot wet buffer dynamically 2019-02-20 21:01:08 -08:00
Chris Robinson
77ba61ecb3 Partially handle non-periphonic reverb input 2019-02-19 22:55:43 -08:00
Chris Robinson
87902fa3b2 Use the right macro for the number of reverb panning gains 2019-02-19 20:51:10 -08:00
Chris Robinson
194fcb6bb7 Rename MAX_AMBI_COEFFS and MAX_AMBI2D_COEFFS 2019-02-19 15:39:33 -08:00
Chris Robinson
a75bc26173 Reduce some indenting 2019-02-19 02:30:01 -08:00
Chris Robinson
2c04095d22 Apply the upsampler's all-pass when mixing the band-split samples 2019-02-19 02:05:35 -08:00
Chris Robinson
d713f5f828 Clean up some AmbiUpsampler initialization 2019-02-19 01:59:30 -08:00
Chris Robinson
69ab36cc14 Avoid a temp buffer for the distance compensation delay 2019-02-17 00:43:10 -08:00
Chris Robinson
c95d6a5d8c Apply phase correction to the ambisonic decoder HRIRs
This preserves the original phase of the HRIR frequencies for decoding the
ambisonic signal. This should help prevent extra coloration from the band-
splitter used to scale the HF response.
2019-02-16 22:57:38 -08:00
Chris Robinson
69f6f56160 Avoid using internal AL[u]int64 types 2019-02-11 12:16:58 -08:00
Chris Robinson
2fc8461c14 Don't check for __int64 2019-02-11 11:44:35 -08:00
Chris Robinson
dac609b29a Move some more functions to alnumeric.h 2019-02-11 11:31:31 -08:00
Chris Robinson
21aaa18c50 Get rid of the FAM_SIZE macro 2019-02-11 11:14:34 -08:00
Chris Robinson
995c9649cb Move some number-related stuff to a separate header 2019-02-11 11:07:06 -08:00
Chris Robinson
69d8c6546d Use std::arrays for HRIR coeffs and values 2019-02-07 08:38:49 -08:00
Chris Robinson
b371862fb2 Simply setting a couple indices 2019-02-04 22:17:28 -08:00
Chris Robinson
05cdc2cb30 Use relaxed memory ordering for initializing atomic_flags 2019-02-04 21:28:37 -08:00
Chris Robinson
e104f580b3 Use a unique_ptr to store the loaded HrtfEntry 2019-02-04 21:22:43 -08:00
Chris Robinson
b7b4cfae2b Fixed alffplay underrun recovery timing 2019-02-04 21:22:43 -08:00
kcat
367191cbfb
Merge pull request #269 from gongminmin/FixForVS2019
Fix compiling problems on VS2019 with vc142 toolset
2019-02-04 21:22:16 -08:00
Minmin Gong
41b9d473a2 Fix compiling problems on VS2019 with vc142 toolset
Msvc142 in VS2019 preview 2 doesn't allow std::atomic_flag to be initialized by a bool. Call test_and_set in the constructors instead.
2019-02-04 20:03:18 -08:00
Chris Robinson
c25433986a Add missing include 2019-01-29 14:14:52 -08:00
Chris Robinson
613145e900 Calculate the correct evidx for the HRTF B-Format decoder 2019-01-29 03:52:28 -08:00
Chris Robinson
44d72942fb Load and use all available HRTF fields 2019-01-29 00:42:18 -08:00
Chris Robinson
4c740636c2 Pass the distance to GetHrtfCoeffs 2019-01-28 22:22:34 -08:00
Chris Robinson
2d93a9cdb1 Collect HRTF field info into a struct 2019-01-28 20:43:34 -08:00
Chris Robinson
df5d238e3d Clean up calculating HRIR indices to blend 2019-01-28 19:39:45 -08:00
Chris Robinson
b3fe540c49 Don't normalize HRIRs per-field 2019-01-27 15:50:02 -08:00
Chris Robinson
e55f9b42e9 Partially handle ambisonics in alffplay
This is currently really only applicable to Opus-encoded files. It assumes
AmbiX (SN3D normalization, ACN ordering) and only comes into play when the
channel layout is blank. FFmpeg/libavcodec doesn't have a way to detect
B-Format input or what normalization and ordering it uses. Note in particular
.amb files do not play correctly (libavcodec seems to apply a default channel
layout for 4-channel wav-type files, regardless of its channel mask value).
2019-01-27 14:53:46 -08:00
Chris Robinson
d7af17ab87 Round the calculated field distance in makehrtf 2019-01-27 14:35:58 -08:00
Chris Robinson
f98a24fb8a Don't try to clean up the async ringbuffer if it isn't allocated 2019-01-26 19:29:26 -08:00
Chris Robinson
f5e17bafea Fix applied scalars for B-Format source mixing 2019-01-26 17:33:57 -08:00