如何从 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 获取通道数?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 discord.py 中的文本通道获取所有消息的数组?