This commit is contained in:
2024-01-25 11:21:15 +08:00
commit e79b8f3ed2
339 changed files with 116224 additions and 0 deletions

View 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());
}