如何从 MMDevice 获取通道数?

Posted

技术标签:

【中文标题】如何从 MMDevice 获取通道数?【英文标题】:How to get channel count from MMDevice? 【发布时间】:2015-10-09 21:33:21 【问题描述】:

我正在开发一个 Windows 音频应用程序,并且正在使用 MMDeviceEnumerator 来快速浏览所有可用的音频接口。最终得到一个 MMDevice,它可以为我提供有关设备本身的一些信息。

我想获取设备提供的频道总数。目前,我正在使用属性存储来返回当前的 WAV 格式,但这会返回 Windows 为“共享”模式指定的格式。使用 Focusrite 18i8,Windows 指示此设备有 2 个通道,这正是设备高级设置的“默认格式”中指定的内容。 Windows 本身不允许我以默认格式指定 2 个输入通道以外的任何内容。

问题是,这个设备有 18 个输入通道,我想使用 Wasapi 以独占模式打开它并访问所有通道。我不确定如何找出音频设备实际有多少“真实”通道。

可以从 MMDevice 中找到吗?

【问题讨论】:

我想你有兴趣查询设备属性:An application can query an audio endpoint device's PKEY_AudioEngine_DeviceFormat property to obtain the shared-mode format that the user has selected for the device. For information about querying the properties of a device, see Device Properties.. 我已经在使用 PKEY_AudioEngine_DeviceFormat,但它只返回你说的共享模式格式。我需要确定此设备在独占模式下有多少个频道。我讨厌认为我必须不断调用 IsFormatSupported 并使用不断增加的频道计数,直到它失败。像 Dante Virtual SoundCard 这样的卡可以有多达 256 个通道! 我不确定它是否有帮助,但这里有两个应用程序[1、2] 列出了可用的属性。也许你可以从PKEY_AudioEngine_OEMFormat得到你想要的。 您需要先配置音频设备。见windows.microsoft.com/en-us/windows-vista/… 【参考方案1】:

通过使用CSCore,您可以使用AudioMeterInformation 类获取此信息。

这是一个例子:

mic_in.Device = micdevices[waveInIndex];

int  mic_in_chanNo = AudioMeterInformation.FromDevice(mic_in.Device).MeteringChannelCount;

【讨论】:

以上是关于如何从 MMDevice 获取通道数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OpenCV 2 中从图像中获取通道数?

如何将有关从通道获取的消息的信息放入 JSON 文件?

如何从 discord.py 中的文本通道获取所有消息的数组?

如何使用 QAudioInput 从两个通道捕获音频信号

如何在没有 Web Audio API 的情况下直接从 ArrayBuffer 获取通道数据?

如何检查 AVPlayer 中的音频通道数?