32 inline void Add(
float* dest,
const float* source,
uint32 destChannel,
uint32 sourceChannel,
36 source += sourceChannel;
37 const uint32 totalSamples = numFrames * destNumChannels;
38 for (
uint32 di = 0, si = 0; di < totalSamples; di += destNumChannels, si += sourceNumChannels)
39 dest[di] += source[si];
45 const uint32 totalSamples = numFrames * destNumChannels;
46 for (
uint32 di = 0, si = 0; di < totalSamples; di += destNumChannels, ++si)
47 dest[di] += source[si];
52 const simd gainVe(gain);
56 (
simd(dest) *= gainVe).store(dest);
67 const float delta = (gainEnd - gainStart) /
static_cast<float>(numFrames);
69 static const simd ramp(1.0f, 2.0f, 3.0f, 4.0f);
70 static const simd four(4.0f);
72 simd deltaVec = delta * ramp;
77 (
simd(dest) *= ramp).store(dest);
90 uint32 destNumChannels,
uint32 sourceNumChannels,
uint32 numFrames,
float gainStart,
float gainEnd)
94 source += sourceChannel;
97 const uint32 totalDestSamples = numFrames * destNumChannels;
100 const float delta = (gainEnd - gainStart) /
static_cast<float>(numFrames);
103 for (
uint32 di = 0, si = 0; di < totalDestSamples; di += destNumChannels, si += sourceNumChannels, gainStart += delta)
105 dest[di] += source[si] * gainStart;
113 const uint32 totalDestSamples = numFrames * numChannels;
116 const float delta = (gainEnd - gainStart) /
static_cast<float>(numFrames);
119 for (
uint32 si = 0; si < totalDestSamples; si += numChannels, gainStart += delta)
121 for (
uint32 ch = si; ch < numChannels; ++ch)
123 dest[ch] += source[ch] * gainStart;
131 for (
uint32 si = 0, di = 0; si < numSamples; si += numChannels, ++di)
133 for (
uint32 ch = 0; ch < numChannels; ++ch)
134 dest[di] += source[si + ch];
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
std::uint32_t uint32
Definition Core.h:311
void AddAndApplyGainRamp(float *dest, const float *source, uint32 destChannel, uint32 sourceChannel, uint32 destNumChannels, uint32 sourceNumChannels, uint32 numFrames, float gainStart, float gainEnd)
Definition ChannelMixing.h:89
void Add(float *dest, const float *source, uint32 destChannel, uint32 sourceChannel, uint32 destNumChannels, uint32 sourceNumChannels, uint32 numFrames)
Definition ChannelMixing.h:32
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
void ApplyGain(float *dest, uint32 numFrames, float gain)
Definition ChannelMixing.h:50
void ApplyGainRamp(float *dest, uint32 numFrames, float gainStart, float gainEnd)
Definition ChannelMixing.h:65
void DownmixToMono(float *dest, const float *source, uint32 numChannels, uint32 numSamples)
Definition ChannelMixing.h:129
Minimal 4-wide 32-bit float vector implementation for SIMD.
Definition SIMD.h:60
JPL_INLINE float get_lane() const noexcept
Get float component by index known at compile-time.
Definition SIMD.h:610
static constexpr std::size_t size() noexcept
Get number of element of the vector.
Definition SIMD.h:97