AronaSlate/Source/AronaCore/Pattern/PatternInstance.h
2024-01-25 11:21:15 +08:00

43 lines
1.0 KiB
C++

#pragma once
#include "Pattern/Pattern.h"
#include "Midi/MidiType.h"
#include "Midi/Time/TimePos.h"
enum class EPatternInstanceAlignment
{
MidiTick,
Sample,
};
class FPatternInstance
{
FRIEND_THREAD_MESSAGE(EndSetting)
public:
virtual ~FPatternInstance() = default;
FPatternInstance(FPattern* InOwner, int32 InTrackIndex, AudioFrame InPos, TRange<AudioFrame> InRange) : TrackIndex(InTrackIndex), Owner(InOwner)
{
TimeRange = InRange;
Pos = InPos;
}
void RequestDestroy();
FPattern* GetOwner() const { return Owner; }
void RequestEndSetting();
virtual void SetRange(TRange<AudioFrame> InRange);
virtual void SetMidiPos(MidiTick InPos);
virtual MidiTick GetMidiPos() { return Pos.Ticks(); }
AudioFrame GetLength() const { return TimeRange.Size<AudioFrame>(); }
virtual void Process(AudioFrame SequencePos, AudioFrame Length);
int32 TrackIndex; // 在PlayList中的位置(Track的Index)
TRange<AudioFrame> TimeRange;
AudioFrame Pos;
protected:
virtual void EndSetting();
FPattern* Owner;
};