From 543a7ed991b005c2261e9b6e59ee825e42e86413 Mon Sep 17 00:00:00 2001 From: David Reid Date: Fri, 9 Sep 2022 10:07:09 +1000 Subject: [PATCH] WASAPI: Use the correct virtual device for process-specific loopback. Public issue https://github.com/mackron/miniaudio/issues/484 --- miniaudio.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/miniaudio.h b/miniaudio.h index 3546101e..c0aec9c4 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -20925,11 +20925,14 @@ typedef struct #pragma GCC diagnostic pop #endif +#define MA_VIRTUAL_AUDIO_DEVICE_PROCESS_LOOPBACK L"VAD\\Process_Loopback" + static ma_result ma_context_get_IAudioClient__wasapi(ma_context* pContext, ma_device_type deviceType, const ma_device_id* pDeviceID, ma_uint32 loopbackProcessID, ma_bool32 loopbackProcessExclude, ma_IAudioClient** ppAudioClient, ma_WASAPIDeviceInterface** ppDeviceInterface) { MA_AUDIOCLIENT_ACTIVATION_PARAMS audioclientActivationParams; PROPVARIANT activationParams; PROPVARIANT* pActivationParams = NULL; + ma_device_id virtualDeviceID; /* Activation parameters specific to loopback mode. */ if (deviceType == ma_device_type_loopback && loopbackProcessID != 0) { @@ -20942,8 +20945,11 @@ static ma_result ma_context_get_IAudioClient__wasapi(ma_context* pContext, ma_de activationParams.vt = VT_BLOB; activationParams.blob.cbSize = sizeof(audioclientActivationParams); activationParams.blob.pBlobData = (BYTE*)&audioclientActivationParams; - pActivationParams = &activationParams; + + /* When requesting a specific device ID we need to use a special device ID. */ + MA_COPY_MEMORY(virtualDeviceID.wasapi, MA_VIRTUAL_AUDIO_DEVICE_PROCESS_LOOPBACK, (wcslen(MA_VIRTUAL_AUDIO_DEVICE_PROCESS_LOOPBACK) + 1) * sizeof(wchar_t)); /* +1 for the null terminator. */ + pDeviceID = &virtualDeviceID; } else { pActivationParams = NULL; /* No activation parameters required. */ }