获取音频输出设备的 GUID
Getting GUID of an audio output device
有没有办法在 Java 中获取音频输出设备(扬声器、耳机)的 GUID?我正在尝试修改注册表中的特定值,我需要这个键名称,例如:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionMMDevicesAudioRender{d348b8e8-3118-4a9c-9b43-422647b555ca}
{d348b8e8-3118-4a9c-9b43-422647b555ca}
的最后一部分是我正在寻找的。
如果Java无法做到这一点,有没有办法用C++做到这一点?
MMDevice API 允许枚举音频设备终结点并获取其设备 ID。您没有指定如何识别要为其提供 ID 的设备。我以为友好的名字就足够了。
下面是一些示例代码:
#include <mmdeviceapi.h>
#include <objbase.h>
#include <Functiondiscoverykeys_devpkey.h>
#include <iostream>
template<typename T>
struct com_pointer
{
~com_pointer() { ptr_->Release(); }
operator T*() { return ptr_; }
T* operator->() { return ptr_; }
T** operator&() { return &ptr_; }
T* ptr_;
};
int main()
{
::CoInitialize(NULL);
com_pointer<IMMDeviceEnumerator> enumerator;
HRESULT hr = ::CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL,
__uuidof(IMMDeviceEnumerator), (void**)&enumerator);
if (hr != S_OK)
return 1;
com_pointer<IMMDeviceCollection> devices;
if (enumerator->EnumAudioEndpoints(eRender, DEVICE_STATE_ACTIVE, &devices) != S_OK)
return 1;
UINT count;
if (devices->GetCount(&count) != S_OK)
return 1;
for (UINT i = 0; i < count; ++i)
{
com_pointer<IMMDevice> device;
if (devices->Item(i, &device) != S_OK)
continue;
com_pointer<IPropertyStore> properties;
if (device->OpenPropertyStore(STGM_READ, &properties) != S_OK)
continue;
PROPVARIANT name;
if (properties->GetValue(PKEY_Device_FriendlyName, &name) != S_OK)
continue;
LPWSTR id;
if (device->GetId(&id) != S_OK)
continue;
std::wcout << id << " - " << name.pwszVal << "n";
::CoTaskMemFree(id);
}
return 0;
}
这会向控制台吐出设备 ID 和友好名称。对于我的系统,它看起来像这样:
{0.0.0.00000000}.{142c47f7-085b-4dee-a343-07d95b82403e} - Line (8- LitexMedia Virtual Audio Cable (WDM))
{0.0.0.00000000}.{24d74d8e-a3a9-410c-860f-f94720d051a7} - Line (6- LitexMedia Virtual Audio Cable (WDM))
{0.0.0.00000000}.{4b5f58ca-bae3-40c8-b394-d380782f16b6} - Speakers (ASUS Xonar DG Audio Device)
{0.0.0.00000000}.{5321f69d-c2d5-4e4f-922c-7f11a8d328fd} - S/PDIF Pass-through Device (ASUS Xonar DG Audio Device)
{0.0.0.00000000}.{59acfa2f-eb45-413b-b413-ed1043613389} - SPDIF Interface (TX0) (VIA High Definition Audio)
{0.0.0.00000000}.{87468c3a-8b84-4b70-a2d0-53a620055478} - Line (3- LitexMedia Virtual Audio Cable (WDM))
{0.0.0.00000000}.{9b5da642-3573-4520-b9c1-7d90922e89a6} - Line (2- LitexMedia Virtual Audio Cable (WDM))
{0.0.0.00000000}.{a73964bd-5357-4487-821e-2b1a2f72556a} - Line (9- LitexMedia Virtual Audio Cable (WDM))
{0.0.0.00000000}.{c895c45c-9064-4d2d-a424-2c4846490f32} - Speakers (VIA High Definition Audio)
{0.0.0.00000000}.{d4cddc1f-808c-4dfc-a0a2-7dd283fad1e0} - Line (5- LitexMedia Virtual Audio Cable (WDM))
{0.0.0.00000000}.{de953a87-89a4-40b7-9e13-8c2a6cf86cfe} - Line (4- LitexMedia Virtual Audio Cable (WDM))
{0.0.0.00000000}.{e3390713-3188-409c-918b-4f8cea7e08d4} - SPDIF Interface (TX1) (VIA High Definition Audio)
{0.0.0.00000000}.{f4493833-9f5e-4929-afc3-673d12ab3010} - Line (LitexMedia Virtual Audio Cable (WDM))
{0.0.0.00000000}.{f819358a-cdb7-4898-97c0-7a9a5d3104a3} - Line (7- LitexMedia Virtual Audio Cable (WDM))
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何选择waveIn/waveOut函数C++使用的输入/输出设备
- QSvg生成器未写入其输出设备
- Visual Studio错误,正在获取设备GUID和路径名
- Qt iOS问题 - 使用QAudioRecorder会更改音频输出设备
- 解析C++中设备文件的 ASCII 输出
- 获取音频输出设备的 GUID
- 如何在C++中使用 GUID 查找设备
- 使用DirectX获取显示设备输出类型
- 正在将音频流读取到输出设备
- Tensorflow会话.Run在Android设备上运行时给出空输出张量,但在Ubuntu上运行时工作良好
- 增加音频设备输出增益
- 在设备上调用printf()时输出不完整
- 使用核心音频从默认的线路输出声音设备中提取浮动