43 lines
1.0 KiB
C++
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;
|
|
};
|