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

38 lines
1.0 KiB
C++

#pragma once
#include "Singleton.h"
#include "Thread/ThreadMessage.h"
class FSampler;
class FPluginHost;
DECLARE_LOG_CATEGORY_EXTERN(LogPluginHostList, Log, All);
DECLARE_MULTICAST_DELEGATE_OneParam(FOnPluginHostEvent, FPluginHost*);
class FPluginHostList : public TSingleton<FPluginHostList>, public TArray<FPluginHost*>
{
FRIEND_THREAD_MESSAGE(RegisterInstrument)
public:
virtual void Init() override;
virtual void Release() override;
virtual FName GetName() override { return "PluginHostList"; }
FPluginHost* TryLoadPlugin(const FString& Path);
FSampler* TryLoadSampler(const FString& SampleFilePath);
void RegisterInstrument(FPluginHost* Host);
void RemovePluginHost(FPluginHost* Host);
void RemoveInstrument(FPluginHost* Host);
void Process(int32 NumSamples);
void StopAllMidiOn();
FOnPluginHostEvent OnPluginHostCreated;
FOnPluginHostEvent OnInstrumentHostCreated;
FOnPluginHostEvent OnPluginHostRemoved;
TArray<FPluginHost*> Instruments;
private:
void RegisterInstrument_AudioThread(FPluginHost* Host);
};