Files
UnrealEngine/Engine/Plugins/Runtime/Metasound/Source/MetasoundEngine/Public/MetasoundWaveTable.h
2025-05-18 13:04:45 +08:00

107 lines
3.1 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 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();
}
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<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