Files
Aerofoil/GpAudioDriver_XAudio2/GpAudioChannelXAudio2.h
2021-04-28 01:46:07 -04:00

46 lines
1.0 KiB
C++

#pragma once
#include "IGpAudioChannel.h"
#include "GpAudioChannelXAudio2Callbacks.h"
class GpAudioDriverXAudio2;
class GpAudioChannelXAudio2Callbacks;
struct IXAudio2SourceVoice;
struct IGpAllocator;
class GpAudioChannelXAudio2 final : public IGpAudioChannel
{
public:
friend class GpAudioChannelXAudio2Callbacks;
static GpAudioChannelXAudio2 *Create(IGpAllocator *alloc, GpAudioDriverXAudio2 *driver);
void SetAudioChannelContext(IGpAudioChannelCallbacks *callbacks) override;
bool PostBuffer(IGpAudioBuffer *buffer) override;
void Stop() override;
void Destroy() override;
bool Init();
protected:
void OnBufferEnd();
private:
enum VoiceState
{
VoiceState_Idle,
VoiceState_Active,
};
explicit GpAudioChannelXAudio2(IGpAllocator *alloc, GpAudioDriverXAudio2 *driver);
~GpAudioChannelXAudio2();
GpAudioDriverXAudio2 *m_driver;
IXAudio2SourceVoice *m_sourceVoice;
GpAudioChannelXAudio2Callbacks m_xAudioCallbacks;
IGpAudioChannelCallbacks *m_contextCallbacks;
IGpAllocator *m_alloc;
VoiceState m_voiceState;
};