#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& Nodes, int32 Offset = 0); void SetOutputChannel(const TArray& 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 GetInputChannelNodeName(int32 NodeIndex); TMap GetOutputChannelNodeName(int32 NodeIndex); TMap GetInputChannelNodeName(FChannelNode* Node); TMap GetOutputChannelNodeName(FChannelNode* Node); void RemoveTrack(FMixerTrack* Track); TArray InputChannelNodes; TArray OutputChannelNodes; private: TMap> InputChannelNodeNames; TMap> OutputChannelNodeNames; TArray InputHeaders; // 缓存, 避免一直创建TArray对象 TArray OutputHeaders; }; class FMixerChannelInterface : public FChannelInterface { public: FMixerChannelInterface(FMixerTrack* InMixerTrack); ~FMixerChannelInterface(); private: FMixerTrack* MixerTrack; };