41 lines
1.1 KiB
C++

#pragma once
#include "PluginHost.h"
#include "Midi/MidiType.h"
#include "Midi/Time/TimePos.h"
class FSampler : public FPluginHost
{
public:
typedef TArray<TArray64<float>> FSampleBuffer;
FSampler();
virtual bool Load(const FString& InPath) override;
virtual void UpdateSampleRate(float InSampleRate) override;
virtual void Process(int32 FrameNum) override;
const FSampleBuffer& GetSampleBuffer() const { return SampleBuffer; }
float GetSampleInterlace(uint32 Index) const { return SampleBuffer[Index % ChannelCount][Index / ChannelCount]; }
int32 GetChannelCount() const { return ChannelCount; }
float GetSampleRate() const { return SampleRate; }
uint32 GetFrameCount() const { return FrameCount; }
uint32 GetSampleCount() const { return FrameCount * ChannelCount; }
const FString& GetPath() const { return Path; }
uint32 IncomingOffset;
TRange<AudioFrame> IncomingRange;
protected:
TArray<float> GetInterlaceBuffer() const;
void SetFromInterlaceBuffer(const TArray64<float>& InterlaceBuffer, uint32 FrameNum);
private:
int32 ChannelCount;
uint32 FrameCount;
float SampleRate;
FSampleBuffer SampleBuffer;
FString Path;
};