// Copyright 2008 Dolphin Emulator Project // Licensed under GPLv2+ // Refer to the license.txt file included. // This audio backend uses XAudio2 via XAUDIO2_DLL // It works on Windows 8+, where it is included as an OS component. // This backend is always compiled, but only available if running on Win8+ #pragma once #include #include "AudioCommon/SoundStream.h" #include "Common/Event.h" #ifdef _WIN32 #include struct StreamingVoiceContext; struct IXAudio2; struct IXAudio2MasteringVoice; #endif class XAudio2 final : public SoundStream { #ifdef _WIN32 private: class Releaser { public: template void operator()(R* ptr) { ptr->Release(); } }; std::unique_ptr m_xaudio2; std::unique_ptr m_voice_context; IXAudio2MasteringVoice* m_mastering_voice; Common::Event m_sound_sync_event; float m_volume; const bool m_cleanup_com; static HMODULE m_xaudio2_dll; static void* PXAudio2Create; static bool InitLibrary(); void Stop(); public: XAudio2(); ~XAudio2() override; bool Init() override; bool SetRunning(bool running) override; void SetVolume(int volume) override; static bool isValid() { return InitLibrary(); } #endif };