如何从音频播放设备获取频道数?

时间:2019-09-29 04:11:13

标签: c# naudio wasapi directsound waveout

游戏Titanfall 2显示了播放设备的音频配置。 https://i.imgur.com/e9NHel6.png

我可以做些什么来通过C#中的代码获取此信息吗?

更新和更正(世界标准时间2019年9月29日下午3:12左右)::上面的链接显示了免费游戏Apex Legends的音频选项。 Titanfall 2音频设置的链接为http://i.imgur.com/6OSSysd.gif。对于这两个游戏,“ Windows音频配置”都显示信息,这不是用户可以在游戏中更改的选项。

有些人可能会发现https://satsun.org/audio/处的信息很有用。

1 个答案:

答案 0 :(得分:0)

您通过MMDevice枚举Windows Vista或更高版本上的设备

IMMDeviceEnumerator *enumerator = nullptr;
IMMDevice *device = nullptr;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), nullptr, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&enumerator);
if (FAILED(hr))
       ...

// Get the default renderer
hr = enumerator->GetDefaultAudioEndpoint(eRender, eConsole, &device);
if (FAILED(hr))
       ...

    hr = pEndpoint->OpenPropertyStore(
                      STGM_READ, &pProps);
if (FAILED(hr))
       ...

    PROPVARIANT varName;
    // Initialize container for property value.
    PropVariantInit(&varName);

    // Get the endpoint's physical speaker property.
    hr = pProps->GetValue(
                   PKEY_AudioEndpoint_PhysicalSpeakers, &varName);
if (FAILED(hr))
       …

    // See https://docs.microsoft.com/en-us/windows/win32/coreaudio/pkey-audioendpoint-physicalspeakers

    PropVariantClear(&varName);

请参见Microsoft Docs