#pragma once
#include "AudioEngine.hpp"
#include <Audioclient.h>
#include <Mmdeviceapi.h>
#include <ableton/link/HostTimeFilter.hpp>
#include <atomic>
namespace ableton
{
namespace linkaudio
{
void fatalError(HRESULT result, LPCTSTR context);
template <typename Link>
DWORD renderAudioRunloop(LPVOID);
template <typename Link>
class AudioPlatform
{
public:
AudioPlatform(Link& link);
~AudioPlatform();
DWORD audioRunloop();
AudioEngine<Link> mEngine;
private:
UINT32 bufferSize();
void initialize();
void start();
link::HostTimeFilter<typename Link::Clock> mHostTimeFilter;
double mSampleTime;
IMMDevice* mDevice;
IAudioClient* mAudioClient;
IAudioRenderClient* mRenderClient;
WAVEFORMATEX* mStreamFormat;
HANDLE mEventHandle;
HANDLE mAudioThreadHandle;
std::atomic<bool> mIsRunning;
};
} }
#include "AudioPlatform_Wasapi.ipp"