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

46 lines
1.1 KiB
C++

#include "SamplePattern.h"
#include "SamplePatternInstance.h"
#include "Singleton/MidiSequencer.h"
#include "PluginHost/Sampler.h"
FSamplePattern::FSamplePattern(FSampler* InSampler)
{
Type = EPatternType::Sample;
Sampler = InSampler;
}
FSamplePattern::~FSamplePattern()
{
for (FPatternInstance* Instance : Instances)
{
delete Instance;
}
Instances.Empty();
}
void FSamplePattern::Process(AudioFrame PatternPos, uint32 InLength)
{
// const FMidiMessage& NoteOn = FMidiMessage::noteOn(1, 60, 1.f);
// const FMidiMessage& NoteOff = FMidiMessage::noteOff(1, 60, 1.f);
// Sampler->IncomingMidi.addEvent(NoteOn, PatternPos);
// Sampler->IncomingMidi.addEvent(NoteOff, PatternPos + GetLength());
// Sampler->IncomingMidi.updateMatchedPairs();
Sampler->IncomingRange.SetLowerBound(PatternPos);
Sampler->IncomingRange.SetUpperBound(PatternPos + AudioFrame(InLength));
Sampler->IncomingOffset = 0;
}
void FSamplePattern::Reset()
{
Sampler->IncomingMidi.clear();
Sampler->IncomingMidi.addEvent(FMidiMessage::allNotesOff(1));
}
AudioFrame FSamplePattern::GetLength()
{
return AudioFrame(Sampler->GetFrameCount());
}