Init
This commit is contained in:
33
Source/AronaCore/Pattern/SamplePatternInstance.cpp
Normal file
33
Source/AronaCore/Pattern/SamplePatternInstance.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
#include "SamplePatternInstance.h"
|
||||
|
||||
#include "SamplePattern.h"
|
||||
#include "Singleton/MidiSequencer.h"
|
||||
#include "PluginHost/Sampler.h"
|
||||
|
||||
FSamplePatternInstance::FSamplePatternInstance(FSamplePattern* InOwner, int32 TrackIndex, AudioFrame InSamplePos,
|
||||
TRange<AudioFrame> InSampleRange) : FPatternInstance(InOwner, TrackIndex, InSamplePos, InSampleRange)
|
||||
{
|
||||
}
|
||||
|
||||
void FSamplePatternInstance::Process(AudioFrame InFramePos, AudioFrame FrameNum)
|
||||
{
|
||||
const FSamplePattern* SamplePattern = GetInstanceOwner();
|
||||
FSampler* Sampler = SamplePattern->GetSampler();
|
||||
|
||||
const AudioFrame EndSamplePos = InFramePos + FrameNum;
|
||||
if (EndSamplePos < Pos || InFramePos > Pos + TimeRange.Size<AudioFrame>())
|
||||
return;
|
||||
|
||||
int64 PatternPos = (int64)InFramePos - Pos;
|
||||
int64 PatternEnd = PatternPos + FrameNum;
|
||||
if (PatternPos < 0)
|
||||
{
|
||||
PatternPos = 0;
|
||||
}
|
||||
|
||||
PatternEnd = FMath::Min<uint64>(PatternEnd, TimeRange.GetUpperBoundValue());
|
||||
|
||||
Sampler->IncomingOffset = FMath::Min<int32>(0, InFramePos - Pos) * -1;
|
||||
Sampler->IncomingRange.SetLowerBoundValue(PatternPos + TimeRange.GetLowerBoundValue());
|
||||
Sampler->IncomingRange.SetUpperBoundValue(PatternEnd + TimeRange.GetLowerBoundValue());
|
||||
}
|
||||
Reference in New Issue
Block a user