diff options
| author | spycrab <spycrab@users.noreply.github.com> | 2018-02-10 21:03:27 +0100 |
|---|---|---|
| committer | spycrab <spycrab@users.noreply.github.com> | 2018-05-26 13:08:10 +0200 |
| commit | a196dfe50d1d8a2fcd2ffbe5c8eea10687f1698f (patch) | |
| tree | 74a4c496557048d4f505e66ec5337f82aed44f89 /Source/Core/AudioCommon/WASAPIStream.h | |
| parent | 92ec97f8997fbd511406c09d83a79728cae5ec08 (diff) | |
AudioCommon: Implement WASAPI
Diffstat (limited to 'Source/Core/AudioCommon/WASAPIStream.h')
| -rw-r--r-- | Source/Core/AudioCommon/WASAPIStream.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Source/Core/AudioCommon/WASAPIStream.h b/Source/Core/AudioCommon/WASAPIStream.h new file mode 100644 index 0000000000..54becb68c0 --- /dev/null +++ b/Source/Core/AudioCommon/WASAPIStream.h @@ -0,0 +1,52 @@ +// Copyright 2018 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#ifdef _WIN32 +// clang-format off +#include <Windows.h> +#include <mmreg.h> +// clang-format on +#endif + +#include <atomic> +#include <string> +#include <thread> +#include <vector> + +#include "AudioCommon/SoundStream.h" + +struct IAudioClient; +struct IAudioRenderClient; +struct IMMDevice; +struct IMMDeviceEnumerator; + +class WASAPIStream final : public SoundStream +{ +#ifdef _WIN32 +public: + explicit WASAPIStream(); + ~WASAPIStream(); + bool Init() override; + bool SetRunning(bool running) override; + void SoundLoop() override; + + static bool isValid(); + static std::vector<std::string> GetAvailableDevices(); + static IMMDevice* GetDeviceByName(std::string name); + +private: + u32 m_frames_in_buffer = 0; + std::atomic<bool> m_running = false; + std::atomic<bool> m_stopped = false; + std::thread m_thread; + + IAudioClient* m_audio_client = nullptr; + IAudioRenderClient* m_audio_renderer = nullptr; + IMMDeviceEnumerator* m_enumerator = nullptr; + HANDLE m_need_data_event = nullptr; + WAVEFORMATEXTENSIBLE m_format; +#endif // _WIN32 +}; |
