This commit is contained in:
2022-07-15 04:32:36 +02:00
parent b621d1266c
commit be949ea8a3
7 changed files with 89 additions and 37 deletions

View File

@@ -6,7 +6,6 @@
#include <vector>
#include <algorithm>
#include "ImguiBase.h"
#include "Util.h"
#include "AudioApi.h"
#include "PolicyConfig.h"
@@ -25,7 +24,7 @@ HRESULT getDevicePropertyString(IPropertyStore* propertyStore, const PROPERTYKEY
return result;
}
void setDefaultAudioDevice(ApplicationData* appData, const wchar_t* deviceId, ERole role)
void setDefaultAudioDevice(AudioData& audioData, const wchar_t* deviceId, ERole role)
{
IPolicyConfigVista* pPolicyConfig;
@@ -34,18 +33,18 @@ void setDefaultAudioDevice(ApplicationData* appData, const wchar_t* deviceId, ER
{
hr = pPolicyConfig->SetDefaultEndpoint(deviceId, role);
pPolicyConfig->Release();
reloadDeviceLists(appData);
reloadDeviceLists(audioData);
}
}
void loadAudioDevices(ApplicationData* appData, std::vector<AudioDevice>& deviceList, EDataFlow deviceType)
void loadAudioDevices(AudioData& audioData, std::vector<AudioDevice>& deviceList, EDataFlow deviceType)
{
deviceList.clear();
HRESULT err;
IMMDeviceCollection* deviceCollection = NULL;
err = appData->deviceEnumerator->EnumAudioEndpoints(deviceType, DEVICE_STATE_ACTIVE | DEVICE_STATE_DISABLED, &deviceCollection);
err = audioData.deviceEnumerator->EnumAudioEndpoints(deviceType, DEVICE_STATE_ACTIVE | DEVICE_STATE_DISABLED, &deviceCollection);
if (isError(err, "Failed to enumerate audio devices: ")) return;
UINT deviceCount;
@@ -54,7 +53,7 @@ void loadAudioDevices(ApplicationData* appData, std::vector<AudioDevice>& device
IMMDevice* defaultConsoleDevice = NULL;
LPWSTR defaultConsoleId = nullptr;
err = appData->deviceEnumerator->GetDefaultAudioEndpoint(deviceType, ERole::eConsole, &defaultConsoleDevice);
err = audioData.deviceEnumerator->GetDefaultAudioEndpoint(deviceType, ERole::eConsole, &defaultConsoleDevice);
if (!FAILED(err))
{
defaultConsoleDevice->GetId(&defaultConsoleId);
@@ -62,7 +61,7 @@ void loadAudioDevices(ApplicationData* appData, std::vector<AudioDevice>& device
IMMDevice* defaultMediaOutput = NULL;
LPWSTR defaultMediaId = nullptr;
err = appData->deviceEnumerator->GetDefaultAudioEndpoint(deviceType, ERole::eMultimedia, &defaultMediaOutput);
err = audioData.deviceEnumerator->GetDefaultAudioEndpoint(deviceType, ERole::eMultimedia, &defaultMediaOutput);
if (!FAILED(err))
{
defaultMediaOutput->GetId(&defaultMediaId);
@@ -70,7 +69,7 @@ void loadAudioDevices(ApplicationData* appData, std::vector<AudioDevice>& device
IMMDevice* defaultCommunicationOutput = NULL;
LPWSTR defaultCommunicationId = nullptr;
err = appData->deviceEnumerator->GetDefaultAudioEndpoint(deviceType, ERole::eCommunications, &defaultCommunicationOutput);
err = audioData.deviceEnumerator->GetDefaultAudioEndpoint(deviceType, ERole::eCommunications, &defaultCommunicationOutput);
if (!FAILED(err))
{
defaultCommunicationOutput->GetId(&defaultCommunicationId);
@@ -141,10 +140,10 @@ void loadAudioDevices(ApplicationData* appData, std::vector<AudioDevice>& device
}
}
void reloadDeviceLists(ApplicationData* appData)
void reloadDeviceLists(AudioData& audioData)
{
loadAudioDevices(appData, appData->playbackDevices, EDataFlow::eRender);
loadAudioDevices(appData, appData->recordingDevices, EDataFlow::eCapture);
loadAudioDevices(audioData, audioData.playbackDevices, EDataFlow::eRender);
loadAudioDevices(audioData, audioData.recordingDevices, EDataFlow::eCapture);
}
float getVolume(IAudioEndpointVolume* volumeInterface)