36#include <initializer_list>
38#include <memory_resource>
70 return lhs.SourceMap ==
rhs.SourceMap &&
lhs.TargetMap ==
rhs.TargetMap;
78 static_assert(
sizeof(size_t) >=
sizeof(uint64_t));
79 static_assert(std::convertible_to<uint64_t, size_t>);
82 struct hash<
JPL::SourceLayoutKey>
91 struct hash<
JPL::PanningCacheKey>
96 static_assert(
sizeof(key.
Handle) == 4);
134 template<
class VBAPTraits>
139 template<
class Key,
class T>
270 template<
class VBAPTraits>
277 if (!
panner.IsInitialized())
288 template<
class VBAPTraits>
292 return it != mPanners.end() ? &(
it->second) :
nullptr;
295 template<
class VBAPTraits>
297 -> std::shared_ptr<const SourceLayout>
299 if (!
layout.SourceMap.IsValid())
313 JPL_ERROR_TAG(
"PanningService",
"Failed to initialize SourceLayout");
315 mInitializedSourceLayouts.erase(
layout);
325 template<
class VBAPTraits>
335 template<
class VBAPTraits>
349 template<
class VBAPTraits>
371 template<
class VBAPTraits>
373 -> std::span<const float>
375 auto cache = mPanningCache.find(
381 if (
cache != mPanningCache.end())
382 return cache->second;
387 template<
class VBAPTraits>
402 CreatePanningDataFor(
431 template<
class VBAPTraits>
434 return mSourceLayouts.erase(
source)
435 + mPanningParams.erase(
source)
442 template<
class VBAPTraits>
448 if (!mSourceLayouts.contains(
source))
450 JPL_ERROR_TAG(
"PanningService",
"AddSoruceTargets failed because source handle wasn't initialized before adding source targets. "
451 "This is likely because the provided source handle was released previously and is no longer valid.");
468 template<
class VBAPTraits>
477 template<CVec3 Vec3Type>
483 static const Vec3Type
fallbackDir = Normalized(Vec3Type(0, 1, -
static_cast<Float
>(5
e-2)));
487 static_cast<Float
>(1.0))
496 template<
class VBAPTraits>
505 for (
auto&& [
key,
gains] : mPanningCache)
513 const auto&
params = mPanningParams[
key.Handle];
530 .SourceDirection = Impl::SanitizeSourceDir(
position.Location),
542 .SourceDirection = Impl::SanitizeSourceDir(
position.Location),
561 template<
class VBAPTraits>
564 auto data = mSourceLayouts.find(
source);
565 return data == mSourceLayouts.end() ?
nullptr : data->second;
568 template<
class VBAPTraits>
578 template<
class VBAPTraits>
#define JPL_ASSERT(inExpression,...)
Main assert macro, usage: JPL_ASSERT(condition, message) or JPL_ASSERT(condition)
Definition ErrorReporting.h:76
#define JPL_ERROR_TAG(tag, message)
Definition ErrorReporting.h:124
Definition ChannelMap.h:150
constexpr uint32 GetChannelMask() const
Definition ChannelMap.h:194
Definition PanningService.h:136
JPL_INLINE std::shared_ptr< const SourceLayout > GetPanningDataFor(SourceLayoutKey layout) const
Definition PanningService.h:326
JPL_INLINE const PannerType * CreatePannerFor(ChannelMap targetChannelMap)
Definition PanningService.h:271
JPL_INLINE bool CreateChannelGainsFor(ChannelMap targetChannelMap, ChannelMap sourceChannelMap, std::pmr::vector< float > &outChannelGains) const
Definition PanningService.h:336
JPL_INLINE bool CreateChannelGainsFor(ChannelMap targetChannelMap, PanEffectHandle source)
Definition PanningService.h:350
JPL_INLINE bool EvaluateDirection(PanEffectHandle source, const Position< Vec3Type > &position, ESpatializationType spatialziationType)
Definition PanningService.h:497
typename PannerType::SourceLayoutType SourceLayout
Definition PanningService.h:146
typename PannerType::PanUpdateData PanData
Definition PanningService.h:147
typename VBAPTraits::Vec3Type Vec3Type
Definition PanningService.h:142
JPL_INLINE std::span< const float > GetChannelGainsFor(PanEffectHandle source, ChannelMap targetChannelMap) const
Definition PanningService.h:372
JPL_INLINE bool SetPanningEffectSpread(PanEffectHandle effect, float spread)
Definition PanningService.h:579
PanningService & operator=(const PanningService &)=delete
VBAPTraits PannerTraits
Definition PanningService.h:143
JPL_INLINE bool SetPanningEffectParameters(PanEffectHandle effect, const PanEffectParameters ¶meters)
Definition PanningService.h:569
typename PannerType::PanUpdateDataWithOrientation PanDataWithOrientation
Definition PanningService.h:148
JPL_INLINE const PannerType * GetPannerFor(ChannelMap targetChannelMap) const
Definition PanningService.h:289
JPL_INLINE PanEffectHandle InitializePanningEffect(const PanEffectInitParameters &initParameters)
High level API.
Definition PanningService.h:388
PanningService(const PanningService &)=delete
JPL_INLINE std::shared_ptr< const SourceLayout > GetSourceLayoutFor(PanEffectHandle source) const
Definition PanningService.h:562
JPL_INLINE std::shared_ptr< const SourceLayout > CreatePanningDataFor(SourceLayoutKey layout, PanEffectHandle source={})
Definition PanningService.h:296
JPL_INLINE bool ReleasePanningEffect(PanEffectHandle source)
Definition PanningService.h:432
Definition PannerBase.h:227
typename PanType::SourceLayout SourceLayoutType
Definition PannerBase.h:303
JPL_INLINE constexpr bool IsNearlyEqual(T a, T b, T tolerance=JPL_FLOAT_EPS_V< T >) noexcept
Definition Math.h:152
JPL_INLINE constexpr auto Abs(const T &value) noexcept
Standard abs is not constexpr in C++20.
Definition Math.h:87
Definition AcousticMaterial.h:36
@ None
Definition DistanceAttenuation.h:34
JPL_INLINE void reset_pmr_shared(std::shared_ptr< T > &sharedPtr, Y *ptr)
Definition Memory.h:221
JPL_INLINE void SetY(Vec3Type &v, Vec3FloatType< Vec3Type > value) noexcept
Definition Vec3Traits.h:40
typename StandartPanner::SourceLayoutType StandartSourceLayout
Definition PanningService.h:43
typename StandartPanner::PanUpdateDataWithOrientation StandartPanDataWithOrientation
Definition PanningService.h:45
IDType< PanningServiceIDTag > PanEffectHandle
Definition PanningService.h:48
std::pmr::memory_resource * GetDefaultMemoryResource() noexcept
Definition Memory.h:42
ESpatializationType
Determines spatialized source channel oritentation.
Definition PanningService.h:107
JPL_INLINE constexpr bool operator==(const Vec2 &A, const Vec2 &B) noexcept
Definition MinimalVec2.h:59
JPL_INLINE auto GetY(const Vec3Type &v) noexcept
Definition Vec3Traits.h:36
JPL_INLINE simd min(const simd &a, const simd &b) noexcept
Element-wise min.
Definition SIMD.h:1813
typename StandartPanner::PanUpdateData StandartPanData
Definition PanningService.h:44
Definition ChannelMap.h:268
static constexpr IDType New() noexcept
Definition IDType.h:44
Definition PanningService.h:122
PanEffectParameters EffectParameters
Definition PanningService.h:127
ChannelMap SourceChannelMap
Definition PanningService.h:123
std::span< const ChannelMap > TargetChannelMaps
Definition PanningService.h:124
Definition PanningService.h:116
float Spread
Definition PanningService.h:118
float Focus
Definition PanningService.h:117
Definition PanningService.h:51
JPL_INLINE constexpr bool operator==(const PanningCacheKey &other) const
Definition PanningService.h:55
ChannelMap TargetChannelMap
Definition PanningService.h:53
PanEffectHandle Handle
Definition PanningService.h:52
Definition PanningService.h:47
Location and orientation in one place.
Definition Position.h:80
Definition PanningService.h:62
ChannelMap SourceMap
Definition PanningService.h:63
ChannelMap TargetMap
Definition PanningService.h:64
Definition PannerBase.h:247
Parameters to update VBAP data for a source.
Definition PannerBase.h:238
size_t operator()(const JPL::PanningCacheKey &key) const
Definition PanningService.h:93
size_t operator()(const JPL::SourceLayoutKey &key) const
Definition PanningService.h:84