47 lines
1.1 KiB
C++
47 lines
1.1 KiB
C++
#pragma once
|
|
#include "Dsp.h"
|
|
#include "IQueuedWork.h"
|
|
#include "RingBuffer.h"
|
|
#include "Runnable.h"
|
|
#include "Singleton/PortAudioAPI.h"
|
|
#include "QueuedThreadPool.h"
|
|
#include "HAL/ThreadingBase.h"
|
|
|
|
class FPluginHost;
|
|
|
|
class FInstrumentRenderThread : public IQueuedWork
|
|
{
|
|
public:
|
|
FInstrumentRenderThread(FPluginHost* InPluginHost, int32 InFrameNum, TAtomic<int32>& InCounter) :
|
|
PluginHost(InPluginHost), FrameNum(InFrameNum), Counter(InCounter)
|
|
{
|
|
}
|
|
|
|
virtual void DoThreadedWork() override;
|
|
virtual void Abandon() override { --Counter; delete this; }
|
|
private:
|
|
FPluginHost* PluginHost;
|
|
int32 FrameNum;
|
|
TAtomic<int32>& Counter;
|
|
};
|
|
|
|
class FAudioRenderThread : public FRunnable
|
|
{
|
|
public:
|
|
FAudioRenderThread();
|
|
virtual bool Init() override;
|
|
virtual uint32 Run() override;
|
|
virtual void Stop() override;
|
|
virtual void Exit() override;
|
|
|
|
void SetBlockSize(int32 InBlockSize) { BlockSize = InBlockSize; Size = BlockSize * 16; Buffer.SetCapacity(Size); }
|
|
|
|
float SampleRate;
|
|
int32 BlockSize;
|
|
uint32 Size;
|
|
Audio::TCircularAudioBuffer<SampleType> Buffer;
|
|
private:
|
|
std::atomic<bool> IsRunning;
|
|
FQueuedThreadPool* ThreadPool;
|
|
};
|