forked from dolphin-emu/dolphin
		
	
		
			
	
	
		
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			53 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								// 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
							 | 
						||
| 
								 | 
							
								};
							 |