39 lines
1.2 KiB
C++
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;
|
|
};
|