41 lines
1.1 KiB
C++
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;
|
|
};
|