2018-12-20 23:35:49 +01:00
|
|
|
|
#pragma once
|
2016-04-25 12:49:12 +02:00
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
2015-01-11 00:46:10 +01:00
|
|
|
|
|
2018-12-16 18:40:50 +01:00
|
|
|
|
#include "Emu/Audio/AudioBackend.h"
|
2015-11-16 16:04:49 +01:00
|
|
|
|
|
2018-12-21 03:13:22 +01:00
|
|
|
|
|
2018-12-16 18:40:50 +01:00
|
|
|
|
class XAudio2Backend : public AudioBackend
|
2015-01-11 00:46:10 +01:00
|
|
|
|
{
|
2018-12-21 03:13:22 +01:00
|
|
|
|
public:
|
|
|
|
|
|
class XAudio2Library
|
2016-07-30 16:10:01 +02:00
|
|
|
|
{
|
2018-12-21 03:13:22 +01:00
|
|
|
|
public:
|
|
|
|
|
|
virtual void play() = 0;
|
|
|
|
|
|
virtual void flush() = 0;
|
|
|
|
|
|
virtual void stop() = 0;
|
|
|
|
|
|
virtual void open() = 0;
|
|
|
|
|
|
virtual bool is_playing() = 0;
|
|
|
|
|
|
virtual bool add(const void*, u32) = 0;
|
|
|
|
|
|
virtual u64 enqueued_samples() = 0;
|
|
|
|
|
|
virtual f32 set_freq_ratio(f32) = 0;
|
2016-07-30 16:10:01 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
2018-12-21 03:13:22 +01:00
|
|
|
|
private:
|
|
|
|
|
|
static XAudio2Library* xa27_init(void*);
|
|
|
|
|
|
static XAudio2Library* xa28_init(void*);
|
2016-07-21 15:41:40 +02:00
|
|
|
|
|
2018-12-21 03:13:22 +01:00
|
|
|
|
std::unique_ptr<XAudio2Library> lib = nullptr;
|
2015-01-11 00:46:10 +01:00
|
|
|
|
|
|
|
|
|
|
public:
|
2018-12-16 18:40:50 +01:00
|
|
|
|
XAudio2Backend();
|
|
|
|
|
|
virtual ~XAudio2Backend() override;
|
|
|
|
|
|
|
2018-12-16 22:12:58 +01:00
|
|
|
|
virtual const char* GetName() const override { return "XAudio2"; };
|
2018-12-16 18:40:50 +01:00
|
|
|
|
|
2018-12-21 03:13:22 +01:00
|
|
|
|
static const u32 capabilities = PLAY_PAUSE_FLUSH | IS_PLAYING | GET_NUM_ENQUEUED_SAMPLES | SET_FREQUENCY_RATIO;
|
2018-12-16 18:40:50 +01:00
|
|
|
|
virtual u32 GetCapabilities() const override { return capabilities; };
|
2015-01-11 00:46:10 +01:00
|
|
|
|
|
2018-12-21 02:16:54 +01:00
|
|
|
|
virtual void Open(u32 /* num_buffers */) override;
|
2016-02-01 22:51:35 +01:00
|
|
|
|
virtual void Close() override;
|
2018-12-20 23:35:49 +01:00
|
|
|
|
|
|
|
|
|
|
virtual void Play() override;
|
|
|
|
|
|
virtual void Pause() override;
|
|
|
|
|
|
virtual bool IsPlaying() override;
|
|
|
|
|
|
|
2018-12-21 03:13:22 +01:00
|
|
|
|
virtual bool AddData(const void* src, u32 num_samples) override;
|
2018-12-20 23:35:49 +01:00
|
|
|
|
virtual void Flush() override;
|
2018-12-16 18:40:50 +01:00
|
|
|
|
|
|
|
|
|
|
virtual u64 GetNumEnqueuedSamples() override;
|
2018-12-16 22:12:58 +01:00
|
|
|
|
virtual f32 SetFrequencyRatio(f32 new_ratio) override;
|
2015-01-11 00:46:10 +01:00
|
|
|
|
};
|
2016-04-25 12:49:12 +02:00
|
|
|
|
|
2015-11-16 16:04:49 +01:00
|
|
|
|
#endif
|