AronaSlate/Source/AronaCore/AudioBuffer/ChannelInterface.h
2024-01-25 11:21:15 +08:00

49 lines
1.6 KiB
C++

#pragma once
#include "CoreMinimal.h"
class FMixerTrack;
class FChannelNode;
class FChannelInterface
{
public:
FChannelInterface(int32 InputChannelNum, int32 OutputChannelNum);
void SetInputChannel(int32 NodeIndex, FChannelNode* Node);
void SetOutputChannel(int32 NodeIndex, FChannelNode* Node);
void SetInputChannel(const TArray<FChannelNode*>& Nodes, int32 Offset = 0);
void SetOutputChannel(const TArray<FChannelNode*>& Nodes, int32 Offset = 0);
int32 GetInputNodeIndex(FChannelNode* Node);
int32 GetOutputNodeIndex(FChannelNode* Node);
float** GetInputHeader() { return InputHeaders.GetData(); }
float** GetOutputHeader() { return OutputHeaders.GetData(); }
void SetInputChannelNodeName(int32 NodeIndex, int32 Channel, FName Name);
void SetOutputChannelNodeName(int32 NodeIndex, int32 Channel, FName Name);
TMap<int32, FName> GetInputChannelNodeName(int32 NodeIndex);
TMap<int32, FName> GetOutputChannelNodeName(int32 NodeIndex);
TMap<int32, FName> GetInputChannelNodeName(FChannelNode* Node);
TMap<int32, FName> GetOutputChannelNodeName(FChannelNode* Node);
void RemoveTrack(FMixerTrack* Track);
TArray<FChannelNode*> InputChannelNodes;
TArray<FChannelNode*> OutputChannelNodes;
private:
TMap<int32, TMap<int32, FName>> InputChannelNodeNames;
TMap<int32, TMap<int32, FName>> OutputChannelNodeNames;
TArray<float*> InputHeaders; // 缓存, 避免一直创建TArray对象
TArray<float*> OutputHeaders;
};
class FMixerChannelInterface : public FChannelInterface
{
public:
FMixerChannelInterface(FMixerTrack* InMixerTrack);
~FMixerChannelInterface();
private:
FMixerTrack* MixerTrack;
};