Files
AronaSlate/Source/AronaCore/PluginHost/VST2PluginHost.h
2024-01-25 11:21:15 +08:00

54 lines
1.5 KiB
C++

#pragma once
#include "PluginHost.h"
#include "Midi/VSTEventList.h"
#include "pluginterfaces/vst2.x/aeffect.h"
#include "pluginterfaces/vst2.x/aeffectx.h"
DECLARE_LOG_CATEGORY_EXTERN(LogVST2PluginHost, Log, All);
namespace VST2
{
inline VstTimeInfo VSTTimeInfo;
}
class FVST2PluginHandle
{
public:
~FVST2PluginHandle();
void* Handle = nullptr;
FString Path;
};
class FVST2PluginHost : public FPluginHost
{
public:
FVST2PluginHost();
~FVST2PluginHost();
virtual bool Load(const FString& Path) override;
virtual void SetEnabled(bool bEnabled) override;
virtual bool IsEnabled() override;
virtual void UpdateBlockSize(int32 BlockSize) override;
virtual void UpdateSampleRate(float SampleRate) override;
virtual void Process(int32 NumSamples) override;
virtual int32 GetInputChannelNum() override { return Effect->numInputs; }
virtual int32 GetOutputChannelNum() override { return Effect->numOutputs; }
virtual void UpdateChannelNodeName() override;
virtual void OpenEditor(void* WindowHandle) override;
virtual void CloseEditor() override;
virtual void IdleEditor() override;
virtual bool HasEditor() override;
virtual FVector2D GetEditorSize() override;
private:
VstIntPtr Dispatch(const VstInt32 Opcode, const VstInt32 Index = 0, const VstIntPtr Value = 0, void* Ptr = nullptr, const float Opt = 0.0f)
{
return Effect->dispatcher(Effect, Opcode, Index, Value, Ptr, Opt);
}
TSharedPtr<FVST2PluginHandle> Handle;
AEffect* Effect;
bool EnableState = false;
VSTMidiEventList MidiEventsToSend;
};