Files
UnrealEngineUWP/Engine/Source/Runtime/SignalProcessing/Public/DSP/MultichannelBuffer.h
phil popp 57a164eb62 Deinterleaved DSP for metasound wave player
#rb Aaron.McLeran
#jira UE-134456
#preflight 61f01048fd5285142b185e3e

#ROBOMERGE-AUTHOR: phil.popp
#ROBOMERGE-SOURCE: CL 18722673 in //UE5/Release-5.0/... via CL 18722699 via CL 18722914
#ROBOMERGE-BOT: UE5 (Release-Engine-Test -> Main) (v903-18687472)

[CL 18722926 by phil popp in ue5-main branch]
2022-01-25 10:40:58 -05:00

70 lines
3.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "DSP/BufferVectorOperations.h"
#include "DSP/Dsp.h"
namespace Audio
{
/** A deinterleaved multichannel buffer */
using FMultichannelBuffer = TArray<Audio::FAlignedFloatBuffer>;
/** A deinterleaved multichannel buffer view. The semantics are similar to
* TArray<> and TArrayView<>. FMultichannelBufferView allows sample values to
* be read and written, but it cannot be resized.
*/
using FMultichannelBufferView = TArray<TArrayView<float>>;
/** A deinterleaved multichannel circular buffer */
using FMultichannelCircularBuffer = TArray<Audio::TCircularAudioBuffer<float>>;
/** Set the number of channels and frames for a multichannel buffer.
*
* @param InNumChannels - Number of channels to hold in the buffer.
* @param InNumFrames - Number of frames to hold in the buffer.
* @param OutBuffer - Buffer to resize.
*/
SIGNALPROCESSING_API void SetMultichannelBufferSize(int32 InNumChannels, int32 InNumFrames, FMultichannelBuffer& OutBuffer);
/** Set the number of channels and capacity for a multichannel circular buffer.
*
* @param InNumChannels - Number of channels to hold in the buffer.
* @param InNumFrames - Maximum number of frames the buffer can hold.
* @param OutBuffer - Buffer to resize.
*/
SIGNALPROCESSING_API void SetMultichannelCircularBufferCapacity(int32 InNumChannels, int32 InNumFrames, FMultichannelCircularBuffer& OutBuffer);
/** Set the number of frames for a multichannel buffer.
*
* @param InNumFrames - Number of frames to hold in the buffer.
* @param OutBuffer - Buffer to resize.
*/
SIGNALPROCESSING_API void SetMultichannelBufferSize(int32 InNumFrames, FMultichannelBuffer& OutBuffer);
/** Return the number of frames in the buffer. It is expected that each channel
* contains the same number of frames. */
SIGNALPROCESSING_API int32 GetMultichannelBufferNumFrames(const FMultichannelBuffer& InBuffer);
/** Return the number of frames in the buffer. It is expected that each channel
* contains the same number of frames. */
SIGNALPROCESSING_API int32 GetMultichannelBufferNumFrames(const FMultichannelCircularBuffer& InBuffer);
/** Return the number of frames in the buffer. It is expected that each channel
* contains the same number of frames. */
SIGNALPROCESSING_API int32 GetMultichannelBufferNumFrames(const FMultichannelBufferView& InBuffer);
/** Creates a FMultichannelBufferView from a FMultichannelBuffer. */
SIGNALPROCESSING_API FMultichannelBufferView MakeMultichannelBufferView(FMultichannelBuffer& InBuffer);
/** Creates a FMultichannelBufferView from a FMultichannelBuffer. */
SIGNALPROCESSING_API FMultichannelBufferView MakeMultichannelBufferView(FMultichannelBuffer& InBuffer, int32 InStartFrameIndex, int32 InNumFrames);
/** Slice a multichannel buffer view to a given frame range. */
SIGNALPROCESSING_API FMultichannelBufferView SliceMultichannelBufferView(const FMultichannelBufferView& View, int32 InStartFrameIndex, int32 InNumFrames);
/** Shift the start frame of a multichannel buffer view to a given number of frames. */
SIGNALPROCESSING_API void ShiftMultichannelBufferView(int32 InNumFrames, FMultichannelBufferView& View);
}