Files
miles flanagan 8d02a26d23 MetasoundWaveTableEvaluateNode
#rb rob.gay
#preflight 639b7297c16855964d7c0e69

[CL 23535307 by miles flanagan in ue5-main branch]
2022-12-15 20:49:02 -05:00

98 lines
2.9 KiB
C++

// 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<FWaveTableBankAsset>;
using FWaveTableReadRef = TDataReadReference<WaveTable::FWaveTable>;
using FWaveTableWriteRef = TDataWriteReference<WaveTable::FWaveTable>;
class METASOUNDENGINE_API 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<Audio::IProxyData>& InInitData)
{
if (InInitData.IsValid())
{
if (InInitData->CheckTypeCast<FWaveTableBankAssetProxy>())
{
Proxy = MakeShared<FWaveTableBankAssetProxy, ESPMode::ThreadSafe>(InInitData->GetAs<FWaveTableBankAssetProxy>());
}
}
}
bool IsValid() const
{
return Proxy.IsValid();
}
const FWaveTableBankAssetProxyPtr& GetProxy() const
{
return Proxy;
}
const FWaveTableBankAssetProxy* operator->() const
{
return Proxy.Get();
}
FWaveTableBankAssetProxy* operator->()
{
return Proxy.Get();
}
};
// Disable arrays of WaveTables (as of addition, not supported by UX). Must be defined prior to DataType declaration macro below.
template<>
struct TEnableAutoArrayTypeRegistration<WaveTable::FWaveTable>
{
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