49 template<
class Traits = VBAPStandartTraits, auto cLUTType = VBAP::ELUTSize::KB_983>
56 template<
class Traits = VBAPStandartTraits, auto cLUTType = VBAP::ELUTSize::KB_983>
64 template<
class Traits, auto cLUTType>
83 &Traits::GetChannelVector,
137 void PrecomputeAzimuth();
147 Dimensions mDimensions;
164 return "Failed to initialize Panning3D, provided invalid target channel map. Panning3D requires channel map with top channels.";
167 return "Trying to initialize with < 3 channels, 3D panning is not possible for such layout.";
184#define JPL_ADD_CENTER_VS 0
198 const float s2 =
s *
s;
199 const float c2 =
c *
c;
200 const float dphi = JPL_TWO_PI /
static_cast<float>(
numPoints);
201 const float dot = std::clamp(s2 * std::cos(
dphi) +
c2, -1.0f, 1.0f);
220 const float s2 =
s *
s;
221 const float c2 =
c *
c;
227 const float rhs = std::clamp((
dotM -
c2) / s2, -1.0f, 1.0f);
238 template<
class Traits, auto cLUTType>
258 ? JPL_PI / (mDimensions.
NumRings + 1)
274 template<
class Traits, auto cLUTType>
275 inline void Panning3D<Traits, cLUTType>::SourceLayout::PrecomputeAzimuth()
296 const float thetaTerm = JPL_TWO_PI / mDimensions.NumSamplesPerRing;
297 static const simd
rampFirst(0.5f, 1.5f, 2.5f, 3.5f);
310 template<
class Traits, auto cLUTType>
311 inline void Panning3D<Traits, cLUTType>::SourceLayout::GenerateSpreadCap(std::span<Vec3Type>
outBuffer,
float spreadNormalized)
const
400 template<
class Traits, auto cLUTType>
404 static constexpr size_t BUF_SIZE = cMaxNumSamples;
412 static const simd
ramp(1.0f, 2.0f, 3.0f, 4.0f);
517 template<
class Traits, auto cLUTType>
523 template<
class Traits, auto cLUTType>
530 template<
class Traits, auto cLUTType>
580#if defined(JPL_DEBUG) || defined(JPL_TEST)
#define JPL_ASSERT(inExpression,...)
Main assert macro, usage: JPL_ASSERT(condition, message) or JPL_ASSERT(condition)
Definition ErrorReporting.h:76
#define JPL_ENSURE(inExpression,...)
Define ENSURE.
Definition ErrorReporting.h:90
#define JPL_ERROR_TAG(tag, message)
Definition ErrorReporting.h:124
#define JPL_ADD_CENTER_VS
Definition VBAPanning3D.h:184
Definition ChannelMap.h:150
Forward declaration.
Definition DirectionEncoding.h:111
static constexpr size_t cAxisRange
Definition DirectionEncoding.h:122
Definition VBAPLUT3D.h:68
Definition VBAPanning3D.h:66
static std::optional< const char * > IsValidTargetChannelMap(ChannelMap channelMap)
Definition VBAPanning3D.h:161
typename Base::Vec3Type Vec3Type
Definition VBAPanning3D.h:71
static constexpr size_t cLUTSize
Definition VBAPanning3D.h:75
Octahedron16Bit LUTCodec
Definition VBAPanning3D.h:74
Definition PannerBase.h:227
typename Traits::Vec3Type Vec3Type
Aliases to avoid typing wordy templates.
Definition PannerBase.h:230
Definition VBAPLUT3D.h:106
JPL_INLINE constexpr bool IsPositiveAndBelow(T1 value, T2 below) noexcept
Definition Math.h:140
JPL_INLINE std::pair< T, T > SinCos(T value) noexcept
Definition Math.h:164
Forward declaration.
Definition DummySpeakers.h:31
Definition AcousticMaterial.h:36
JPL_INLINE constexpr auto GetNumSIMDOps(std::unsigned_integral auto count) noexcept
Get number of SIMD operations that can fit into the count
Definition SIMDMath.h:51
JPL_INLINE constexpr auto FloorToSIMDSize(std::unsigned_integral auto count) noexcept
Floor count to 4-wide simd vector.
Definition SIMDMath.h:33
OctahedronEncoding< Octahedron::Precision8bits > Octahedron16Bit
Definition DirectionEncoding.h:103
JPL_INLINE constexpr auto GetSIMDTail(std::unsigned_integral auto count) noexcept
Get the remaining tail from count that won't fill a simd vector.
Definition SIMDMath.h:45
std::uint32_t uint32
Definition Core.h:311
JPL_INLINE std::optional< const char * > IsValidSourceChannelMap(ChannelMap channelMap)
Definition PannerBase.h:193
constexpr T RoundUpBy4(T n) noexcept
Definition Bits.h:52
std::pmr::memory_resource * GetDefaultMemoryResource() noexcept
Definition Memory.h:42
JPL_INLINE constexpr auto GetDiv2Tail(std::unsigned_integral auto count) noexcept
Definition SIMDMath.h:81
Vec3BufferView< simd > Vec3SIMDBufferView
View into a Vec3-like SoA buffer, holding separate arrays of Vec3 components X, Y,...
Definition Vec3Buffer.h:56
JPL_INLINE simd min(const simd &a, const simd &b) noexcept
Element-wise min.
Definition SIMD.h:1813
JPL_INLINE constexpr auto FloorToDiv2(std::unsigned_integral auto count) noexcept
Floor count to divisible by 2.
Definition SIMDMath.h:75
Definition ChannelMap.h:268
Definition VBAPLUT3D.h:112
Definition VBAPanning3D.h:107
uint32 NumSamplesPerRing
Number samples (virtual soruces) to generate for each ring of a spread cap.
Definition VBAPanning3D.h:112
uint32 NumRings
Number of rings to generate for a spread cap.
Definition VBAPanning3D.h:109
static Dimensions For(uint32 numChannels, float maxGeoDistanceDot=std::numeric_limits< float >::max())
Calculate dimensions for numChannels with maxGeoDistanceDot between points.
Definition VBAPanning3D.h:531
JPL_INLINE size_t GetSize() const noexcept
Get total number of virtual sources for these dimentions.
Definition VBAPanning3D.h:115
Implementation of the source layout for 2D panning.
Definition VBAPanning3D.h:91
static JPL_INLINE constexpr size_t GetMaxNumVirtualSources() noexcept
Definition VBAPanning3D.h:524
static constexpr size_t cMaxNumRings
Definition VBAPanning3D.h:98
JPL_INLINE float GetMinDistanceBetweenSamples() const noexcept
Definition VBAPanning3D.h:129
JPL_INLINE Dimensions GetDimensions() const noexcept
Definition VBAPanning3D.h:122
static constexpr size_t cMaxNumSamples
Definition VBAPanning3D.h:99
static constexpr size_t cMaxNumVirtualSources
Definition VBAPanning3D.h:100
typename Base::VBAPLayoutBase LayoutBase
Definition VBAPanning3D.h:92
JPL_INLINE size_t GetNumVirtualSources() const noexcept
Definition VBAPanning3D.h:518
Definition PannerBase.h:281
Definition Vec3Buffer.h:89
JPL_INLINE void store(float *mem) const
Store values from simd to provided memory location.
Definition SIMD.h:573
static constexpr std::size_t size() noexcept
Get number of element of the vector.
Definition SIMD.h:97