22 template <
class SampleType = DefaultUSoundWaveSampleType>
48 , SampleDuration(0.0f)
53 NumSamples =
Other.NumSamples;
54 NumFrames =
Other.NumFrames;
55 NumChannels =
Other.NumChannels;
56 SampleRate =
Other.SampleRate;
57 SampleDuration =
Other.SampleDuration;
59 RawPCMData.
Reset(NumSamples);
75 SampleDuration = ((
float)NumFrames) / SampleRate;
77 RawPCMData.
Reset(NumSamples);
80 if constexpr(std::is_same_v<SampleType, float>)
84 else if constexpr(std::is_same_v<SampleType, int16>)
87 for (
int32 SampleIndex = 0; SampleIndex < NumSamples; SampleIndex++)
95 for (
int32 SampleIndex = 0; SampleIndex < NumSamples; SampleIndex++)
97 RawPCMData[SampleIndex] = (SampleType)(
InBufferPtr[SampleIndex]);
108 SampleDuration = ((
float)NumFrames) / SampleRate;
110 RawPCMData.
Reset(NumSamples);
113 if constexpr(std::is_same_v<SampleType, int16>)
117 else if constexpr(std::is_same_v<SampleType, float>)
125 for (
int32 SampleIndex = 0; SampleIndex < NumSamples; SampleIndex++)
127 RawPCMData[SampleIndex] = (SampleType)(
InBufferPtr[SampleIndex]);
135 NumSamples =
Other.NumSamples;
136 NumFrames =
Other.NumFrames;
137 NumChannels =
Other.NumChannels;
138 SampleRate =
Other.SampleRate;
139 SampleDuration =
Other.SampleDuration;
141 RawPCMData.
Reset(NumSamples);
150 template<
class OtherSampleType>
153 NumSamples =
Other.NumSamples;
154 NumFrames =
Other.NumFrames;
155 NumChannels =
Other.NumChannels;
156 SampleRate =
Other.SampleRate;
157 SampleDuration =
Other.SampleDuration;
159 RawPCMData.
Reset(NumSamples);
162 if constexpr(std::is_same_v<SampleType, OtherSampleType>)
167 else if constexpr(std::is_same_v<SampleType, int16> && std::is_same_v<OtherSampleType, float>)
172 else if constexpr(std::is_same_v<SampleType, float> && std::is_same_v<OtherSampleType, int16>)
180 for (
int32 SampleIndex = 0; SampleIndex < NumSamples; SampleIndex++)
182 RawPCMData[SampleIndex] = (SampleType)
Other.RawPCMData[SampleIndex];
196 SampleDuration = ((
float)NumFrames) / SampleRate;
198 RawPCMData.
Reset(NumSamples);
205 template<
class OtherSampleType>
210 if constexpr(std::is_same_v<SampleType, OtherSampleType>)
216 if constexpr(std::is_same_v<SampleType, int16> && std::is_same_v<OtherSampleType, float>)
221 else if constexpr(std::is_same_v<SampleType, float> && std::is_same_v<OtherSampleType, int16>)
231 RawPCMData[StartIndex + SampleIndex] =
InputBuffer[SampleIndex];
238 NumFrames = NumSamples / NumChannels;
239 SampleDuration = (
float)NumFrames / SampleRate;
243 template<
class OtherSampleType>
261 SampleDuration = 0.0f;
306 return SampleDuration;
320 const SampleType* SrcBuffer =
GetData();
324 for (
int32 FrameIndex = 0; FrameIndex < NumFrames; FrameIndex++)
326 for (
int32 ChannelIndex = 0; ChannelIndex < NumChannels; ChannelIndex++)
336 NumSamples = NumFrames * NumChannels;
339 RawPCMData.
Reset(NumSamples);
347 if constexpr(std::is_same_v<SampleType, float>)
350 float ClampMin =
Ceiling * -1.0f;
352 for (
int32 SampleIndex = 0; SampleIndex < RawPCMData.
Num(); SampleIndex++)
354 RawPCMData[SampleIndex] =
static_cast<SampleType
>(FMath::Clamp<float>(RawPCMData[SampleIndex], ClampMin,
Ceiling));
357 else if constexpr(std::is_same_v<SampleType, int16>)
365 for (
int32 SampleIndex = 0; SampleIndex < NumSamples; SampleIndex++)
367 RawPCMData[SampleIndex] = FMath::Clamp<int16>(RawPCMData[SampleIndex], ClampMin, ClampMax);
373 float ClampMin =
Ceiling * -1.0f;
375 for (
int32 SampleIndex = 0; SampleIndex < RawPCMData.
Num(); SampleIndex++)
377 RawPCMData[SampleIndex] =
static_cast<SampleType
>(FMath::Clamp<SampleType>(RawPCMData[SampleIndex], ClampMin,
Ceiling));
395 NumSamples = NumFrames * NumChannels;
401 NumFrames = RawPCMData.
Num() / NumChannels;
402 NumSamples = RawPCMData.
Num();
442 GetAudioFrameAtFractionalIndexInternal(NumSamples * (
InTimeSec / SampleDuration),
OutFrame);
463 OutFrame.SetNumUninitialized(NumChannels);
465 for (
int32 i = 0; i < NumChannels; ++i)
469 if constexpr(std::is_same_v<SampleType, float>)
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
char const * InputBuffer
Definition binka_ue_decode_test.cpp:29
Definition SampleBuffer.h:24
float GetAudioFrameAtPhase(float InPhase, TArray< SampleType > &OutFrame) const
Definition SampleBuffer.h:420
friend class TSampleBuffer
Definition SampleBuffer.h:41
int32 GetNumChannels() const
Definition SampleBuffer.h:293
int32 GetNumFrames() const
Definition SampleBuffer.h:287
void Reset()
Definition SampleBuffer.h:254
TSampleBuffer(const FAlignedFloatBuffer &InData, int32 InNumChannels, int32 InSampleRate)
Definition SampleBuffer.h:64
TSampleBuffer & operator=(const TSampleBuffer< OtherSampleType > &Other)
Definition SampleBuffer.h:151
void ZeroPad(int32 NumFramesToAppend=0)
Definition SampleBuffer.h:386
~TSampleBuffer()
Definition SampleBuffer.h:252
void Append(const OtherSampleType *InputBuffer, int32 InNumSamples)
Definition SampleBuffer.h:206
void MixBufferToChannels(int32 InNumChannels)
Definition SampleBuffer.h:309
void CopyFrom(const TArray< SampleType > &InArray, int32 InNumChannels, int32 InSampleRate)
Definition SampleBuffer.h:190
float GetAudioFrameAtTime(float InTimeSec, TArray< SampleType > &OutFrame) const
Definition SampleBuffer.h:433
float GetAudioFrameAtFractionalIndex(float InIndex, TArray< SampleType > &OutFrame) const
Definition SampleBuffer.h:408
TSampleBuffer(const float *InBufferPtr, int32 InNumSamples, int32 InNumChannels, int32 InSampleRate)
Definition SampleBuffer.h:69
TArrayView< SampleType > GetArrayView()
Definition SampleBuffer.h:270
void Append(const OtherSampleType *InputBuffer, int32 InNumSamples, int32 InNumChannels, int32 InSampleRate)
Definition SampleBuffer.h:244
TSampleBuffer()
Definition SampleBuffer.h:43
int32 GetSampleRate() const
Definition SampleBuffer.h:299
const SampleType * GetData() const
Definition SampleBuffer.h:265
int32 GetNumSamples() const
Definition SampleBuffer.h:281
TSampleBuffer(const TSampleBuffer &Other)
Definition SampleBuffer.h:51
void Clamp(float Ceiling=1.0f)
Definition SampleBuffer.h:345
TArrayView< const SampleType > GetArrayView() const
Definition SampleBuffer.h:275
void SetNumFrames(int32 InNumFrames)
Definition SampleBuffer.h:398
TSampleBuffer(const int16 *InBufferPtr, int32 InNumSamples, int32 InNumChannels, int32 InSampleRate)
Definition SampleBuffer.h:102
TSampleBuffer & operator=(const TSampleBuffer &Other)
Definition SampleBuffer.h:133
float GetSampleDuration() const
Definition SampleBuffer.h:304
Definition ArrayView.h:139
UE_FORCEINLINE_HINT SizeType AddUninitialized()
Definition Array.h:1664
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_NODEBUG UE_FORCEINLINE_HINT ElementType * GetData() UE_LIFETIMEBOUND
Definition Array.h:1027
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
SizeType AddZeroed()
Definition Array.h:2755
Definition UniquePtr.h:107
void Reset(T *InPtr=nullptr)
Definition UniquePtr.h:346
UE_FORCEINLINE_HINT T * Get() const
Definition UniquePtr.h:324
NO_LOGGING.
Definition AudioMixerPlatformAndroid.cpp:53
void ArrayPcm16ToFloat(TArrayView< const int16 > InView, TArrayView< float > OutView)
Definition FloatArrayMath.cpp:2476
int16 DefaultUSoundWaveSampleType
Definition SampleBuffer.h:11
TSampleBuffer FSampleBuffer
Definition SampleBuffer.h:490
void ArrayFloatToPcm16(TArrayView< const float > InView, TArrayView< int16 > OutView)
Definition FloatArrayMath.cpp:2418
static constexpr UE_FORCEINLINE_HINT T Lerp(const T &A, const T &B, const U &Alpha)
Definition UnrealMathUtility.h:1116
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
static UE_FORCEINLINE_HINT void * Memset(void *Dest, uint8 Char, SIZE_T Count)
Definition UnrealMemory.h:119