2024-01-25 11:21:15 +08:00

39 lines
1.2 KiB
C++

#pragma once
#include "Midi/MidiMessageSequence.h"
#include "Pattern.h"
class FPluginHost;
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnMidiPatternChanged, FPluginHost*, FMidiMessageSequence*)
DECLARE_MULTICAST_DELEGATE_TwoParams(FOnMidiPatternTrigger, FPluginHost*, FMidiMessageSequence::MidiEventHolder*)
class FMidiPattern : public FPattern
{
public:
FMidiPattern();
virtual ~FMidiPattern() override;
virtual void Process(AudioFrame PatternPos, uint32 InLength) override;
virtual AudioFrame GetLength() override;
virtual void Reset() override;
FMidiMessageSequence& GetSequence(FPluginHost* PluginHost);
const TMap<FPluginHost*, FMidiMessageSequence>& GetSequence() const { return Sequence; }
FPluginHost* GetPluginHost(FMidiMessageSequence* InSequence);
void DeleteSequence(FPluginHost* PluginHost);
void NotifyOnChanged(FMidiMessageSequence* InSequence);
void NotifyOnChanged_MainThread(FMidiMessageSequence* InSequence);
void NotifyOnChanged(FPluginHost* PluginHost);
FOnMidiPatternChanged OnChanged;
FOnMidiPatternChanged OnChanged_MainThread;
FOnMidiPatternTrigger OnTrigger;
private:
TMap<FPluginHost*, FMidiMessageSequence> Sequence;
TMap<FMidiMessageSequence*, FPluginHost*> SequenceToPluginHost;
FCriticalSection SequenceLock;
};