// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/Array.h" #include "Containers/ArrayView.h" #include "IAudioProxyInitializer.h" #include "MetasoundDataReference.h" #include "MetasoundDataTypeRegistrationMacro.h" #include "MetasoundEnumRegistrationMacro.h" #include "MetasoundPrimitives.h" #include "WaveTable.h" #include "WaveTableBank.h" #include "WaveTableSampler.h" namespace Metasound { class FWaveTableBankAsset; using FWaveTableBankAssetReadRef = TDataReadReference; using FWaveTableReadRef = TDataReadReference; using FWaveTableWriteRef = TDataWriteReference; class FWaveTableBankAsset { FWaveTableBankAssetProxyPtr Proxy; public: FWaveTableBankAsset() : Proxy(nullptr) { } FWaveTableBankAsset(const FWaveTableBankAsset& InOther) : Proxy(InOther.Proxy) { } FWaveTableBankAsset& operator=(const FWaveTableBankAsset& InOther) { Proxy = InOther.Proxy; return *this; } FWaveTableBankAsset& operator=(FWaveTableBankAsset&& InOther) { Proxy = MoveTemp(InOther.Proxy); return *this; } FWaveTableBankAsset(const TSharedPtr& InInitData) { if (InInitData.IsValid()) { if (InInitData->CheckTypeCast()) { Proxy = MakeShared(InInitData->GetAs()); } } } bool IsValid() const { return Proxy.IsValid(); } const FWaveTableBankAssetProxyPtr& GetProxy() const { return Proxy; } const FWaveTableBankAssetProxy* operator->() const { return Proxy.Get(); } FWaveTableBankAssetProxy* operator->() { return Proxy.Get(); } friend FORCEINLINE uint32 GetTypeHash(const Metasound::FWaveTableBankAsset& InWaveTableBankAsset) { if (InWaveTableBankAsset.IsValid()) { return GetTypeHash(*InWaveTableBankAsset.GetProxy()); } return INDEX_NONE; } }; // Disable arrays of WaveTables (as of addition, not supported by UX). Must be defined prior to DataType declaration macro below. template<> struct TEnableAutoArrayTypeRegistration { static constexpr bool Value = false; }; DECLARE_METASOUND_DATA_REFERENCE_TYPES(WaveTable::FWaveTable, METASOUNDENGINE_API, FWaveTableTypeInfo, FWaveTableReadRef, FWaveTableWriteRef) DECLARE_METASOUND_DATA_REFERENCE_TYPES(FWaveTableBankAsset, METASOUNDENGINE_API, FWaveTableBankAssetTypeInfo, FWaveTableBankAssetReadRef, FWaveTableBankAssetWriteRef) DECLARE_METASOUND_ENUM(WaveTable::FWaveTableSampler::ESingleSampleMode, WaveTable::FWaveTableSampler::ESingleSampleMode::Zero, METASOUNDENGINE_API, FEnumWaveTableEnvelopeMode, FEnumWaveTableEnvelopeModeTypeInfo, FEnumWaveTableEnvelopeModeReadRef, FEnumWaveTableEnvelopeModeWriteRef); DECLARE_METASOUND_ENUM(WaveTable::FWaveTableSampler::EInterpolationMode, WaveTable::FWaveTableSampler::EInterpolationMode::Linear, METASOUNDENGINE_API, FEnumWaveTableInterpolationMode, FEnumWaveTableInterpModeTypeInfo, FEnumWaveTableInterpModeReadRef, FEnumWaveTableInterpModeWriteRef); } // namespace Metasound